跳转到内容
严选跨境网络服务与流媒体推荐
实机测速保障 · 专属折扣
声明:以上服务由影迷漫游评测实验室进行晚高峰抽测与流媒体解锁验证。专属链接包含推广支持,不增加您的购买成本。

OpenWrt 关闭 IPv6:先想清楚要不要关,再按层级关干净 ​

网上不少教程把「关掉 IPv6」写成装完 OpenWrt 的默认动作,仿佛不开双栈就亏了。实际上对绝大多数家庭网络来说,IPv4 与 IPv6 双栈并行才是常态,路由器出厂默认开启也是这个道理。真正值得动手关闭的,是下面几种能明确认定问题出在 IPv6 身上的场景。先对号入座,再决定要不要往下做;如果只是听说关了能「提速」,这篇文章更建议你先跳到验证一节,量一下自己的网络到底有没有 IPv6 相关的问题。

什么情况下关,什么情况下别关 ​

关了有实际收益的场景:

  • 代理流量被 IPv6 绕过去。 这是最常见、也最正当的理由。旁路由或网关上跑了分流代理,只处理了 IPv4 流量,终端却优先用 IPv6 直连出去,结果该走代理的流量全部裸奔,表现为解锁失效、区域判断错误,甚至在你以为受保护时暴露真实出口。分流规则只覆盖一栈,另一栈就是缺口。
  • 双栈分流行为不一致。 同一域名,A 记录走代理、AAAA 记录走直连,应用自己挑哪个用哪个,故障现象飘忽不定,今天正常明天抽风,排查成本极高。先关掉一栈把变量减半,是合理的排障手段。
  • 运营商 IPv6 质量确实差。 有的地区 IPv6 前缀下发不稳定、隔几天变一次,或者 v6 线路绕路严重,终端又偏偏优先选 v6,于是出现间歇性卡顿、部分网站打开一半。这种锅在运营商一侧,本地能做的止损就是暂时回到纯 IPv4。
  • 隔离变量做诊断。 怀疑某个问题与 IPv6 有关时,临时关闭来对照,是标准的排除法。前提是关之前留好备份,测完能原样恢复。

不该关、或者关了也没用的场景:

  • 网络一切正常,只是想「优化」。双栈的额外开销在现代路由器上小到可以忽略,为了想象中的性能去动协议栈,收益约等于零,还平白丢掉 IPv6-only 资源的可达性。
  • 你需要访问纯 IPv6 的服务或设备,比如某些校园网、科研网资源,或者家里有依赖 IPv6 的物联网设备。
  • 问题其实不在路由器这一层。比如客户端的地址是光猫下发的,你在 OpenWrt 上关得再干净也没用,该先处理的是上级设备或改桥接。

动手前,先确认问题真出在 IPv6 上 ​

关 IPv6 是手段不是目的,误诊的代价是问题没解决、双栈倒丢了。花五分钟做三个对照测试,能确认大半:第一,在出问题的终端上临时禁用 IPv6(系统网络设置里关掉即可),故障消失再恢复后又出现,基本可以锁定;第二,同一台终端,分别用 IPv4 与 IPv6 去 ping 同一个双栈站点的两个地址,对比延迟与丢包,哪一栈明显更差一目了然;第三,如果是代理场景,直接查代理服务端的连接日志,看问题连接的出口地址是 v4 还是 v6,泄露路径往往当场现形。三个测试都指向 IPv6,再往下走;若结果互相矛盾,先按普通网络故障排查,别急着动协议栈。

结论先行:关闭 IPv6 是一种特定场景下的取舍,不是普适优化。下面按层级给出完整操作,每一层都说清它管什么、漏掉会怎样,方便你只关自己需要的那几层。

先分清四个层级:IPv6 是从哪几条路进来的 ​

很多人「关了又没关干净」,根源是把 IPv6 当成一个总开关,其实它至少从四条路径进入你的网络,互不隶属:

层级管什么关不干净的表现
WAN 获取层路由器自己向运营商要不要 IPv6 地址和前缀(DHCPv6 客户端、wan6 接口)路由器自身还有公网 v6 地址,上游照样能进来
LAN 分发层路由器给内网设备发地址和路由(RA 通告、DHCPv6 服务、NDP)终端仍能拿到 v6 地址并自行出网
DNS 层解析时返不返回 AAAA 记录地址没了,但应用仍在尝试 v6、连接前先超时一轮
内核层系统协议栈本身启不启用 IPv6最彻底的一层,前三层没处理干净时兜底

四层的关系是:WAN 层决定「有没有货进来」,LAN 层决定「分不分给终端」,DNS 层决定「终端知不知道有这条路」,内核层是总闸。想实现代理不泄露,关键在 LAN 层加 DNS 层;想彻底纯 IPv4 运行,四层都要处理。下面主线两个层级都覆盖到,并标注每步属于哪一层。

