1

Temat: OpenVPN - dwóch klientów, różne interfejsy

Do routera mam podłączone dwa łącza eth0.2 (normalny internet) oraz eth1 (internet komórkowy)

Aktualnie korzystam z pakietu mwan3, jednak postanowiłem przejść na bouding


1. W jaki sposób mogę połączyć się dwoma klientami openvpn na openwrt to tego samego serwera? (to samo IP).
W  momencie gdy próbuję się połączyć drugim klientem wyskakuję poniższy błąd:

TCP/UDP: Socket bind failed on local address [undef]: Address already in use

2. W jaki sposób na kliencie openvpn mogę wybrać interfejs za pomocą które będzie zestawiane połączenie (eth0.2 lub eth1)
Chciałbym aby jeden tunel był zestawiany przez eth0.2, natomiast drugi przez łącze eth1


PS.
Sprawdziłem jak łącze się na dwa różne serwery OpenVPN to połączenia są zestawiane prawidłowo, jednak nie potrafię wybrać interfejsu.

2

Odp: OpenVPN - dwóch klientów, różne interfejsy

2. w mwan3 bazując na docelowym serwerze - musisz odpowiednią regułę zrobić.
1. czasami tap'a nie zrobiłeś?

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

3

Odp: OpenVPN - dwóch klientów, różne interfejsy

1. Sprawdziłem w obu interfejsach mam ustawione dev na tun.
PS Jeżeli podam IP innego serwera na drugim kliencie to połączenie na obu klientach jest zestawiane prawidłowo.

2. Kojarzę jak zrobić regułkę aby ruch z poszczególnych portów, docelowego lub źródłowego IP szedł tylko przez jedno łącze, jednak tutaj nie potrafię tego zrobić ponieważ źródłowy adres IP dla obu klientów będzie taki sam (ip routera) docelowe IP oraz port również będą takie same ponieważ dwa połączenia mają być zestawione do tego samego serwer tylko za pomocą dwóch różnych interfejsów eth0.2 oraz eth1

4

Odp: OpenVPN - dwóch klientów, różne interfejsy

Jakoś ruch musisz odróżnić. Więc np. zrób dobie serwer nasłuchujący na 2 różnych portach.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

5 (edytowany przez mar_w 2016-10-27 01:31:15)

Odp: OpenVPN - dwóch klientów, różne interfejsy

@kams
Odnosząc się do rady Cezarego, jako wskazówkę można dodać zdanie z instrukcji: https://openvpn.net/index.php/open-sour … tml#config
"If you want to run multiple OpenVPN instances on the same machine, each using a different configuration file,"

Czyli dla servera tworzysz 2 pliki np server1.conf i server2.conf w katalogu gdzie masz konfigurację np. w /etc/openvpn
W server2.conf zmieniasz port na inny. Ja jeszcze zmieniłem adres rozgłoszeniowy sieci servera nr 2.

# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    inet x.x.x.x brd x.x.x.x scope global eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::e5b:8fff:fe27:9a64/64 scope link 
       valid_lft forever preferred_lft forever
4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
    link/none 
    inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0
       valid_lft forever preferred_lft forever
5: tun1: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
    link/none 
    inet 10.9.0.1 peer 10.9.0.2/32 scope global tun1
       valid_lft forever preferred_lft forever

# netstat -alpntu | grep openvpn
udp        0      X.X.X.X:1194            0.0.0.0:*                           4706/openvpn    
udp        0      X.X.X.X:2294            0.0.0.0:*                           4735/openvpn

Oczywiście klientowi nr 2 też zmieniasz port na taki, na którym nasłuchuje server2

Xiaomi AX3000T @ Netgear R6220
* DVBT2 - T230C *

6

Odp: OpenVPN - dwóch klientów, różne interfejsy

A może w /etc/openvpn dwa pliki *.conf różniące się tylko

# Which local IP address should OpenVPN
# listen on? (optional)
local a.b.c.d
GUI jest przereklamowane

ASUS WL-500gP v2, TP-Link TL-MR3420 v2, TP-Link TL-WR1043ND v3, TP-Link TL-WDR4300 v1, D-Link DWR-921 C3,
Netgear R6220

7 (edytowany przez mar_w 2016-10-27 18:52:37)

Odp: OpenVPN - dwóch klientów, różne interfejsy

Gr4nd0 napisał/a:

A może w /etc/openvpn dwa pliki *.conf różniące się tylko

