OpenWrt二级路由器分配公网IPV6地址

在不动(带路由功能的)光猫拨号的情况下,如何使得后面接入的 OpenWrt 二级路由及其下的设备拿到公网 IPv6 地址呢?

为什么会有这种奇怪的需求

前提条件

和不认识的人合租,为了保证其他人的正常使用,没事儿不要去动猫,更不可能像自己家一样猫改桥接用路由器拨号。

猫坏了上不了网,那是大家的事,若是改桥接后上不了网,就是拨号路由器机主的事,不利于邻里关系。

客观需要

我有一些内网的 Docker 机器,安装了 PT 软件等需要公网 IP 的服务,为了提高可连接性,每个设备一个公网 IP 还是很有必要的,不管是 IPv4 还是 IPv6。

技术分析

运营商一般会分配一个公网 IPv6 网段(链路前缀),本地网关(一级路由)开启 DHCP-PD 后,就可以给设备派发公网地址。

普通路由拿到了前缀,会将其作为 /64 子网使用(不能再分子网),通过 DHCP-PD 协议,其下每个设备都能得到一个公网 IPv6 地址。

关于前缀子网的详细解释:https://zhuanlan.zhihu.com/p/362151770

由于已经是 /64 不能再分子网了,所以二级路由没有机会得到一个公网 IPv6 网段,因此只有路由 WAN 口能得到一个公网地址,其下设备拿到的都是本地链路地址(fe80 等),路由器不会将这种地址的数据转发到外部去。

解决方法一:路由器当交换机(不推荐)

路由器关闭 LAN 口的 DHCP 功能,之后将猫后面的 LAN 口接到路由器 LAN 口上,路由器其他 LAN 口接设备,这样设备 IP 就由猫(的路由功能)分配,自然就能获取到公网 IPv6 地址。

上述做法的技术细节参见大学的《计算机网络》课本,简略点来说就是路由器几个 LAN 口默认互通,设备都接 LAN 口的话路由器相当于交换机,客户机能与猫(上的路由)相互通讯,二者自然就能收发 DHCP 报文,完成 IP 分配与数据传输。

此方法简单易操作,但极度依赖猫的稳定性与性能,一旦猫挂掉,你的设备就互相失联了。同时,你还会浪费一个宝贵的全速 LAN 口,得不偿失。

解决方法二:OpenWrt IPv6 中继

本方法通过中继的方式,直接将一级路由的 IPv6 PD 中继给下级,使得设备可以获取公网 IPv6 地址。虽然本方法也依赖猫的稳定性,但只有 IPv6 依赖它,因此即使猫挂了,同一内网中的 IPv4 还是能互相访问。

当然这也造成了一个问题:IPv6 和 IPv4 产生割裂。IPv6 设备在一级路由处同级,而 IPv4 却在二级路由处同级,访问权限不统一,前文知乎文章中也提到了这一点。

步骤1:修改 WAN 口配置

首先检查 OpenWrt 的“WAN6” 是否处于 DHCPv6 客户端模型下,如图所示:

小知识:WAN6 和 WAN 默认情况下是同一个物理接口

之后切换到“WAN”设置界面,将 WAN 的协议修改为静态地址,并根据情况手动设置相关 IPv4 参数(与之前猫路由功能自动分配的 IP 相同即可)。

当 WAN 协议修改为静态地址后,同页面最下面将出现”IPv6″设置,请将其“路由通告模式”、“DHCPv6服务”、“NDP代理”均设置为“中继模式”,如下图所示:

至于 WAN 接口其他选项,保持默认即可。修改完成后,点击保存并应用。

步骤2:修改 LAN 口配置

提醒:此步骤可能导致路由器重启,若更改了 LAN 口 IP 地址,则后续需要使用新的 IP 地址登录路由器。

LAN 口设置与 WAN 口设置相似,即协议修改为静态地址后,其下 DHCP 服务器 IPv6 设置中的“路由通告模式”、“DHCPv6服务”、“NDP代理”均设置为“中继模式”。

修改完成后,点击保存并应用。

步骤3:修改 IPv6 ULA 前缀

接口列表页面,在页面下部的全局网络选项/IPv6 ULA 前缀处,将默认值全部删掉留空。

删除后,点击保存并应用。

步骤4:修改网络配置

使用 ssh 连接到 Dropbear 插件提供的 ssh 远端(几乎所有 OpenWrt 固件都安装了此插件):

#@后是路由器 LAN 口地址
ssh root@192.168.3.1

输入 root 密码(同网页登录密码),即可成功连接 ssh,如下图所示:

使用 vim 打开 /etc/config/dhcp 文件:

vim /etc/config/dhcp

打开后,找到 dhcp ‘wan’ 配置,在其下多加一行:

option master '1'

加完的效果参考下图:

保存后,回到路由器管理网页上,随意找一个保存并应用按钮,点击使其生效。

步骤5:放开 IPv6 DNS 解析

在 PC控制面板\网络和 Internet\网络连接处,右键网卡禁用,再启用,如果得法,使用 ipconfig 命令,可以发现 PC 已经获取到了公网 IPv6 地址:

但当你兴冲冲打开 test-ipv6.com 时,却发现得分为 0,显示无 IPv6 地址:

明明有了 IPv6 地址,为啥还连接不上呢?此时请检查路由器网络\DHCP/DNS\高级设置中,是否勾选了禁止解析 IPv6 DNS 记录,许多固件在默认情况下,会勾选此项,换取网站打开速度的提升(某些设备优先 IPv6 解析,等待 IPv6 解析失败,之后才去解析 IPv4)。

想要通过 test-ipv6 网站的测试,请务必取消勾选此项:

之后点击“保存并应用”按钮即可。

方法三:继续划分子网或 NAT6

如果运营商分配的不是 /64 前缀,且你的猫也支持修改配置,则可各级路由继续划分子网,过程参考本文开头引用的知乎文章:IPV6 DHCPv6-PD 前缀子网简单拆解

考虑到操作难度和猫隔段时间强制重新拨号换 IP的特性,家庭环境意义不大。

至于 NAT6,太乱了,算了吧。

结尾

说句题外话,本人用的路由器为 K2p,前前后后刷了好几个固件,这些固件都自称什么漂亮主题最新内核自动编译纯净独创功能等等,结果没一个稳定的,动不动就是网络断开、路由器卡死等等。

后来换成了一个恩山老用户做的 OpenWrt 的固件,虽然很久没更新过了,但该有的软件包一个不少,并且跑起来那叫一个稳定。

看来固件这玩意,不是描述字数多、用户评分高,就一定好用。真正哪个好用,还是要自己试一试。

当然,我自己也没编译过 OpenWrt 固件,可能也没资格点评别人。

梓喵出没博客(azimiao.com)版权所有,转载请注明链接:https://www.azimiao.com/8523.html
欢迎加入梓喵出没博客交流群:313732000

我来吐槽

*

*