Łączenie się ze zdalnym serwerem za pośrednictwem sieci VPN, gdy adres podsieci sieci lokalnej powoduje konflikt z siecią zdalną


35

To jest pytanie kanoniczne dotyczące rozwiązywania konfliktów podsieci IPv4 między siecią lokalną klienta VPN a siecią łączącą się z nim.

Po połączeniu ze zdalną lokalizacją przez OpenVPN klienci próbują uzyskać dostęp do serwera w sieci, która istnieje w podsieci, takiej jak 192.0.2.0/24. Czasami jednak sieć w sieci LAN klienta ma ten sam adres podsieci: 192.0.2.0/24. Klienci nie mogą połączyć się ze zdalnym serwerem przez wpisanie jego adresu IP z powodu tego konfliktu. Nie mogą nawet uzyskać dostępu do publicznego Internetu po podłączeniu do sieci VPN.

Problem polega na tym, że ta podsieć 192.0.2.0/24 musi być routowana przez VPN, ale musi także być routowana jako sieć LAN klienta.

Czy ktoś wie, jak złagodzić ten problem? Mam dostęp do serwera OpenVPN.


3
Możesz spróbować ustawić trasę statyczną dla adresu / 32 hosta, do którego próbujesz dotrzeć, i użyć elementu równorzędnego VPN jako bramy i zobaczyć, co się stanie.
SpacemanSpiff

jeśli koncentrator VPN honoruje trasy klienta, zabezpieczenia obwodowe mogą potrzebować pomocy. dostaję dostęp do sieci księgowej, dodaję trasę do zakresu inżynierskiego, a potem nie mogę się połączyć. robią to kiepskie zapory ogniowe, takie jak Sonicwall
nandoP

@SpacemanSpiff: Chociaż może to rozwiązać problem po stronie klienta, serwer nadal nie będzie w stanie odpowiedzieć, ponieważ zobaczy, że połączenie pochodzi z jego własnej sieci, a nie z klienta VPN.
Massimo,

Odpowiedzi:


18

Można to rozwiązać za pomocą NAT; po prostu nie jest zbyt elegancki.

Zatem przy założeniu, że nie można rozwiązać tego problemu, mając sieci wewnętrzne, które mają tak rzadkie numery sieci, że nigdy nie wchodzą w konflikt, oto zasada:

Ponieważ zarówno lokalna, jak i zdalna podsieć mają identyczne numery sieciowe, ruch z twojego klienta nigdy nie zda sobie sprawy, że musi przejść przez bramę tunelu, aby dotrzeć do miejsca docelowego. I nawet jeśli sobie to wyobrażamy, sytuacja byłaby taka sama dla zdalnego hosta, ponieważ ma zamiar wysłać odpowiedź.

Więc zostań ze mną i udawaj, że jak dotąd nie ma żadnych problemów ubocznych, piszę, że aby uzyskać pełną łączność, trzeba będzie NAT obu końców w tunelu, aby zróżnicować hosty i umożliwić routing.

Tworzenie niektórych sieci tutaj:

  • Twoja sieć biurowa używa 192.0.2.0/24
  • Twoje zdalne biuro używa 192.0.2.0/24
  • Brama VPN Twojej sieci biurowej ukrywa 192.0.2.0/24 hostów za numerem sieci NATed 198.51.100.0/24
  • Brama VPN Twojej sieci zdalnej biura ukrywa 192.0.2.0/24 hostów za numerem sieci NATed 203.0.113.0/24

Wewnątrz tunelu VPN hostami biurowymi jest teraz 198.51.100.x, a hostami zdalnymi biurowymi 203.0.113.x. Udawajmy, że wszystkie hosty są mapowane 1: 1 w NAT ich odpowiednich bram VPN. Przykład:

  • Host sieci biurowej 192.0.2.5/24 jest odwzorowany statycznie na 198.51.100.5/24 w translacji NAT Office Office VPN
  • Host sieci zdalnej biura 192.0.2.5/24 jest statycznie mapowany jako 203.0.113.5/24 w NAT VPN bramy VPN biura zdalnego

Więc jeśli host 192.0.2.5/24 w biurze zdalnym chce połączyć się z hostem z tym samym adresem IP w sieci biurowej, musi to zrobić, używając adresu 198.51.100.5/24 jako miejsca docelowego. Zdarza się:

  • W zdalnym biurze host 198.51.100.5 to zdalne miejsce docelowe osiągane przez VPN i tam kierowane.
  • W zdalnym biurze host 192.0.2.5 jest maskowany jako 203.0.113.5, gdy pakiet przechodzi przez funkcję NAT.
  • W biurze host 198.51.100.5 jest tłumaczony na 192.0.2.5, gdy pakiet przechodzi przez funkcję NAT.
  • W biurze ruch powrotny do hosta 203.0.113.5 przechodzi ten sam proces w odwrotnym kierunku.

