IPV6光猫拨号iStoreOS IPv6中继模式,有IPv6地址,ping不通的临时解决方法
设备环境
- 主路由:电信光猫(拨号模式)
- 二级路由:x86软路由刷iStoreOS(22.03.6版本)
- 网络拓扑:光猫 → iStoreOS软路由 → AP无线接入点
故障现象
1. 软路由的WAN口能获取到IPv6地址,但IPv6测试网站显示失败。
2. 局域网设备偶尔能获取IPv6地址,但 ping -6 外网地址不通。
3. 一段时间后IPv6地址失效,需手动重启接口才能恢复。
二、问题分析
经过排查,发现以下关键原因:
1. 中继模式的路由表缺陷
OpenWrt默认的中继模式(Relay)在WAN口获取IPv6地址后,未能正确维护路由表,导致IPv6流量无法正确转发到LAN侧设备。
2. 防火墙拦截关键协议
iStoreOS默认防火墙规则会拦截部分IPv6通信,尤其是ICMPv6协议(如NDP邻居发现、DHCPv6续约请求),导致IPv6地址续约失败。
3. IPv6 ULA前缀干扰
默认开启的IPv6 ULA(私有地址)前缀与公网地址冲突,干扰了中继模式下客户端获取有效路由。
三、解决方案
1. 核心操作:修复路由表
原理
当中继模式获取到WAN口的IPv6地址后,需手动添加一条路由规则,将WAN侧的子网流量重定向到LAN接口。
操作步骤
- 安装依赖包
进入「系统 → 软件包」,搜索安装 owipcalc(用于计算子网)。
- 创建热插拔脚本
将以下脚本保存为 /etc/hotplug.d/iface/80-reset-route6:
#!/bin/sh wan_dev="wan6" [ "$HOTPLUG_TYPE" = "iface" ] || exit 0 [ "$INTERFACE" = "$wan_dev" ] || exit 0 RTMETRIC=127 . /lib/functions/network.sh network_get_physdev lan_dev lan || exit 0 ifup_cb() { local _lan_dev="$1" local _metric="$2" local wan_subnet network_get_subnet6 wan_subnet "$wan_dev" || return _wan_network=$(owipcalc "${wan_subnet}" network) ip -6 route replace "$_wan_network" dev "$_lan_dev" metric "$_metric" } ifdown_cb() { local _lan_dev="$1" local _metric="$2" ip -6 route flush dev "$_lan_dev" metric "$_metric" } case "$ACTION" in ifup) ifup_cb "$lan_dev" "$RTMETRIC" ;; ifdown) ifdown_cb "$lan_dev" "$RTMETRIC" ;; ifupdate) ifdown_cb "$lan_dev" "$RTMETRIC" sleep 1 ifup_cb "$lan_dev" "$RTMETRIC" ;; *) ;; esac exit 0
- 赋予执行权限:chmod +x /etc/hotplug.d/iface/80-reset-route6
- 重启WAN接口生效。
2. 接口配置优化
第一步,先搞定wan6口
1、网络--接口--wan6--编辑
1.1、常规设置
协议:DHCPv6客户端
设备:eth0
开机自动运行:选择
请求IPv6地址:try
请求指定长度的IPv6前缀:自动
1.2、高级设置
强制链路:不选
请求DHCP时发送的客户端ID:空
使用默认网关:选择
自动获取DNS服务器:选择
DNS 权重:空
使用网关跃点:空
覆盖 IPv4 路由表:未指定
覆盖 IPv6 路由表:未指定
IPv6 源路由:选择
委托 IPv6 前缀:选择
IPv6 分配长度:已禁用
IPv6 前缀过滤器:-- 请选择 --
IPv6 后缀:::1
IPv6 优先级:空
1.3、防火墙设置
创建和分配防火墙区域:wan和wan6
1.4、DHCP服务器--常规设置
忽略此接口:不选
1.5、DHCP服务器--IPv6设置
指定的主接口:选择
RA 服务:中继模式
DHCPv6 服务:中继模式
NDP 代理:中继模式
学习路由:选择
第二步,搞定lan口
2、网络--接口--lan--编辑
2.1、常规设置
协议:静态地址
设备:br-lan
开机自动运行:选择
IPv4 地址:192.168.100.1
IPv4 子网掩码:255.255.255.0
IPv4 网关:灰色无法更改
IPv4 广播地址:灰色无法更改
IPv6 地址:空
IPv6 网关:空
IPv6 路由前缀:空
2.2、高级设置
强制链路:选择
使用默认网关:选择
使用自定义的 DNS 服务器:空
DNS 搜索域名:空
DNS 权重:空
使用网关跃点:空
覆盖 IPv4 路由表:未指定
覆盖 IPv6 路由表:未指定
委托 IPv6 前缀:选择
IPv6 分配长度:禁用
IPv6 前缀过滤器:-- 请选择 --
IPv6 后缀:::1
IPv6 优先级:空
2.3、防火墙设置
创建和分配防火墙区域:lan
2.4、DHCP服务器--常规设置
忽略此接口:不选
启动:100
客户数:150
租期:infinite
2.5、DHCP服务器--高级设置
动态 DHCP:选择
强制:不选
IPv4 子网掩码:灰色无法更改
DHCP 选项:空
2.6、DHCP服务器--IPv6设置
指定的主接口:不选
RA 服务:中继模式
DHCPv6 服务:中继模式
NDP 代理:中继模式
学习路由:选择
NDP 代理从属设备:不选
第三步,网络--接口--全局网络选项
IPv6 ULA 前缀:空
数据包引导:选择
3. 防火墙调整
允许DHCPv6通信
- 新增规则:允许LAN侧设备通过UDP 546端口向路由器的547端口发送DHCPv6请求。
ip6tables -I input_rule -i br-lan -p udp --dport 547 -j ACCEPT
放行关键ICMPv6协议
- 在「网络 → 防火墙 → 自定义规则」中添加:
# 允许常见ICMPv6类型(如邻居发现、路由通告)
ip6tables -I forwarding_rule -i br-lan -p ipv6-icmp -m icmp6 --icmpv6-type 134 -j ACCEPT # RA报文 ip6tables -I forwarding_rule -i br-lan -p ipv6-icmp -m icmp6 --icmpv6-type 135 -j ACCEPT # NS报文 ip6tables -I forwarding_rule -i br-lan -p ipv6-icmp -m icmp6 --icmpv6-type 136 -j ACCEPT # NA报文
4. 其他注意事项
- 关闭IPv6 ULA前缀
进入「网络 → 接口 → 全局网络选项」,清空「IPv6 ULA前缀」字段。
- PassWall插件兼容性
若使用PassWall,需勾选「过滤代理域名IPv6」,避免插件劫持IPv6流量。
- 光猫兼容性
部分光猫会限制二级路由的IPv6 PD前缀分配,中继模式是更稳妥的选择。
四、效果验证
1. 执行 ip -6 route show 检查路由表中是否存在指向LAN设备的路由。
2. 局域网设备访问https://test-ipv6.com应显示10/10通过。
3. 执行 ping -6 www.baidu.com 测试持续连通性。
五、总结
中继模式对IPv6的支持依赖路由表与防火墙的精细配置。通过脚本维护路由、放行关键协议、关闭冲突选项,可解决大部分“有地址但无连接”的问题。此方案已在多地电信/联通网络中验证稳定,适合光猫拨号+二级路由的场景。
点击链接加入群聊四群:722808830
点击链接加入群聊三群:751529538(已满)
点击链接加入群聊二群:376877156(已满)
点击链接加入群聊一群:622891808(已满)
饿了么红包
本站附件分享,如果附件失效,可以去找找看