我有一台 ubuntu 服务器作为路由器。现在我想通过 vpn 连接路由来自子网 1 (192.168.1.0) 的所有流量。这仅在我让 vpn 服务器将路由推送到我的路由器时才有效,但现在子网 2 (192.168.2.0) 和来自路由器本身的流量也通过 vpn 隧道传输。
谁能告诉我如何设置路由,以便只有来自子网 1 的流量进入 vpn 连接,而来自子网 2 和服务器本身的流量直接进入互联网?
无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 推送网关
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
答案1
Zoredache 为您指明了正确的方向。答案的详细信息如下:
保持 VPN 原样,这将设置称为的默认路由表
main
;现在我们设置第二个路由表,用于必须不是通过 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
。现在我们设置规则来区分哪些可以通过 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 转发,您就完成了。