Chociaż istnieje rozwiązanie, istnieje wiele kwestii, które należy rozwiązać, aby działało w praktyce:

  • Maskaradowane IP musi być użyte do zdalnej łączności; DNS się komplikuje. Wynika to z faktu, że punkty końcowe muszą mieć unikalny adres IP widziany z hosta łączącego.
  • Funkcja NAT musi być zaimplementowana na obu końcach jako część rozwiązania VPN.
  • Statyczne mapowanie hostów jest koniecznością dla osiągnięcia osiągalności z drugiego końca.
  • Jeśli ruch jest jednokierunkowy, tylko odbiorca końcowy potrzebuje statycznego mapowania wszystkich zaangażowanych hostów; w razie potrzeby klient może uniknąć dynamicznej NAT.
  • Jeśli ruch jest dwukierunkowy, oba końce wymagają statycznego mapowania wszystkich zaangażowanych hostów.
  • Łączność z Internetem nie może być zakłócona bez względu na podzielony lub nierozdzielony VPN.
  • Jeśli nie możesz zmapować 1 na 1, robi się bałagan; staranne prowadzenie ksiąg rachunkowych jest koniecznością.
  • Oczywiście istnieje ryzyko użycia adresów NAT, które również okazują się duplikatami :-)

Rozwiązanie tego problemu wymaga starannego zaprojektowania. Jeśli twoje zdalne biuro naprawdę składa się z wojowników drogowych, dodajesz warstwę problemów w tym:

  • nigdy nie wiedzą z góry, kiedy kończą się nakładającymi się identyfikatorami sieci.
  • brama NAT zdalnego biura powinna być zaimplementowana na ich laptopach.
  • brama biurowa potrzebowałaby dwóch sieci VPN, jednej wolnej od NAT i jednej NATed, aby obsłużyć oba scenariusze. W przeciwnym razie, gdyby ktoś wybrał jedną z podsieci, które wybrałeś dla metody NAT, rzeczy nie działałyby .

W zależności od klienta VPN może być możliwe automatyczne wybranie jednej sieci VPN lub drugiej w zależności od adresu sieciowego segmentu lokalnego.

Zauważ, że wszystkie wzmianki o NAT w tym kontekście oznaczają funkcję NAT, która, że ​​tak powiem, ma miejsce w perspektywie tunelu. Procesowo, statyczne mapowanie NAT musi zostać wykonane, zanim pakiet „wejdzie” do tunelu, tj. Zanim zostanie zamknięty w pakiecie transportowym, który ma go przenieść przez Internet do innej bramy VPN.

Oznacza to, że nie należy mylić publicznych adresów IP bram VPN (które w praktyce mogą być również NAT: ed, ale wtedy całkowicie poza perspektywą transportu do zdalnej strony przez VPN) z unikalnymi prywatnymi adresami używanymi jako maskarady dla duplikatów adresów prywatnych. Jeśli ta abstrakcja jest trudna do wyobrażenia, ilustruje to, w jaki sposób NAT może być fizycznie oddzielony od bramki VPN w tym celu:
Wykorzystanie NAT w nakładających się sieciach .

Skondensowanie tego samego obrazu do logicznej separacji wewnątrz jednego komputera, zdolnego do wykonywania zarówno funkcji NAT, jak i bramy VPN, po prostu posuwa ten sam przykład o krok dalej, ale kładzie większy nacisk na możliwości dostępnego oprogramowania. Złamanie go razem z, na przykład OpenVPN i iptables, i opublikowanie rozwiązania tutaj byłoby godnym wyzwaniem.


Pod względem oprogramowania z pewnością jest to możliwe: PIX / ASA 7.x i później: VPN IPsec LAN-to-LAN z nakładającymi się przykładami konfiguracji sieci
i:
Konfigurowanie tunelu IPSec między routerami ze zduplikowanymi podsieciami LAN

Rzeczywista implementacja zależy zatem od wielu czynników, zaangażowanych systemów operacyjnych, powiązanego oprogramowania i jego możliwości. Ale z pewnością jest to wykonalne. Musisz trochę pomyśleć i poeksperymentować.

Nauczyłem się tego od Cisco, co widać po linkach.


Czy NAT może działać również z wieloma połączeniami VPN i ich tłumaczeniami? Nie do końca zrozumiałem tu przypadek. Mam tutaj wątek unix.stackexchange.com/q/284696/16920 o tym, jak zrobić VPN typu
Léo Léopold Hertz

17

Jeśli potrzebujesz tymczasowego brudnego obejścia dla pojedynczego lub garstki znanych serwerów ips, najprostszym rozwiązaniem powinna być statyczna opcja routingu po stronie klienta.

W moim przypadku dodałem żądany serwer docelowy (192.168.1.100) do mojej tabeli routingu na moim kliencie linuksowym poprzez:

route add 192.168.1.100 dev tun0

Następnie usuń tę statyczną trasę za pomocą polecenia route delete.


2
To idealne rozwiązanie, a nawet doskonały czas! :)
Yuval A

