首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
测试工具
SmokePing
IPv6 访问测试
raysonx
V2EX  ›  宽带症候群

为你的 IPv6 局域网配置 ULA 吧

  •  
  •   raysonx · 2018-09-11 11:00:41 +08:00 · 10508 次点击
    这是一个创建于 672 天前的主题,其中的信息可能已经有所发展或是发生改变。

    近几个月来,三大运营商开始陆续在部分地区提供 IPv6 互联网的接入服务。在号称“每一粒砂子都可以获得一个地址”的 IPv6 时代,所有的设备都可以拥有公网地址,NAT 不再是刚需。那是不是我们不再需要内网地址了呢? 本文将探讨一下这个话题。

    IPv4 下的私有网络

    曾经的 IPv4 网络也是点对点对等互联的:几乎所有互联网上的设备都拥有公网 IPv4 地址,甚至早期的 FTP 协议都只支持两个点对点连接的设备互传文件:客户端发起连接到服务器传输指令;下载文件时需要监听端口,等待服务器端发起连接。

    同时,IPv4 提供了三个私有网络(private network)地址段: 10.0.0.0/8172.16.0.0/12192.168.0.0/16,无需注册申请即可在私有网络中自由使用。 在 NAT 技术出现以前,这样的地址段通常只提供内网通信,不提供互联网访问服务。需要访问互联网时,往往需要依靠同时接入内外网的代理服务器。

    后来 IPv4 地址不够用了,IPv6 就被提出出来了,同时顺便解决一下 IPv4 网络的缺陷。然而 IPv6 与 IPv4 完全不兼容,普及十分缓慢。为了缓解地址不够用的问题,NAT44 被大量运用,普通用户的公网 IPv4 地址被收回并高价卖给企业用户,越来越多的用户被安排进内网。再到后来,某些 ISP 甚至明目张胆把 不提供公网 IPv4 地址 写进合同了。

    内网地址下的终端设备在互联网上丧失了点对点互联的能力,只能主动向拥有公网 IP 的设备发起连接,无法被动接受连接,P2P 使用受限,就像你拥有一部只能打出而不能呼入的电话。部分内网用户为了使自己的设备能够被远程连接,研究各种打洞、穿透与隧道技术,好不热闹。

    IPv6 下的私有网络与 ULA

    IPv6 拥有 128 位长的地址,号称“可以为每一粒砂子分配一个地址”,一劳永逸地解决了地址短缺问题。每个设备都可以拥有公网 IPv6 地址,点对点连接又回来了。其实想一想,我们只是重新获得了近十年里失去的东西罢了。

    IPv6 时代,ISP 依然会为普通用户提供“动态” IPv6 地址:每次接入网络时,ISP 会重新分配一个 IPv6 地址前缀,这就使得用户侧所有终端的地址发生变化。如果你的终端设备之间有内部互联,这可能会造成服务中断。我们不希望自己运行的网络受制于 ISP !

    解决方法自然是:给你的局域网分配一个 IPv6 的内网地址段吧。 当然我不是让你重新使用 NAT。当然 IPv6 依然支持 NAT,如果你愿意,可以为你的终端分配内网 IPv6 地址,然后在网关处部署 NAT66,你就又重新再次回到了 NAT 时代。不过通常而言,NAT66 是没有必要的,而且使用 NAT 技术还会造成非常明显的性能损失。

    在 IPv6 网络下,可以为每一个网络接口分配多个 IPv6 地址。你可以为你局域网的设备同时分配公网和内网地址,使你的设备同时接入内外两张网。

    IPv6 提供一段称为 Unique Local Address ( ULA )的地址段fc00::/7,包含fc00::/8fd00::/8两部分:目前fc00::/8的使用还没有定义,我们不去管它;fd00::/8可以被自由使用。fd00::/8是一个十分巨大的地址段,你可以从中挑选一个/48的子段分配给你的局域网。RFC 4193建议使用随机生成的方法,使每个局域网的地址段都不同(这也是 ULA 名字的由来),从而避免局域网合并时地址冲突的麻烦。当然这主要是针对企业而讲的,家庭使用的话随机生成还是挑个好记的自己斟酌。如果要随机生成,Google 一下ULA generator有真相。

    有了 ULA,你的设备在内部互访时可以直接使用固定的 ULA,和外部互访时则使用公网地址。只要保证你的路由表正确就可以:默认路由使用公网地址作为出口,ULA 地址段使用 ULA 作为出口。如果出现问题,检查一下你的 Router Advertisement 和 DHCPv6 服务的设置吧。

    第 1 条附言  ·  2018-09-11 12:06:26 +08:00
    其实楼主是哭晕在厕所里的北京联通用户。北京联通的动作真的好慢慢慢慢慢慢慢慢慢慢慢...
    34 条回复    2020-04-17 20:46:30 +08:00
    Liqianyu
        1
    Liqianyu   2018-09-11 11:16:48 +08:00
    FC00:0000:0000:0000:0000:0000:0000:0000

    FDFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF
    都是可以使用的 ULA(unique local address)
    raysonx
        2
    raysonx   2018-09-11 11:59:21 +08:00 via Android
    @Liqianyu 目前来讲只建议使用 fd 打头的范围,fc 打头的分配策略还没有定义。
    Liqianyu
        3
    Liqianyu   2018-09-11 12:11:31 +08:00
    @raysonx
    是的,建议使用 FD 前缀。
    生成可以用
    https://www.ultratools.com/tools/rangeGeneratorResult
    另外北京联通我已经拿到 IPv6 一个月了。
    raysonx
        4
    raysonx   2018-09-11 12:13:43 +08:00 via Android
    @Liqianyu 我这边依然还是单栈公网 IP,归属朝阳区五路居电话局。
    Liqianyu
        5
    Liqianyu   2018-09-11 12:14:42 +08:00
    https://cd34.com/rfc4193/
    这个是按照 RFC4193 生成的。
    Archeb
        6
    Archeb   2018-09-11 12:30:54 +08:00
    作为懒人我选择直接用 10.0.0.0/8 _(:з)∠)_
    wm5d8b
        7
    wm5d8b   2018-09-11 12:41:50 +08:00
    @Archeb #6 你和我们讨论的是同一个东西嘛
    你应该这样说“作为懒人我选择直接用 fc00::/64 _(:з)∠)_”
    Archeb
        8
    Archeb   2018-09-11 13:00:52 +08:00
    @wm5d8b emmm 也可以(
    akumax
        9
    akumax   2018-09-11 13:24:06 +08:00
    趴在桌上想了想,什么时候治好懒癌就上 IPv6 _(:з)∠)_
    helllkz
        10
    helllkz   2018-09-11 13:24:39 +08:00
    恰好相反,我刚把 ULA 给删除了,只保留了电信分配的 PD,家庭内网使用我还是用的 V4
    cwbsw
        11
    cwbsw   2018-09-11 13:26:00 +08:00
    只有 ULA 地址的话 windows 网络属性会显示无 Internet 连接,而且时间长了之后会 ping 不通网关。建议用公网地址来做 NAT。
    xenme
        12
    xenme   2018-09-11 13:45:33 +08:00
    @Archeb
    @wm5d8b

    suffix 基本都靠自动生成,太不爽了。能 fd00::1 就爽了,比 ipv4 还短
    raysonx
        13
    raysonx   2018-09-11 13:48:38 +08:00
    @akumax
    @helllkz
    就目前来看内网 IPv4 也是够用的。这是讨论的是纯 IPv6 内网的方案。
    @cwbsw 我个人已经使用 IPv6 内网多年,各种系统的设备都有,并没有遇到你所说的问题。
    BOYPT
        14
    BOYPT   2018-09-11 13:49:06 +08:00
    v6 的好处是链路地址,即使没有路由器也能通信;之前一次停电,路由器是 exsi 内的虚拟机,没能自动启动;
    想起收藏夹里面藏了 exsi 主机的链路地址[fe80:xxxxx],点开,果然能进去开机;( b 格高点应该是看一下网卡的 mac 地址心算出链路地址)

    这种情况下 ULA 也用不上
    raysonx
        15
    raysonx   2018-09-11 13:50:17 +08:00
    @xenme 当然可以用 fd00::1。不喜欢自动生成 suffix 那就用 DHCPv6 啊,不过 Android 至今不支持 DHCPv6,估计以后也不会支持了。
    xenme
        16
    xenme   2018-09-11 13:51:36 +08:00
    @xenme 补充,哈哈,我都是 fd00::1, fd::2 依次类推。
    xenme
        17
    xenme   2018-09-11 13:52:25 +08:00
    @raysonx 上面写错。
    raysonx
        18
    raysonx   2018-09-11 13:58:40 +08:00
    @BOYPT 这种情况只是相当于每个设备多配了一个静态地址没有受 DHCP 宕机影响,同一链路下通信本来就不需要路由器。
    多网卡的情况下使用`fe80`地址需要加网卡后缀,比如`fe80::abcd%eth1`。很多软件不支持这种格式,正则都过不了 :(
    aidenzou616
        20
    aidenzou616   2018-09-11 20:40:21 +08:00
    @Liqianyu 为什么我天天看我的都还没有
    Maskeney
        21
    Maskeney   2018-09-11 21:32:25 +08:00
    学习了 感谢楼主 另外楼主是做相关工作的么?看起来发了好多关于 IPV6 的帖子
    txydhr
        22
    txydhr   2018-09-12 07:02:31 +08:00
    正常家用。。。每个设备不都是有固定的 fe80 开头的地址么?
    raysonx
        23
    raysonx   2018-09-12 10:01:39 +08:00 via Android
    @Maskeney 和工作不相关,只是做一些微小的推广工作而已。

    @txydhr 现状是大量的应用软件不支持 link-local 地址。

    比如有的软件不支持 zone index 后缀,如 fe80::dead:beef%eth0,典型的例子如配置 Linux 的 DNS 时,/etc/resolv.conf 文件就不支持这种写法。还有的软件直接主动禁止在 link-local 地址下工作,比如 kubernetes。
    coby3155
        24
    coby3155   2018-09-12 16:59:51 +08:00
    请问大神..家里电信 IPV6 原生地址..桥接连路由器就会无 INTERNET 访问权限..不知道有没有解决办法?
    flynaj
        25
    flynaj   2018-09-23 21:49:30 +08:00 via Android
    @raysonx 你的手机问题,MIUI 全部支持者
    Spxg
        26
    Spxg   2018-12-14 18:33:05 +08:00 via Android
    上个月有的 ipv6,坐标福建电信,因为电信宽带套餐升级,在原来的套餐上加了 100M,所以多给了我一个新的宽带账号,一拨就有 v6 了。现在我用 v6 在家里搭了几个网站,重要的是端口还没封,用的挺舒服。问了装宽带的师傅最近 v6 怎么样了,他说现在都在搞这个
    Spxg
        27
    Spxg   2018-12-14 18:33:27 +08:00 via Android
    @Spxg 刚说完。。。端口就被封了。wc
    xionger
        28
    xionger   2019-02-09 23:25:42 +08:00
    @raysonx 小白请教
    可以直接用 fd00::/8 吗? 为什么要在这里面再挑选一个 /48 的子段呢?
    raysonx
        29
    raysonx   2019-02-11 22:55:19 +08:00 via Android
    @xionger 可以使用。挑 /48 的子段是为了可以给不同的局域网分配不重复的地址段。
    junkman
        30
    junkman   88 天前
    @raysonx 2020 年,再次翻出来提问。

    家用的话,IPv6 /48 子段应该有 2^80 个可用 IP,但是家用的话应该撑死 256 个地址就够用了吧?

    似乎用 fd00::8 /120 子段就可以了呢?
    junkman
        31
    junkman   88 天前
    diff:
    - 似乎用 fd00::8 /120 子段就可以了呢?
    + 似乎用 fd00:: 前缀下的某个 /120 子段就可以了呢?
    raysonx
        32
    raysonx   88 天前 via iPhone
    @junkman 前缀如果大于 64,无状态地址配置将不可用,只能用 DHCPv6 。然而 Android 设备不支持 DHCPv6,更别说还有其他缺点
    junkman
        33
    junkman   88 天前
    > 无状态地址配置将不可用

    具体是?请问这方面看哪里的资料比较好。

    > 更别说还有其他缺点

    比如?

    感谢大侠解答!
    raysonx
        34
    raysonx   88 天前
    @junkman 其他缺点还有如:上游路由器重新拨号发生前缀变更后,DHCPv6 下发的地址不会及时更新(除非地址租约到期)。我觉得如果要系统性地了解 IPv6 的话还是要读一下计算机网络相关的书籍。不过说实在的绝大多数人对 IPv4 也是一知半解,只不过网上能查到的资料相对多一些已。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1132 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 18:55 · PVG 02:55 · LAX 11:55 · JFK 14:55
    ♥ Do have faith in what you're doing.