configuration一个路由表,通过VPN连接仅路由一个(或一系列的IP)

这是我的家庭networkingconfiguration:

设备/ PC /智能手机—> DD-WRT路由器—>互联网路由器—>互联网/世界

我想configurationDD WRT闪存路由器与运行的PPTP VPN客户端。 PPTP VPN虚拟设备被称为ppp0

然后 :

  • 所有从192.168.1.40到192.168.1.50的IP都通过Vpn(所以通过ppp0接口和ppp0网关)
  • 所有其他ip使用默认的lan网关(所以,不使用vpn)

当我在DD WRT上启动VPN客户端时,我的路由表是

0.0.0.0 via 192.168.1.254 dev eth0 default via 192.168.120.10 dev ppp0 scope link 8.8.8.8 via 192.168.1.254 dev eth0 62.101.93.101 via 192.168.1.254 dev eth0 127.0.0.0/8 dev lo scope link 169.254.0.0/16 dev br0 proto kernel scope link src 169.254.255.1 192.168.1.0/24 dev br0 proto kernel scope link src 192.168.1.1 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.132 192.168.1.254 via 192.168.1.254 dev eth0 192.168.120.10 dev ppp0 scope link 

现在,我想我必须replace

  • 默认通过192.168.120.10 dev ppp0

  • 默认通过192.168.1.254 dev eth0

所以所有的IP通过标准的互联网网关(没有PPTP的VPN)…然后添加一个规则

  • 192.168.1.40通过192.168.120.10 dev ppp0

只允许ip 192.168.1.40使用PPTP退出。

但是,它不工作!

所以我最后的问题是:

  • 如何configuration我的路由器路由所有IP通过默认的互联网网关(192.168.1.254),并且只有一个IP(或一系列IP)使用pptp VPN连接退出?

非常感谢!

networking路由不考虑源IP地址,只考虑目的IP地址。 这就好像在说“如果有人想去networking1.2.3.4,使用192.168.1.xx作为网关”。

你想要做的是说:“来自这个IP地址的stream量通过这个特定的网关去互联网”。

这稍微复杂一些。 Linux中的标准解决scheme是使用iproute2软件包的function。

  1. 在替代表ip route add table 55 default via 192.168.20.10 dev ppp0创build一个新的默认路由
  2. 标记要路由的stream量iptables -t mangle -I PREROUTING 1 -s 192.168.1.40 -j MARK --set-mark 55
  3. 创build一个规则,使标记为55的stream量通过表55 ip rule add fwmark 55 table 55路由

此时,如果在接口ppp0上运行tcpdump,并从192.168.1.40设备发送一些stream量,则应该会看到一些stream量。

现在你可能会有两个问题:

  1. NAT:很可能你必须添加一个nat规则,以便通过ppp0接口传出的stream量与接口ip地址
  2. 碎片:你的ppp0接口可能有一个比你eth0接口的mtu小的MTU,所以你必须安装TCPMSS规则来把stream量限制在1300到1400之间