OpenWrt Forum Archive

Topic: Routing multiple SSID to multiple VPN servers

The content of this topic has been archived on 25 Apr 2018. There are no obvious gaps in this topic, but there may still be some posts missing at the end.

Hello Guys,

I am trying to forward network traffic from two differents SSID to two different vps running openvpn.

Why ? Because I have two VPS and I woud like to able to browse the Internet from all my devices just selecting a WiFi network without be force to install a VPN client on my personal devices.

Well, my setup is working well with only one wifi / tun interface. It seems impossible to work that with the two VPN at the same time (openvpn client).

I don't understand why hmm I think it's not a very complicate setup I hope somebody could help me here since you're network experts.

I think it's a routing issue but I am not sure. So my question is the following :

- How can I forward correctly forward the network traffic from my two wifi subnets to each tun / vpn interface at the same time ?

Anyone  can help me to fix this please ? Below few details about my setup :

To simplify this, my setup looks like :

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

Note the following statements :
   
1. My openwrt device get the Internet link with the eth0 interface using DHCP

2. I created a bridge on my wlan0 interface to be able to broadcast two SSID : (wifi-a & wifi-b)

3. On wifi-a : a DHCP server is running pool 172.17.42.100-200 gw 172.18.42.1

4. On wifi-b : a DHCP server is running pool 172.18.42.100-200 gw 172.18.42.1

5. I have two VPS where I installed openvpn : PublicIP-1 & PublicIP-2

6. I run on my device two openvpn client to public-IP-1 (tun0) and to public-IP-2 (tun1)

7. Finally I nated wifi-a subnet to tun0 and wifi-b subnet to tun1 with the following iptables rules :

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

Below my interface details :

eth0       inet addr:192.168.0.10 Bcast:192.168.0.255  Mask:255.255.255.0

br-wifi-a  inet addr:172.17.42.1  Bcast:172.17.42.255  Mask:255.255.255.0
br-wifi-b  inet addr:172.18.42.1  Bcast:172.18.42.255  Mask:255.255.255.0

tun0       inet addr:10.8.0.6     P-t-P:10.8.0.5       Mask:255.255.255.255
tun1       inet addr:10.9.0.6     P-t-P:10.9.0.5       Mask:255.255.255.255

My route table :

Destination     Gateway         Genmask         Flags Metric Ref   Use Iface

default         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
 
[PublicIP-VPS-1]     192.168.0.1     255.255.255.255 UGH   0      0        0 eth0
[PublicIP-VPS-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-wifiA
172.17.42.0     *               255.255.255.0   U     0      0        0 br-wifiB

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

Quick debug :

 ping google.com -I tun1  PING google.fr (108.177.119.94): 56 data bytes 64 bytes from 108.177.119.94: seq=0 ttl=43 time=29.665 ms
 ping google.com -I tun0  PING google.fr (108.177.119.94): 56 data bytes 64 bytes from 108.177.119.94: seq=0 ttl=43 time=30.277 ms
 ping google.com -I eth0  PING google.fr (108.177.119.94): 56 data bytes 64 bytes from 108.177.119.94: seq=0 ttl=42 time=17.860 ms ^C

Again, I think it's routing issue but I am maybe to much tired to see my mistake. Can you help me to debug this  ?

Thanks for your help guys,


Additionally, I am trying to fix that with iproute2 with  :

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

But I am still wrong hmm Any idea ?

(Last edited by rand0m_dud3 on 23 Sep 2017, 23:34)

Initially you should set double vpn connection. If you do it just one after another, see, what happens. First vpn connection is established as it is. But second vpn connection is established VIA FIRST vpn connection. So you should initially correct routing table after first connection is established to force route to second vpn via usual adapter, not via tun.

The discussion might have continued from here.