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

2021-02-19 19:42:11 +08:00
 826540272
几乎所有光猫不会下发前缀指派,所以二级路由器只有路由器本身可以获得一个 ipv6 地址.
解决方法是使用 ipv6 透传 / 中继 技术.
透传方案兼容性更好,直接桥接 WAN 和 LAN 的 v6 数据包,使用"etable" 命令,具体命令忘了.可以搜索到.缺点好像是路由器本身拿不到 v6 地址.
其次是 使用中继方案,
OpenWrt 下设置方法是,WAN DHCPv6 设置里全部设为中继. LAN 设置 同样全部设为中继,
优点是可以自定义 DNS 地址,你可以将路由器设为 DNS v6 地址,以进行过滤.
缺点是 首包延迟大,可能是 odhcp 软件的 BUG.
13302 次点击
所在节点    宽带症候群
30 条回复
qbqbqbqb
2021-02-24 16:06:39 +08:00
@cwbsw 这个是我阅读 odhcpd 的源码和查询相关资料得出的结论。OpenWRT 在处理 PD 请求的时候似乎是从已经配置到 LAN 的前缀上挖出一块向下分发的,而不是从闲置地址里分发。
qbqbqbqb
2021-02-24 16:12:15 +08:00
@sasalemma 这个和 iptables 没什么关系,ipv6 默认纯路由模式不经过 NAT,是不涉及 iptables 的(当然,如果有防火墙的话还是要用到 iptables )。涉及到的是 DHCPv6 Server 的工作逻辑,对于 PD 请求是“创建新的 VLAN”,还是和 NA 请求一视同仁直接从 LAN 里挖。这两种在路由表上都是很容易实现的。就看 DHCPv6 软件的开发者的选择了。
cwbsw
2021-02-24 18:04:47 +08:00
@qbqbqbqb
RouterOS 设置的是 pool prefix length,通常设置为 64,这样就可以把收到的 /60 分割成 16 个可用的 /64 。
OpenWrt 可以直接把 LAN 的前缀长度设置为 60 。
826540272
2021-02-24 22:01:41 +08:00
@sasalemma 你说的不对,是不是 PD 在 openwrt 界面有显示
826540272
2021-02-24 22:38:00 +08:00
@qbqbqbqb 你的理解不对,光猫获取到的地址和 PD 地址没关系。只是 PD 地址段是通过光猫路由的.
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
2021-03-11 00:05:33 +08:00
呃。似乎 bug,重复了。抱歉。
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
2021-11-14 02:28:30 +08:00
@cwbsw

Openwrt 支持 PD 拆分 在接口设置里手动选择前缀委托长度 可以从 60 开始 61 62 一路套下来 理论上也就是分到 PD/64
但是 Openwrt 这种路由上联和 PD 都是基于 DHCPv6
13 楼说的情况是 PD 委托路由下的设备 用 SLAAC 获取地址会直接快进到 /64
TsukiMori
2021-11-14 02:31:32 +08:00
@sasalemma 主要痛点在于 像 openwrt 这样的路由 wan 口是 DHCPv6 而不是 SLAAC 光猫拿到 /60 的 PD 以后就不管三七二十一都给个 /64 地址 没有给 DHCPv6 客户端继续下发 PD 的余地
我这里甚至还有光猫下发 /128 地址的情况

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/754365

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX