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

光猫拨号,二级路由 IPV6 的正确设置教程.

  •  
  •   826540272 · 2021-02-19 19:42:11 +08:00 · 13296 次点击
    这是一个创建于 1403 天前的主题,其中的信息可能已经有所发展或是发生改变。
    几乎所有光猫不会下发前缀指派,所以二级路由器只有路由器本身可以获得一个 ipv6 地址.
    解决方法是使用 ipv6 透传 / 中继 技术.
    透传方案兼容性更好,直接桥接 WAN 和 LAN 的 v6 数据包,使用"etable" 命令,具体命令忘了.可以搜索到.缺点好像是路由器本身拿不到 v6 地址.
    其次是 使用中继方案,
    OpenWrt 下设置方法是,WAN DHCPv6 设置里全部设为中继. LAN 设置 同样全部设为中继,
    优点是可以自定义 DNS 地址,你可以将路由器设为 DNS v6 地址,以进行过滤.
    缺点是 首包延迟大,可能是 odhcp 软件的 BUG.
    第 1 条附言  ·  2021-02-24 22:47:31 +08:00
    遇到 华为光猫 5G 版 8145C5
    可以正确下发 PD,无需额外配置。
    软件内也支持防火墙设定。
    下发的 PD 是 /63 的地址段
    8145 不支持,甚至防火墙锁死,无法接收入站
    30 条回复    2021-11-14 02:31:32 +08:00
    steadi
        1
    steadi  
       2021-02-19 21:23:54 +08:00
    就是 ipv6 桥模式
    sasalemma
        2
    sasalemma  
       2021-02-20 12:22:26 +08:00
    不是不能下发前缀,而是 PD 模式+statless 无状态,光猫的 PD 前缀给的是 60,路由 WAN 获得的是 /64 这个 statless 最小能分的掩码,不能再在 LAN 下发了。那样就是 /128,要是 PD+statful 倒是可以继续下发的。要是 PD 前缀是 /56/48 那更可分。

    二级路由最稳的做法还是 NAT6,不是 NAT66,不是穿透,而是直接用 IPV6 私网地址来 NAT6,能使用 IPV6 网络,也不会对网络产生任何 bug,底下设备要公网,和 V4 一样端口映射就是,只是 openwrt 本身防火墙对 ipv6 的 nat 端口映射没有界面支持,对于 ipv6 的转发倒是可以直接在界面操作。
    datou
        3
    datou  
       2021-02-20 13:39:19 +08:00
    还是把 ont 改桥接,在路由器上拨号吧

    这样设置 ipv6 防火墙更方便一些
    LnTrx
        4
    LnTrx  
       2021-02-20 16:42:31 +08:00
    @sasalemma NAT6 和 NAT66 不是一个东西?
    sasalemma
        5
    sasalemma  
       2021-02-20 21:42:42 +08:00
    @LnTrx 个人觉得自己的回复已经说明不是一个东西。
    sasalemma
        6
    sasalemma  
       2021-02-20 21:50:14 +08:00
    @LnTrx 😄 一时手快,手动狗头掉了。真是扑了街。
    LnTrx
        7
    LnTrx  
       2021-02-20 21:50:38 +08:00
    @sasalemma 这个说法没听说过,说是一个东西的倒是有:

    > This page describes how to set up NAT6 (also known as NAT66)
    https://openwrt.org/docs/guide-user/network/ipv6/ipv6.nat6

    如果这两个不是一个东西,那分别指什么,能否提供一下资料?
    826540272
        8
    826540272  
    OP
       2021-02-21 04:54:37 +08:00 via Android
    @sasalemma 我 56 也不能分,这个不能设置的
    而且是不是 pd openwrt 界面可以看到,所以你的理解不对
    cwbsw
        9
    cwbsw  
       2021-02-23 16:06:30 +08:00
    @sasalemma
    就是光猫路由模式不支持 LAN 侧 DHCPv6-PD 的锅。
    /60 当然可以继续分割下发啊。WAN 口 SLAAC 的 /64 地址和 PD 分配的 /60 前缀又不是一个东西。你 WAN 口关闭 SLAAC 不配地址或者从 /60 里拿一个地址配在 WAN 口上都是可以的。
    sasalemma
        10
    sasalemma  
       2021-02-23 16:28:22 +08:00
    @cwbsw

    这真不行,以前 PD 给了 LAN /56 前缀,倒是实现了。

    你没理解我说的话。WAN 口这边的地址本来就是是 /64 也好,/60 也好的 SLAAC 和 LAN 的 PD 无关的。就如 ipv4 的 wan 上游服务的分配 ip 。

    只是 WAN 作为一个入口,给 LAN 这边一段 PD 地址,给了 /60 。LAN 这边用 SLAAC 方式分配,二级路由的 WAN 接 LAN,这个 WAN 口就是 /64 的 statless 地址了。还能再下发吗???

    这个东西研究 openwrt 内网的 pd 就是这样。除非用有状态了。

    和你说光猫是两回事。

    @826540272
    @cwbsw

    我知道你们说的意思。光猫的没有 PD,用 passthrough 一类直接和 wan 口同享一个网段的,和手机 wifi 共享 4g 一样,同网段的,/64 的 SLAAC,接个路由的情况,wan 口+SLAAC 就是 /64 。没有 PD 也没有下发。

    但我这边的光猫不是这样而已。光猫拨号,这边还是有 PD 。只是二级路由无法继续下发。

    我说的是哪怕你桥接路由拨号,/60 的 pd 在二级路由一样没有继续下发的,用 slaac 。
    cwbsw
        11
    cwbsw  
       2021-02-23 18:39:52 +08:00
    @sasalemma
    不知道你为什么认为 /60 就无法继续下发。
    假设运营商分配 2408:1234:2234:3230::/60,于是你不就得到了 16 个 /64 ?把 2408:1234:2234:3231::/64 分配给 LAN,2408:1234:2234:3232::/64 分配给二级路由的 LAN,不就可以了?
    qbqbqbqb
        12
    qbqbqbqb  
       2021-02-23 20:38:43 +08:00   ❤️ 3
    @sasalemma 你这里对一些概念的理解有些问题。

    是这样的,首先各个 /64 的意义是不一样的,通过 SLAAC 获得的只是一个地址,里面的“前缀长度”字段(值为“/64”)只是相当于 ipv4 的子网掩码的含义,只是提示了同一网段( WAN 侧)的地址范围,同前缀的其它地址是不属于你的。所以说当路由器仅获取 WAN 地址时(无论是通过 SLAAC 还是 DHCPv6 IA_NA,前者只支持 /64,后者支持任意的前缀长度,注意这两种方式获取到的都是“地址”而不是“前缀”),LAN 端设备是无法直接获得 IPv6 全球单播地址(就是 2 开头的公网地址)的。

    然后还有另外一种操作是 DHCPv6 IA_PD,这种操作可以向上级网络请求一个 IPv6 的前缀,一般家宽运营商给出的前缀长度都是 /56 或者 /60 的,也有极少情况是 /64 的。通过这种方式获取到的是“前缀”而不是“地址”,也就是说同前缀的 2^(128-PREFIX_LEN)个地址都是属于你的。这就是 DHCPv6 IA_PD 和其它地址获取方式( SLAAC 和 DHCPv6 IA_NA )的本质不同之处。

    家宽单层路由器(包括光猫自带路由,以及光猫桥接路由拨号两种情况)的一般工作方式:首先路由器(路由模式光猫)建立 PPPoE 链路,然后通过 SLAAC 获取 WAN 侧地址(一般情况下前缀长度为 /64 ),然后通过 DHCPv6 IA_PD 向 ISP 请求一个地址段,比如楼主拿到的是一个 /56 的地址段,这些地址都是临时属于你的( ISP 端在获取地址的那一刻就已经建立好了正确的路由)。然后重要的来了:路由器(路由模式光猫)从这 /56 的地址端中只取了一个 /64 的地址段作为前缀配置到了 LAN 接口上(包括本地路由器的路由表,自身 LAN 口地址,和负责分配地址的 RA 服务,有时候可能还有本地的 DHCPv6 服务),这样 LAN 侧的设备就可以通过相应的协议获取临时属于自己的公网地址了。至于为什么只取一个 /64 而不是整个 /56,是为了兼容 SLAAC 。

    而且可以注意到,路由器 LAN 侧和 WAN 侧不是同一个网段,这也是 IP 协议的最基本要求(想想 v4 时代是怎么配置地址的)

    这种情况下,还有 255 个 /64 全球可路由的地址段(或者也可以理解成 15 个 /64 地址段和 15 个 /60 地址段)是处于闲置状态的,理论上来说,一级路由器也可以响应 LAN 侧接入的下级路由器的 DHCPv6 IA_PD 请求,给下级路由器分配前缀(下级路由 WAN 侧通过 SLAAC 拿一级路由 LAN 侧的**一个**地址,LAN 侧拿一级路由从 ISP 得到且闲置的**一段**前缀,在这个过程中会自动配置好本地的路由表等参数),然后下级路由 LAN 侧连接的设备就也可以获得公网地址了。此时如果把 /56 改成 /60,也只是少一些可用地址段而已(只有 15 个 /64 地址段闲置),影响不大。如果一级路由器是 OpenWRT,是可以实现这种下发操作的。

    所以说实际存在的问题并不是所谓的“/60 下发只有 /64 不能再下发”(实际上不存在这种说法),而是光猫自带路由根本不会正确响应下级路由器的 IA_PD 请求。
    (我也见到过一些光猫,能够响应 IA_PD 请求,但是可能固件里有 bug 不能正确配置本地的路由表,导致二级路由后的设备能获取 ipv6 地址但不能上网)
    qbqbqbqb
        13
    qbqbqbqb  
       2021-02-23 21:03:19 +08:00
    @sasalemma
    改正上个回帖里的一处错误:“如果一级路由器是 OpenWRT,是可以实现这种下发操作的”
    现在的 OpenWRT 确实不支持这种下发。但是其它路由器不一定不支持。

    我之前也见过一种光猫,获取 /60 的前缀后可以给二级路由 PD /64 的前缀,但可能路由表的建立有 BUG,导致二级路由后的设备获取了地址也上不了网......
    qbqbqbqb
        14
    qbqbqbqb  
       2021-02-23 21:18:10 +08:00
    比如说一级路由使用 Mikrotik RouterOS 的话,这种情况就是可以下发前缀的
    sasalemma
        15
    sasalemma  
       2021-02-24 00:49:43 +08:00
    @qbqbqbqb

    已经不说 WAN 那边获取的 /64 和 /60,那个和 pd 地址段到 LAN 这边没有影响。

    一级路由的 PD 前缀为 /60,然后一级路由无状态下发的情况,一般配置下,一级路由只截取了 /64 开始下发至 LAN 设备(几乎大多数设备都是如此),还能无状态能二三四级一直下发不?就是一开始说的 /60 + 无状态方式,LAN 这边就只有 /64 网段了。LAN 以坑爹的 /64 PD 你都说为了兼容 SLAAC 方式,才采用的。

    我也说了,你要验证这个很简单的。路由,比如 OP 这边自己建立 LAN 的 PD 模式就是,就是 LAN 禁用前缀派发后,禁用全局,设定 LAN 的静态 ipv6 地址和 PD 前缀,就是 openwrt 自身的 PD 模式,和公网无关的。

    LAN 下还继续接个二级路由,还能 /128? 一级路由只是能拥有很多地址段和地址而已。比如在一级路由拨号中 WAN,可以加参数请求,WAN 口拨号获得的 PD 段为 240e:1234:1111:2222::/60,那实际上 多个 LAN 口 可以用请求成 LAN1 可以获取 240e:1234:1111:2222::/64 前缀,LAN2 能获取到:240e:1234:1111:2225::/64,LAN3 是:240e:1234:1111:2227::/64,就是 WAN 响应 LAN 派发不同地址段,也极少人会使用这个。

    LAN 下接的设备就成了 /64 的前缀+/64 的后缀,变成了完整的 128 位地址,就是 SLAAC 获得的地址,没有 PD 再次下发的可能了。 因为二级 WAN 和 LAN 也必然是需要不同网段的,只有用有状态来划分网段,有状态无需为 SLAAC 后 /64 段负责,继续 PD 就是,/82 /98 /128 就能无限制下发,只要你分的足够细。


    从一开始,我只提了一个问题:一级路由 PD/60 前缀+SLAAC 方式的 LAN,LAN 接二级路由 PD 继续下发问题。

    因为目前的开放性路由系统,相对来说就那几个,还各种 bug,除了自行修改配置,默认下的 LAN /64,还真很难处理这个。
    sasalemma
        16
    sasalemma  
       2021-02-24 00:51:47 +08:00
    @cwbsw 说下具体的。比如 op 一级拨号 wa 你这边获得 /60PD,LAN 口 /64 开始派送。界面上如何配置这个。二级路由同为 op 。
    sasalemma
        17
    sasalemma  
       2021-02-24 01:01:40 +08:00
    @cwbsw 关键是不同的路由器,你无法配置这个啊。不是不知道啊。比如 OP,你二级路由 WAN 请求前缀 /64,一级路由都不鸟这个,直接给 WAN 派送地址打发了二级路由。你说气不气呢?

    又比如一级路由中,ASUS 的 AC68U 用 native 方式,二级的 op 的 WAN try 啊。得 WAN try 得到 PD 前缀,才有后面 LAN 派件得可能性。。。

    我没说所有路由不支持。只是常见系统,DD 也好,OP 也好,ROS 这类个人觉得不友好没试而已。
    sasalemma
        18
    sasalemma  
       2021-02-24 01:38:06 +08:00
    @qbqbqbqb 可能上面一些表诉有问题。以前 /56 的时候,二级路由可以不设置,二级路由 WAN 也能拿到 /64 的 PD 前缀,而 变成 /60 后,地址段少了不影响,只是二级路由 WAN 获不到 和 LAN /64 段的 PD 而已。

    一些路由处理 PD 的大概是类似这个逻辑:一级 2408:1234:2234:3230::/60,二级 2408:1234:2234:3231::/64,三级 2408:1234:2234:3230:0001::/80

    如上面朋友说的,WAN1:2408:1234:2234:3230::/60,LAN1 获得了:2408:1234:2234:3230::/60,而 WAN2 并不能“越过”LAN1 段获得
    2408:1234:2234:3232::/64 的 PD 前缀而已。如果路由系统支持,那有 WAN
    1 有多少地址段,都能所谓“无限下发”了。只是目前家用这些坑爹货不行。7621A,4709C,x86 的 op 。除非穿透过去,如楼主说的。WAN-LAN 相通,阻隔 ipv4 包,还造成了第一个包的 bug,多级下,就坑死了。家用级别光猫也是如此如此。

    家宽这边也就是那么点人有这些需求,像我老弟的家,一个路由桥接拨号,挂一个交换机,底下都是挂二级路由,ipv6 自动失效。苏州那边的落脚点,电信封杀密码的中兴猫,猫拨号,也是没有 pd,也是挂着二级路由,桥接都没改成。

    所以最终隔离网络,就不是变成了二级路由,而是直接一级路由中一个 LAN 口设一个 VLAN 并独享一个 PD 前缀了。LAN 怎么请求 /60 PD 都是可以的。二级就跪了。所以才有了所谓不能下发的说辞了。确实,ROS 和 OP 都是基于 linux iptables 的货色,改天研究下 ROS 如何处理这个的,看看能不能搞到 op 这边。
    dodakt
        19
    dodakt  
       2021-02-24 08:55:43 +08:00 via iPhone
    @sasalemma /60 也可以下发例如 /62 的 pd 我一级 op 二级 ASUS
    cwbsw
        20
    cwbsw  
       2021-02-24 10:22:31 +08:00
    @sasalemma RouterOS 和 OpenWrt 都可以收到 /60 继续向下分发 /64 前缀的,13 楼说 OpenWrt 说不支持,不清楚 OpenWrt 最近是不是又瞎改了,至少我去年还在用 OpenWrt 作主路由的时候确实是可以的。
    qbqbqbqb
        21
    qbqbqbqb  
       2021-02-24 16:06:39 +08:00
    @cwbsw 这个是我阅读 odhcpd 的源码和查询相关资料得出的结论。OpenWRT 在处理 PD 请求的时候似乎是从已经配置到 LAN 的前缀上挖出一块向下分发的,而不是从闲置地址里分发。
    qbqbqbqb
        22
    qbqbqbqb  
       2021-02-24 16:12:15 +08:00
    @sasalemma 这个和 iptables 没什么关系,ipv6 默认纯路由模式不经过 NAT,是不涉及 iptables 的(当然,如果有防火墙的话还是要用到 iptables )。涉及到的是 DHCPv6 Server 的工作逻辑,对于 PD 请求是“创建新的 VLAN”,还是和 NA 请求一视同仁直接从 LAN 里挖。这两种在路由表上都是很容易实现的。就看 DHCPv6 软件的开发者的选择了。
    cwbsw
        23
    cwbsw  
       2021-02-24 18:04:47 +08:00
    @qbqbqbqb
    RouterOS 设置的是 pool prefix length,通常设置为 64,这样就可以把收到的 /60 分割成 16 个可用的 /64 。
    OpenWrt 可以直接把 LAN 的前缀长度设置为 60 。
    826540272
        24
    826540272  
    OP
       2021-02-24 22:01:41 +08:00
    @sasalemma 你说的不对,是不是 PD 在 openwrt 界面有显示
    826540272
        25
    826540272  
    OP
       2021-02-24 22:38:00 +08:00
    @qbqbqbqb 你的理解不对,光猫获取到的地址和 PD 地址没关系。只是 PD 地址段是通过光猫路由的.
    sasalemma
        26
    sasalemma  
       2021-03-11 00:00:52 +08:00
    @826540272
    @cwbsw
    @dodakt

    很长,但也很快看完。

    前几天被抓去搞事情了,实际上这个问题是这样的,IPV6-PD 这个模式,客观来说就是 IPV6 子网问题,我个人理解是这样:

    假设 IPV6-PD 为 /60 的前缀 240e:3c1:5665:ddXY::/60 。就是意味着:

    X 这个 60 位是 ISP 分配给你的,也是固定的,Y 这个位才是子网的位数,而 IPV6 都是 16 进制,各位大佬都知道就是 0-F 这样,也就是说后 64 位 SLAAC 方式能分出 16 个子网 /64 的。

    240e:3c1:5665:dd70::/60 这个前缀可以分成

    2 个 /61 子网:

    240e:3c1:5665:dd70::/61
    240e:3c1:5665:dd78::/61

    4 个 /62 子网

    240e:3c1:5665:dd70::/62
    240e:3c1:5665:dd74::/62
    240e:3c1:5665:dd78::/62
    240e:3c1:5665:dd7c::/62

    8 个 /63 子网

    240e:3c1:5665:dd70::/63
    240e:3c1:5665:dd72::/63
    240e:3c1:5665:dd74::/63
    240e:3c1:5665:dd76::/63
    240e:3c1:5665:dd78::/63
    240e:3c1:5665:dd7a::/63
    240e:3c1:5665:dd7c::/63
    240e:3c1:5665:dd7e::/63

    16 个 /64 子网

    240e:3c1:5665:dd70::/64~240e:3c1:5665:dd7F::/64

    这个各位是没有意见的。

    ========================================================

    下面开始说路由了:

    先说非级联(只有一级路由),非级联就是多口 LAN ( VLAN )分子网

    一级路由

    WAN 获取 IPV6-PD 240e:3c1:5665:dd70::/60
    LAN1,LAN1 可以 以 240e:3c1:5665:dd70::/60 下发,只有一个大子网。

    和上面划分子网方式一样,可以分 LAN1-LAN16 。每个不同的 LAN 口分配 240e:3c1:5665:dd70::/64~240e:3c1:5665:dd7F::/64 的不同子网。来区分不同的使用情况,比如 LAN1 对应于家里的物联设备。LAN2 是普通上网设备云云。

    但大多数路由,默认情况下,不会直接使用 /60 这么大的一个子网,为了方便使用和节省运力,还有所谓的兼容性,反正只有一级,所以默认下是从 /60 里随意抽了一个 /64 的子网,一般是抽 0,也就是 240e:3c1:5665:dd70::/64 开始分配 LAN1 下的设备。

    LAN1 设备获取的 ip 地址均为 240e:3c1:5665:dd70:开头,这个大家也没有意见。

    ========================================================

    级联,IPV6-PD 就要算算子网问题了,因为那个子网的拓展并不是像大家想的那样,可以 /64 一直传下去啊。假设 PD 下发没有任何问题。

    一级路由

    WAN 获取 240e:3c1:5665:dd70::/60 前缀。

    LAN 以 240e:3c1:5665:dd70::/60 下发
    LAN 的 IPV6 地址 240e:3c1:5665:dd70::1 (假设设定为::1)


    二级路由

    WAN 获取的 IPv6 地址永远都是 /64 的,240e:3c1:5665:dd70:1111:2222:3333:4444/64
    WAN 获得了一个 IPV6-PD 前缀:240e:3c1:5665:dd78::/61

    LAN 以 240e:3c1:5665:dd78::/61 下发
    LAN 的 IPV6 地址为 240e:3c1:5665:dd78::1

    这样二级路由下发的就只有剩下的一半子网了。
    因为 240e:3c1:5665:dd70::/61 这段,一级路由的 LAN 段抽了 240e:3c1:5665:dd70::/64 用了啊。
    虽然 240e:3c1:5665:dd71::/64~240e:3c1:5665:dd77::/64 这段并没有使用。
    除非二级路由用了 LAN2~LAN8 (均以 /64 分配)


    三级路由( WAN 接二级 LAN )

    WAN 获取的 IPv6/64,240e:3c1:5665:dd78:aaaa:bbbb:cccc:dddd/64
    WAN 获得前缀:240e:3c1:5665:dd7c::/62

    LAN 下发 240e:3c1:5665:dd7c::/62
    LAN 的 IPV6 地址为 240e:3c1:5665:dd7c::1


    四级路由( WAN 接二级 LAN )同理

    WAN 获取的 IPv6/64,240e:3c1:5665:dd7c:aaaa:1111:cccc:2222/64
    WAN 获得前缀:240e:3c1:5665:dd7e::/63

    LAN 下发 240e:3c1:5665:dd7e::/63
    LAN 的 IPV6 地址为 240e:3c1:5665:dd7e::1


    五级路由( WAN 接二级 LAN )同理

    WAN 获取的 IPv6/64,240e:3c1:5665:dd7e:aaaa:3333:cccc:4444/64
    WAN 获得前缀:240e:3c1:5665:dd7f::/64

    LAN 下发 240e:3c1:5665:dd7f::/64
    LAN 的 IPV6 地址为 240e:3c1:5665:dd7f::1

    好了,到了这里就是 /64 了,如果还接一个路由,如果还是以 SLAAC 方式
    就只能用 NAT6,一类本地地址了。当然这里用 WAN 接 LAN,去掉 ipv4 协议的穿透方式让六级路由获取五级同级的 ipv6 子网段也是可以的。

    这个才是我要问的问题。/64 后,SLAAC 怎么解。

    ========================================================

    然后变种一下。假如一级路由。分了 4 个 VLAN,一开始就分了 /62 4 个子网。按上面的说法,就是最多挂 3 级路由就 over 了。

    当然对于家用,已经 100%够用了。


    就是有些理解是模糊的。看上面的说辞,有些朋友觉得 IPV6-PD 似乎可以这样:

    一级路由:240e:3c1:5665:dd70::/64,二级路由把 240e:3c1:5665:dd71::/64 发过去,三级 240e:3c1:5665:dd72::/64 这样。

    但正常情况下,IPV6-PD 这样的子网发放模式和边际路由的理解一样啊,毕竟都是 WAN 传给 LAN,再下一级 WAN-LAN 。下一级肯定是上一级的子网范围内的啊。

    ========================================================

    所以说白了,不是说给的 ip 地址不够多,是多,说人话就是说,你一个 /64 的子网能接入 NNNN 多个设备,毕竟 SLAAC 都好,后面 64 位的主机位能让你的 IP 地址数量数不完,只是子网这个货色,一般是用来区分网络分区作用多些。

    就好比非子网,不同网段 192.168.1.0~192.168.254.0,你都能设置 1~254 这样的区域。

    而 IPV6 中除了一开始从一级路由平层分开 /60 前缀为 /64 的 16 个子网外,用 ip6tabel 禁止每个子网相互通信外,或者 vlan 隔离,级联中就得考虑只有这 16 个子网的 1 、2 、4 、8 、16 的分配法而已。

    当然如果这个世界只靠 ipv6 公网 ip 开网吧,/60 已经可以开黑吧了。

    以上,有不对的地方,指正下。大概我目前就是这样搞的。因为家里各路人员繁杂,所以一级 LAN 已经分了 8 个子网 VLAN 。就剩下 statful 可以玩耍了。

    前几天被抓去搞事情了,实际上这个问题是这样的,IPV6-PD 这个模式,客观来说就是 IPV6 子网问题,我个人理解是这样:

    假设 IPV6-PD 为 /60 的前缀 240e:3c1:5665:ddXY::/60 。就是意味着:

    X 这个 60 位是 ISP 分配给你的,也是固定的,Y 这个位才是子网的位数,而 IPV6 都是 16 进制,各位大佬都知道就是 0-F 这样,也就是说后 64 位 SLAAC 方式能分出 16 个子网 /64 的。

    240e:3c1:5665:dd70::/60 这个前缀可以分成

    2 个 /61 子网:

    240e:3c1:5665:dd70::/61
    240e:3c1:5665:dd78::/61

    4 个 /62 子网

    240e:3c1:5665:dd70::/62
    240e:3c1:5665:dd74::/62
    240e:3c1:5665:dd78::/62
    240e:3c1:5665:dd7c::/62

    8 个 /63 子网

    240e:3c1:5665:dd70::/63
    240e:3c1:5665:dd72::/63
    240e:3c1:5665:dd74::/63
    240e:3c1:5665:dd76::/63
    240e:3c1:5665:dd78::/63
    240e:3c1:5665:dd7a::/63
    240e:3c1:5665:dd7c::/63
    240e:3c1:5665:dd7e::/63

    16 个 /64 子网

    240e:3c1:5665:dd70::/64~240e:3c1:5665:dd7F::/64

    这个各位是没有意见的。

    ========================================================

    下面开始说路由了:

    先说非级联(只有一级路由),非级联就是多口 LAN ( VLAN )分子网

    一级路由

    WAN 获取 IPV6-PD 240e:3c1:5665:dd70::/60
    LAN1,LAN1 可以 以 240e:3c1:5665:dd70::/60 下发,只有一个大子网。

    和上面划分子网方式一样,可以分 LAN1-LAN16 。每个不同的 LAN 口分配 240e:3c1:5665:dd70::/64~240e:3c1:5665:dd7F::/64 的不同子网。来区分不同的使用情况,比如 LAN1 对应于家里的物联设备。LAN2 是普通上网设备云云。

    但大多数路由,默认情况下,不会直接使用 /60 这么大的一个子网,为了方便使用和节省运力,还有所谓的兼容性,反正只有一级,所以默认下是从 /60 里随意抽了一个 /64 的子网,一般是抽 0,也就是 240e:3c1:5665:dd70::/64 开始分配 LAN1 下的设备。

    LAN1 设备获取的 ip 地址均为 240e:3c1:5665:dd70:开头,这个大家也没有意见。

    ========================================================

    级联,IPV6-PD 就要算算子网问题了,因为那个子网的拓展并不是像大家想的那样,可以 /64 一直传下去啊。假设 PD 下发没有任何问题。

    一级路由

    WAN 获取 240e:3c1:5665:dd70::/60 前缀。

    LAN 以 240e:3c1:5665:dd70::/60 下发
    LAN 的 IPV6 地址 240e:3c1:5665:dd70::1 (假设设定为::1)


    二级路由

    WAN 获取的 IPv6 地址永远都是 /64 的,240e:3c1:5665:dd70:1111:2222:3333:4444/64
    WAN 获得了一个 IPV6-PD 前缀:240e:3c1:5665:dd78::/61

    LAN 以 240e:3c1:5665:dd78::/61 下发
    LAN 的 IPV6 地址为 240e:3c1:5665:dd78::1

    这样二级路由下发的就只有剩下的一半子网了。
    因为 240e:3c1:5665:dd70::/61 这段,一级路由的 LAN 段抽了 240e:3c1:5665:dd70::/64 用了啊。
    虽然 240e:3c1:5665:dd71::/64~240e:3c1:5665:dd77::/64 这段并没有使用。
    除非二级路由用了 LAN2~LAN8 (均以 /64 分配)


    三级路由( WAN 接二级 LAN )

    WAN 获取的 IPv6/64,240e:3c1:5665:dd78:aaaa:bbbb:cccc:dddd/64
    WAN 获得前缀:240e:3c1:5665:dd7c::/62

    LAN 下发 240e:3c1:5665:dd7c::/62
    LAN 的 IPV6 地址为 240e:3c1:5665:dd7c::1


    四级路由( WAN 接二级 LAN )同理

    WAN 获取的 IPv6/64,240e:3c1:5665:dd7c:aaaa:1111:cccc:2222/64
    WAN 获得前缀:240e:3c1:5665:dd7e::/63

    LAN 下发 240e:3c1:5665:dd7e::/63
    LAN 的 IPV6 地址为 240e:3c1:5665:dd7e::1


    五级路由( WAN 接二级 LAN )同理

    WAN 获取的 IPv6/64,240e:3c1:5665:dd7e:aaaa:3333:cccc:4444/64
    WAN 获得前缀:240e:3c1:5665:dd7f::/64

    LAN 下发 240e:3c1:5665:dd7f::/64
    LAN 的 IPV6 地址为 240e:3c1:5665:dd7f::1

    好了,到了这里就是 /64 了,如果还接一个路由,如果还是以 SLAAC 方式
    就只能用 NAT6,一类本地地址了。当然这里用 WAN 接 LAN,去掉 ipv4 协议的穿透方式让六级路由获取五级同级的 ipv6 子网段也是可以的。

    这个才是我要问的问题。/64 后,SLAAC 怎么解。

    ========================================================

    然后变种一下。假如一级路由。分了 4 个 VLAN,一开始就分了 /62 4 个子网。按上面的说法,就是最多挂 3 级路由就 over 了。

    当然对于家用,已经 100%够用了。


    就是有些理解是模糊的。看上面的说辞,有些朋友觉得 IPV6-PD 似乎可以这样:

    一级路由:240e:3c1:5665:dd70::/64,二级路由把 240e:3c1:5665:dd71::/64 发过去,三级 240e:3c1:5665:dd72::/64 这样。

    但正常情况下,IPV6-PD 这样的子网发放模式和边际路由的理解一样啊,毕竟都是 WAN 传给 LAN,再下一级 WAN-LAN 。下一级肯定是上一级的子网范围内的啊。

    ========================================================

    所以说白了,不是说给的 ip 地址不够多,是多,说人话就是说,你一个 /64 的子网能接入 NNNN 多个设备,毕竟 SLAAC 都好,后面 64 位的主机位能让你的 IP 地址数量数不完,只是子网这个货色,一般是用来区分网络分区作用多些。

    就好比非子网,不同网段 192.168.1.0~192.168.254.0,你都能设置 1~254 这样的区域。

    而 IPV6 中除了一开始从一级路由平层分开 /60 前缀为 /64 的 16 个子网外,用 ip6tabel 禁止每个子网相互通信外,或者 vlan 隔离,级联中就得考虑只有这 16 个子网的 1 、2 、4 、8 、16 的分配法而已。

    当然如果这个世界只靠 ipv6 公网 ip 开网吧,/60 已经可以开黑吧了。

    以上,有不对的地方,指正下。大概我目前就是这样搞的。因为家里各路人员繁杂,所以一级 LAN 已经分了 8 个子网 VLAN 。就剩下 statful 可以玩耍了。
    sasalemma
        27
    sasalemma  
       2021-03-11 00:05:33 +08:00
    呃。似乎 bug,重复了。抱歉。
    IMEVER
        28
    IMEVER  
       2021-03-14 14:04:57 +08:00
    openwrt 支持下发 pd 的
    比如一级获取前缀 /60
    配置不不动

    二级路由器配置如下:
    lan 口
    获取前缀 /62
    dhcpv6 和 ra 都是 server,ndp 中继

    wan 口好像界面找不到配置的地方,可以直接修改 /etc/config/dhcp
    config dhcp 'wan'
    option interface 'wan'
    option ignore '1'
    option ra "relay"

    这样二级路由就可以等得到一个 /62 的 pd 了。当然这个前缀可以配置到 61 、62 、63 、64,下面的都有 slaac,再细分下去也可以,只是下面不能用 slaac 了,只能 statefull
    TsukiMori
        29
    TsukiMori  
       2021-11-14 02:28:30 +08:00
    @cwbsw

    Openwrt 支持 PD 拆分 在接口设置里手动选择前缀委托长度 可以从 60 开始 61 62 一路套下来 理论上也就是分到 PD/64
    但是 Openwrt 这种路由上联和 PD 都是基于 DHCPv6
    13 楼说的情况是 PD 委托路由下的设备 用 SLAAC 获取地址会直接快进到 /64
    TsukiMori
        30
    TsukiMori  
       2021-11-14 02:31:32 +08:00
    @sasalemma 主要痛点在于 像 openwrt 这样的路由 wan 口是 DHCPv6 而不是 SLAAC 光猫拿到 /60 的 PD 以后就不管三七二十一都给个 /64 地址 没有给 DHCPv6 客户端继续下发 PD 的余地
    我这里甚至还有光猫下发 /128 地址的情况
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1027 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 22:34 · PVG 06:34 · LAX 14:34 · JFK 17:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.