V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
CrazyBoyFeng
V2EX  ›  宽带症候群

为什么各运营商的光猫家庭网关下发 IPv6 都是 DHCPv6 而不是 SLAAC?

  •  
  •   CrazyBoyFeng · 2021-06-20 00:43:11 +08:00 · 9515 次点击
    这是一个创建于 1256 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在运营商安装的光猫大多默认都调成路由网关模式(光猫拨号),而不是桥接模式(第三方路由或终端拨号)。这样用户不再需要第三方路由器即可直接连入。
    但是光猫 LAN 侧的 IPv6 地址生成方式却不是标准推荐的 SLAAC,而是 DHCPv6 。

    SLAAC,也就是 NDP,是 IETF 更推荐的 IPv6 地址生成方式,也是最早一批实现的 IPv6 标准协议。
    但是为什么运营商们的 EPON/GPON 采购要求里,都要求 LAN 侧的 IPv6 只有 DHCPv6 这一种下发方式?尽管同时会要求 WAN 侧实现 SLAAC 和 DHCPv6 两种地址获取方式(一个例子)。

    而 DHCPv6 恰是安卓不支持的,谷歌也不打算支持,我记得还专门发了一篇论文批判 DHCPv6 。
    结果就是安卓用运营商提供的光猫家庭网关没有 IPv6 。必须只能通过光猫改桥接+第三方支持 NDP 的路由器。基本上只有懂一些网络的用户才会这么做。

    第 1 条附言  ·  2021-06-25 20:58:11 +08:00

    抱歉我例子举得不对。不过我手上刚好有一个新装的联通光猫,它的 LAN 侧设置只有 DHCPv6。安卓从这个光猫获取不到 IPv6。 20210623235602

    15 条回复    2021-07-04 14:26:01 +08:00
    LnTrx
        1
    LnTrx  
       2021-06-20 01:07:41 +08:00
    你的例子里不是提到了在 LAN 侧提供 SLAAC 么?

    现况是,光猫一般支持 LAN 侧的 SLAAC,但不一定会下发可再分子网的前缀。

    路由模式下,手机直连支持无线的光猫,或者下接路由器支持 IPv6 穿透,安卓手机应该都可以正常使用
    NSAgold
        2
    NSAgold  
       2021-06-20 01:52:36 +08:00 via Android
    光猫 slaac 下发比 /64 大的(如 /80 )的前缀时,安卓机似乎无法获取地址来着
    xmlf
        3
    xmlf  
       2021-06-20 06:24:09 +08:00 via Android
    一直没开 ipv6,有公网 ipv4,目前 ipv6 有什么用?
    echo1937
        4
    echo1937  
       2021-06-20 08:33:59 +08:00
    @CrazyBoyFeng
    我在你的链接里看到 2.1.IPV6 基本功能测试包括三项:

    2.1.1 、WAN 侧 SLAAC,LAN 侧 SLAAC

    2.1.2 、WAN 侧 DHCPv6,LAN 侧 SLAAC

    2.1.3 、WAN 侧 DHCPv6,LAN 侧 DHCPv6

    所以你所说的“都要求 LAN 侧的 IPv6 只有 DHCPv6 这一种下发方式”是不是不对啊?


    @NSAgold #2 似乎不会分发大于 /64 的前缀,很多协议会无法正常工作。https://www.v2ex.com/t/759100#reply5


    @xmlf #3 比如我在 AWS 开了一台 EC2,是双栈的,如果我没有 IPv6 地址,我就无法测试和访问这台设备的 IPv6 服务
    NSAgold
        5
    NSAgold  
       2021-06-20 14:01:14 +08:00
    @echo1937 光猫 /64 前缀的情况下,DHCPv6 仍然能继续划分。 国内运营商最低发 /64 但国外似乎有发 /80 的,此时 SLAAC 不能正常工作,但 DHCPv6 似乎是可以的
    NSAgold
        6
    NSAgold  
       2021-06-20 14:11:29 +08:00
    @NSAgold RFC5375
    billccn
        7
    billccn  
       2021-06-21 07:27:42 +08:00
    很多传统的电信运营商其构架也是几十年前的逻辑结构,对他们来说互联网接入和用户线维护是两个部门,IP 地址分配是前者管,光网是后者管,这两者之间可能逻辑上甚至物理上都是分开的系统。比如用户的光纤接入了后者管的 OLT 以后再汇聚才能进入前者管的领域,这时候就有一个问题,如何能在汇聚以后识别每个用户的数据流呢?于是又祭出了从 DSL 时代就有的传家宝 PPPoE 拨号,既然已经是 PPPoE 了,那原来 DSL 时代的系统就可以稍加扩容继续用,此时如果要上 SLAAC 就需要投资新的系统还要培训运维人员,采用类似的 DHCP6 就省事很多。

    技术层面说 DHCP 是客户端定时续租的模式,产生的流量较少,SLAAC 依赖的 NDP 在 PPP 封装的链接里很冗余,但是为了实现地址分配这一副作用,客户端和服务器都得不厌其烦的广播和处理这些 NDP 包,其数量远超 DHCP 。

    另外 DHCP 还有特殊功能比如可以下发大于 /64 的前缀,让路由器分成多个子网,可以下发 DNS 和 NTP 等的地址。
    dawnh
        8
    dawnh  
       2021-06-21 14:56:23 +08:00
    确实是 DHCPv6 普遍吗?我怎么感觉用 SLAAC 的反而更多?有没有统计数据?
    事实上即使是有 SLAAC,DHCPv6 也可能必须同时提供,比如分配 DNS 和分配网关。我这里了解到的不少运营商是 SLAAC 分配地址,但是 DHCPv6 下发其他配置。
    ca1123
        9
    ca1123  
       2021-06-21 15:44:46 +08:00
    @xmlf 听说是上网可以更科学
    360511404
        10
    360511404  
       2021-06-21 19:15:27 +08:00
    @dawnh 这几年用过三个地区的联通,都是 dhcpv6-pd
    qbqbqbqb
        11
    qbqbqbqb  
       2021-06-30 14:03:18 +08:00   ❤️ 10
    这种光猫是支持 SLAAC 的,只要取消勾选“地址信息是否通过 DHCP 获取”这个选项就可以了。

    IPv6 地址分配不是“SLAAC/IPv6”那么简单。它把 IPv4 的 DHCP 协议拆成了两个协议:RA 和 DHCPv6,其中 RA 是必选协议,DHCPv6 是可选协议。RA 负责在局域网内公布前缀网段(起到类似 IPv4 的子网掩码和网络号的作用)和默认网关,同时可以激活特定网段的 SLAAC ; DHCPv6 可以分配 DNS 地址,以及类似 DHCPv4 的统一分配地址,但是因为 DHCPv6 相比 v4 去掉了分配“前缀(相当于子网掩码)和默认网关”的功能,所以必须配合 RA 一起使用。

    所以实际分配地址一般有三种模式:
    1. 纯 SLAAC 无 DHCPv6,缺点是如果客户端不支持 RDNSS 扩展的话就无法取得 DNS 地址
    2. DHCPv6 Stateless,即 RA 负责公布网段并激活 SLAAC,DHCPv6 只负责分配 DNS ;客户端通过 SLAAC 配置地址,再通过 DHCPv6 配置 DNS
    3. DHCPv6 Stateful,即 RA 负责公布网段但不激活 SLAAC,DHCPv6 负责分配地址和 DNS ;客户端的地址和 DNS 都是从 DHCPv6 获取的。
    以上第二种兼容性最好,安卓能获取地址,也不会出现某些客户端无法获取 DNS 的情况。

    回到你的光猫上,可以看到里面有两个选项“地址信息是否通过 DHCP 获取”“其他信息是否通过 DHCP 获取”,都不勾就是纯 SLAAC (客户端可能获取不到 IPv6 的 DNSdizhi ),只勾第二个就是 DHCPv6 Stateless,都勾上就是 DHCPv6 Stateful
    CrazyBoyFeng
        12
    CrazyBoyFeng  
    OP
       2021-07-03 23:35:23 +08:00
    @qbqbqbqb #11 抱歉我这边改了之后仍然得不到 slaac 地址。

    ![联通家庭网关]( https://graph.org/file/a7ae804737cffaf334aef.png)
    可以看到 wan 侧通过 dhcpv6 获得了 /60 前缀,通过 slaac 获得了 /64 地址。

    ![电脑]( https://graph.org/file/aa362b18124e4827ca29a.png)
    可以看到 lan 侧获得的 ip 是通过 /60 前缀下发的。如果通过 slaac 下发地址,那么我的电脑上应该得到的是与网关上同属一个 /64 前缀的 `2408:824e:0002:736e:`。
    CrazyBoyFeng
        13
    CrazyBoyFeng  
    OP
       2021-07-04 14:04:39 +08:00
    @qbqbqbqb 抱歉之前 #12 说的不对,/64 是不下发的。只做设备标识用。那这里电脑得到的 /60 地址,从电脑上分辨不出来是 dhcpv6 还是 slaac 。

    不过安卓还是得不到 ipv6,不知道是哪里出的问题。
    qbqbqbqb
        14
    qbqbqbqb  
       2021-07-04 14:22:59 +08:00   ❤️ 1
    @CrazyBoyFeng 按照你电脑上的显示,应该是通过 SLAAC 获取的地址。只有 SLAAC 才会获取一个固定和一个临时两个地址。如果是 DHCPv6 有状态获取的话只会显示一个,而且会像 v4 一样显示地址租期。
    qbqbqbqb
        15
    qbqbqbqb  
       2021-07-04 14:26:01 +08:00
    @CrazyBoyFeng 至于安卓为什么得不到,这我就不太清楚了,有可能是手机系统自身的兼容性问题
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1768 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 16:36 · PVG 00:36 · LAX 08:36 · JFK 11:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.