我的 Xbox 在 WiFi 连接的情况下,网关和 DNS 指向了旁路由,但在旁路由的 Adguard Home 里看 DNS 请求,全部都是来自于主路由,就很疑惑……

最后又是问 o1-preview 大师解决了问题(AI 真好

首先确定一下前提,是不是在主路由上被 MASQUERADE 了

iptables -t nat -L -v --line-numbers | grep MASQUERADE

在我这里得到了这种类似的结果:

2 5677K 452M MASQUERADE all -- any any anywhere anywhere /* !fw3 */

问题在于第二个 any,原本是用于指定设备的,现在是 any,导致 LAN 口进去的(Xbox 的 192.168.31.13)被错误的伪装成了 192.168.31.1 然后再发给旁路由 192.168.31.2,导致旁路由上看到的就是主路由的 IP……

这里先删掉这条规则,但首先你得找到他所在的 Chain:

iptables -t nat -L -v --line-numbers

在其中找,看看这条结果在哪,我这边是:

Chain zone_wan_postrouting (1 references)
num   pkts bytes target     prot opt in     out     source               destination         
1    5689K  454M postrouting_wan_rule  all  --  any    any     anywhere             anywhere             /* !fw3: Custom wan postrouting rule chain */
2    5689K  454M MASQUERADE  all  --  any    any     anywhere             anywhere             /* !fw3 */

删掉他:

iptables -t nat -D zone_wan_postrouting 2

这里的 2 是行号,具体根据上一个指令中,MASQUERADE 最前面的那个序号来改

然后重新添加新的规则:

iptables -t nat -A zone_wan_postrouting -o eth1 -j MASQUERADE

这里 eth1 是我的 WAN 接口,如果有疑惑可以用以下方式查看:

cat /etc/config/network

找到 config interface 'wan',看看 option ifname 对应的值