Jak długo to trwa? Dopóki się nie rozłączysz? Do momentu ponownego uruchomienia?
carbocation

1
W moim systemie Linux (xfce z Ubuntu / mint) ustawienia są „utracone” po rozłączeniu VPN i tak, również po ponownym uruchomieniu. Możesz sprawdzić, czy ustawienie jest aktywne za pomocą polecenia route (pojawi się wpis mający ip i urządzenie tun0 zwykle na dole)
Aydin K.,

Wersja trasy OSX ma inny interfejs, więc zamiast tego dev tun0potrzebujesz-interface tun0
Syreny

5

tak to jest najgorsze. dla mnie zdarzało się to cały czas z pokoi hotelowych, zanim administratorzy VPN zdali sobie sprawę, że powinni użyć bardziej niejasnych zakresów IP. 10.0.0.0/24 i 10.1.1.1/24 są najgorsze. jeśli możesz pomóc, nigdy nie używaj ip takiej sieci bezprzewodowej.

więc odpowiedź brzmi: „napraw” WAP, aby użyć innej sieci wewnętrznej (tj. 10.255.255.0/24), a następnie dać ci dzierżawę różnic (tj. ip w zakresie, który może przekierowywać z powrotem do VPN Corp), lub jeśli nie masz / cant dostać admin na wap, po prostu przejdź do starbucks. lub 20 minut wardriving :)

jeśli jest to tylko ustawienie laboratoryjne, użyj innych zakresów.


Cholera naprawdę? Nie ma lepszej opcji?
John Russell

1
nie żebym wiedziała ... to zawsze był problem ... wygląda na to, że ktoś głosował za moją odpowiedzią, ale tak naprawdę nie zaproponował rozwiązania ... ha zabił posłańca!
nandoP

3

Jestem na komputerze Mac z systemem El Capitan. Chociaż powyższe sugestie nie działały dla mnie, doprowadziły mnie do skutecznego rozwiązania:

  1. przed uruchomieniem VPN wykonaj ifconfig
  2. uruchom VPN, zrób ifconfigi zanotuj, który jest nowym interfejsem. W moim przypadku był to ppp0 z adresem IP 192.168.42.74

    ppp0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1280
        inet 192.168.42.74 --> 192.0.2.1 netmask 0xffffff00
    
  3. Wpisz:

    sudo route add 192.168.1.79  192.168.42.74
    

Najpierw przetestowałem a, pinga następnie udowodniłem, że działa, uzyskując dostęp do serwera git.

Kiedy próbowałem użyć dev ppp0 do końca polecenia route, jak wspomniano powyżej, to narzekało.


2
Co jest 192.168.1.79pochodzący z tej wymiany?
carbocation

Serwer docelowy, z którym się łączysz. Ten serwer znajduje się w tej samej sieci co VPN, a nie w lokalnym połączeniu.
Carlo del Mundo,

1

Mam proste rozwiązanie, którego używam w przestrzeni coworkingowej o sprzecznym zakresie adresów IP (10.x)

Połączyłem się z siecią za pomocą telefonu komórkowego, a następnie udostępniłem połączenie sieciowe przez bluetooth mojemu laptopowi. Teraz mogę korzystać z VPN dla mojego zdalnego pracodawcy.

Jestem pewien, że będzie działać tak samo przez USB, jeśli potrzebujesz szybszego połączenia.


1
Hej, to jest całkiem sprytne rozwiązanie.
Nathan Osman,

1

Jeśli potrzebujesz tylko jednego lub dwóch adresów IP, dodaj instrukcję route do pliku konfiguracyjnego ovpn w następujący sposób:

trasa 192.168.1.10 255.255.255.255

trasa 192.168.1.11 255.255.255.255

Dodaje trasę tylko dla tych IP po podłączeniu VPN i usuwa ją, gdy VPN się rozłączy.

W każdym razie pracował dla mnie w systemie Windows.


1

Odpowiedź Aydina K. dotyczy Linuksa. Jeśli chcesz taką samą funkcjonalność dla systemu Windows, możesz wpisać

route ADD 192.168.1.10 <IP of tunnel adapter>

lub

route ADD 192.168.1.10 IF <interface id>

identyfikator interfejsu można uzyskać za pomocą polecenia:

route print

0

Przypominamy: cały ten problem wynika z wielu lat braku adresu IPv4 i szerokiego wykorzystania prywatnego zakresu adresów IP za NAT do obejścia tego braku!

Idealne i ostateczne rozwiązanie tego problemu jest dość proste (aczkolwiek może i będzie potrzebowało trochę czasu na globalne wdrożenie): IPv6 ...

W świecie IPv6 nie ma publicznego niedoboru adresów IP (i nie będzie takiego wydarzenia za kilka dekad). Nie ma więc powodu, aby nie mieć publicznego adresu IP na każdym urządzeniu w każdej sieci. A jeśli potrzebujesz izolacji sieci, kontynuuj filtrowanie za pomocą zapory ogniowej, ale bez brzydkiego NAT ...

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.