openvpn-将网络流量从特定子网转发到特定的tun接口

openvpn-将网络流量从特定子网转发到特定的tun接口

我正在使用运行 openwrt 的设备(chaos_calmer 15.05)

我正在尝试将网络流量从两个不同的 SSID 转发到两个运行 openvpn 的不同 vps

我的设置只能使用一个 wifi/tun 接口。似乎不可能同时使用两个 VPN(openvpn 客户端)。

我不明白为什么 :/ 我认为这不是一个非常复杂的设置,我希望有人可以在这里帮助我,因为你们是网络专家。

我认为这是路由问题,但我不确定。有人能帮我解决这个问题吗?

为了简化这一点,我的设置如下:

eth0 (internet link) <===== tun0 <==== wifi-A
eth0 (internet link) <===== tun1 <==== wifi-B

请注意以下陈述

  1. 我的 openwrt 设备使用 DHCP 通过 eth0 接口获取互联网链接

  2. 我在 wlan0 接口上创建了一个桥接器,以便能够广播两个 SSID:(wifi-a 和 wifi-b)

  3. 在 wifi-a 上:DHCP 服务器正在运行池 172.17.42.100-200 gw 1​​72.18.42.1

  4. 在 wifi-b 上:DHCP 服务器正在运行池 172.18.42.100-200 gw 1​​72.18.42.1

  5. 我有两个 VPS,安装了 openvpn:PublicIP-1 和 PublicIP-2

  6. 我在我的设备上运行两个 openvpn 客户端到 public-IP-1 (tun0) 和 public-IP-2 (tun1)

  7. 最后,我使用以下 iptables 规则将 wifi-a 子网映射到 tun0,将 wifi-b 子网映射到 tun1:

    iptables -t nat -A POSTROUTING -s 172.17.42.0/24 -o tun0 -j MASQUERADE iptables -A FORWARD -s 172.17.42.0/24 -o tun0 -j ACCEPT iptables -A FORWARD -d 172.17.42.0/24 -m state --state ESTABLISHED,RELATED -i tun0 -j ACCEPT

    iptables -t nat -A POSTROUTING -s 172.18.42.0/24 -o tun1 -j MASQUERADE
    iptables -A FORWARD -s 172.18.42.0/24 -o tun1 -j ACCEPT iptables -A
    FORWARD -d 172.18.42.0/24 -m state --state ESTABLISHED,RELATED -i tun1 -j ACCEPT
    

以下是我的界面详细信息:

eth0 inet 地址:192.168.0.10 Bcast:192.168.0.255 掩码:255.255.255.0

br-wifi-a inet 地址:172.17.42.1 Bcast:172.17.42.255 掩码:255.255.255.0

br-wifi-b inet 地址:172.18.42.1 Bcast:172.18.42.255 掩码:255.255.255.0

tun0 inet 地址:10.8.0.6 PtP:10.8.0.5 掩码:255.255.255.255

tun1 inet 地址:10.9.0.6 PtP:10.9.0.5 掩码:255.255.255.255

我的路线表:

目标网关 Genmask 标志 指标
参考使用 Iface

默认 192.168.0.1 0.0.0.0 UG 0 0 0 eth0

10.8.0.1 10.8.0.5 255.255.255.255 UGH 0 0 0 tun0 10.8.0.5 * 255.255.255.255 UH 0 0 0 tun0 10.9.0.1 10.9.0.5 255.255.255.255 UGH 0 0 0 tun1 10.9.0.5 * 255.255.255.255 UH 0 0 0 tun1

公共IP-1 192.168.0.1 255.255.255.255 UGH 0 0 0 eth0

公共IP-2 192.168.0.1 255.255.255.255 UGH 0 0 0 eth0

172.17.42.0 * 255.255.255.0 U 0 0 0 br-wred

172.22.42.0 * 255.255.255.0 U 0 0 0 br-lan 192.168.0.0 * 255.255.255.0 U 0 0 0 eth0

快速调试:

ping google.com -I tun1 PING google.fr (108.177.119.94): 56 个数据字节 64 个字节来自 108.177.119.94: seq=0 ttl=43 时间=29.665 毫秒

ping google.com -I tun0 PING google.fr (108.177.119.94): 56 个数据字节 64 个字节来自 108.177.119.94: seq=0 ttl=43 时间=30.277 毫秒

ping google.com -I eth0 PING google.fr (108.177.119.94): 56 个数据字节 64 个字节来自 108.177.119.94: seq=0 ttl=42 时间=17.860 毫秒 ^C

你知道我哪里做错了吗?谢谢大家的帮助,


此外,我还尝试了以下操作来为我的 tun 接口添加默认 gw:

echo "1 vpna" >> /etc/iproute2/rt_tables
echo "2 vpnb" >> /etc/iproute2/rt_tables

ip rule add from 10.8.0.0/24 dev tun0 table vpna
ip rule add from 10.9.0.0/24 dev tun1 table vpnb

ip route add default via 10.8.0.5 dev tun0 table vpna
ip route add default via 10.9.0.5 dev tun1 table vpnb

相关内容