另外两个容易被单独遗漏的点:ULA 前缀是路由器给内网预留的本地 v6 地址段,清掉它内网才不会再冒出 fd00:: 开头的地址;防火墙里的 IPv6 规则在协议栈关闭后其实已无流量可管,逐条禁用属于洁癖而非必需,本文只在最后提一句,不列为必做项。

四层不必总是全关,按你的场景对照着选,改动越小越好恢复:

你的场景关哪几层说明
只防代理泄露LAN 分发层 + DNS 层终端拿不到 v6、解析不到 AAAA,流量自然全走 v4 代理;路由器自身保留 v6 不影响内网
分流规则打架、先减半变量排障LAN 分发层 + DNS 层同上,查清问题后再决定恢复还是长期保持
运营商 v6 线路质量差WAN 获取层 + LAN 分发层源头不再引入劣质 v6,DNS 层可留着,省得日后恢复时多改一处
要纯 IPv4 环境做测试四层全关内核层兜底,验证标准也最严,测完按恢复步骤整包还原

拿不准就从改动最小的组合开始,验证有效再考虑要不要扩大范围;一上来四层全关,出了问题反而说不清是哪一层的事。

操作前检查清单 ​

动手前花两分钟过一遍,能避免绝大多数「关完断网来求救」:

操作主线 ​

路线一:Web 界面(适合只关分发、不碰内核) ​

如果你的目的只是让内网终端不再拿到 IPv6(防泄露场景最常用),界面操作处理 WAN 与 LAN 两层就够了:

  1. 网络 → 接口,删除 wan6 接口。这是 WAN 获取层:删掉后路由器不再向运营商请求 v6 地址与前缀委派。
  2. 编辑 WAN 接口,在高级设置里把 IPv6 分配长度 设为禁用、取消勾选 使用内置的 IPv6 管理。

删除 WAN6 接口

  1. 编辑 LAN 接口,进入 DHCP 服务器 → IPv6 设置,把 RA 服务、DHCPv6 服务、NDP 代理 三项全部设为已禁用。这是 LAN 分发层,三项分别管路由通告、地址分配和邻居发现代理,缺关一项,终端都可能从另一条路拿到地址。

禁用 IPv6 服务

  1. 同一页面的高级设置里,同样禁用 IPv6 分配长度 并取消 使用内置的 IPv6 管理,保存。

禁用 IPv6 分配长度

取消内置 IPv6 管理

WAN 接口高级设置

  1. 回到 网络 → 接口,点顶部的 全局网络选项,清空 IPv6 ULA 前缀,保存并应用。这一步最常被漏掉,漏掉的结果是内网设备继续领到 fd00:: 开头的本地地址,看上去像没关干净。

清除 IPv6 ULA 前缀

  1. 防火墙里的 IPv6 规则可关可不关:协议栈和分发都停了之后,这些规则已经没有对应的流量。追求整洁可以到 网络 → 防火墙 → 通信规则 把带 IPv6 字样的规则停用,但别误删 IPv4 规则。

禁用 IPv6 防火墙规则

部分衍生固件在 网络 → DHCP/DNS → 高级设置 里提供 禁止解析 IPv6 DNS 记录 的勾选项,有就勾上,相当于把 DNS 层一并处理;原版 OpenWrt 没有这个图形选项,用下一节的一条命令代替。

启用 IPv6 DNS 过滤

原版 OpenWrt DHCP/DNS 设置

路线二:命令行(四层一次处理完) ​

熟悉 SSH 的话,命令行更稳妥,因为每条命令落在哪一层一目了然。先 ssh root@192.168.1.1 登录,然后按层执行。

第一层,停掉分发服务。 odhcpd 是 OpenWrt 里同时负责 DHCPv6 与 RA 的守护进程,停掉它,LAN 分发层即刻失效:

bash
/etc/init.d/odhcpd disable   # 取消开机自启,重启后不复活
/etc/init.d/odhcpd stop      # 立即停止

第二层,清掉 ULA 前缀并停用 wan6。

bash
uci delete network.globals.ula_prefix
uci set network.wan6.disabled='1'
uci commit network
/etc/init.d/network restart

第三层,DNS 只回 IPv4。 给 dnsmasq 打开 AAAA 过滤后,终端解析域名只拿 A 记录,不再自己去尝试 v6 连接,这对「分流不一致」场景是关键一步:

bash
uci set dhcp.@dnsmasq[0].filter_aaaa='1'
uci commit dhcp
/etc/init.d/dnsmasq restart

第四层,内核总闸(可选,想彻底纯 IPv4 再做)。

bash
cat >> /etc/sysctl.conf <<'EOF'
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
EOF
sysctl -p /etc/sysctl.conf

