//CLOUDFLARE //BING

X-WRT 修复:WAN口有IPv6但LAN设备无法访问IPv6网络

白云2个月前 (10-14)9

前言

最近笔者在咸鱼上购入了5G通讯壳,正好手上有带USB的路由器,于是将其固件替换为 X-WRT,把通讯壳用数据线连接到路由器的USB口以供给网络。IPv4 可正常上网,但 IPv6 存在问题:虽然路由器界面显示 usbwan6 已获取到 IPv6 地址,局域网设备却无法访问 IPv6 网络。排查后发现问题出在路由器配置上。

本文记录解决过程,供遇到同样情况的朋友参考。

问题排查与定位

首先,遇到 IPv6 无法访问,建议先别慌,跟着笔者一步步排查:

  1. 确认 WAN 口 IPv6 状态:进入 网络 → 接口,确保 usbwan6usbwan 显示“已连接”,并且有公网 IPv6 地址(如 2408:xxxx::/64)。

  2. 检查 LAN 设备 IPv6 地址:在电脑或手机上运行 ipconfig /allWindows)或 ifconfig(Linux/Mac),看是否分配到 IPv6 地址和默认网关。

  3. 测试路由器自身 IPv6 联通性:SSH 登录路由器,执行:

    ip -6 route show
    ping6 -c 3 240c::6666

    如果能 ping 通外部 IPv6,说明出口没问题,问题多半在转发或内网配置。

解决方案详解

本次遇到的核心问题其实有四个:

  • 缺少 无条件默认路由(::/0),只有源特定路由,导致部分内网地址无法出网。

  • IPv6 NAT 未启用,内网 ULA 地址无法直接访问公网。

  • 防火墙转发策略过于严格,阻断了 IPv6 流量。

  • LAN 端 RA/DHCPv6 配置不完整,终端无法正确获取 IPv6 信息。

下面分步骤给出修复方法(均为 X-WRT 23.x 测试通过,其他版本大同小异):

1. 添加无条件默认路由

  1. 进入 网络 → 路由 → 静态IPv6路由,点击“添加”。

  2. 接口选 usb0(或 usbwan6),目标填 ::/0,网关填 fe80::xxxx:xxxx:xxxx:xxxx(你的 WAN 链路本地地址,ip -6 route show 可查)。

  3. 保存并应用,回到 网络 → 路由 → IPv6路由,应能看到 ::/0 via fe80::... dev usb0

202510132137499306745.jpg

2. 配置防火墙转发与 NAT

推荐直接在 X-WRT 界面操作:

  • 进入 网络 → 防火墙,将“常规设置 → 转发”改为“接受”。

  • 编辑 WAN 区域,高级设置里勾选“IPv6伪装”。


如果你喜欢命令行,也可以用:

ip6tables -P FORWARD ACCEPT
ip6tables -A FORWARD -i br-lan -o usb0 -j ACCEPT
ip6tables -A FORWARD -i usb0 -o br-lan -m state --state RELATED,ESTABLISHED -j ACCEPT
ip6tables -t nat -A POSTROUTING -o usb0 -j MASQUERADE

(注意:部分 OpenWrt 版本需手动启用 ip6tables -t nat 支持,具体见这篇CSDN教程

3. 完善 LAN 端 IPv6 配置

  1. 进入 网络 → 接口 → LAN → DHCP服务器 → IPv6设置

  2. RA 服务、DHCPv6 服务都选“服务器模式”,通告的 IPv6 DNS 可填 240c::6666 或其他公共 DNS。

  3. 启用本地 IPv6 DNS 服务器,NDP 代理建议禁用。

  4. RA 设置里“默认路由器”选“在可用的前缀上”,“启用SLAAC”为“是”,“RA标记”选“受管配置+其他配置”。

4. 保存并重启服务

  • 每个页面修改后都要点“保存并应用”。

  • 建议最后重启一次路由器,确保所有配置生效。

验证与测试

配置完成后,建议按如下方法分层验证:

路由器层面

# 检查IPv6路由表
ip -6 route show
# 验证IPv6转发状态
cat /proc/sys/net/ipv6/conf/all/forwarding  # 应为1
# 检查NAT规则
ip6tables -t nat -L POSTROUTING -n -v  # 应有MASQUERADE规则
# 测试路由器连接
ping6 -c 3 240c::6666

客户端层面

# Windows
ipconfig /release6 && ipconfig /renew6
ipconfig /all | findstr "IPv6"
ping -6 240c::6666

只要路由器和客户端都能 ping 通外部 IPv6,基本就大功告成啦

常见问题与经验总结

  • 如果还是不通,优先检查路由优先级(源特定路由 metric 512 优先于无条件路由 metric 1024)。

  • 确认 NAT MASQUERADE 规则已生效,ip6tables -t nat -L 能看到。

  • 内核转发要打开,/proc/sys/net/ipv6/conf/all/forwarding=1

  • 客户端一定要获取到正确的 IPv6 地址和默认网关。

  • 网页界面配置一般自动持久化,避免混用命令行和网页配置。

  • 重启后记得再验证一遍所有配置。

参考资料与延伸阅读

结语

IPv6 折腾起来确实有点绕,但只要理清路由、NAT、防火墙和客户端配置这几步,基本都能搞定。希望这篇记录能帮到遇到类似问题的朋友,有问题欢迎评论区交流!

版权声明:本文由BaiYun Blog发布,本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处。

本文链接:http://blog.baiyun.work/?id=22

分享给朋友:

相关文章

网易云网页播放器调用案例

----单曲----代码:<iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width="100%" height="86" src="https://music.163.com/outchain/play…

奇奇怪怪! 一个蛮怪的时间调整软件

奇奇怪怪! 一个蛮怪的时间调整软件

Emm,怎么说呢我们班的希沃教学机关闭不了北京时间同步然后我们学校又从来都不用标准的北京时间所以导致班级里的一体机一直和学校的时间都存在着一个时差于是这个软件就诞生了它会开机启动,同步北京时间后根据设置的时差对系统时间进行调整嗯,大概就是这样一个奇怪的软件了…

原创实用工具-windows系统端口工具

原创实用工具-windows系统端口工具

可能有些时候我们会想要查看一下系统到底开放了哪些端口甚至想看看占用了某一个端口的是那个进程…