成功在校园网环境下配置 OpenWRT IPv6 relay - 网络技术(Networking)版 - 北大未名BBS
返回本版
1
/ 1
跳转

成功在校园网环境下配置 OpenWRT IPv6 relay

[复制链接]
楼主

PisonJay [离线]

PisonJay

该用户不存在
<ASCIIArt> 1楼

众所周知,自从某一次校园网维护之后,有线网 IPv6 地址的分配方式从 SLAAC 改为了 Stateful-DHCPv6,然后 OpenWRT 路由器的 IPv6 relay 功能就都失效了。同学们不得不使用不够优雅的 NAT6 或者桥接等方式来让子网设备获取 IPv6 连接。作为一个略微有技术洁癖的人,NAT6 肯定是不能算 IPv6 的;然而桥接的方式也在更新最新 OpenWRT 系统之后失效。大概是因为最新的 DSA 架构还没有适配 ebtables,导致我想只桥 IPv6 而不桥 IPv4 的需求无法实现。兜兜转转又回到了 relay 的方案上来。


唯一的问题就在于:为什么新环境下 relay 不 work?


要回答这个问题,折腾是必不可少的。但因为在家没有设备,所以带图的探索过程可能要等返校后再给大家展示,这里先把结论抛出来。


OpenWRT 的 DHCPv6 relay 基于 odhcpd 工作,实际上 odhcpd 确实也在工作,然而它发出的 DHCP-RELAY 报文并不被校园网的 DHCP 服务器响应,这是因为 DHCPv6 工作过程中实际上会用到两个组播地址:ALL_DHCPV6_RELAYS "ff02::1:2" 和 ALL_DHCPV6_SERVERS "ff05::1:3"。根据抓包结果显示,一般正常的 DHCP 请求是发到 ALL_DHCPV6_RELAYS 这个地址;但 odhcpd 会把 RELAY 报文发给 ALL_DHCPV6_SERVERS,然而校园网的 DHCP 服务器不响应到 ALL_DHCPV6_SERVERS 的请求,所以无法通过 RELAY 方式获取到 IPv6 地址。


找到了原因,解决方案也好办,把 odhcpd 源码中的 ALL_DHCPV6_SERVERS 改成 ALL_DHCPV6_RELAYS,重新编译安装就好,详情见 https://github.com/PisonJay/odhcpd/commit/e21f861f7736604a1886ac7557d6819610a87f02 这个 commit。


但仅仅这样是不够的,还需要修改一下防火墙,加一条 WAN UDP 547 端口的入站规则。否则你会在抓包的时候看见明明路由器都收到 RELAY-REPLY 了,但不给内网设备发 DHCP-REPLY。


