首先各个 /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 地址但不能上网)

realy

passthrough

路由拨号 + 二级路由IPv6中继

采用路由拨号 + 二级路由IPv6中继方式

路由器刷入openwrt固件

ssh登入路由器

如果中途刷机导致ssh连接失败执行以下命令

ssh-keygen -R “192.168.6.1” # ip地址替换为路由器ip

修改 vim /etc/config/dhcp

1
2
3
4
5
6
7
8
9
10
11
12
# 添加一项 wan6 接口的配置
config dhcp 'wan6'
option interface 'wan6'
option ra 'relay'
option dhcpv6 'relay'
option ndp 'relay'
option master '1'

# 修改 lan 接口中的字段
option ra 'relay'
option dhcpv6 'relay'
option ndp 'relay'

image-20220629174131215

重启服务

/etc/init.d/odhcpd restart

重连wifi即可获取公网IPV6

image-20220629174240758

设置IPv6 无状态地址生成模式

查看动态内核参数

sysctl -a | grep net.ipv6.conf.wlp0s20f3

image-20220629182113303

=1时候

dc:71:96:7f:a6:3e

2409:8a3c:2270:b060:29b:fd53:666b:84c6/64

ea:57:5c:89:23:6d

vim /etc/NetworkManager/NetworkManager.conf

1
2
[connection]
ip未完待续

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

https://u.sb/debian-prefer-ipv4/

openwrt防火墙