我有一个VPN,我的服务器频繁地发送数据到私人IP地址,通过VPN路由。 当OpenVPNbuild立或死亡,它启用/禁用路由。
我想通过主要的Internet接口(eth0)将这个私有IP地址范围设置为空路由。 有没有一种简单的方法来做到这一点,而不会干扰来自VPN软件的路由命令?
iptables不会这样做。 我试过了
iptables -A OUTPUT -i eth0 -p tcp -d 192.168.0.0/16 -j REJECT
但是在输出链中指定接口时,iptables不起作用。
任何人都知道是否有一种方法可以将虚拟路由添加到特定的接口(eth0),而不会干扰可能使用该路由的其他接口?
Ps-我知道192.168.0.0/16不是INTERNET可路由的,但是出于安全原因,要确保没有数据在罕见的机会中被其他本地服务器或networking设备开始监听私有子网。
iptables规则中的接口规范是向后的。
你指定了:
iptables -A OUTPUT -i eth0 -p tcp -d 192.168.0.0/16 -j REJECT
使用-i匹配在命名接口上进入系统的stream量。
相反,您希望匹配在命名接口上离开系统的stream量,这是使用-o完成的。
iptables -A OUTPUT -o eth0 -p tcp -d 192.168.0.0/16 -j REJECT
(你可能不希望-p tcp在那里,否则非TCPstream量可能会通过。)
除了Michael的回答之外,我认为应该阻止FORWARD链中的stream量,因为OUTPUT链只适用于本地生成的数据包并从防火墙出去。 据我所知,它不适用于路由包。
你已经得到了你需要用iptables来做的答案。
如果你想要使用路由,一个好的方法是有一个192.168.0.0/16的路由,并让你的VPN服务器发送给你两个更具体的路由,在你的情况下,这两个路由将是192.168.0.0 / 17和192.168.128.0/17
/ 16路由将被固定并且空路由:
ip route add blackhole 192.168.0.0/16
而你的vpn服务器(或者vpn-up脚本)会为你提供其他的:
ip route add 192.168.0.0/17 via <VPNGW> ip route add 192.168.128.0/17 via <VPNGW>
这实际上是OpenVPN中的def1选项覆盖默认网关而不def1现有路由。