Rozważmy następujący scenariusz:
- twój VPS ma pojedynczy interfejs Ethernet, skonfigurowany z adresem IP 4.3.2.1/24;
- Twój VPS może uzyskać dostęp do Internetu za pośrednictwem bramy domyślnej 4.3.2.254
- twój VPS nie aktywował jeszcze żadnego połączenia OpenVPN; stąd nie ma aktywnego interfejsu tun
W takim scenariuszu z poziomu komputera (załóżmy, że twój komputer to 9.8.7.6/24 z def-gw 9.8.7.254) możesz pomyślnie ustanowić połączenie SSH z 4.3.2.1. Dlatego oba hosty 4.3.2.1 i 9.8.7.6 mogą z powodzeniem się ze sobą skontaktować.
Teraz, po ustanowieniu takiego połączenia SSH, załóżmy:
- uruchamiasz połączenie OpenVPN z VPS 4.3.2.1;
- w związku z tym nowy interfejs tun0 zostanie skonfigurowany dynamicznie (załóżmy, że zostanie mu przypisany adres IP 10.10.10.2 z PTP 10.10.10.1).
Na tym etapie:
JEŚLI żadna trasa nie zostanie przekazana ze zdalnego serwera OpenVPN do lokalnego VPS, nic nie zmieni się pod względem routingu, a twoje połączenie SSH przetrwa bez żadnych problemów. W takim przypadku jedynym ruchem przechodzącym przez VPN jest ten skierowany w stronę zdalnego serwera OpenVPN (10.10.10.1);
JEŻELI zdalny serwer OpenVPN odepchnie pewną trasę, a zwłaszcza jeśli domyślna brama VPS zostanie zastąpiona 10.10.10.1 (zdalny punkt końcowy OpenVPN), NASTĘPNIE masz problemy. W tym przypadku tunelujesz CAŁY wychodzący ruch IP (z wyjątkiem samego OpenVPN) w sieci VPN.
W tym drugim przypadku (zastąpienie def-gw zaraz po ustanowieniu połączenia VPN) poprzednie połączenie SSH „zawiesi się” z powodu asymetrycznego routingu:
- Ruch z twojej maszyny (9.8.7.6) do VPS (4.3.2.1) przepłynie przez poprzednią, nigdy nie zmienioną ścieżkę;
- Ruch z VPS (4.3.2.1) do twojej maszyny (9.8.7.6):
- bez sieci VPN (stąd początkowo) był kierowany przez bramę 4.3.2.254;
- po ustanowieniu łącza VPN, z powiązaną wymianą def-gw, jest kierowany przez VPN (10.10.10.1).
Innymi słowy: jak tylko połączenie VPN zostanie ustanowione, twoja trasa powrotna z VPS do twojego komputera zmieni się i ... to nie jest dobra rzecz (kilka urządzeń sieciowych wzdłuż ścieżki powrotnej może rozpoznać taką asymetrię ścieżka i po prostu upuść pakiety).
Co więcej, istnieje duże prawdopodobieństwo, że twój zdalny serwer OpenVPN działa jak NAT-box: cały ruch przychodzący z VPN będzie NATted z publicznym adresem IP zdalnego serwera OpenVPN. Jeśli to prawda, to już nie ma rzeczy ... „nie jest dobrze”, ale zdecydowanie „źle”, jak w przypadku połączenia SSH: ruch powrotny, oprócz powrotu inną drogą, wraca na komputer z inny źródłowy adres IP (jeden z publicznego interfejsu serwera VPN).
Jak rozwiązać ten problem?
Rzeczywiście dość łatwo.
Wystarczy poinstruować serwer VPS, aby nie kierował ruchu do maszyny wzdłuż sieci VPN, ale zamiast tego polegał na poprzedniej trasie . Przed uruchomieniem OpenVPN powinno to być tak proste, jak dodanie:
route add -host 9.8.7.6 gw 4.3.2.254
gdzie:
- 9.8.7.6 to publiczny adres IP komputera
- 4.3.2.254 jest oryginalną bramą domyślną twojego VPS.
PS: udzielając bardziej szczegółowego pytania, uzyskałbyś znacznie szybszą odpowiedź :-)