liandu2024:Open-Box 修复 GL.iNet 断网保护与 TUN 标记冲突
liandu2024 在 Open-Box #157 中说明,sing-box 为跳过 TUN 设置的 0x2024 标记仍会继续匹配 GL.iNet 的 VPN 断网保护黑洞规则,导致内核自身的直连和代理连接全部报 no route to host。临时可关闭 VPN 策略路由或断网保护;Open-Box v0.1.230 起会在更高优先级让该标记查询主路由表,并在停内核时撤销规则。
作者原文@liandu2024找到原因了,你贴的
ip rule就是答案:9000: from all fwmark 0x2024 goto 9002 ← sing-box 装的"跳过 tun" 9002: from all nop 9910: not from all fwmark 0/0xf000 blackhole ← GL.iNet 的 VPN 断网保护 9920: from all iif br-lan blackhole内核自己发出去的流量会打上
0x2024这个标记,好让策略路由跳过 tun。但 sing-box 装的那条是goto一个空规则(9002 nop),查找不终止 —— 接着就撞上你固件的 9910:0x2024 & 0xf000 = 0x2000 ≠ 0,正好命中,整包丢弃。所以日志里直连和代理全部connect: no route to host,连国内 IP 直连都不通。两个办法:
1. 立刻能用:在 GL.iNet 后台关掉 VPN 策略路由 / 断网保护(Kill Switch),9910、9920 这两条就没了。临时验证可以直接:
ip rule del pref 9910(重启会回来。)
2. 升级到 v0.1.230 及以上:我们在内核启动时补了一条优先级更高的规则,让带这个标记的流量查到主路由表为止,到不了后面的黑洞:
8999: from all fwmark 0x2024 lookup main停内核时会自己撤掉,普通固件上行为不变。
升级后如果还不通,把新的
ip rule和logread -e sing-box | tail -n 40贴上来。