26

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

Zrobiłem podobną konfigurację u siebie (z tym, że na tap1 i tap2) i faktycznie było jak napisałeś. Z jakiegoś powodu niewłaściwa była tablica routingu:

root@OpenWrt:~# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         static-user-178 0.0.0.0         UG    10     0        0 eth0.2
default         192.168.8.1     0.0.0.0         UG    20     0        0 eth0.3
default         10.10.0.1       0.0.0.0         UG    30     0        0 tun0
default         10.201.5.5      0.0.0.0         UG    40     0        0 tun1
default         192.168.15.1    0.0.0.0         UG    60     0        0 eth0.4
default         192.168.45.1    0.0.0.0         UG    100    0        0 bond0
default         10.20.0.1       0.0.0.0         UG    120    0        0 tap1
default         10.21.0.1       0.0.0.0         UG    130    0        0 tap3
default         10.20.0.1       0.0.0.0         UG    220    0        0 tap1

W trzeciej pozycji od końca powinien być interfejs tap2 - chyba openvpn nieprawidłowo dodaje wpisy do tablicy. Po wydaniu poleceń:

route  del -net 0.0.0.0 metric 120 dev tap1
route  add -net 0.0.0.0 gw 10.20.0.1 netmask 0.0.0.0 metric 120 dev tap2

Tablica przybrała odpowiednią formę:

root@OpenWrt:~# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         static-user-178 0.0.0.0         UG    10     0        0 eth0.2
default         192.168.8.1     0.0.0.0         UG    20     0        0 eth0.3
default         10.10.0.1       0.0.0.0         UG    30     0        0 tun0
default         10.201.5.5      0.0.0.0         UG    40     0        0 tun1
default         192.168.15.1    0.0.0.0         UG    60     0        0 eth0.4
default         192.168.45.1    0.0.0.0         UG    100    0        0 bond0
default         10.20.0.1       0.0.0.0         UG    120    0        0 tap2
default         10.21.0.1       0.0.0.0         UG    130    0        0 tap3
default         10.20.0.1       0.0.0.0         UG    220    0        0 tap1

i pingi zaczęły iść poprzez oba interfejsy smile.


Gr4nd0 napisał/a:
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   

No to oświeć nas proszę jak to sprawić.

27

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

garysek napisał/a:

No to oświeć nas proszę jak to sprawić.

Na ten moment man to zrobione na PC+debian, ale dla WRT przypuszczam, że należy zrobić w configu sekcje server1 i server2.
Konfigi na PC:

port 443
proto tcp
dev tun1
server 172.16.15.0 255.255.255.0

oraz

port 1194
proto tcp
dev tun2
server 172.16.16.0 255.255.255.0

Oczywiście tylko ta część, gdzie configi się różnią.
Tak samo powinno to działać pod OpenWRT.

config openvpn 'server1'
    option enabled '1'
    option port '443'
    option proto 'tcp'
    option dev 'tun1'
    option 'server 172.16.15.0 255.255.255.0'
[...]
config openvpn 'server2'
    option enabled '1'
    option port '1194'
    option proto 'tcp'
    option dev 'tun2'
    option 'server 172.16.16.0 255.255.255.0'
[...]

Postaram się to sprawdzić na moim tp-linku, ale muszę znaleźć wolną chwilę.

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

28

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

Ech, przeczytaj sobie temat ze zrozumieniem....

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

29 (edytowany przez mar_w 2016-10-31 00:04:26)

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

Łapiesz za słówka niczym prof Miodek.
Openvpn to jest jeden serwer w dwóch instancjach. Instancja to nie jest całkowicie oderwany i niezależny twór, tylko część jednego projektu lub klasy. Jakby to były osobne serwery to by to napisali:
https://openvpn.net/index.php/open-sour … chine.html
Jak widzisz użyli słowa instances a nie multiple servers.

Xiaomi AX3000T @ Netgear R6220
* DVBT2 - T230C *

30

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

