通过 ppp0 启用 Internet 路由

通过 ppp0 启用 Internet 路由

我的服务器上运行着 Debian 8.0.0-64,它eth1作为默认网关的接口。eth0指向内部网络。

root@server:/home/user# ifconfig
eth0      Link encap:Ethernet  HWaddr 06:46:7e:88:72:d7  
          inet addr:10.168.118.205  Bcast:10.168.118.255  Mask:255.255.255.192
          inet6 addr: fe80::446:7eff:fe88:72d7/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:161 errors:0 dropped:0 overruns:0 frame:0
          TX packets:203 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:15215 (14.8 KiB)  TX bytes:79027 (77.1 KiB)

eth1      Link encap:Ethernet  HWaddr 06:70:65:5f:e9:89  
          inet addr:167.41.133.218  Bcast:167.41.133.223  Mask:255.255.255.240
          inet6 addr: fe80::470:65ff:fe5f:e989/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:697 errors:0 dropped:0 overruns:0 frame:0
          TX packets:282 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:46420 (45.3 KiB)  TX bytes:33486 (32.7 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:706 errors:0 dropped:0 overruns:0 frame:0
          TX packets:706 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:86847 (84.8 KiB)  TX bytes:86847 (84.8 KiB)

我按照以下说明设置了 VPN (TotalVPN) 连接: http://pptpclient.sourceforge.net/howto-debian.phtml#configure_by_hand

pon amsterdam实际上可以打开一条隧道:

root@server:/home/user# pon amsterdam

root@server:/home/user# ifconfig
ppp0      Link encap:Point-to-Point Protocol  
          inet addr:10.126.0.29  P-t-P:10.126.0.1  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1496  Metric:1
          RX packets:6 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3 
          RX bytes:60 (60.0 B)  TX bytes:66 (66.0 B)

到目前为止,一切都很好。现在我希望能够ping -I ppp0 google.com通过隧道 ping,例如 google.com ( ),而不失去用作eth1我的默认接口 ( ping google.com) 的可能性。如果有特别要求,即通过定义要使用的接口,我如何设置route或任何需要的东西,以便流量(到互联网)可以通过隧道?ppp0

以下是一些信息(VPN 连接的名称是amsterdam):

root@server:/home/user# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         167.41.133.209  0.0.0.0         UG    0      0        0 eth1
10.0.0.0        10.168.118.193  255.0.0.0       UG    0      0        0 eth0
10.168.118.192  0.0.0.0         255.255.255.192 U     0      0        0 eth0
161.26.0.0      10.168.118.193  255.255.0.0     UG    0      0        0 eth0
167.41.133.208  0.0.0.0         255.255.255.240 U     0      0        0 eth1

root@server:/home/user# pon amsterdam

root@server:/home/user# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0           0.0.0.0         UG    0      0        0 eth1
10.0.0.0        10.168.118.193  255.0.0.0       UG    0      0        0 eth0
10.126.0.1      0.0.0.0         255.255.255.255 UH    0      0        0 ppp0
10.168.118.192  0.0.0.0         255.255.255.192 U     0      0        0 eth0
45.32.239.20    167.41.133.209  255.255.255.255 UGH   0      0        0 eth1
161.26.0.0      10.168.118.193  255.255.0.0     UG    0      0        0 eth0
167.41.133.208  0.0.0.0         255.255.255.240 U     0      0        0 eth1

root@server:/home/user# poff amsterdam

root@server:/home/user# route -n

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         167.41.133.209  0.0.0.0         UG    0      0        0 eth1
10.0.0.0        10.168.118.193  255.0.0.0       UG    0      0        0 eth0
10.168.118.192  0.0.0.0         255.255.255.192 U     0      0        0 eth0
45.32.239.20    167.41.133.209  255.255.255.255 UGH   0      0        0 eth1
161.26.0.0      10.168.118.193  255.255.0.0     UG    0      0        0 eth0
167.41.133.208  0.0.0.0         255.255.255.240 U     0      0        0 eth1

root@server:/home/user# 

我找到了两个解决方案,它们适用于第一个视图,但它们确实不起作用(我不知道为什么)。

  1. 添加route add default metric 10 gw $PPP_REMOTE $PPP_IFNAME向上脚本,或者
  2. 添加defaultroute到pptp配置

在这两种情况下,调用curl --interface ppp0 ifconfig.coas 都root有效并返回 VPN 连接的 IP 地址,但我无法像任何其他非 root 用户一样执行该命令。作为普通用户,该命令curl --interface eth1 ifconfig.co可以正常工作。root

答案1

为了实现我想要实现的目标,我必须做以下事情:

步骤1:安装Debian项目的PPTP客户端程序

步骤 2:设置 PPTP 连接

步骤 3:测试连接

第四步:添加路由

第 5 步:最终检查

对于前三个步骤,我主要遵循http://pptpclient.sourceforge.net/howto-debian.phtml。这样做之后,我发现了这篇很棒的文章(https://www.thomas-krenn.com/en/wiki/Two_Default_Gateways_on_One_System),其中解释了如何添加两个默认网关。第二种网关方法背后的主要思想是创建一个第二个路由表/etc/iproute2/rt_tables(在我的例子中我将其命名为ppp)。完成此操作后,路由将添加到这个新表中并定义规则:

ip route add 10.10.0.0/24 dev eth1 src 10.10.0.10 table ppp
ip route add default via 10.10.0.1 dev eth1 table ppp

ip rule add from 10.10.0.10/32 table ppp
ip rule add to 10.10.0.10/32 table ppp

经过测试,我添加了脚本,以便每当建立VPN连接时都会添加和删除路由,即

ip-up 脚本

#!/bin/sh

if [ "$PPP_IPPARAM" = "amsterdam" ] ; then

  /sbin/ip route add $PPP_LOCAL/24 dev $PPP_IFACE src $PPP_LOCAL table ppp
  /sbin/ip route add default via $PPP_REMOTE dev $PPP_IFACE table ppp

  /sbin/ip rule add from $PPP_LOCAL/32 table ppp
  /sbin/ip rule add to $PPP_LOCAL/32 table ppp
fi

ip-down脚本

#!/bin/sh

if [ "$PPP_IPPARAM" = "amsterdam" ] ; then

  /sbin/ip route del $PPP_LOCAL/24 dev $PPP_IFACE src $PPP_LOCAL table ppp
  /sbin/ip route del default via $PPP_REMOTE dev $PPP_IFACE table ppp

  /sbin/ip rule del from $PPP_LOCAL/32 table ppp
  /sbin/ip rule del to $PPP_LOCAL/32 table ppp
fi

这工作得很好,我可以在需要时选择第二个网关。

答案2

您可以使用route或更新的版本ip route来设置路线:

ip route

显示现有路线,以及

ip route del default via 167.41.133.218
ip route add default via 10.126.0.29

将默认路由 over 替换eth1为路由 overppp0

“如果特别要求”是一个问题 - 您通过目的地地址设置路由,而不是通过程序。因此,如果您知道要通过 联系哪些地址ppp0,则可以将这些地址设置为非默认路由。

或者,您可以使用网络命名空间让一些程序使用不同的网络配置,但这并不容易设置并且有一些陷阱(例如需要不同的resolve.conf)。

答案3

从 ppp0-vpn 访问互联网的简单 bash 脚本

## Instruction to Use
- Once you are connected to ppp0-VPN
- Run this bash script. Command shared below
> chmod +x router-ppp0toint.sh
> ./router-ppp0toint.sh

路由器-ppp0toint.sh

#!/bin/bash

IP=$(ifconfig ppp0 | grep inet | cut -d: -f2 |awk '{print $2}') #IP assigned post connected to ppp0 VPN

echo $IP  #echos ppp0 IP

route del -net 0.0.0.0 gw $IP dev ppp0 

route add -net 172.16.0.0 gw $IP netmask 255.255.0.0 dev ppp0 #add static route

route add -net 192.168.0.0 gw $IP netmask 255.255.0.0 dev ppp0

ppp0-vpn 中互联网的 Github-Bash 脚本

相关内容