使用 iptables 路由/NATing 2 VPN

使用 iptables 路由/NATing 2 VPN

这是我的设置:

Internet - router - Unix router - VPN1
                                - VPN2

router: 192.168.2.1/24
Unix router: 192.168.2.55/24
VPN1: 10.0.1.0/24 (Unix router: 10.0.1.10)
VPN2: 10.0.2.0/24 (Unix router: 10.0.2.10)

无论我尝试什么,我都会不断收到一些数据包在一个 VPN 或另一个 VPN 上被误导,甚至是通过直接连接。我尝试使用 connmark 但没有成功。

我的 Unix 路由器的默认传出连接需要通过直接连接,而不是 VPN。

我还希望能够将一些流量从任一 VPN 定向到我的 Unix 路由器。这就是正确控制反向路径变得复杂的地方。

VPN 服务器是否可以访问 192.168.2.0/24 LAN 并不重要,但如果有的话那就太好了。

iptables任何人都可以使用或为我指出正确的方向吗iproute2

这是我当前使用 OpenVPNiroute选项集的结果:

 # ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 brd 127.255.255.255 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp4s0f0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 00:1b:21:4e:3d:8a brd ff:ff:ff:ff:ff:ff
3: enp4s0f1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 00:1b:21:4e:3d:8b brd ff:ff:ff:ff:ff:ff
4: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
    link/ether 00:23:54:27:2b:c5 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::223:54ff:fe27:2bc5/64 scope link
       valid_lft forever preferred_lft forever
5: br0: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:23:54:27:2b:c5 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.55/24 brd 192.168.2.255 scope global br0
       valid_lft forever preferred_lft forever
    inet6 fe80::223:54ff:fe27:2bc5/64 scope link
       valid_lft forever preferred_lft forever
6: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UNKNOWN group default qlen 1000
    link/ether fe:54:00:7d:a4:f6 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fc54:ff:fe7d:a4f6/64 scope link
       valid_lft forever preferred_lft forever
7: vnet1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UNKNOWN group default qlen 1000
    link/ether fe:54:00:41:24:60 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fc54:ff:fe41:2460/64 scope link
       valid_lft forever preferred_lft forever
18: tun2: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
    link/none
    inet 10.0.2.10 peer 10.0.2.1/32 scope global tun2
       valid_lft forever preferred_lft forever
19: tun1: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
    link/none
    inet 10.0.1.10 peer 10.0.1.1/32 scope global tun1
       valid_lft forever preferred_lft forever

 # ip route
default via 192.168.2.1 dev br0  metric 5
10.0.1.0/24 via 10.0.1.1 dev tun1
10.0.1.0/24 via 10.0.2.1 dev tun2
10.0.1.1 dev tun1  proto kernel  scope link  src 10.0.1.10
10.0.2.0/24 via 10.0.1.1 dev tun1
10.0.2.0/24 via 10.0.2.1 dev tun2
10.0.2.1 dev tun2  proto kernel  scope link  src 10.0.2.10
104.223.87.195 via 192.168.2.1 dev br0
192.168.2.0/24 dev br0  proto kernel  scope link  src 192.168.2.55
204.44.85.107 via 192.168.2.1 dev br0

答案1

首先,我的主要问题是net.ipv4.conf.default.rp_filternet.ipv4.conf.all.rp_filter需要设置为2。查看/etc/sysctl.conf并更改它并用于sysctl -p /etc/sysctl.conf实时应用更改。

也就是说,控制返回流量的完整解决方案是首先跟踪以下连接connmark

iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark
iptables -t mangle -A PREROUTING -m mark ! --mark 0x0 -j ACCEPT
iptables -t mangle -A PREROUTING -i tun1 -j MARK --set-xmark 0x1
iptables -t mangle -A PREROUTING -i tun2 -j MARK --set-xmark 0x2
iptables -t mangle -A POSTROUTING -j CONNMARK --save-mark

然后您需要设置基于策略的路由。您应该定义两个新的路由表,/etc/iproute2/rt_tables例如:

101     VPN1
102     VPN2

然后在每个表中做两个方向的路线。就我而言,我获得的 VPN 客户端 IP 是10.0.1.1010.0.2.10,我的本地网络接口是192.168.2.55。所以我这样做:

ip route add 192.168.2.0/24 via 192.168.2.55 table VPN1
ip route add 192.168.2.0/24 via 192.168.2.55 table VPN2

然后根据标记集设置规则以遵循这些表:

ip rule add fwmark 1 table VPN1
ip rule add fwmark 2 table VPN2

最后,在我的 VPN 中upscript.sh,我设置了默认网关:

ip route add default via 10.0.1.1 table VPN1

.. 对于 VPN1,以及

ip route add default via 10.0.2.1 table VPN2

..对于VPN2。

如果您希望 VPN 服务器能够将流量直接路由到您的 LAN,则需要在 OpenVPN 中使用iroute每台服务器上该客户端的指令 ( ccd/client),并在其配置文件('openvpnserver.conf `)。

现在启动你的VPN,流量应该总是回到它进来的地方,因为它必须这样做。

请注意,可以在 VPN 服务器上进行反向伪装,但这会隐藏源 IP,这是我根本无法接受的。

相关内容