Piszesz, że niby ja łapię za słówka a sam to ewidentnie robisz... Zamiast poprawnie napisać "jedna instancja" napisałem "jeden serwer", wow. Jakoś większość (łącznie z Tobą) zrozumiała co miałem na myśli.

Przepraszam za ten offtop, więcej nie zaśmiecam wątku.

31 (edytowany przez mar_w 2016-10-31 09:41:42)

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

To Ty rozdmuchałeś temat. Najpierw zadajesz pytanie : "oświeć nas" , dostajesz konkretną odpowiedź, po czym atakujesz gościa twierdząc, żeby czytał ze zrozumieniem, zamiast mu podziękować.
Jak nie skasujesz postów (lub Cezary) to każdy będzie mógł ocenić przebieg tej niepotrzebnej "dyskusji"

PS. Też musiałem napisać offtop bo jeszcze każdy by uwierzył że @garysek to jakiś męczennik smile

Xiaomi AX3000T @ Netgear R6220
* DVBT2 - T230C *

32

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

Wygląda na to że wszystko zmierza ku końcowi, aktualnie wygląda to tak że część procesu włączania bondingu jest ręczna głównie chodzi o wydanie polecenia

ifenslave bond0 tap0 tap1

Ponieważ to polecenie mogę wydać dopiero jak oba tunele zostaną zestawione co najczęściej trwa około 1 min lub nawet 10 min, ponieważ gdy nie mam internetu na łączu głównym to pierwsze połączenie openvpn tap0 jest niezestawione i bonding nie zostanie uruchomiony.

Potwierdzam że powodem dlaczego wcześniej nie szedł ping na tap1 był źle ustawiony routing @garysek dziękuję za poradę jak można to obejść
zerknąłem później do logów i w przypadku drugiego połączenia zawsze wyskakują takie błędy

Mon Oct 31 21:09:50 2016 /sbin/ifconfig tap5 10.8.0.3 netmask 255.255.255.0 mtu 1500 broadcast 10.8.0.255
Mon Oct 31 21:09:50 2016 /sbin/route add -net X.X.X.X netmask 255.255.255.255 gw 10.8.0.1
route: SIOCADDRT: File exists
Mon Oct 31 21:09:50 2016 ERROR: Linux route add command failed: external program exited with error status: 1
Mon Oct 31 21:09:50 2016 /sbin/route add -net 0.0.0.0 netmask 128.0.0.0 gw 10.8.0.1
route: SIOCADDRT: File exists
Mon Oct 31 21:09:50 2016 ERROR: Linux route add command failed: external program exited with error status: 1
Mon Oct 31 21:09:50 2016 /sbin/route add -net 128.0.0.0 netmask 128.0.0.0 gw 10.8.0.1
route: SIOCADDRT: File exists
Mon Oct 31 21:09:50 2016 ERROR: Linux route add command failed: external program exited with error status: 1
Mon Oct 31 21:09:50 2016 Initialization Sequence Completed

Czy można byłoby poprawić routing w inny automatyczny sposób, metoda którą zaproponował garysek jest dobra jednak nie jest to "moim" zdaniem rozwiązanie problemu tylko jego obejście.

Docelowo chciałbym aby działało to w ten sposób:
1: Włączam router
2. Są zestawiane tunele tap0 na łączu główny oraz tap1 na łączu komórkowym ( to udało mi się osiągnąć, z drobnym zastrzeżeniem odnośnie routingu przy drugim połączeniu)
3. Jest tworzony bonding z dwóch tuneli tap0 oraz tap1 (to działa prawidłowo)
4. Pada łącze tap0 bonding przełącza się na tap1 (działa prawidłowo)
5. Łącze tap0 zaczyna działać i tutaj powinno nastąpić przełączenie bondingu na tap0, jendak tak się nie dzieje.

