Skocz do zawartości

Zapasowe łącze Vpn


mcteusz

Rekomendowane odpowiedzi

Witam

Mam nadzieję, że trafiłem w odpowiedni dział.

W pracy korzystamy z OpenVPN'a. Oddziały zestawiają połączenie z naszym serwerem w centrali i jest wszystko cacy... Ale dopóki nie siądzie łącze od dostawcy internetowego. Chciałbym zabezpieczyć się na taką właśnie ewentualność.

Mamy 2 niezależne łącza od dwóch różnych dostawców... Powiedzmy, że początek naszej sieci zaczyna się w obu przypadkach od routerka Linksysa. Dalej (w środku) wszystko jest w jednej sieci lokalnej...

1. Router A, dostawca A, adres zewnętrzny 80.80.80.80, adres wewnętrzny 192.168.1.1

2. Router B, dostawca B, adres zewnętrzny 90.90.90.90, adres wewnętrzny 192.168.1.2

 

W sieci stoi serwer OpenVPN, na którym skonfigurowana jest domyślna brama 192.168.1.1

 

Na klientach w pliku konfiguracyjnym wpisuję:

...

proto udp

remote 80.80.80.80

remote 90.90.90.90

...

czyli, aby w przypadku braku zestawienia połączenie VPN na pierwszym adresie, próbował drugiego.

 

I jest super- klient śmiga jak trzeba, ale w razie awarii pierwszego łącza, niestety nie udaje się zestawić połączenia VPN przy użyciu drugiego (a sprawdzałem w logach, że klient próbuje przejść na awaryjny adres serwera)... Wygląda na to, że problem tkwi w tym, że serwer ma ustawioną bramę domyślną 192.168.1.1 i komputery nie moga nawiązać komunikacji. Dwóch bram domyślnych ustawić nie mogę, bo komputer zgłupieje całkowicie....

 

I tu rodzi się pytanie: Jak to rozegrać, żeby mieć VPN'a na zapasowym łączu w razie awarii pierwszego? Chodzi mi o jakieś sprawdzone rozwiązanie. Może ktoś takie posiada. Mi póki co przychodzą do głowy 2 pomysły:

1. Dwie karty sieciowe z własnymi konfiguracjami- ale nie wiem jak wtedy będzie wyglądało kierowanie ruchu na bramy domyślne?

2. Skrypt, który w przypadku przerwania łącza głównego, podmieni bramę domyślną. Tylko nie wiem w jaki sposób skrypt miałby zdobywać info, że łącze padło...

Odnośnik do komentarza
Udostępnij na innych stronach

Pad łącza możesz wykryć pingując jakiś adres w internecie, np. bramę domyślną dostawcy internetu (następny hop za twoim routerkiem podłączonym do internetu).

Można też bardziej kombinować, przerabiając serwer z vpn na failover router. I mozna mu przy okazji loadbalancing dodać. Ale to już więcej kombinowania. W razie czego google wie ;-)

Odnośnik do komentarza
Udostępnij na innych stronach

Można też bardziej kombinować, przerabiając serwer z vpn na failover router. I mozna mu przy okazji loadbalancing dodać.

Tego nie chcę robić. Chciałbym, aby standardowo VPN śmigał na jednym łączu.

 

Pad łącza możesz wykryć pingując jakiś adres w internecie, np. bramę domyślną dostawcy internetu (następny hop za twoim routerkiem podłączonym do internetu).

No i w taki sposób było by to chyba najprościej rozwiązać. Tyle, że właściwie w pisaniu skryptów nie mam żadnego doświadczenia. Jakim poleceniem tak (_na prawdę_ → naprawdę) ORT mam sprawdzić czy ping powrócił tak jak trzeba?

Odnośnik do komentarza
Udostępnij na innych stronach

Może coś w tym stylu. Zaznaczam, że tego nie odpalałem i nie wiem czy dobrze działa ;-)

bramy=(192.168.1.1 192.168.1.2)
pingane_serwery=(adresip1 adresip2)
aktywna=0
CZAS_OCZEKIWANIA_NA_REPLY=10
while true;
do
    ping -c 1 -W $CZAS_OCZEKIWANIA_NA_REPLY ${pingane_serwery[$aktywna]}
    if [ $? -ne 0 ]; then
        #Ping nie doszedł, zamieniamy bramy
        ip route del default via ${bramy[$aktywna]}
        let aktywna=1-$aktywna
        ip route add default via ${bramy[$aktywna]}
    fi
    sleep 30
done

Odnośnik do komentarza
Udostępnij na innych stronach

if [ $? -ne 0 ]; then

Właściwie to o ten fragment mi chodziło... Stworzyłem takie coś:

#!/bin/bash

GW1="192.168.1.1"
GW2="192.168.1.2"
PING_IP="adres_za_bramą"
ACTIVE_RED=0
I=0

while [ true ]
do

PING=$(ping -c 1 $PING_IP)

if [ $? -eq 0 ];
 then
echo "Połączenie ok"
if [ $ACTIVE_RED -eq 1 ];
then
    if [ $I -eq 12 ];
    then
      echo "Przełączam na główną"
      route del default gw $GW2
      route add default gw $GW1
      ACTIVE_RED=0
      I=0
    else
      #echo "INC"
      let I=$I+1
    fi
fi

 else
echo "Brak połączenia, przełączam na zapasową"
sleep 1
route del default gw $GW1
route add default gw $GW2
ACTIVE_RED=1
sleep 10
fi

sleep 300
done

 