# Which local IP address should OpenVPN
# listen on? (optional)
local a.b.c.d

Uwzględniając strategię połączenia zaproponowaną przez autora tematu....

kams napisał/a:

(...)
1. W jaki sposób mogę połączyć się dwoma klientami openvpn na openwrt to tego samego serwera? (to samo IP).
(...)

To jak miałby się łączyć klient2 w przypadku gdy zmienimy adres, na którym słucha serwer2 openvpn, jeżeli "fizyczny" serwer posiada tylko jedno publiczne IP ? Pytam z ciekawości, bo jakoś nie mogę sobie tego wyobrazić.

EDIT: W sumie to sobie wyobraziłem. Serwer2 słucha na porcie udp 1194 tylko na adresie w swojej sieci lokalnej, a klient2 łączy się na Publiczny IP na port przykładowo udp 3000 i dodatkowo firewall w tablicy NAT w łańcuchu PREROUTING przekierowuje ruch ( DNAT ) na adres local IP na port udp 1194.  No to rzeczywiście ułatwienie....

Xiaomi AX3000T @ Netgear R6220
* DVBT2 - T230C *

8

Odp: OpenVPN - dwóch klientów, różne interfejsy

Przetestowałem proponowane rozwiązania jednak nie przyniosły one oczekiwanego efektu.

Skopiowałem podstawową konfigurację serwera

cp server.conf server2.conf

w drugim pliku zmieniłem port na 11195, po czym zrestartowałem serwer.
Sprawdziłem nmap czy oba porty są otwarte (były)

Gdy uruchomiłem że mogę łączyć się tylko klientem1 to połączenie zostało zestawione prawidłowo.
Gdy uruchomiłem że mogę łączyć się tylko klientem 2 to wyskoczył błąd

hu Oct 27 17:46:40 2016 TCP/UDP: Incoming packet rejected from [AF_INET]X.X.X.X:11194[2], expected peer address: [AF_INET]X.X.X.X:11195 (allow this incoming source address/port by removing --remote or adding --float)
Thu Oct 27 17:46:42 2016 write to TUN/TAP : Invalid argument (code=22)

Gdy uruchomiłem że mogę łączyć się klient 1 pierwszy się połączył, natomiast u drugiego wyskoczył błąd:

Thu Oct 27 17:46:49 2016 TCP/UDP: Socket bind failed on local address [undef]: Address already in use
Thu Oct 27 17:46:49 2016 Exiting due to fatal error

9 (edytowany przez mar_w 2016-10-27 20:29:02)

Odp: OpenVPN - dwóch klientów, różne interfejsy

A może w pliku server2.conf zmień dodatkowo adres sieci vpn na inny. bo zmieniłeś tylko port, jak rozumiem.
A jak zapewniłeś warunek, żeby klient 2 nie wyszedł tym samym wanem co klient 1 ?

Xiaomi AX3000T @ Netgear R6220
* DVBT2 - T230C *

10

Odp: OpenVPN - dwóch klientów, różne interfejsy

mar_w napisał/a:

Uwzględniając strategię połączenia zaproponowaną przez autora tematu....

kams napisał/a:

(...)
1. W jaki sposób mogę połączyć się dwoma klientami openvpn na openwrt to tego samego serwera? (to samo IP).
(...)

Biję się w piersi, nie doczytałem. Była mowa o dwóch interface'ch i to mnie zgubiło.

GUI jest przereklamowane

ASUS WL-500gP v2, TP-Link TL-MR3420 v2, TP-Link TL-WR1043ND v3, TP-Link TL-WDR4300 v1, D-Link DWR-921 C3,
Netgear R6220

11

Odp: OpenVPN - dwóch klientów, różne interfejsy

mar_w napisał/a:

A może w pliku server2.conf zmień dodatkowo adres sieci vpn na inny. bo zmieniłeś tylko port, jak rozumiem.
A jak zapewniłeś warunek, żeby klient 2 nie wyszedł tym samym wanem co klient 1 ?

Niestety nie mogę ustawić w pliku server2.conf innego adresu IP, ponieważ na VPS mam jedno publiczne IP.

Jeszcze nie ustawiałem na routerze aby klienci wychodzi dwoma łączami, aktualnie wychodzą jednym, jednak z tego co się orientowałem to wystarczy odpowiednia konfiguracja pakietu mwan3.
Jak uda się rozwiązać pierwszy problem czyli umożliwienia łączenia się dwóch klientów do tego samego serwera to wtedy zajmę się warunkiem na mwan3, podejrzewam że wystarczy utworzyć dwie regułki podając:
Destination address    
Destination port
Policy assigned

