如何阻止损坏的输出数据包使用默认路由?

如何阻止损坏的输出数据包使用默认路由?

我有一个路由器。它有几个接口。其中之一是 VPN,称为 vpn0,一个是到物理接口的默认路由,称为 out0,还有一个输入接口 in0。

来自 in0 且目标端口为 993 的数据包永远不会放置在 out0 上。我通过这样标记数据包来做到这一点:

iptables -t mangle -A PREROUTING -i in0 -p tcp --dport 993 -j MASK --set-mark 100
iptables -t mangle -A PREROUTING -i in0 -p tcp --dport 993 -j CONNMARK --save-mark

要禁用 out0 上的转发,我执行以下操作:

iptables -A FORWARD -i in0 ! -o vpn0 --match-mark 100 -j DROP -m conntrack --ctstate NEW

我遇到的问题是来自主机的输出数据包。要破坏 vpn0 的数据包,我有以下规则:

iptables -t mangle  -A OUTPUT --protocol tcp --dport 993 --jump MARK --set-mark 100
iptables -t mangle -A OUTPUT --protocol tcp --dport 993 --jump CONNMARK --save-mark
iptables -t mangle -A OUTPUT --protocol tcp --dport 993 --jump RETURN    

效果相当好。仅当 vpn0 不工作时才会发生。我尝试添加规则:

iptables -A OUTPUT --protocol tcp --dport 993 -o out0 --match mark  --mark 100  --jump DROP -m conntrack --ctstate NEW

但这会丢弃会流出 VPN 的数据包。我通过将 DROP 更改为 LOG 来检查这一点,并且输出接口是 out0,而不是 vpn0。

是什么赋予了?

相关内容