Last Regrets

记录一次软路由故障

· sdttttt

我目前的网关结构是:

本机 → ROS 网关, 然后根据数据包的类型来决定要不要路由到OpenWrt的机器上。

Openwrt主要是作用就是梯子,机器的网络由singbox的TUN全局接管。

一般只有dns请求,以及非国内IP还有FakeIP会被路由到Wrt上。

其他IP 一律直连。


一晚上还是没弄好,明天再检查。


昨天升级固件之后了之后发现梯子网络出现了故障,经过我一番检修,具体情况:

  • 节点测速正常
  • 国内网络访问正常
  • 国外网络访问出现断断续续的问题,有时能打开有时打不开
  • IPv6以及IPv4连接正常
  • TG之类的IP直连不需要DNS解析的软件不受影响

又经过我一番检修(一晚上+一上午+一下午),大概确认了问题:

  • 目标地址为IPv6的DNS请求无法被正确劫持到Wrt上
  • 局域网内机器关闭IPv6之后就能正常访问国内外网

很神奇,我的配置从来没变过,也就是说这个问题一直存在,IPv6的DNS请求就从来没正确被劫持过。

以前的固件预计是按照默认DNS请求方式使用IPv4作为主要网络层协议。现在升级固件之后突然变成IPv6了。


我的ROS并不是通过防火墙NAT来劫持DNS的,而是通过防火墙标记+策略路由的方式来进行DNS劫持。

不过看起来我的IPv6策略路由没有排上用场,IPv4倒是可以正常工作。


查了很多IPv6和ROS的资料,还是不清楚为什么策略路由不生效。


没办法了,目前只能把IPv6的DNS请求直接在ROS上丢弃掉,这样客户端就会尝试使用IPv4,难受啊。


今天解决了IPv6的路由问题:

原因是我在IPv6和v4上用的是同一个路由表名,之后把名字换了就好了。

但是这很奇怪,因为IPv6和v4的Routing是完全分开的,虽然表名相同,但是内部指向的路由规则却完全不同。

我只能将这个理解为ROS的独特设计…


过了几个星期,IPv6的转发情况还是不太稳定,有时能用,有时不能用.