我试图确保所有到我们统计服务器的流量都强制通过 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 未启动,服务器将无法通过其私有地址访问。