目前,我在远程 ubuntu VPS 上设置了 PPTP VPN。我希望某些应用程序使用 VPN 访问互联网(rtorrent、irssi 等)。目前,它的设置如下:
eth0 链路封装:以太网 HWaddr 00:16:3e:94:38:ce inet addr:66.xxx.xxx.xxx Bcast:66.xxx.xxx.xxx 掩码:255.255.255.0
eth1 链路封装:以太网 HWaddr 00:16:3e:d7:58:a1 inet addr:10.2.0.111 Bcast:10.255.255.255 掩码:255.0.0.0
lo 链路封装:本地环回 inet 地址:127.0.0.1 掩码:255.0.0.0
ppp0 链路封装:点对点协议 inet addr:192.168.10.244 PtP:192.168.9.1 掩码:255.255.255.255
本质上,我所看到的这个问题的表现方式是这样的。
当我跑步时
curl --interface eth0 checkip.dyndns.com
我明白了
<html><head><title>Current IP Check</title></head><body>Current IP Address: 66.xxx.xxx.xxx</body></html>
当我跑步的时候
curl --interface ppp0 checkip.dyndns.com
我明白了
<html><head><title>Current IP Check</title></head><body>Current IP Address: 95.xxx.xxx.xxx</body></html>
哪个是对的。
然而,当我跑步时
curl --interface 192.168.10.244 checkip.dyndns.com
它超时了,我什么也没得到。这似乎没有任何意义,因为 192.168.10.244 是 ppp0 的 IP 地址,而且在我看来它应该与上面的命令没有什么不同。我遗漏了什么吗?如果我能让它在 curl 中工作,我也能够让它在 rtorrent 和 irssi 中工作,就像我希望的那样,curl 更容易测试这种事情。有没有好的起点来解决这个问题?
编辑:已修复!以下是我修复的方法。
首先我创建了一个新的路由表:
# echo "200 vpn" >> /etc/iproute2/rt_tables
然后,我创建了一条规则,要求来自我的 ppp0 IP 地址的请求从该新表中查找
# ip rule add from 192.168.10.244 table 200
然后,我在该表中创建了一条规则以使用 ppp0。
# ip route add default dev ppp0 table 200
一切运行正常!现在,当我尝试之前失败的 curl 命令时:
# curl --interface 192.168.10.244 checkip.dyndns.com
<html><head><title>Current IP Check</title></head><body>Current IP Address: 95.xxx.xxx.xxx</body></html>