all 管现有接口,default 管之后新建的接口,两个都写才不会在接口重建后漏网。注意不同固件对 sysctl 配置文件的持久化处理略有差异,以你的 OpenWrt 版本界面与文档为准;执行后用下一节的方法验证,没生效就优先怀疑这一层没被正确加载。

做完建议 reboot 一次,让所有守护进程按新配置冷启动,顺带验证重启后状态不回退。

关完怎么验证:这份清单逐项打勾 ​

「界面上都设成禁用了」不等于终端真的没在用 IPv6。下面五项逐项确认,全过才算关干净:

只关一半:按接口区别对待 ​

全屋一刀切并非唯一选项。OpenWrt 的 RA 与 DHCPv6 是按接口配置的,完全可以只关问题最集中的那一段:比如主网络保持双栈不动,只在给电视盒子、游戏机用的访客网络或某个独立 VLAN 里停掉分发,既止住了泄露又不影响其余设备用 v6;反过来,实验室性质的网段需要纯 v4 做对照测试,也可以只关那一段。做法就是在对应接口的 IPv6 设置里把 RA 与 DHCPv6 设为禁用,其余接口原样保留,ULA 与内核层都不要动。需要注意的是 DNS 层是全局的,filter_aaaa 一开全网生效,想按接口区别对待就别碰这一项,靠各接口的分发开关来控制即可。分段处理的好处是回滚半径小,坏处是配置心智负担更大,家里网段超过三个时,建议在笔记里记清每个网段的当前状态,免得半年后自己都对不上账。

副作用与恢复 ​

先把丑话说在前面:关掉 IPv6 后,纯 v6 的站点和服务直接不可达;少数双栈站点的解析要等 AAAA 过滤生效才恢复利落,个别客户端缓存旧地址,重启网络或清一次 DNS 缓存即可。另外这一步并不带来可感知的性能变化,如果关完发现网速「明显变快」,多半是顺带修好了别的配置,或者只是心理作用,别把结论写成经验传播。

还有几笔账要提前算清。一是远程访问:如果你在用 DDNS 加 IPv6 直连回家里的 NAS 或软路由本身,关掉等于亲手拆了这条路,得先确认有 IPv4 公网地址加端口转发、或内网穿透这类替代通道可用。二是游戏与 P2P:部分主机游戏和下载工具在 IPv6 下的 NAT 类型更友好,关掉后可能退回严格 NAT,联机组队受影响时别往路由器性能上怀疑,先想起这一层。三是手机与物联网设备:少数设备对「Wi-Fi 有 v4 没 v6」无感,少数老设备会反复尝试 v6 而更费电,关后头几天留意一下待机异常的设备。四是前缀相关的自动化脚本:凡是写死了 v6 地址的防火墙脚本、监控探针,关之前先搜出来改掉或停掉,免得它们在关后持续报错刷日志。这四笔账都不构成「不能关」的理由,只是关之前心里要有数,免得把连带变化误判成新故障。

恢复时按层倒序往回开即可,最省事的是整包还原操作前的备份。如果只想手动恢复:

bash
# 恢复内核层:删掉两行 disable 参数并重载
sed -i '/disable_ipv6/d' /etc/sysctl.conf
sysctl -p /etc/sysctl.conf

# 恢复 DNS 层
uci set dhcp.@dnsmasq[0].filter_aaaa='0'
uci commit dhcp
/etc/init.d/dnsmasq restart

# 恢复分发层
/etc/init.d/odhcpd enable
/etc/init.d/odhcpd start

再到界面里恢复 wan6 接口、把 LAN 的 RA 与 DHCPv6 改回服务器模式,并重启一次,最后仍用验证清单确认终端重新拿到 v6 地址。

几个高频翻车点提前说清:关完终端还有 v6 地址,先查光猫是不是源头,其次查是不是终端在用自己缓存的旧租约,断开重连一次即见分晓;关完个别网站变慢,通常是该站点 v6 优先而本地过滤没跟上,确认 filter_aaaa 已生效并重启 dnsmasq;SSH 连不上多半与 IPv6 无关,检查 dropbear 是否被限制了监听接口,用 IPv4 地址直连即可。

IPv6 是互联网的既定方向,今天关它,是为了解决代理泄露、分流打架或运营商质量这些具体问题。问题消失了,或者哪天运营商把 v6 线路修好了,照着恢复步骤开回来就是。把开关握在自己手里、知道每一层在管什么,比长期保持某个「据说更优」的配置重要得多。

IPv6 网络协议概念图

延伸阅读:如果您对 OpenWrt 的其他网络配置感兴趣,可以查看我们的 PPPoE 拨号设置、DDNS 动态域名配置 以及 实时抓包诊断。