1. Włączam router
2. Jedno z łącz nie działa np główne (zostaje utworzony jeden tunel tap1)
3. Bonding działa
4. Gdy drugie łącze zacznie działać to tunel jest zestawiony, jednak nie zostaje przyłączony do bond0, trzeba to zrobić ręcznie lub zrobić reboot routera

Czy ktoś z was wie jak rozwiązać te problemy?

33 (edytowany przez garysek 2016-11-01 02:17:24)

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

kams napisał/a:

Czy można byłoby poprawić routing w inny automatyczny sposób, metoda którą zaproponował garysek jest dobra jednak nie jest to "moim" zdaniem rozwiązanie problemu tylko jego obejście.

Problem chyba wynika z tego:

kams napisał/a:

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

Ustaw różne maski podsieci np.:
tap0 ip klienta 10.8.0.4/29
tap1 ip klienta 10.8.0.8/28
bond0 ip ustawiany na 10.8.0.2/24
serwer openvpn 10.8.0.1/24

Po takiej poprawce tablica routingu sama poprawnie zaczęła się na moim routerze robić.



kams napisał/a:

Wygląda na to że wszystko zmierza ku końcowi, aktualnie wygląda to tak że część procesu włączania bondingu jest ręczna głównie chodzi o wydanie polecenia

ifenslave bond0 tap0 tap1

Ponieważ to polecenie mogę wydać dopiero jak oba tunele zostaną zestawione co najczęściej trwa około 1 min lub nawet 10 min, ponieważ gdy nie mam internetu na łączu głównym to pierwsze połączenie openvpn tap0 jest niezestawione i bonding nie zostanie uruchomiony.

Możesz to zautomatyzować tworząc plik /etc/hotplug.d/iface/40-openvpn o zawartości:

#!/bin/sh

if [ "$INTERFACE" = "vpn2" ]  && [ "$ACTION" = "ifup" ]; then
    ifenslave bond0 tap2
fi

if [ "$INTERFACE" = "vpn2a" ]  && [ "$ACTION" = "ifup" ]; then
    ifenslave bond0 tap1
fi

oczywiście ustawiając pod siebie.


Jaki mode ustawiłeś dla bonding'u?


Ja w każdym bądź razie w jednym oknie putty odpaliłem polecenie:

ping -I bond0 wp.pl

a w drugim na przemian wydawałem polecenia:

ifenslave -d bond0 tap1
ifenslave bond0 tap1
ifenslave -d bond0 tap2
ifenslave bond0 tap2

i po przerwaniu polecenia ping otrzymałem:

--- wp.pl ping statistics ---
74 packets transmitted, 74 packets received, 0% packet loss
round-trip min/avg/max = 36.031/47.907/72.216 ms

Na potrzeby tego testu musiałem tylko usunąć wspomniany wyżej plik 40-openvpn, bo po usunięciu interfejs automatycznie sam doda się do bond0. Nie testowałem jak to zachowa się w przypadku fizycznego padnięcia któregoś łącza.

34 (edytowany przez kams 2016-11-02 20:27:01)

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

Dziękuję za radę odnośnie podsieci - zdało to egzamin.

Postanowiłem przetestować wszystko dokładnie i okazało się że prawdopodobnie mwan3 działa nieprawidłowo.

Ustawiłem aby ip X.X.X.X i port 11194 szedł przez łącze eth0.2, natomiast port 11195 szedł przez łącze eth1, jednak tak się nie dzieje. Podejrzewam że dzieje się to przez

log openVPN
Wed Nov  2 19:07:13 2016 /sbin/route add -net X.X.X.X netmask 255.255.255.255 gw 192.168.8.1

Czy można jakoś zrobić aby port 11194 szedł przez łącze eth0.2 natomiast port 11195 przez łącze eth1
Z tego co wnioskuję to openvpn dodaje regułkę aby ip X.X.X.X szedł przez łącze eth1 (192.168.8.1), przez co regułka mwan3 przestaje działać, jednak nie jestem tego pewny.

35

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

Edit

