Iptables killswitch 正在阻止 .local dns 查找

Iptables killswitch 正在阻止 .local dns 查找

我已将Wireguard 的 killswitch 示例添加到! -d 192.168.0.0/16其中(参见示例):! -d fc00::/7man wg-quick

PostUp = iptables -I OUTPUT ! -d 192.168.0.0/16 ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT
PreDown = ip6tables -I OUTPUT ! -d fc00::/7 ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT

这样,我就可以在 VPN 运行时访问 192.168.XX 网络上的其他主机。但是,它似乎阻止了对诸如 之类的域的 DNS 查找myhost.local。我之所以这么说,是因为我可以连接到 VPN 并仍然 ping myhost.local。运行 VPN 仅几分钟后,ping 就停止工作并报告:ping: myhost.local: Name or service not known。我猜 DNS 缓存已过期。

我的理解是,由于我没有在 iptables 中指定协议(例如-p udp),它应该排除全部REJECT 规则中的协议。

我可以在没有 iptables 和 ip6tables 规则的情况下启动 VPN,并且始终能够解决问题myhost.local

您认为它仍然会根据其他标准拒绝 UDP DNS 查找吗?我该如何调整规则以允许本地 DNS 查找?

答案1

您不小心将 IP4 和 IP6 命令拆分了 - 在您的示例中,这两行都应该是 PostUp 的一部分,中间有 &&,并且您应该有一个相应的 PreDown 来匹配。例如:

PostUp = iptables -I OUTPUT ! -d 192.168.0.0/16 ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT && ip6tables -I OUTPUT ! -d fc00::/7 ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT
PreDown = iptables -D OUTPUT ! -d 192.168.0.0/16 ! -o %i -m mark ! --mark $(wg show  %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT && ip6tables -D OUTPUT ! -d fc00::/7 ! -o %i -m mark ! --mark $(wg show  %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT

相关内容