12 (edytowany przez mar_w 2016-10-28 06:11:09)

Odp: OpenVPN - dwóch klientów, różne interfejsy

Nie zrozumiałeś mojej sugestii. Spójrz jak jest u mnie w poście #5
chodzi o adresy sieci VPN, bo może oba serwery chcą mieć adres 10.8.0.1 
Jeszcze raz wklejam kawałek o co mi chodziło (to jest SERWER):

4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
    link/none
    inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0
       valid_lft forever preferred_lft forever
5: tun1: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
    link/none
    inet 10.9.0.1 peer 10.9.0.2/32 scope global tun1
       valid_lft forever preferred_lft forever

Jakbyś w pliku server2.conf dodatkowo zmienił opcję log openvpn2.log to miałbyś 2 pliki dla każdej instancji serwera openvpn.
Wtedy zobaczyłbyś w pliku openvpn.log  oraz openvpn2.log zapewne więcej ciekawych rzeczy.

Xiaomi AX3000T @ Netgear R6220
* DVBT2 - T230C *

13

Odp: OpenVPN - dwóch klientów, różne interfejsy

Ale Panowie kombinujecie... Przecież Cezary napisał co trzeba zrobić. Co prawda jeden serwer openvpn chyba na 2 różnych portach nasłuchiwać nie może, ale co za problem zrobić przekierowanie portu.
Nie wiem co za system jest po stronie serwera, ja kiedyś na Debianie sam korzystałem z takiego rozwiązania. W /etc/ufw/before.rules dałem:

-A PREROUTING -i eth0 -p udp --dport 36255 -j REDIRECT --to-port 36254

i już openvpn słuchał na 2 portach.

14

Odp: OpenVPN - dwóch klientów, różne interfejsy

Hmm, nie pomyślałem że można w ten sposób zrobić, ale dobry pomysł.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

15

Odp: OpenVPN - dwóch klientów, różne interfejsy

Niestety PREROUTING nie działa w tej sytuacji, otrzymuję poniższy komunikat:

hu Oct 27 17:46:40 2016 TCP/UDP: Incoming packet rejected from [AF_INET]X.X.X.X:11195[2], expected peer address: [AF_INET]X.X.X.X:11194 (allow this incoming source address/port by removing --remote or adding --float)

Ale chyba udało mi się znaleźć na to rozwiązanie: zmieniłem protokół z udp na tcp i oba połączenia zostały zestawione, na utworzonych tunelach ping odpowiadał, muszę teraz sprawdzić jak będzie się zachowywać bouding, postaram się jutro przedstawić wyniki.
Chociaż nie ukrywam że wolałbym korzystać z protokołu udp.

16 (edytowany przez mar_w 2016-10-28 22:52:29)

Odp: OpenVPN - dwóch klientów, różne interfejsy

PREROUTING musi działać bo każdemu działa.  @garysek podał dobre rozwiązanie dla Twojego celu jaki chcesz osiągnąć.
Chociaż uruchomienie 2 instancji na 2 różnych "prawdziwych" portach, też ma swoje plusy do pewnych celów.

PS. A tak w ogóle to bonding przez 2 tunele openvpn na tradycyjnym niezbyt szybkim sprzęcie chyba mija się z celem, bo zarżniesz procek przy sumowaniu prędkości z kabla i LTE. Chyba że na kablu masz 6 Mbit i tyle samo na LTE to może jakoś wyciągniesz lub używasz mocnej maszynki.
Robiłeś speedtest na zestawionym tylko jednym tunelu ?

Xiaomi AX3000T @ Netgear R6220
* DVBT2 - T230C *

17 (edytowany przez kams 2016-10-29 22:53:12)

Odp: OpenVPN - dwóch klientów, różne interfejsy

Teoretycznie udało mi się zestawić dwa tunele.
Przed utworzeniem interfejsu bond0 sprawdziłem jak zachowują się interfejsy.
Na obu interfejsach ping szedł prawidłowo do wp.pl
Następnie na serwerze wydałem komendy

ifconfig bond0 192.168.45.1 netmask 255.255.255.0 up
ifconfig bond0 hw ether 00:11:22:33:44:55
ifenslave bond0 tap0 tap1

po czym zalogowałem się na router