i wygląda na to, że działa tak jak chciałem. Co 5 min sprawdza połączenie. W momencie gdy łącze padnie, przełącza domyślną bramę, a po godzinie próbuje przywrócić bramę pierwszą...

Odnośnik do komentarza
Udostępnij na innych stronach

Jednak nadal mam problem z zestawieniem tunelu VPN na zapasowym łączu...

I już nie mam pomysłów. Może coś poradzicie...

1. Na obydwu routerach mam ustawione przekierowanie portu, na którym nasłuchuje serwer VPN.

2. Konfiguracji serwera nie zmieniam.

3. Iptables na serwerze wyczyściłem.

3. Zmieniam jedynie bramę domyślną na serwerze i dopisuję linijkę remote .... w konfiguracji klienta.

4. Resetuję OpenVPN zarówno na serwerze jak i na kliencie.

5. Klient próbuje przejść na zapasowy adres, ale sie nie udaje:

Tue Feb  9 08:46:28 2010 us=740879 IMPORTANT: OpenVPN's default port number is now 1194, based on an official port number assignment by IANA.  OpenVPN 2.0-beta16 and earlier used 5000 as the default port.
Tue Feb  9 08:46:28 2010 us=740965 Re-using SSL/TLS context
Tue Feb  9 08:46:28 2010 us=740997 LZO compression initialized
Tue Feb  9 08:46:28 2010 us=741089 Control Channel MTU parms [ L:1542 D:138 EF:38 EB:0 ET:0 EL:0 ]
Tue Feb  9 08:46:28 2010 us=741178 Data Channel MTU parms [ L:1542 D:1450 EF:42 EB:135 ET:0 EL:0 AF:3/1 ]
Tue Feb  9 08:46:28 2010 us=741237 Local Options String: 'V4,dev-type tun,link-mtu 1542,tun-mtu 1500,proto UDPv4,comp-lzo,cipher BF-CBC,auth SHA1,keysize 128,key-method 2,tls-client'
Tue Feb  9 08:46:28 2010 us=741258 Expected Remote Options String: 'V4,dev-type tun,link-mtu 1542,tun-mtu 1500,proto UDPv4,comp-lzo,cipher BF-CBC,auth SHA1,keysize 128,key-method 2,tls-server'
Tue Feb  9 08:46:28 2010 us=741293 Local Options hash (VER=V4): '41690919'
Tue Feb  9 08:46:28 2010 us=741325 Expected Remote Options hash (VER=V4): '530fdded'
Tue Feb  9 08:46:28 2010 us=741361 Socket Buffers: R=[110592->131072] S=[110592->131072]
Tue Feb  9 08:46:28 2010 us=741392 UDPv4 link local: [undef]
Tue Feb  9 08:46:28 2010 us=741416 UDPv4 link remote: adres:port
Tue Feb  9 08:46:28 2010 us=741491 UDPv4 WRITE [14] to adres:port: P_CONTROL_HARD_RESET_CLIENT_V2 kid=0 [ ] pid=0 DATA len=0
Tue Feb  9 08:46:31 2010 us=60920 UDPv4 WRITE [14] to adres:port: P_CONTROL_HARD_RESET_CLIENT_V2 kid=0 [ ] pid=0 DATA len=0
Tue Feb  9 08:46:33 2010 us=380929 UDPv4 WRITE [14] to adres:port: P_CONTROL_HARD_RESET_CLIENT_V2 kid=0 [ ] pid=0 DATA len=0
Tue Feb  9 08:46:35 2010 us=700926 UDPv4 WRITE [14] to adres:port: P_CONTROL_HARD_RESET_CLIENT_V2 kid=0 [ ] pid=0 DATA len=0
Tue Feb  9 08:46:38 2010 us=20935 UDPv4 WRITE [14] to adres:port: P_CONTROL_HARD_RESET_CLIENT_V2 kid=0 [ ] pid=0 DATA len=0

I tak się restartuje co jakiś czas, próbując na zmianę alternatywnych adresów...

Gdzie może leżeć przyczyna??

Odnośnik do komentarza
Udostępnij na innych stronach

No nie mogę wpaść na żaden pomysł, a sprawę definitywnie muszę załatwić.

Dla próby przepiąłem nawet fizycznie kable z routera jednego dostawcy do drugiego i zmieniłem tylko konfigurację adresów (nie dotykałem przekierowania portów itp.) i dalej nic...

Czy OpenVPN potrafi gdzieś zapamiętywać trasy dążące do poszczególnych klientów?

 

Panowie i Panie, googlam uparcie żeby coś znaleźć i trafiłem na taki mały szczegół: przekazywanie pakietów ip czyli tajmeniczy plik /proc/sys/net/ipv4/ip_forward

U mnie wartość jest ustawiona na 0. Czy to może być problem?? I jeśli mógłby mi ktoś tak łopatologicznie wytłumaczyć za co odpowiada ta zmienna... Co tak (_na prawdę_ → naprawdę) ORT dzieje się w systemi po zmianie wartości na 1? Nie mogę tego nigdzie znaleźć...

Odnośnik do komentarza
Udostępnij na innych stronach

Problem rozwiązany po długich bojach. Okazała się rzecz banalna: zaablokowane porty... Z tym, że nie u mnie, a u dostawcy internetu.

Parę kliknięć załatwiło sprawę i VPN działa.

W sumie to jestem trochę zły, że od tego nie zacząłem, ale z drugiej strony przynajmniej sobie OpenVPNa przemaglowałem...

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...