做到这一步内网设备应该就有 IPv6 地址了,但你会发现它无法访问 IPv6 网络,无论 ping 什么 IPv6 互联网地址,都会得到一个 ICMP 错误。这就很搞人心态了,因为去 OpenWRT 里手动添加路由规则也没用,看了几遍 ip6tables 也没发现问题。最后试出来的解决方案是关闭 OpenWRT 的 source routing. (见 https://openwrt.org/docs/guide-user/network/ipv6/ipv6_extras


uci set network.wan6.sourcefilter="0"
uci commit network
/etc/init.d/network restart



然后大家就能快乐地使用 IPv6 啦~

发表于2022-02-02 15:37:36
楼主

PisonJay [离线]

PisonJay

该用户不存在
<ASCIIArt> 2楼

总结步骤:


1. 改代码重装 odhcpd-ipv6only


2. 按照 OpenWRT 的 guide 配好 IPv6 relay

https://openwrt.org/docs/guide-user/network/ipv6/configuration#ipv6_relay


3. 添加 WAN UDP 547 的防火墙入站规则


4. 关闭 source routing


5. 享受 IPv6

PisonJay (PisonJay) 在 ta 的帖子中提到:

众所周知,自从某一次校园网维护之后,有线网 IPv6 地址的分配方式从 SLAAC 改为了 Stateful-DHCPv6,然后 OpenWRT 路由器的 IPv6 relay 功能就都失效了。同学们不得不使用不够优雅的 NAT6 或者桥接等方式来让子网设备获取 IPv6 连接。作为一个略微有技术洁癖的人,NAT6 肯定是不能算 IPv6 的;然而桥接的方式也在更新最新 OpenWRT 系统之后失效。大概是因为最新的 DSA 架构还没有适配 ebtables,导致我想只桥 IPv6 而不桥 IPv4 的需求无法实现。兜兜转转又回到了 relay 的方案上来。

唯一的问题就在于:为什么新环境下 relay 不 work?

要回答这个问题,折腾是必不可少的。但因为在家没有设备,所以带图的探索过程可能要等返校后再给大家展示,这里先把结论抛出来。

……

 最后修改于2022-02-02 15:40:28
  • 发表于2022-02-02 15:38:04
楼主

PisonJay [离线]

PisonJay

该用户不存在
<ASCIIArt> 3楼

可能刚获取到 IPv6 地址的时候还是不能连接到互联网,这是因为 OpenWRT 可能认为该 IP 并不在 lan 口上然后就没有 forward ndp 之类的,可以通过 ip -6 neigh 查看。解决方案是 ping 一下路由器的 IPv6 地址就好。

PisonJay (PisonJay) 在 ta 的帖子中提到:

众所周知,自从某一次校园网维护之后,有线网 IPv6 地址的分配方式从 SLAAC 改为了 Stateful-DHCPv6,然后 OpenWRT 路由器的 IPv6 relay 功能就都失效了。同学们不得不使用不够优雅的 NAT6 或者桥接等方式来让子网设备获取 IPv6 连接。作为一个略微有技术洁癖的人,NAT6 肯定是不能算 IPv6 的;然而桥接的方式也在更新最新 OpenWRT 系统之后失效。大概是因为最新的 DSA 架构还没有适配 ebtables,导致我想只桥 IPv6 而不桥 IPv4 的需求无法实现。兜兜转转又回到了 relay 的方案上来。

唯一的问题就在于:为什么新环境下 relay 不 work?

要回答这个问题,折腾是必不可少的。但因为在家没有设备,所以带图的探索过程可能要等返校后再给大家展示,这里先把结论抛出来。

……

发表于2022-02-02 15:38:37

MGGENG [在线]

MGGENG

1.3一般站友

发帖数:21 原创分:0
<ASCIIArt> 4楼

要重新编译odhcpd么,没有试过,可以直接下ipk么

发表于2022-03-11 16:04:58

conanhohoho [离线]

柯南i

3.8流氓兔

发帖数:1178 原创分:0
<ASCIIArt> 5楼

虽然一知半解,为你点赞!

PisonJay (PisonJay) 在 ta 的帖子中提到:

众所周知,自从某一次校园网维护之后,有线网 IPv6 地址的分配方式从 SLAAC 改为了 Stateful-DHCPv6,然后 OpenWRT 路由器的 IPv6 relay 功能就都失效了。同学们不得不使用不够优雅的 NAT6 或者桥接等方式来让子网设备获取 IPv6 连接。作为一个略微有技术洁癖的人,NAT6 肯定是不能算 IPv6 的;然而桥接的方式也在更新最新 OpenWRT 系统之后失效。大概是因为最新的 DSA 架构还没有适配 ebtables,导致我想只桥 IPv6 而不桥 IPv4 的需求无法实现。兜兜转转又回到了 relay 的方案上来。

唯一的问题就在于:为什么新环境下 relay 不 work?

要回答这个问题,折腾是必不可少的。但因为在家没有设备,所以带图的探索过程可能要等返校后再给大家展示,这里先把结论抛出来。

……

签名档


发表于2022-03-12 22:23:27

leavelet [在线]

m/s

2.2蛋炒饭

发帖数:361 原创分:0
<ASCIIArt> 6楼

原来如此

路由器一直不能获取原生ipv6,只能用nat6又没有解决方案

现在知道怎么办了

可惜寝室路由器是tplink,不太好刷openwrt🌝

PisonJay (PisonJay) 在 ta 的帖子中提到:

众所周知,自从某一次校园网维护之后,有线网 IPv6 地址的分配方式从 SLAAC 改为了 Stateful-DHCPv6,然后 OpenWRT 路由器的 IPv6 relay 功能就都失效了。同学们不得不使用不够优雅的 NAT6 或者桥接等方式来让子网设备获取 IPv6 连接。作为一个略微有技术洁癖的人,NAT6 肯定是不能算 IPv6 的;然而桥接的方式也在更新最新 OpenWRT 系统之后失效。大概是因为最新的 DSA 架构还没有适配 ebtables,导致我想只桥 IPv6 而不桥 IPv4 的需求无法实现。兜兜转转又回到了 relay 的方案上来。

唯一的问题就在于:为什么新环境下 relay 不 work?

要回答这个问题,折腾是必不可少的。但因为在家没有设备,所以带图的探索过程可能要等返校后再给大家展示,这里先把结论抛出来。

……

发表于2022-03-13 14:17:10

LeoH [离线]

AFO!

2.3一般站友

发帖数:19 原创分:0
<ASCIIArt> 7楼

求一个编译重装的教程

PisonJay (PisonJay) 在 ta 的帖子中提到:

众所周知,自从某一次校园网维护之后,有线网 IPv6 地址的分配方式从 SLAAC 改为了 Stateful-DHCPv6,然后 OpenWRT 路由器的 IPv6 relay 功能就都失效了。同学们不得不使用不够优雅的 NAT6 或者桥接等方式来让子网设备获取 IPv6 连接。作为一个略微有技术洁癖的人,NAT6 肯定是不能算 IPv6 的;然而桥接的方式也在更新最新 OpenWRT 系统之后失效。大概是因为最新的 DSA 架构还没有适配 ebtables,导致我想只桥 IPv6 而不桥 IPv4 的需求无法实现。兜兜转转又回到了 relay 的方案上来。

唯一的问题就在于:为什么新环境下 relay 不 work?

要回答这个问题,折腾是必不可少的。但因为在家没有设备,所以带图的探索过程可能要等返校后再给大家展示,这里先把结论抛出来。

……

发表于2022-09-26 00:57:54
返回本版
1
/ 1
跳转

请您先 登录 再进行发帖

快速回复楼主
标题
建议:≤ 24个字
签名档
发布(Ctrl+回车)

您输入的密码有误,请重新输入