ifconfig bond0 192.168.45.2 netmask 255.255.255.0 up
ifconfig bond0 hw ether 00:11:22:33:44:66
ifenslave bond0 tap0 tap1

Ping przestał działać na interfejsach tap0 tap1
Próbowałem puścić ping do wp.pl na interfejsie bond0 - niestety bez skutku

PS
ping na interfejsie bond0 z routera na serwera ip 192.168.45.1 szedł prawidłowo
Próbowałem użyć komendy

iptables -t nat -A POSTROUTING -s 192.168.45.0/24 -o eth0 -j MASQUERADE

Jednak to nie pomogło.

18 (edytowany przez mar_w 2016-10-30 00:06:28)

Odp: OpenVPN - dwóch klientów, różne interfejsy

Interfejsy tun0 i tun1 są teraz jakby "schowane" pod swoim zarządcą którym jest bond0.
Dlatego działa Ci ping tylko między bond-ami. A jak chcesz wyjść w świat to musisz na kliencie/routerze/ ustawić trasę 0.0.0.0 przez bond0.
Bo skąd router ma to wiedzieć, a samo się nie zrobi.
Router dostał trasę domyślną przez tun-y z serwera openvpn, ale teraz te interfejsy są w niewoli u bond-a i nie mogą bez jego zezwolenia cokolwiek wysyłać, a znowu router nie wie, że pakiety wychodzące w świat ma pchać przez bond0

Xiaomi AX3000T @ Netgear R6220
* DVBT2 - T230C *

19 (edytowany przez kams 2016-10-30 12:35:02)

Odp: OpenVPN - dwóch klientów, różne interfejsy

Chyba źle mnie zrozumiałeś, bądź ja ciebie źle zrozumiałem.
Rozumiem że aby mieć dostęp do internetu na komputerach to muszę ustawić trasę 0.0.0.0 przez bond0.
Jednak aktualnie aktualnie sprawdzam konfigurację na routerze gdzie wpisuję

ping -I bond0 192.168.45.1

Ping działa prawidłowo
Natomiast jak wpisuję

ping -I bond0 8.8.8.8
lub
ping -I bond0 wp.pl

to serwery nie odpowiadają na pingi

W tej konfiguracji z tego co się orientuję nie muszę ustawiać bond0 ponieważ ręcznie wybieram interfejs


Edit:

Zastosowałem się do twojej rady wpisałem komendę

ip route add default via 192.168.45.1 dev bond0

i polecenie

ping -I bond0 wp.pl

zaczeło dla mnie odpowiadać
smile

Teraz będę próbował swoich sił z testowym przełączaniem interfejsów.
Na routerze wpisuje

ifenslave -c bond0 tap1

to ping przestaje działać
aby zaczął działać muszę wpisać na routerze

ifenslave -c bond0 tap0

lub wpisać na serwerze

ifenslabe -c bond0 tap1

wtedy pingi ponownie zaczynają działać

Czyli na serwerze i routerze muszę wybrać w ifenslave ten sam interfejs (tap0 lub tap1) aby internet szedł prawidło przez bond0

Jak testowałem bond0 w sieci domowej na laptopie: to wystarczyło jak połączyłem się do routera za pomocą eth0 oraz wlan0
i gdy wydawałem polecenie i

fenslave -c bond0 wlan0 

lub

fenslave -c bond0 eth0 

to ping nie ginął cały czas szedł prawidłowo bez gubienia pakietów.

PS.
Dlaczego w sieci domowej wystarczyło zainstalować i skonfigurować bonding oraz ifenslave tylko na laptopie, natomiast w przypadku openvpn muszę zainstalować i skonfigurować bonding po stronie routera oraz serwera.

20

Odp: OpenVPN - dwóch klientów, różne interfejsy

Rozumiem że tworząc bonding nie zależało Ci na uzyskaniu wydajności tylko na rozłożeniu ruchu w celu uzyskania niezawodności.
Ogólnie zasada jest taka że bonding stosuje się na obu końcach połączenia. Zawsze możesz spróbować wyłączyć bonding na serwerze i zasymulować przypadek z laptopem.

Xiaomi AX3000T @ Netgear R6220
* DVBT2 - T230C *

21 (edytowany przez kams 2016-10-30 17:17:39)

Odp: OpenVPN - dwóch klientów, różne interfejsy

Dokładnie nie zależy mi na zwiększeniu prędkości czy wydajności, a jedynie na zapewnieniu niezawodności połączenia, jednak jak na serwerze nie uruchomię bondingu to nie mam dostępu do internetu przez interfejs bond0

