使用 ppp 通过 VPN 隧道路由所有数据

使用 ppp 通过 VPN 隧道路由所有数据

我正在尝试创建一个 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..)

相关内容