Zainstalowałem od nowa oprogramowanie openwrt, jednak to nie pomogło mimo konfiguracji w mwan3 aby porty szły przez różne interfejsy to idą zawsze jednym.

Spróbowałem nawet ustawić w openvpn ip 127.0.0.1 i następnie dopisać regułkę aby ruch który kieruje do 127.0.0.1:11194 był przekierowywany do ip serwera openvpn X.X.X.X, jednak to nie działa, ponieważ serwer openvpn nie jest widoczny pod adresem 127.0.0.1

iptables -t nat -A PREROUTING -i eth0 -p tcp -d 127.0.0.1 --dport 11194 -j DNAT --to X.X.X.X:11194

36 (edytowany przez kams 2016-11-06 23:56:34)

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

Znalazłem rozwiązanie:
Jak połączenie openvpn było uruchamiane przy starcie

/etc/init.d/openvpn enable

to mwan3 nie działał prawidłowo
nie pomagał nawet komenda

/etc/init.d/openvpn restart

Rozwiązaniem okazało się: wyłączenie uruchamiania się openvpn przy starcie

/etc/init.d/openvpn disable

następnie logowałem się na router i wydawałem polecenie

/etc/init.d/openvpn start

Po wydaniu tego polecenia były zestawiane dwa połączenia openvpn do tego samego serwera: jedno na porcie 11194 i łączu normalnym, drugie na porcie 11195 i łączu komórkowym.
Po wydaniu polecenia

/etc/init.d/openvpn restart

Tunele openvpn również był zestawiany na prawidłowych łączach.

Wynika z tego że openvpn należy uruchamiać z opóźnieniem (nie wiem dlaczego: tak wynika z testów które przeprowadziłem:

Teraz pytanie do was:
W jaki sposób mogę opóźnić uruchomienie usługi openvpn np. o 30 sekund.

Edit
Pytanie nieaktualnie
Wystarczy do /etc/rc.local
dopisać

sleep 30; /etc/init.d/openvpn start

@Edit
Sprawa aktualnie wygląda tak: mam dwa tunele openvpn tap0 tap1
Puszczam na routerze ping na wp przez interfejs bond0
Wszystko jest ok
wpisuje

ifconfig tap0 down
tfconfig tap0 up
ifconfig tap1 down
tfconfig tap1 up

Wszystko jest ok nie gubi ani jednego pingu
jak wykonuje polecenie

ifconfig tap0 down
ifconfig tap0

pokazuję że karta jest odłączona

Tutaj wszystko jest ok,
Jednak gdy odłączę kabelek fizycznie to zaczynam tracić pingi bond0 cały czas próbuję łączyć się przez interfejs tap0, trzeba poczekać aż tunel openvpn padnie czyli około 1 min.

Wnioskuję z tego że bonding patrzy na to w jakim stanie jest dany interfejs włączony, wyłączony, kabelek podłączony, odłączony a nie na to czy przez dany interfejs działa internet.
Czy da się to jakoś zmienić?
Chodzi o to aby bonding nie monitorował stanu interfejsu tylko to czy przez dany interfejs działa połączenie z internetem np. ping 8.8.8.8 jak ping będzie powyżej 600 ms to przełącz na łącze zapasowe, 20 kolejnych pingów wynosi poniżej 600 ms to przełącz na łącze podstawowe.

37 (edytowany przez kams 2016-11-07 20:57:41)

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

@Edit

Znalazłem chyba rozwiązanie na to
arp_interval=600 arp_ip_target=10.8.0.1
Dzięki powyższym wpisom adres ip 10.8.0.1 jest sprawdzany co 600ms i w przypadku pojawienia się problemu jest zmieniany interfejs przynajmniej w teroii
Czyli nie jest tylko sprawdzany stan interfejsu, ale również połączenie z danym hostem
Jednak jak dopisuje to do /etc/modules.d/40-bonding i rebootuje router to system nie widzi tego wpisu.
Gdzie dopisać powyższą formułkę aby system zobaczył zmianę?