-
Notifications
You must be signed in to change notification settings - Fork 508
OpenWrt IPv6 设置方案
让你优雅的使用 OpenWrt 的 IPv6 功能。
本方案设置以 OpenWrt 主路由拨号环境设置。
-
不提供旁路由的任何设置方案
-
强烈建议使用主路由环境,抛弃旁路由。旁路由出问题自己想办法,谁教你用旁路由的你去找谁,不要提问。
具体原因见:关于旁路由的一些吐槽
至于二级路由,网上教程很多,我自己没有这样的使用环境,所以也不提供任何设置方案,请自行百度。
现在三大运行商的家宽基本都提供 IPv6 地址,首先确定你的宽带能够获得 IPv6-PD 地址才能适用本方案。如果不能的话,暂时请寻求其他的解决方案。日后我会更新无 PD 地址的设置方案。
由于 OpenWrt 和 Lean's Lede 的设置界面不同,两种固件都提供了相应的截图,请根据你的设置界面在下方方案中找对应的设置。
本人使用的是 ImmortalWrt 的 SNAPSHOT 版本,OpenWrt 设置同理
- 关闭 Dnsmasq 的
“过滤 IPv6 AAAA 记录”
功能。
如果不关闭此项,Dnsmasq 解析的地址中不会返回 IPv6 地址,也就无法访问 IPv6 网站。
WAN 口方法分为,自动创建和手动创建,请二选一
即可。
- 自动创建
没什么特别的要求用自动创建就行。
-
不需要新建 WAN6,已有的 WAN6 接口要删除。
-
在 WAN 口的高级设置中,开启 IPv6 的选项,并勾选使用运行商通告的 DNS。
-
禁用
IPv6 分配长度
。 -
启用
委托 IPv6 前缀
(启用的话 lan 是没有 IPv6 地址的)。 -
IPv6 首选项
不要填,填了会获取不到地址的。 -
按图设置。
- 在
WAN 接口
的DHCP
中检查设置,确保DHCP > IPv6 设置
已经关闭
-
保存并应用设置后,你的接口界面中应该会出现一个虚拟的 wan_6接口。注意此接口是无法编辑设置的。
-
确认红框中的
IPv6-PD
地址,获取到了这个地址才能进行下一步操作。
- 手动创建
禁用以下选项:
WAN > 高级设置 > 获取 IPv6 地址
WAN > 高级设置 > IPv6 源路由
WAN > 高级设置 > 委托 IPv6 前缀
WAN > 高级设置 > IPv6 分配长度
在 OpenWrt > 网络 > 接口
界面,新建一个接口,并命名为 WAN6
按照图中内容对 WAN6
接口进行配置
保存并应用配置后,检查 WAN6 接口是否取得了 IPv6-PD
地址。
如果你没有 PD 地址,说明你的 PD 地址被上一级路由占用了,或者干脆你的运行商没给。
如果是前者,不适用本方案。如果是后者,直接打你光猫上的电话联系运维师傅(不要打 10000 号等电话,浪费时间),和运维师傅确认宽带是否能提供 IPv6-PD 地址,以及你的光猫桥接设置中是否选择了 IPv4&IPv6(有些师傅会只设置 IPv4)。
完成 WAN 设置后,接着进行 LAN 设置。
-
“委托 IPv6 前缀”
允许下级设备再划分子网,按需勾选。
接着设置 LAN 口的 IPv6 网络地址分配服务,让局域网设备可以取得 IPv6 地址。
需要说明的是,IPv6 地址由前缀和后缀组成,前缀由运营商下发,后缀有两种获取 IP 的方式:
-
1、SLAAC(无状态):后缀由局域网设备自身生成。
所有类型的设备都支持该功能。 -
2、DHCPv6(有状态):后缀由 OpenWrt 统一管理。
安卓设备以及其他的一些设备不支持该功能。
所以此处关闭 DHCPv6,启用 SLACC,并使用 eui64
参数来启用 EUI-64 网络地址分配方式,从而形成固定 IP。
这里参考了如下设置:immortalwrt/user-FAQ/如何优雅的使用IPV6?
在 LAN > 高级设置 > IPv6 后缀
中填入 eui64
EUI-64 可以让设备的后缀地址由 MAC 地址生成,因此可以生成唯一的后缀。
EUI-64 网络地址分配方式的技术解释可以看 ImmortalWrt 仓库的文档:immortalwrt/user-FAQ/关于eui64的一些说明
同时我们需要禁止 OpenWrt 通告 IPv6 地址的 DNS,因为设备只需要 OpenWrt 的 IPv4 DNS 地址即可实现 IPv6 解析。
强迫下游设备使用 OpenWrt 的 IPv4 地址(比如192.168.1.1)来解析包括 IPv6 域名在内的全部域名,可以避免很多问题。
如此设置之后,局域网支持 IPv6 的设备都将获得一个固定且唯一的 IPv6 地址,并且 IPv6 DNS 为空。
访问 IPv6 测试网站来验证设置是否正确:
正常情况下,会取得全部通过的结果
至此,OpenWrt 的 IPv6 功能设置完毕。
手头所有设备目前均不再使用 Lean's LEDE 源码固件,单纯是因为个人更喜欢官方版和 ImmortalWrt,所以以后也不会有 LEDE 的设置方案。
请自行摸索相关设置,设置内容相似。
图片仅供参考
首先明确一点,你的下游设备取得的都是公网 IPv6 地址,因此此处实际上并不需要“端口转发”功能,只需要设置对应的防火墙规则,即可实现和 IPv4 的端口转发一样的使用效果。
虽然局域网内设备取得了 IPv6 公网地址,但是你会发现从公网虽然可以 ping 通这些地址,但是并不能直接访问这些地址的端口服务。
原因在于 OpenWrt 的防火墙规则默认放行转发给下游设备的 IPv6 的 ICMP 数据包,但是并没有对其他的数据进行放行。这是一种安全的设定,可以避免下游设备在取得 IPv6 公网地址后不安全的暴露于公网环境中。
如果你需要从公网访问 OpenWrt 的下游设备的 IPv6 地址的特定端口(比如群晖的5000端口),则需要建立相应的防火墙通信规则,对特定地址和端口进行放行。
具体设置参考:immortalwrt/user-FAQ/IPV6如何正确配置端口转发?
注意填写地址部分,只需要填写设备的 IPv6 地址的后16位,也就是 MAC 生成的部分,这样防火墙规则会按照地址后缀去匹配设备,无需担心运营商下发的地址前缀变动。而地址后缀是根据 MAC 生成的固定后缀。
需要说明一点,能否解析 IPv6 的 AAAA 地址并不取决于服务器自身是否有 IPv6 地址。
比如当你的 OpenWrt 的上游 DNS 服务器提供 IPv6 域名解析时,你的 OpenWrt 的 Dnsmasq 就可以提供 IPv6 域名的解析服务,这和你通过 IPv4 还是 IPv6 去请求 Dnsmasq 解析是无关的,即便你使用路由器的 IPv4 地址去请求域名解析,一样可以取得 IPv6 结果。
也就是说,当 OpenWrt 作为你的 DNS 服务器时,只要你的局域网设备获得了 IPv6 地址并且可以正常访问 IPv6 网络,即使局域网设备只取得了 IPv4 的 DNS 地址(比如 192.168.1.1),仍然可以通过 IPv4 的 DNS(192.168.1.1)去解析获得 AAAA 记录从而正常访问 IPv6 网站。
在我实际使用的过程中,Win11 就会偶尔出现可以 ping 通 OpenWrt 的 IPv4 局域网地址(192.168.1.1)但是无法 ping 通 OpenWrt 的 IPv6 ULA 地址(fda6:xxxx:xxxx::1)的情况,此时只要取消“本地 IPv6 DNS 服务器”勾选,并在“RA 标记”中取消“其他配置”的勾选,即让 OpenWrt 不再向 Win11 通告 IPv6 DNS 地址,从而强迫系统以 IPv4 DNS(192.168.1.1)来解析 IPv6 网站的域名来正常进行访问。
有点拗口是不是,那么无脑按照图中内容设置即可。
一句话解释:
你可以直接使用 IPv4 DNS (比如路由本身的192.168.1.1)来取得 IPv6 解析结果,不需要去折腾 IPv6 相关的 DNS 设置,让 OpenWrt 不要向下游设备通告 IPv6 DNS 地址即可,可以避免很多问题
讲解本项目相关的 OpenClash 设置方法。
讲解如何设置并优雅的使用 OpenWrt 的 IPv6 功能。
讲解如何使 OpenClash 和 Dnsmasq 搭配实现无需第三方插件参与的广告拦截设置方法。
工作不正常?各种问题疑惑看这里
QNMD 旁路由!