22

Odp: OpenVPN - dwóch klientów, różne interfejsy

garysek napisał/a:

Co prawda jeden serwer openvpn chyba na 2 różnych portach nasłuchiwać nie może

Skoro może na PC to czemu nie na WRT?

# netstat -lnp | grep openvpn
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      27536/openvpn   
tcp        0      0 0.0.0.0:1194            0.0.0.0:*               LISTEN      27551/openvpn   
udp        0      0 0.0.0.0:1194            0.0.0.0:*                           27567/openvpn   
GUI jest przereklamowane

ASUS WL-500gP v2, TP-Link TL-MR3420 v2, TP-Link TL-WR1043ND v3, TP-Link TL-WDR4300 v1, D-Link DWR-921 C3,
Netgear R6220

23

Odp: OpenVPN - dwóch klientów, różne interfejsy

Znalazłem co trzeba zrobić aby nie konfigurować bondingu i ifenslave po stronie serwera.
Wystarczy aby bond0 działał w tej samej sieci co tap0 oraz tap1
Czyli przykładowo:
tap0 ip klienta 10.8.0.5/24
tap1 ip klienta 10.8.0.6/24
bond0 ip ustawiany na 10.8.0.7/24
Czyli aby były tworzone dwa połączenia openvpn,ale w tej samej podsieci

Następnie wydajemy

ifconfig bond0 10.8.0.7 netmask 255.255.255.0 up
ifconfig bond0 hw ether 00:11:22:33:44:66
ifenslave bond0 tap0 tap1

i Teoretycznie wszystko powinno działać.
Przetestowałem podobne rozwiązanie na laptopie gdzie łączyłem się do routera za pomocą wlan0 192.168.32.16/24 oraz eth0 192.168.32.64/24
następnie utworzyłem bond0 z ip 192.168.32.142 i mogłem się swobodnie przełączać pomiędzy interfejsami


PS.
Przed bondingiem
Czyli kwestia samych pingu w samych tunelach vpn
wygląda tak że połączenie 1 jest zestawiane do sieci 10.8.0.0/24, natomiast połączenie drugie do sieci 10.9.0.0/24

ping -I tap0 wp.pl
ping -I tap1 wp.pl

przy obu komendach działa ping

Teraz sytuacja że próbuję utworzyć dwa połączenia do tej samej sieci 10.8.0.0/24

ping -I tap0 wp.pl

działa prawidłowo, natomiast

ping -I tap1 wp.pl

nie działa prawidłowo.


Powinienem już sobie poradzić z tematem bondingu, jednak zostały mi do ustalenia 2 kwestie:
1. Najważniejsza: Jak skonfigurować klientów openvpn na routerze (ewentualnie serwer openvpn na vps) aby dwaj klienci "każdy z nich łączy się na inny port" łączyli się do tej samej podsieci 10.8.0.0/24
2. Mniej istotne w ostateczności mogę sam przełączać łącze: chodzi konkretnie o to że w momencie awarii pierwszego łącza tap0 połączenie jest przełączane na tap1 i nie jest automatycznie przywracane do tap0 w momencie gdy to łącze zacznie funkcjonować, trzeba to zrobić ręcznie lub poczekać na awarie 2 łącza

24 (edytowany przez mar_w 2016-10-30 20:41:36)

Odp: OpenVPN - dwóch klientów, różne interfejsy

Zrób tak jak radził @garysek. Uruchom na vps jedną instancję openvpn i zrób drugi port przez PREROUTING.
Na routerze zostaw tak jak jest teraz czyli 2 tunele, z tym że Tunel 2 - czyli tun1 ma się łączyć na tym "fałszywym" innym porcie, ale notabene połączy się z tym samym serverem vpn co tun0 i będzie w tej samej sieci vpn smile

PS. Nie spojrzałem że zmieniłeś interfejs na tap. W poście #3 pisałeś że masz tun-y więc odnosiłem się cały czas do tej konfiguracji

Xiaomi AX3000T @ Netgear R6220
* DVBT2 - T230C *

25

Odp: OpenVPN - dwóch klientów, różne interfejsy

Zrobiłem zgodnie z twoją radą, drugie połączenie openvpn jest zestawiane jednak przez ten interfejs nie idzie ping
czyli

ping -I tap0 wp.pl

ping idzie prawidłowo, natomiast

ping -I tap1 wp.pl

Jest brak odpowiedzi na ping