我正在尝试创建一个 VPN 隧道,将所有数据从本地计算机转发到 VPN 服务器。我为此使用了 ppp-2.4.5,配置如下:
pty "pptp <VPNServer> --nolaunchpppd"
name <my login name>
remotename PPTP
usepeerdns
require-mppe-128
file /etc/ppp/options.pptp
persist
maxfail 0
holdoff 5
我在 if-up.d 中有一个脚本,其内容如下:
route del default eth0
route add default dev ppp0
在启动 VPN 隧道之前,我的路由如下所示:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.1 0.0.0.0 UG 2 0 0 eth0
127.0.0.0 127.0.0.1 255.0.0.0 UG 0 0 0 lo
192.168.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
启动隧道(通过 pon)后,它看起来像:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 0.0.0.0 0.0.0.0 U 0 0 0 ppp0
12.34.56.1 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0
127.0.0.0 127.0.0.1 255.0.0.0 UG 0 0 0 lo
192.168.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
现在的问题是,VPN 隧道似乎循环到自身。如果我在几秒钟后运行 ifconfig,没有任何流量:
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.10 netmask 255.255.0.0 broadcast 192.168.255.255
ether 00:01:2e:2f:ff:35 txqueuelen 1000 (Ethernet)
RX packets 39931 bytes 6784614 (6.4 MiB)
RX errors 0 dropped 90 overruns 0 frame 0
TX packets 34980 bytes 7633181 (7.2 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 20 memory 0xfbdc0000-fbde0000
ppp0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1496
inet 12.34.56.78 netmask 255.255.255.255 destination 12.34.56.1
ppp txqueuelen 3 (Point-to-Point Protocol)
RX packets 7 bytes 94 (94.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 782863 bytes 349257986 (333.0 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
它指出已经发送了超过 300 MiB,ppp0 只在线几秒钟并且连接不起作用。
有人能帮我修复路由表,以便来自 ppp0 的流量不会再次通过 ppp0 发送,而是发送到远程服务器吗?
更新
我最终通过创建以下路线解决了这个问题:
route add -host <VPNServer> gw 192.168.0.1
route add -net default gw 12.34.56.1
所以唯一的错误是我混淆了 VPN 连接的端点和 VPN 服务器本身的 IP 地址。
答案1
仅从网络角度来看,您仍然需要一条从 eth0 到 VPN 服务器特定 IP 地址(其外部 IP)的路由。
您可以在启动脚本或 if-up 脚本中添加此路由。当默认路由已经从 eth0 发出时,路由是否存在并不重要。
所有其他数据都应传出 ppp0(然后传出 eth0..)