重新路由到vpn的网络流量


1

我有一个ubuntu服务器作为路由器。现在我想通过vpn连接路由来自子网1(192.168.1.0)的所有流量。这只有当我让vpn服务器将路由推送到我的路由器但现在是subnet2(192.168.2.0)并且来自路由器本身的流量也通过vpn进行隧道传输时才有效。

谁能告诉我如何设置路由,以便只有来自subnet1的流量进入vpn连接,来自subnet2和服务器本身的流量直接进入互联网?

没有vpn的路由表:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         31.19.38.254    0.0.0.0         UG    0      0        0 eth0
31.19.38.0      0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.1.0     0.0.0.0         255.255.255.128 U     0      0        0 p1p1
192.168.2.0     0.0.0.0         255.255.255.128 U     0      0        0 p1p2

启用vpn push-gateway

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.9.0.41       128.0.0.0       UG    0      0        0 tun0
0.0.0.0         31.19.38.254    0.0.0.0         UG    0      0        0 eth0
10.9.0.1        10.9.0.41       255.255.255.255 UGH   0      0        0 tun0
10.9.0.41       0.0.0.0         255.255.255.255 UH    0      0        0 tun0
31.19.38.0      0.0.0.0         255.255.255.0   U     0      0        0 eth0
128.0.0.0       10.9.0.41       128.0.0.0       UG    0      0        0 tun0
192.168.1.0     0.0.0.0         255.255.255.128 U     0      0        0 p1p1
192.168.2.0     0.0.0.0         255.255.255.128 U     0      0        0 p1p2
209.95.51.97    31.19.38.254    255.255.255.255 UGH   0      0        0 eth0

接口:

eth0      Link encap:Ethernet  HWaddr d0:50:99:26:c9:62  
          inet addr:31.19.38.94  Bcast:31.19.38.255  Mask:255.255.255.0
          inet6 addr: fe80::d250:99ff:fe26:c962/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

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

p1p1      Link encap:Ethernet  HWaddr 00:15:17:94:4c:16  
          inet addr:192.168.1.1  Bcast:192.168.1.127  Mask:255.255.255.128
          inet6 addr: fe80::215:17ff:fe94:4c16/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

p1p2      Link encap:Ethernet  HWaddr 00:15:17:94:4c:17  
          inet addr:192.168.2.1  Bcast:192.168.2.127  Mask:255.255.255.128
          inet6 addr: fe80::215:17ff:fe94:4c17/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:10.9.0.54  P-t-P:10.9.0.53  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1

哪个子网连接到互联网?
Ramhound

目前192.168.0.0/16被转发到eth0。
Stefan

VPN是在你的内部网还是互联网上?
Ramhound

从这里开始。 lartc.org/howto/lartc.rpdb.multiple-links.html 然后搜索一下,基本上你需要两个路由表,一个是重定向的,一个不是,你需要规则来强制网络使用其中一个。
Zoredache

谢谢,该网站帮了很多忙。所以在我的情况下,我会按原样让标准路由表只删除subnet1的规则并将其添加到新表中?我在哪里必须添加vpn流量通过eth0的规则?很抱歉问了这么多问题。以前从未使用过路由表。
Stefan

Answers:


1

Zoredache让你走在正确的轨道上。答案的细节如下:

  1. 保持VPN原样,这将设置名为的默认路由表 main;

  2. 现在我们为必须的数据包设置第二个路由表 通过VPN传递。我们称之为新的路由表 novpn (不是那里的主要飞行,我同意):

    echo 200 novpn >> /etc/iproute2/rt_tables
    ip route add 31.19.38.0/24 dev eth0 src YourIP table novpn
    ip route add default via 31.19.38.254 table novpn
    ip route add 192.168.1.0/24 dev p1p1 table novpn
    ip route add 192.168.2.0/24 dev p1p2 table novpn
    

    在上面, YourIP 是你的IP地址 eth0 接口。

  3. 现在我们设置规则来区分通过VPN的内容,以及不通内容的内容:

    ip rule add from 192.168.1.0/24 table main
    ip rule add from 192.168.2.0/24 table novpn
    

    请记住使用密钥规则,

    iptables -t nat -A POSTROUTING -j MASQUERADE
    

    并允许ipv4转发,你就完成了。


这最终奏效了。谢谢。我对服务器的流量只有一个小问题。 Sub1使用vpn和子网2不应该,但来自服务器的流量也使用vpn连接。我尝试从127.0.0.1/1表novpn添加ip rule add,但是后来subnet1不使用vpn。
Stefan

这是错误的规则,请删除它。你应该使用 ip rule add from YourIP table novpn。在哪里,再一次, YourIP 是的IP地址 eth0 接口。
MariusMatutiae

我添加了规则但没有改变。
Stefan

@Stefan你应该为这个新规则添加一个更高的优先级(=更低的数字!!!),而不是整个网络的规则,192.168.1.0 / 24。请在这里阅读 superuser.com/questions/359923/...
MariusMatutiae
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.