Linux,如何强制所有流量通过 VPN 到达特定主机?

Linux,如何强制所有流量通过 VPN 到达特定主机?

我试图确保所有到我们统计服务器的流量都强制通过 VPN,以防 VPN 出现故障,流量不应该尝试通过 WAN 路由。为了缩短 DNS 查找时间,我们在 hosts 文件中列出了主机,但它也会在更广阔的世界中解析。

以下是我们所拥有的:

$ echo "12.23.45.67 the.statsd.server" > /etc/hosts

# From a /etc/ppp/ip-up.d/thevpn (so it's a pptp client script that does this)
route add -host 12.34.45.67 dev ppp0

$ iptables -I INPUT -s  12.23.45.67 -i eth0 -j DROP
$ iptables -I OUTPUT -d 12.23.45.67 -o eth0 -j DROP
$ iptables -I OUTPUT -d 12.23.45.67 -o ppp0 -j ACCEPT

直到 IP 表为止的所有功能都正常,但问题(如果确实是问题的话)是,即使 VPN 已启动,我现在也无法 ping 该主机:

root@li149-82:~# ping the.statsd.server
PING the.statsd.server (12.23.45.67) 56(84) bytes of data.
ping: sendmsg: Operation not permitted
ping: sendmsg: Operation not permitted
ping: sendmsg: Operation not permitted

我对 IP 表不是特别熟练,关键是默认情况下它应该不可能路由到该主机,除非它已经结束ppp0

答案1

在 /etc/hosts 中,您应该输入统计服务器的私有地址,而不是公共地址。路由应该足够了。route add -host PRIVATE_ADDRESS dev ppp0 。使用该配置,.statsd.server 将仅解析为其私有地址,并将通过 ppp0 接口进行路由。不需要 iptables,因为如果 vpn 未启动,服务器将无法通过其私有地址访问。

相关内容