![openvpn-将网络流量从特定子网转发到特定的tun接口](https://linux22.com/image/710946/openvpn-%E5%B0%86%E7%BD%91%E7%BB%9C%E6%B5%81%E9%87%8F%E4%BB%8E%E7%89%B9%E5%AE%9A%E5%AD%90%E7%BD%91%E8%BD%AC%E5%8F%91%E5%88%B0%E7%89%B9%E5%AE%9A%E7%9A%84tun%E6%8E%A5%E5%8F%A3.png)
我正在使用运行 openwrt 的设备(chaos_calmer 15.05)
我正在尝试将网络流量从两个不同的 SSID 转发到两个运行 openvpn 的不同 vps
我的设置只能使用一个 wifi/tun 接口。似乎不可能同时使用两个 VPN(openvpn 客户端)。
我不明白为什么 :/ 我认为这不是一个非常复杂的设置,我希望有人可以在这里帮助我,因为你们是网络专家。
我认为这是路由问题,但我不确定。有人能帮我解决这个问题吗?
为了简化这一点,我的设置如下:
eth0 (internet link) <===== tun0 <==== wifi-A
eth0 (internet link) <===== tun1 <==== wifi-B
请注意以下陈述
我的 openwrt 设备使用 DHCP 通过 eth0 接口获取互联网链接
我在 wlan0 接口上创建了一个桥接器,以便能够广播两个 SSID:(wifi-a 和 wifi-b)
在 wifi-a 上:DHCP 服务器正在运行池 172.17.42.100-200 gw 172.18.42.1
在 wifi-b 上:DHCP 服务器正在运行池 172.18.42.100-200 gw 172.18.42.1
我有两个 VPS,安装了 openvpn:PublicIP-1 和 PublicIP-2
我在我的设备上运行两个 openvpn 客户端到 public-IP-1 (tun0) 和 public-IP-2 (tun1)
最后,我使用以下 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