1/56 VPN a problem NAT - NAT Traversal: Wyklad akademicki
  • Wyklad poswiecony kluczowemu zagadnieniu interoperacyjnosci VPN z translacja adresow sieciowych (NAT).
  • Network Address Translation (NAT) jest wszechobecny w dzisiejszym Internecie - kazde domowe lacze, hotspot Wi-Fi, siec LTE korzysta z NAT.
  • Protokoly VPN, szczegolnie IPSec, maja fundamentalne problemy z dzialaniem przez NAT.
  • NAT Traversal (NAT-T) to zestaw technik pozwalajacych VPN dzialac poprawnie w srodowiskach z NAT.
  • Plan: Czym jest NAT -> Dlaczego przeszkadza VPN -> NAT-T w teorii -> Konfiguracja na RouterOS i Cisco.

Problem interoperacyjności pomiędzy protokołami VPN a mechanizmem translacji adresów sieciowych stanowi jedno z największych wyzwań w praktyce inżynierskiej. Współczesne sieci komputerowe w przeważającej większości korzystają z NAT zarówno na poziomie domowych routerów, jak i operatorskich bram dostępowych. Protokoły takie jak IPSec, które zostały zaprojektowane jeszcze przed upowszechnieniem się NAT, napotykają fundamentalne trudności w działaniu przez translację adresów.

Mechanizm NAT Traversal, zdefiniowany w dokumentach RFC 3947 i RFC 3948, stanowi odpowiedź środowiska inżynierskiego na ten problem. Polega on na wykrywaniu obecności NAT po drodze pakietów, a następnie enkapsulacji oryginalnych ramek ESP w pakiety UDP z docelowym portem 4500. Dzięki temu translacja adresów może modyfikować pakiety w standardowy sposób, a końcowe urządzenie VPN po odebraniu pakietu UDP wyodrębnia z niego oryginalną ramkę ESP.

W trakcie niniejszego wykładu przeanalizujemy szczegółowo zarówno teoretyczne podstawy NAT-T, jak i praktyczne konfiguracje na dwóch najpopularniejszych platformach routingu: MikroTik RouterOS oraz Cisco IOS. Omówione zostaną również zagadnienia zaawansowane, takie jak podwójny NAT operatorski, symetryczne typy translacji oraz metody diagnostyki z użyciem analizatora protokołów Wireshark.

2/56 Czym jest NAT? - definicja i geneza
  • NAT (Network Address Translation) - mechanizm translacji adresow IP zdefiniowany w RFC 3022 (2001).
  • Pozwala wielu urzadzeniom w sieci prywatnej wspoldzielic jeden publiczny adres IP.
  • Glowna przyczyna: wyczerpanie puli adresow IPv4 (IANA wyczerpala pule w 2011 r.).
  • Router NAT modyfikuje naglowki IP: zamienia prywatny adres zrodlowy na publiczny i odwrotnie.
  • NAT jest stanowy (stateful) - router utrzymuje tablice translacji (NAT table).

Network Address Translation, choć często postrzegany jako tymczasowe rozwiązanie problemu wyczerpania adresów IPv4, stał się trwałym elementem architektury internetowej. Jego geneza sięga połowy lat dziewięćdziesiątych, kiedy to zaczęto dostrzegać, że pula adresów IPv4 jest ograniczona, a tempo przydzielania nowych bloków adresowych stale rośnie. W odpowiedzi na to wyzwanie powstała koncepcja umożliwiająca wielu hostom w sieci prywatnej współdzielenie jednego publicznego adresu IP.

NAT działa poprzez modyfikację nagłówków IP w locie - router translujący zamienia prywatny adres źródłowy na swój własny adres publiczny. Każda taka translacja jest rejestrowana w tablicy stanów, co pozwala na odwrócenie operacji po otrzymaniu pakietu odpowiedzi. Bez odpowiedniego wpisu w tablicy translacji pakiet przychodzący z zewnątrz jest odrzucany, co sprawia, że NAT pełni również funkcję podstawowej zapory sieciowej.

Z punktu widzenia protokołów VPN translacja adresów stanowi szczególne utrudnienie, ponieważ wiele protokołów tunelujących, a zwłaszcza IPSec, wymaga nienaruszonej postaci oryginalnych nagłówków IP. Modyfikacja adresów przez NAT może prowadzić do odrzucenia pakietów po stronie odbiorcy, ponieważ suma kontrolna lub układ nagłówka nie zgadza się z wartościami spodziewanymi przez implementację protokołu.

3/56 Rodzaje translacji NAT
  • SNAT (Source NAT): Modyfikacja adresu zrodlowego. Stosowany dla ruchu wychodzacego z sieci lokalnej do Internetu.
  • DNAT (Destination NAT): Modyfikacja adresu docelowego. Umożliwia port forwarding - kierowanie ruchu z zewnatrz do serwerow wewnetrznych.
  • PAT (Port Address Translation) / NAT Overload: Dodatkowo modyfikuje porty TCP/UDP. Pozwala wielu urzadzeniom wspoldzielic jeden IP z roznymi portami. NAJPOPULARNIEJSZY.
  • CGNAT (Carrier-Grade NAT): NAT operatorski - podwojna translacja u dostawcy Internetu (RFC 6598, adresacja 100.64.0.0/10). Uzywany w sieciach LTE/5G.

Podstawowe rozróżnienie na SNAT i DNAT ma kluczowe znaczenie przy projektowaniu polityk dostępu w sieciach korporacyjnych. SNAT jest stosowany przede wszystkim dla ruchu wychodzącego z sieci wewnętrznej do Internetu. Dzięki niemu użytkownicy w sieci lokalnej mogą łączyć się z zasobami zewnętrznymi, a wszystkie odpowiedzi są poprawnie kierowane z powrotem do inicjującego hosta. DNAT natomiast umożliwia kierowanie ruchu przychodzącego z zewnątrz do konkretnych serwerów wewnątrz sieci prywatnej.

PAT, znany również jako przeciążenie NAT, jest najczęściej spotykaną formą translacji w środowiskach domowych i małych firmach. Wykorzystuje on nie tylko adres IP, ale również numery portów TCP i UDP do rozróżniania poszczególnych połączeń. Dzięki temu tysiące równoczesnych sesji z różnych urządzeń mogą współdzielić jeden publiczny adres IP, co znacząco opóźniło wyczerpanie puli adresów IPv4.

CGNAT stanowi specyficzną formę NAT stosowaną przez operatorów telekomunikacyjnych w sieciach LTE i 5G. W tym scenariuszu dochodzi do podwójnej translacji - najpierw na poziomie domowego routera, a następnie na bramie operatorskiej. Taka konfiguracja stwarza szczególne wyzwania dla protokołów VPN, ponieważ wymaga dwukrotnego przejścia przez NAT, co zwiększa ryzyko niepowodzenia negocjacji tunelu.

4/56 Typy NAT wg RFC 3489/4787
  • Full Cone NAT: Kazde zadanie z tego samego wewnetrznego IP:port jest mapowane na ten sam zewnetrzny IP:port. Dowolny host zewnetrzny moze wyslac pakiet do wewnetrznego.
  • Address-Restricted Cone NAT: Jak Full Cone, ale tylko hosty, do ktorych wewnetrzny wyslal wczesniej pakiet, moga odpowiedziec.
  • Port-Restricted Cone NAT: Jak Address-Restricted, ale dodatkowo sprawdzany jest port zrodlowy hosta zewnetrznego.
  • Symmetric NAT: Kazde zadanie do innego celu otrzymuje INNE mapowanie portu. Najbardziej restrykcyjny. Stanowi wyzwanie dla NAT-T.

Klasyfikacja typów NAT według RFC 3489, a później zaktualizowana przez RFC 4787, ma fundamentalne znaczenie dla zrozumienia, dlaczego niektóre protokoły VPN działają poprawnie tylko przez określone typy translacji. Full Cone NAT jest najbardziej liberalny - po ustanowieniu mapowania dla pary wewnętrznych adresów IP i portów, dowolny host zewnętrzny może wysyłać pakiety do wewnętrznego urządzenia. To sprawia, że jest on najłatwiejszy do obsłużenia przez mechanizmy NAT-T.

W miarę wzrostu restrykcyjności translacji maleje liczba protokołów VPN zdolnych do poprawnego działania. Port-Restricted Cone dodaje dodatkową kontrolę sprawdzającą, czy port źródłowy hosta zewnętrznego zgadza się z zapisanym w tablicy translacji. Symmetric NAT jest najbardziej problematyczny, ponieważ tworzy unikalne mapowanie dla każdej pary adresów źródłowych i docelowych. Oznacza to, że nawet jeśli klient VPN wysyła pakiety z tego samego wewnętrznego portu, router może przypisać inny zewnętrzny port dla każdego docelowego serwera.

Dla inżyniera sieciowego kluczowe jest zidentyfikowanie, z jakim typem NAT ma do czynienia przed przystąpieniem do konfiguracji VPN. Narzędzia takie jak STUN pozwalają na automatyczne wykrywanie typu NAT, co jest szczególnie przydatne przy projektowaniu rozwiązań mesh VPN korzystających z technik przebijania się przez NAT, takich jak ICE lub UDP hole punching.

5/56 Mechanizm dzialania NAT - krok po kroku
  • 1. Host 192.168.1.10:33456 wysyla pakiet do 8.8.8.8:53 (zapytanie DNS).
  • 2. Router NAT tworzy wpis w tablicy: (192.168.1.10:33456 <-> 203.0.113.1:55000).
  • 3. Router podmienia zrodlowy adres IP i port: wychodzi jako 203.0.113.1:55000 -> 8.8.8.8:53.
  • 4. Serwer 8.8.8.8 odpowiada: 8.8.8.8:53 -> 203.0.113.1:55000.
  • 5. Router odbiera odpowiedz, szuka w tablicy translacji i odwraca translacje.
  • 6. Bez wpisu w tablicy - pakiet przychodzacy jest ODRZUCANY (NAT dziala jak firewall stanowy).

Szczegółowe zrozumienie mechanizmu działania NAT wymaga przeanalizowania wszystkich etapów translacji, od momentu wysłania pakietu przez host wewnętrzny aż do odebrania odpowiedzi. Każdy pakiet wychodzący jest przechwytywany przez router NAT, który sprawdza swoją tablicę translacji w poszukiwaniu istniejącego mapowania. Jeśli mapowanie nie istnieje, router tworzy nowy wpis, przydzielając wolny port z puli dostępnych na interfejsie zewnętrznym.

Proces odwrotny, czyli translacja pakietów przychodzących, również wymaga sprawdzenia tablicy stanów. Router musi odszukać wpis odpowiadający docelowemu adresowi IP i portowi, a następnie podmienić je na prywatne adresy wewnętrznego hosta. Jeżeli taki wpis nie istnieje, pakiet jest odrzucany - zachowanie to jest przyczyną, dla której NAT bywa nazywany zaporą sieciową z ograniczoną funkcjonalnością.

Problem z protokołami VPN polega na tym, że często wysyłają one pakiety, których struktura wewnętrzna zawiera adresy IP nieprzeznaczone do modyfikacji przez NAT. W przypadku IPSec protokół AH uwierzytelnia cały pakiet, włącznie z polami nagłówka IP, co oznacza, że jakakolwiek zmiana adresu źródłowego powoduje odrzucenie pakietu po stronie odbiorcy. Podobnie ESP w trybie tunelowym otacza oryginalny pakiet nowym nagłówkiem, który również może podlegać translacji.

6/56 Zastosowania NAT w praktyce
  • Internet domowy: Router DSL/swiatlowodowy wykonuje NAT/PAT - wiele urzadzen dzieli jeden publiczny IP od dostawcy.
  • Siec firmowa: NAT na routerze brzegowym, czesto polaczony z firewallem. DMZ dla serwerow publicznych.
  • Operatorzy komorkowi (CGNAT): LTE/5G: jeden publiczny IP dla setek klientow. Adresacja z RFC 6598 (100.64.0.0/10).
  • Konsekwencja: 90%+ polaczen VPN przechodzi przez co najmniej jeden NAT. VPN musi dzialac przez KAZDY typ NAT.

Praktyczne zastosowania NAT wykraczają daleko poza prostą translację adresów w domowych routerach. W środowiskach korporacyjnych NAT jest często łączony z funkcjami zaawansowanej zapory sieciowej, co pozwala na szczegółowe kontrolowanie ruchu przychodzącego i wychodzącego. Strefy DMZ, w których umieszcza się publicznie dostępne serwery, wykorzystują DNAT do przekierowywania ruchu z zewnętrznego adresu IP na wewnętrzne serwery aplikacyjne.

W sieciach operatorskich CGNAT stał się standardem w obliczu wyczerpania puli adresów IPv4. Operatorzy komórkowi stosują CGNAT w swoich sieciach LTE i 5G, co oznacza, że każdy abonent korzysta z prywatnego adresu z zakresu 100.64.0.0/10. W praktyce oznacza to, że nawet jeśli klient wykupi usługę z publicznym adresem IP na routerze domowym, jego ruch może przechodzić przez dodatkowy NAT operatorski.

Konsekwencją powszechności NAT jest fakt, że zdecydowana większość ruchu VPN na świecie przechodzi przez co najmniej jeden poziom translacji. Protokoły VPN muszą być projektowane i konfigurowane z uwzględnieniem tej rzeczywistości. Inżynier sieciowy, który nie rozumie mechanizmów NAT-T, ryzykuje, że skonfigurowane przez niego tunele VPN będą działać niestabilnie lub całkowicie niepoprawnie.

7/56 NAT - kluczowe fakty przed przejsciem do VPN
  • NAT modyfikuje adresy IP (i opcjonalnie porty) w naglowkach pakietow.
  • NAT jest stanowy - wymaga tablicy translacji do odwrocenia mapowania.
  • Ruch przychodzacy bez wpisu w tablicy jest odrzucany.
  • PAT modyfikuje porty TCP/UDP - to klucz do rozrozniania wielu klientow.
  • CGNAT dodaje drugi poziom translacji - podwojny problem dla VPN.
  • Pytanie: Jak protokol VPN, ktory szyfruje caly pakiet (w tym naglowki IP), moze dzialac przez urzadzenie modyfikujace te naglowki?

Zanim przejdziemy do szczegółowej analizy rozwiązań NAT-T, warto utrwalić kilka kluczowych faktów dotyczących samego NAT, które mają bezpośrednie przełożenie na działanie protokołów VPN. Po pierwsze, NAT modyfikuje nie tylko adresy IP, ale w przypadku PAT również porty TCP i UDP. Po drugie, każda modyfikacja nagłówka IP wymaga ponownego przeliczenia sum kontrolnych, co w przypadku protokołów uwierzytelniających integralność pakietu prowadzi do konfliktu.

Stanowość NAT oznacza, że aby pakiet mógł zostać poprawnie odebrany z zewnątrz, musi istnieć odpowiedni wpis w tablicy translacji. W przypadku protokołów takich jak IPSec, gdzie komunikacja często inicjowana jest z obu stron jednocześnie, brak wpisu w tablicy może uniemożliwić ustanowienie tunelu. Dodatkowym utrudnieniem jest fakt, że wiele implementacji NAT usuwa wpisy z tablicy po krótkim okresie bezczynności.

CGNAT podwaja te problemy, dodając drugą warstwę translacji. Oznacza to, że nawet jeśli router domowy poprawnie obsłuży NAT-T dla IPSec, operatorska brama CGNAT może ponownie zmodyfikować pakiety, co prowadzi do nieoczekiwanych błędów. Zrozumienie tych zależności jest kluczowe przy projektowaniu rozwiązań VPN dla klientów korzystających z mobilnego dostępu do Internetu.

8/56 Dlaczego NAT przeszkadza VPN? - protokol ESP
  • ESP (Encapsulating Security Payload) - protokol IP nr 50, uzywany przez IPSec do przenoszenia szyfrowanych danych.
  • ESP jest protokolem warstwy 3 - NIE posiada pol portu zrodlowego ani docelowego!
  • Gdy router PAT otrzymuje pakiet ESP, nie wie do ktorego klienta wewnetrznego ma go przekazac.
  • Sytuacja: dwoch klientow za NAT laczy sie z tym samym serwerem IPSec. Obaj maja zrodlowy IP = 203.0.113.1 po translacji.
  • Router nie moze odroznic pakietow ESP od roznych klientow - nie ma portow do rozroznienia.
  • Rozwiazanie tymczasowe: IPsec Passthrough w routerach SOHO - dziala tylko dla JEDNEGO klienta.

Aby w pełni zrozumieć problemy, jakie NAT sprawia poszczególnym protokołom VPN, należy przeanalizować, jak każdy z tych protokołów obsługuje pakiety w warstwie sieciowej. Protokół ESP w trybie transportowym dodaje swój nagłówek pomiędzy oryginalny nagłówek IP a warstwę transportową, co oznacza, że adresy IP w zewnętrznym nagłówku mogą być modyfikowane przez NAT bez naruszania integralności danych. Problem pojawia się jednak wtedy, gdy router NAT nie rozpoznaje protokołu 50 i nie przepuszcza go przez zaporę sieciową.

AH z kolei uwierzytelnia cały pakiet IP, włącznie z polem adresu źródłowego. Jakakolwiek modyfikacja tego adresu przez NAT powoduje, że strona odbierająca odrzuca pakiet z powodu niezgodności sumy uwierzytelniającej. To sprawia, że AH jest całkowicie niekompatybilny z NAT i nie może być stosowany w środowiskach, w których występuje translacja adresów. Z tego powodu w praktyce inżynierskiej zdecydowanie częściej stosuje się ESP niż AH.

Protokoły IKE używane do negocjacji parametrów IPSec wysyłają pakiety na port UDP 500. W przypadku obecności NAT, pakiety te przechodzą przez translację bez większych problemów, o ile zapora sieciowa przepuszcza ruch na tym porcie. Problem pojawia się, gdy sama negocjacja wymaga wymiany adresów IP w ramach payloadów IKE - te wewnętrzne adresy nie są modyfikowane przez NAT, co prowadzi do niezgodności między deklarowanymi a faktycznymi adresami końcowymi.

9/56 Problem z AH (Authentication Header)
  • AH (Authentication Header) - protokol IP nr 51, zapewnia integralnosc i uwierzytelnianie (bez szyfrowania).
  • AH swoja ochrona obejmuje CALY pakiet IP, wlacznie z niezmiennymi polami naglowka (w tym adres zrodlowy).
  • Jesli NAT zmieni adres IP, suma kontrolna AH (ICV) zostaje uniewazniona - pakiet ODRZUCONY.
  • AH chroni adres zrodlowy - NAT zmienia adres zrodlowy -> naruszenie integralnosci AH.
  • Wniosek: AH jest CALKOWICIE NIEZGODNY z NAT. Nalezy uzywac ESP zamiast AH.
  • Nowoczesne wdrozenia IPSec uzywaja wylacznie ESP. AH jest praktycznie wymarly.

Rozwiązanie problemów NAT dla protokołu IPSec wymagało stworzenia mechanizmu, który pozwoli na wykrycie obecności translacji oraz dostosowanie sposobu enkapsulacji pakietów. Podstawową ideą NAT-T jest enkapsulacja oryginalnych pakietów ESP w zwykłe datagramy UDP z docelowym portem 4500. Dzięki temu router NAT traktuje ruch VPN jako standardowy ruch UDP i może go translować bez naruszania integralności wewnętrznych struktur danych.

Proces NAT-T rozpoczyna się już podczas negocjacji IKE, kiedy obie strony wymieniają się specjalnymi znacznikami Vendor ID, które informują o wsparciu dla mechanizmu NAT-T. Następnie wysyłane są pakiety NAT-D, które zawierają skróty adresów IP i portów z perspektywy każdej ze stron. Porównanie tych skrótów pozwala wykryć, czy po drodze występuje NAT.

Po potwierdzeniu obecności NAT następuje kluczowy moment - przełączenie komunikacji z domyślnego portu 500 na alternatywny port 4500. Od tego momentu wszystkie pakiety IKE oraz ESP są enkapsulowane w UDP i przesyłane przez port 4500. Dodatkowo wysyłane są cykliczne pakiety keepalive, które zapobiegają wygaśnięciu wpisów w tablicy translacji NAT.

10/56 Problem sum kontrolnych TCP/UDP a NAT
  • Naglowek TCP/UDP zawiera 16-bitowa sume kontrolna (checksum) obejmujaca pseudonaglowek IP (z adresami zrodlowym i docelowym).
  • Gdy NAT zmienia adres IP, pseudonaglowek ulega zmianie - suma kontrolna staje sie nieprawidlowa.
  • Routery NAT standardowo PRZELICZAJA sume kontrolna po zmianie adresu (dla nieszyfrowanego ruchu).
  • W przypadku IPSec, dane (w tym naglowki TCP/UDP wewnatrz) sa ZASZYFROWANE - NAT nie ma do nich dostepu!
  • NAT nie moze poprawic sumy kontrolnej wewnatrz tunelu IPSec, bo nie zna kluczy szyfrowania.
  • NAT-T rozwiazuje to przez enkapsulacje ESP w UDP - NAT widzi tylko zewnetrzny naglowek UDP.

Szczegółowa analiza sekwencji wymiany pakietów podczas negocjacji NAT-T pozwala lepiej zrozumieć, jak mechanizm ten radzi sobie z różnymi typami translacji. W pierwszym kroku każda ze stron wysyła pakiet Vendor ID zawierający skrót RFC 3947. Jeśli obie strony rozpoznają ten znacznik, proces NAT-T zostaje zainicjowany. W przeciwnym razie negocjacja kontynuowana jest w standardowy sposób, co może prowadzić do niepowodzenia w środowiskach z NAT.

Etap NAT-D wykrywania polega na wymianie czterech skrótów adresów IP i portów. Każda ze stron oblicza skrót swojego adresu źródłowego i docelowego przed translacją oraz po translacji. Jeżeli skróty te różnią się od siebie, oznacza to, że po drodze występuje NAT. Na podstawie tych informacji algorytm podejmuje decyzję o konieczności przełączenia na port 4500.

Wdrożenie NAT-T nie wymaga żadnych zmian po stronie klienta ani serwera, o ile obie strony obsługują ten mechanizm. Większość współczesnych implementacji IPSec, w tym zarówno RouterOS, jak i Cisco IOS, domyślnie włącza obsługę NAT-T. Problem może pojawić się w przypadku starszych wersji oprogramowania lub niestandardowych konfiguracji, w których ktoś ręcznie wyłączył obsługę NAT-T.

11/56 IKE i NAT - problem z negocjacją tunelu
  • IKE (Internet Key Exchange) - protokol zarzadzania kluczami dla IPSec, domyslnie uzywa UDP port 500.
  • Problem 1: Dwoch klientow za NAT wysyla IKE z portu 500 - NAT moze nie zmienic portu -> oba wygladaja identycznie dla serwera.
  • Problem 2: Uwierzytelnianie IKE oparte na adresie IP (PSK przypisany do adresu) przestaje dzialac - NAT zmienia adres.
  • Problem 3: Payloady IKE sa chronione integralnoscia - modyfikacja adresu przez NAT powoduje blad weryfikacji.
  • NAT-T rozwiazuje to przez: (a) uzycie portu 4500 zamiast 500, (b) dodanie NAT-D do wykrywania NAT.

Mechanizm enkapsulacji ESP w UDP na porcie 4500 został szczegółowo opisany w dokumencie RFC 3948. Gdy NAT-T jest aktywny, każdy pakiet ESP przed wysłaniem jest otaczany dodatkowym nagłówkiem UDP. Nowo powstały pakiet ma strukturę: nagłówek IP, nagłówek UDP z docelowym portem 4500, a następnie oryginalny pakiet ESP. Dzięki temu router NAT widzi standardowy ruch UDP i może go translować bez żadnych specjalnych modyfikacji.

Dla zapewnienia kompatybilności wstecznej, jeśli obie strony negocjacji IKE obsługują NAT-T, ale nie wykryto NAT na drodze pakietów, komunikacja kontynuowana jest w standardowy sposób bez enkapsulacji. Jest to ważne z punktu widzenia wydajności, ponieważ enkapsulacja UDP dodaje dodatkowe 8 bajtów nagłówka do każdego pakietu, co nieznacznie zwiększa narzut protokołowy.

W przypadku gdy jedna ze stron nie obsługuje NAT-T, komunikacja może zostać nawiązana przez standardowy port 500, ale tylko wtedy, gdy po drodze nie występuje NAT. Jeśli NAT jest obecny, a strona go nie obsługuje, tunel IPSec nie zostanie ustanowiony. Dlatego przed przystąpieniem do konfiguracji warto sprawdzić, czy obie strony mają włączoną obsługę NAT-T.

12/56 IPsec Passthrough (ALG) - rozwiazanie tymczasowe
  • Wiele routerow SOHO oferuje opcje IPsec Passthrough lub VPN Passthrough.
  • Dziala przez ALG - router analizuje pakiety IKE (UDP 500) i przepuszcza ESP do klienta, ktory wyslal IKE.
  • Ograniczenie 1: Dziala poprawnie tylko dla JEDNEGO klienta VPN za NAT.
  • Ograniczenie 2: Cale ESP przekierowywane do ostatniego klienta - pierwsi klienci traca polaczenie.
  • Ograniczenie 3: Router musi znac protokol IPSec - nie dziala z niestandardowymi implementacjami.
  • Ograniczenie 4: Nie rozwiazuje problemu CGNAT (dziala tylko na pierwszym poziomie NAT).
  • Wniosek: IPsec Passthrough jest przestarzaly - NAT-T jest poprawnym rozwiazaniem.

Pakiety keepalive w mechanizmie NAT-T pełnią kluczową rolę w utrzymaniu stabilności tunelu VPN przez translację adresów. Są to pakiety UDP wysyłane na port 4500, zawierające pojedynczy bajt o wartości 0xFF. Ich zadaniem jest odświeżanie wpisów w tablicy translacji NAT, które w przeciwnym razie wygasłyby po kilkudziesięciu sekundach bezczynności. Dzięki regularnemu wysyłaniu keepalive tunel pozostaje aktywny nawet przy braku ruchu danych.

Większość implementacji NAT-T wysyła pakiety keepalive co 20 do 30 sekund, co jest wartością wystarczającą dla typowych konfiguracji routerów domowych i korporacyjnych. W niektórych przypadkach, szczególnie przy CGNAT, konieczne może być zwiększenie częstotliwości wysyłania keepalive. Należy jednak pamiętać, że zbyt częste wysyłanie pakietów keepalive zwiększa obciążenie łącza i procesora routera.

Implementacja keepalive różni się w zależności od producenta sprzętu. W systemie RouterOS mechanizm keepalive jest wbudowany w protokół NAT-T i działa automatycznie po włączeniu nat-traversal. W Cisco IOS administrator musi ręcznie włączyć keepalive za pomocą komendy crypto isakmp nat keepalive. W przypadku OpenVPN i WireGuard funkcję keepalive pełni parametr ping lub PersistentKeepalive.

13/56 GRE przez NAT - dodatkowy problem
  • GRE (Generic Routing Encapsulation) - protokol IP nr 47, uzywany do enkapsulacji (PPTP, EoIP MikroTik).
  • Podobnie jak ESP, GRE nie posiada numerow portow - jest protokolem warstwy IP (Protocol 47).
  • GRE przez NAT cierpi na te same problemy: brak portow uniemozliwia PAT.
  • GRE nie ma wbudowanego mechanizmu wykrywania NAT ani enkapsulacji UDP.
  • Rozwiazania: (a) GRE over IPSec z NAT-T, (b) uzycie IPIP z NAT-T, (c) zamiana na OpenVPN.
  • W srodowiskach operatorskich (MikroTik EoIP/GRE) czesto stosuje sie IPSec do ochrony GRE.

Przeanalizujmy szczegółowo, dlaczego protokół IKE wymaga specjalnego traktowania w kontekście NAT. W ramach negocjacji IKE przesyłane są pakiety zawierające między innymi adresy IP interfejsów w postaci tak zwanych payloadów identyfikacyjnych. Jeśli NAT modyfikuje adres źródłowy w nagłówku IP, ale nie modyfikuje adresu wewnątrz payloadu IKE, dochodzi do niezgodności, która uniemożliwia poprawną autoryzację połączenia.

Mechanizm NAT-T rozwiązuje ten problem przez wprowadzenie dodatkowych payloadów NAT-D, które zawierają skróty faktycznych adresów IP i portów po obu stronach. Dzięki temu każda ze stron może zweryfikować, czy adres, z którego faktycznie pochodzi pakiet, zgadza się z adresem zadeklarowanym w negocjacji. Jeśli nie, oznacza to obecność NAT i konieczność przełączenia na port 4500.

W IKEv2 mechanizm NAT-T został zintegrowany bezpośrednio z protokołem i jest obowiązkowym elementem specyfikacji. Oznacza to, że każda implementacja IKEv2 musi obsługiwać NAT-T, co znacząco upraszcza konfigurację w porównaniu do IKEv1. Dodatkowo IKEv2 wprowadza mechanizm MOBIKE, który pozwala na zmianę adresu IP jednej ze stron bez konieczności ponownej negocjacji całego tunelu.

14/56 L2TP przez NAT - port UDP 1701
  • L2TP (Layer 2 Tunneling Protocol) - protokol tunelowania warstwy 2, uzywa UDP port 1701.
  • L2TP sam w sobie NIE jest szyfrowany - wszystkie dane w czystym tekscie.
  • Z tego powodu L2TP prawie zawsze jest laczony z IPSec (L2TP/IPSec).
  • Problem: L2TP dziala wewnatrz IPSec. Gdy NAT zmienia adres, IPSec (bez NAT-T) odrzuca pakiet.
  • L2TP/IPSec z NAT-T: caly ruch L2TP chroniony przez ESP z enkapsulacja UDP na porcie 4500.
  • Wymagane porty: UDP 500 (IKE), UDP 4500 (NAT-T), UDP 1701 (L2TP), IP 50 (ESP).

OpenVPN jest jednym z nielicznych protokołów VPN, które od samego początku zostały zaprojektowane z myślą o działaniu przez NAT. Działa on wyłącznie w warstwie użytkownika i korzysta ze standardowych protokołów transportowych TCP lub UDP. Ponieważ OpenVPN nie używa protokołów IP o niskim numerze, takich jak ESP czy AH, nie napotyka on problemów z translacją adresów na poziomie routera.

Domyślnie OpenVPN nasłuchuje na porcie UDP 1194, co oznacza, że administrator musi jedynie upewnić się, że ten port jest otwarty w zaporze sieciowej i przekierowany na odpowiedni adres wewnętrzny. W przypadku gdy obie strony znajdują się za NAT, konieczne jest skonfigurowanie przekierowania portów na routerze lub zastosowanie technik takich jak UDP hole punching.

OpenVPN oferuje również wsparcie dla protokołu TCP, co może być przydatne w środowiskach, w których UDP jest blokowany przez zaporę sieciową. Tryb TCP ma jednak wyższy narzut protokołowy i może być wolniejszy w przypadku łączy o dużej przepływności. W praktyce inżynierskiej zaleca się stosowanie UDP, chyba że specyfika sieci wymusza użycie TCP.

15/56 OpenVPN a NAT - naturalna kompatybilnosc
  • OpenVPN zostal zaprojektowany od poczatku z mysla o dzialaniu przez NAT i firewalle.
  • Dziala w userspace i uzywa standardowych protokolow transportowych: UDP lub TCP.
  • Dzieki enkapsulacji w UDP/TCP z numerami portow, PAT dziala bez problemu.
  • OpenVPN moze dzialac na dowolnym porcie, w tym TCP 443 (HTTPS) - omijanie firewalli.
  • Mechanizm float: zmiana zrodlowego adresu IP bez zrywania sesji TLS (LTE -> WiFi).
  • explicit-exit-notify: klient informuje serwer o zakonczeniu sesji, przyspieszajac usuniecie wpisu NAT.

Protokół WireGuard, zaprojektowany przez Jasona Donenfelda, stanowi nowoczesne podejście do tematu VPN, które eliminuje wiele problemów występujących w starszych protokołach. Jedną z kluczowych zalet WireGuard jest jego zdolność do pracy przez NAT bez potrzeby stosowania dodatkowych mechanizmów, takich jak NAT-T. Dzieje się tak dlatego, że WireGuard używa pojedynczego typu pakietów opartych na UDP, które podlegają standardowej translacji adresów.

WireGuard definiuje własny protokół transportowy, który łączy w sobie funkcje zarówno negocjacji kluczy, jak i tunelowania danych. Cała komunikacja odbywa się za pomocą pakietów UDP, które są w pełni kompatybilne z NAT. Jedynym wyzwaniem dla WireGuard w środowisku z translacją adresów jest konieczność utrzymania wpisów w tablicy NAT, co rozwiązuje się za pomocą parametru PersistentKeepalive.

W systemie RouterOS v7 dostępna jest natywna implementacja WireGuard, która integruje się bezpośrednio z interfejsem routingu. PersistentKeepalive w WireGuard działa podobnie jak keepalive w NAT-T - wysyła cykliczne pakiety w celu odświeżenia wpisów w tablicy translacji. Wartość 25 sekund jest zalecana dla większości scenariuszy, choć w przypadku agresywnego CGNAT może być konieczne skrócenie tego interwału.

16/56 WireGuard a NAT - minimalistyczne podejscie
  • WireGuard - protokol VPN nowej generacji, od poczatku zaprojektowany do pracy z NAT.
  • Uzywa UDP na pojedynczym porcie (domyslnie 51820) dla calej komunikacji.
  • PAT dziala normalnie - NAT widzi porty UDP i moze wykonywac translacje.
  • WireGuard nie wymaga NAT-T (jak IPSec) - wszystko juz jest w UDP.
  • PersistentKeepalive: utrzymuje wpis NAT aktywny (zalecane 25s dla srodowisk z NAT).
  • Automatyczny roaming: zmiana mapowania NAT nie zrywa polaczenia.
  • Ograniczenie: brak pushowania tras - wymaga recznej konfiguracji po stronie klienta.

Wybór odpowiedniego protokołu VPN w kontekście NAT zależy od wielu czynników, takich jak wymagania bezpieczeństwa, przepustowość łącza oraz typ posiadanej translacji. Dla środowisk korporacyjnych z zaawansowanymi wymaganiami dotyczącymi szyfrowania najlepszym wyborem pozostaje IPSec z włączonym NAT-T. Protokół ten oferuje najwyższy poziom bezpieczeństwa przy jednoczesnym wsparciu dla wszystkich typów NAT, włącznie z CGNAT.

Dla małych firm i użytkowników domowych, którzy potrzebują prostego w konfiguracji połączenia VPN, najlepszym wyborem jest OpenVPN lub WireGuard. Oba protokoły oferują łatwą konfigurację i wbudowane wsparcie dla pracy przez NAT. WireGuard dodatkowo zapewnia wyższą wydajność niż OpenVPN, szczególnie na urządzeniach o ograniczonej mocy obliczeniowej.

W przypadku łączenia wielu oddziałów firmy, z których każdy znajduje się za innym typem NAT, warto rozważyć zastosowanie topologii hub-and-spoke z centralnym serwerem VPN posiadającym publiczny adres IP. Takie rozwiązanie eliminuje problemy z bezpośrednim łączeniem się urządzeń za NAT i upraszcza zarządzanie politykami bezpieczeństwa. Alternatywnie można zastosować technologię mesh VPN, która automatycznie negocjuje bezpośrednie połączenia między oddziałami.

17/56 Podsumowanie problemow protokolow VPN z NAT
  • ESP (IP 50), AH (IP 51), GRE (IP 47): brak portow TCP/UDP -> PAT nie dziala.
  • AH: chroni caly pakiet IP -> kazda modyfikacja adresu przez NAT uniewaznia ICV -> calkowicie niekompatybilny.
  • ESP: szyfruje oryginalny pakiet -> NAT nie moze poprawic sum kontrolnych TCP/UDP wewnatrz.
  • IKE (UDP 500): wielu klientow za NAT -> konflikt portow zrodlowych.
  • PSK z adresem: uwierzytelnianie oparte na adresie IP nie dziala przez NAT.
  • CGNAT: podwojna translacja uniemozliwia ALG na routerze domowym.
  • OpenVPN i WireGuard: nie maja tych problemow (uzywaja natywnie UDP/TCP z portami).

Przejście od standardowego IPSec do IPSec z NAT-T nie wymaga zasadniczych zmian w konfiguracji, ale kilka parametrów musi być ustawionych prawidłowo. Przede wszystkim obie strony muszą wspierać NAT-T, co w przypadku nowoczesnych implementacji jest domyślnie włączone. W starszych systemach lub niestandardowych konfiguracjach konieczne może być ręczne włączenie tej funkcji.

W systemie MikroTik RouterOS przełączenie na NAT-T odbywa się automatycznie na podstawie zawartości pakietów Vendor ID. Administrator nie musi podejmować żadnych dodatkowych kroków, o ile w konfiguracji peera IPSec ustawiono nat-traversal=yes. Warto jednak pamiętać, że RouterOS domyślnie ma włączoną obsługę NAT-T od wersji 6.x, ale w starszych wersjach konieczna była ręczna aktywacja.

W przypadku Cisco IOS obsługa NAT-T jest domyślnie włączona od wersji 12.3(4)T, ale administrator musi aktywować odpowiednią licencję securityk9. Dodatkowo zaleca się ręczne skonfigurowanie interwału keepalive, aby zapewnić stabilność tunelu. W przeciwieństwie do RouterOS, gdzie keepalive działa automatycznie, Cisco wymaga jawnego polecenia crypto isakmp nat keepalive.

18/56 NAT Traversal (NAT-T) - definicja i standardy
  • NAT-T - zestaw technik umozliwiajacych IPSec dzialanie przez urzadzenia NAT/PAT.
  • Zdefiniowany w dwoch kluczowych RFC:
  • RFC 3947 (2005): Negotiation of NAT-Traversal in the IKE - wykrywanie NAT i negocjacja uzycia NAT-T.
  • RFC 3948 (2005): UDP Encapsulation of IPsec ESP Packets - format enkapsulacji pakietow ESP w UDP.
  • Dla IKEv2 (RFC 7296, 2014) NAT-T jest wbudowany w standard - obowiazkowy.
  • Glowna idea: enkapsulacja pakietow ESP w datagramy UDP z portem docelowym 4500.
  • NAT-T dziala automatycznie w nowoczesnych implementacjach.

Konfiguracja IPSec Site-to-Site w topologii hub-and-spoke z centralą posiadającą publiczny adres IP jest najczęściej spotykanym wzorcem w sieciach korporacyjnych. W tej architekturze oddziały znajdujące się za NAT inicjują połączenie VPN do centrali, która działa jako koncentrator. Centrala musi być skonfigurowana tak, aby akceptować połączenia przychodzące od wielu różnych adresów źródłowych, co w przypadku IPSec wymaga odpowiedniej konfiguracji crypto map.

Dla oddziału za NAT kluczowe jest ustawienie parametru nat-traversal na wartość yes oraz ewentualne skrócenie czasu keepalive, aby utrzymać tunel aktywny przy braku stałego ruchu. Centrala z kolei musi mieć otwarte porty UDP 500 i 4500 na zaporze sieciowej oraz odpowiednio skonfigurowane reguły przekierowania ruchu do wewnętrznego routera VPN.

W przypadku gdy centrala również znajduje się za NAT, co zdarza się w mniejszych firmach korzystających z CGNAT, konieczne jest zastosowanie dodatkowych technik, takich jak użycie serwera pośredniczącego lub tunelowania przez protokoły warstwy aplikacji. W takiej sytuacji najlepszym rozwiązaniem jest wynajęcie serwera VPS z publicznym adresem IP i skonfigurowanie go jako centralnego punktu łączącego wszystkie oddziały.

19/56 Etapy NAT-T - przeglad procesu
  • Proces NAT-T sklada sie z trzech glownych etapow:
  • Etap 1: Wykrycie wsparcia NAT-T - wymiana Vendor ID (VID) podczas IKE Phase 1.
  • Etap 2: Wykrycie obecnosci NAT - wymiana NAT-D payload (NAT Discovery).
  • Etap 3: Negocjacja uzycia NAT-T w Quick Mode (Phase 2) i przelaczenie na port 4500.
  • Po pomyslnej negocjacji, wszystkie pakiety IKE i ESP enkapsulowane w UDP na porcie 4500.
  • Dodatkowo: okresowe NAT Keepalive utrzymujace wpisy w tablicach NAT.
  • W IKEv2 proces uproszczony - NAT-D wysylany w IKE_SA_INIT (pierwsze 2 pakiety).

Protokół L2TP w połączeniu z IPSec stanowi popularne rozwiązanie do zdalnego dostępu w sieciach korporacyjnych. L2TP odpowiada za tunelowanie ramek warstwy łącza danych, podczas gdy IPSec zapewnia szyfrowanie i uwierzytelnianie. W kontekście NAT oba protokoły muszą być odpowiednio skonfigurowane, aby zapewnić poprawne działanie przez translację adresów.

L2TP sam w sobie nie jest protokołem szyfrującym, dlatego zawsze powinien być stosowany z IPSec. Połączenie L2TP/IPSec jest standardowo używane w systemach Windows jako natywny klient VPN. Problemem w środowiskach z NAT jest fakt, że L2TP używa protokołu UDP 1701, który może być blokowany przez zapory sieciowe, a dodatkowo sama negocjacja IPSec dla L2TP wymaga poprawnego działania NAT-T.

W systemie RouterOS konfiguracja L2TP/IPSec z obsługą NAT-T wymaga włączenia serwera L2TP z parametrem use-ipsec=required oraz skonfigurowania dynamicznego peera IPSec z adresem 0.0.0.0/0. Dzięki temu klienci mogą łączyć się z różnych adresów IP, w tym również zza NAT. Kluczowe jest również ustawienie nat-traversal=yes dla tego dynamicznego peera.

20/56 Etap 1: Wykrywanie wsparcia NAT-T (Vendor ID)
  • Podczas wymiany SA w IKE Phase 1, kazda strona dolacza Vendor ID (VID) payload.
  • VID to hash RFC 3947 - unikalny identyfikator informujacy, ze implementacja wspiera NAT-T.
  • W IKEv1 VID jest opcjonalny - jesli go brak, NAT-T nie zostanie uzyty (i VPN nie zadziala przez NAT).
  • W IKEv2 NAT-T jest obowiazkowy - VID nie jest potrzebny, mechanizm domyslnie aktywny.
  • Rozni producenci moga uzywac roznych VID-ow (RFC 3947 vs starsze drafty) - problemy kompatybilnosci.
  • Jesli jedna strona ma VID NAT-T, a druga nie - NAT-T nie bedzie uzyty.

Protokół PPTP, mimo że jest historycznie pierwszym powszechnie stosowanym protokołem VPN, ma poważne ograniczenia w kontekście bezpieczeństwa i nie powinien być używany w nowych wdrożeniach. PPTP używa protokołu GRE do tunelowania, który ma własne problemy z NAT. GRE jest protokołem IP o numerze 47, co oznacza, że router NAT musi go specjalnie obsługiwać, a wiele domowych routerów nie przepuszcza GRE.

PPTP dodatkowo używa protokołu TCP 1723 do negocjacji połączenia, który musi być przekierowany na router VPN w przypadku serwera za NAT. Po zainicjowaniu połączenia dane są przesyłane przez GRE, który nie ma własnego mechanizmu obsługi NAT. Oznacza to, że PPTP może działać tylko w przypadku, gdy router NAT obsługuje translację GRE, co nie jest powszechne.

Ze względu na liczne luki bezpieczeństwa, protokół PPTP został uznany za przestarzały i niezalecany do stosowania w jakichkolwiek zastosowaniach produkcyjnych. Microsoft, który był głównym promotorem PPTP, zaleca stosowanie L2TP/IPSec lub SSTP jako zamienników. W kontekście NAT zarówno L2TP/IPSec, jak i SSTP oferują znacznie lepsze wsparcie dla translacji adresów.

21/56 Etap 2: NAT-D (NAT Discovery) - wykrywanie NAT
  • NAT-D - mechanizm wykrywania obecnosci urzadzenia NAT na sciezce komunikacyjnej.
  • Kazda strona oblicza hash SHA-1 swoich adresow IP (zrodlowego i docelowego) wraz z portami.
  • Initiator wysyla w MM3: NAT-D_SRC (hash adresu zrodlowego) i NAT-D_DST (hash adresu docelowego).
  • Respondent robi to samo w MM4.
  • Kazda strona porownuje odebrany hash z wlasnymi danymi.
  • Hash sie zgadza -> brak NAT. Hash sie nie zgadza -> NAT wykryty!
  • Wynik: strona wie, czy za NAT jest ona, strona zdalna, czy obie.

Protokół SSTP został opracowany przez Microsoft jako odpowiedź na problemy PPTP z NAT i ograniczeniami IPSec w środowiskach korporacyjnych. SSTP tuneluje ruch VPN przez połączenie HTTPS na porcie TCP 443, co oznacza, że wygląda on jak zwykły ruch HTTPS i bez problemu przechodzi przez większość zapór sieciowych i routerów NAT. Port 443 jest prawie zawsze otwarty w firmowych politykach bezpieczeństwa.

Zaletą SSTP z punktu widzenia NAT jest fakt, że używa on standardowego protokołu TCP, który jest w pełni obsługiwany przez wszystkie typy translacji. Nie wymaga on żadnych dodatkowych mechanizmów, takich jak NAT-T, ponieważ cała komunikacja odbywa się w ramach pojedynczego połączenia TCP. To sprawia, że SSTP jest jednym z najłatwiejszych w konfiguracji protokołów VPN dla środowisk z NAT.

Główną wadą SSTP jest jego zamknięty charakter - protokół ten jest zastrzeżony przez Microsoft i dostępny głównie w systemach Windows. Ogranicza to jego zastosowanie w heterogenicznych środowiskach sieciowych, gdzie występują różne systemy operacyjne. Ponadto SSTP jest wolniejszy od rozwiązań opartych na UDP ze względu na narzut związany z protokołem TCP.

22/56 Analiza wynikow NAT-D - trzy scenariusze
  • Brak NAT: Wszystkie hashe sie zgadzaja. NAT-T niepotrzebny - ruch na UDP 500 i ESP.
  • NAT po stronie initiatora: NAT-D_SRC initiatora sie nie zgadza. Responder przelacza na UDP 4500. To >95% przypadkow.
  • NAT po obu stronach: Hashe sie nie zgadzaja. Obie strony przelaczaja na UDP 4500. Rzadki scenariusz.
  • Po wykryciu NAT, IKE przelacza sie na port 4500 dla calej dalszej komunikacji.
  • Pakiety ESP sa enkapsulowane w UDP z portem 4500.
  • W IKEv2: NAT-D wysylany juz w IKE_SA_INIT.

Podwójna translacja NAT, znana jako double NAT lub CGNAT, stanowi szczególne wyzwanie dla protokołów VPN. W tym scenariuszu pakiety przechodzą przez dwa niezależne procesy translacji, co może prowadzić do podwójnej modyfikacji adresów i portów. Dla IPSec z NAT-T oznacza to, że mechanizm wykrywania NAT może niepoprawnie zidentyfikować rzeczywisty adres końcowy, co prowadzi do błędów w negocjacji.

CGNAT jest powszechnie stosowany przez operatorów komórkowych w sieciach LTE i 5G, a także przez niektórych dostawców Internetu stacjonarnego w sytuacjach wyczerpania puli adresów IPv4. Abonent takiego operatora otrzymuje adres z zakresu 100.64.0.0/10, który jest translowany na współdzielony adres publiczny na bramie operatorskiej. Oznacza to, że nawet po prawidłowym przejściu pierwszej translacji na routerze domowym, pakiety są ponownie translowane przez operatora.

Rozwiązaniem problemu CGNAT dla VPN jest zastosowanie protokołów, które nie wymagają bezpośredniego adresowania IP, takich jak OpenVPN na porcie TCP 443 lub WireGuard z PersistentKeepalive. Alternatywnie można zastosować technologię TURN, która wykorzystuje serwer pośredniczący do przekazywania ruchu, co pozwala na obejście ograniczeń CGNAT. W skrajnych przypadkach konieczne jest wykupienie publicznego adresu IP u operatora.

23/56 Etap 3: Przelaczenie na port 4500 i enkapsulacja UDP
  • Po wykryciu NAT, cala komunikacja IKE i ESP przelacza sie na UDP port 4500.
  • Port 4500 zarezerwowany przez IANA dla IPSec NAT-T - "drugi port IKE".
  • IKE na 4500: standardowy pakiet IKE z 4-bajtowym Non-ESP Marker (0x00000000).
  • ESP na 4500: oryginalny pakiet ESP z naglowkiem UDP (bez Non-ESP Markera).
  • Router NAT widzi UDP na porcie 4500 z roznymi portami zrodlowymi - PAT dziala.
  • Rozroznienie IKE od ESP: pierwsze 4 bajty = 0x00000000 -> IKE; SPI != 0 -> ESP.

Symmetric NAT jest najbardziej restrykcyjnym typem translacji adresów, który stwarza największe trudności dla protokołów VPN. W przeciwieństwie do innych typów NAT, symmetric NAT tworzy unikalne mapowanie dla każdej pary adresów źródłowych i docelowych. Oznacza to, że nawet jeśli dwa pakiety pochodzą z tego samego wewnętrznego hosta i portu, zostaną im przypisane różne zewnętrzne porty w zależności od adresu docelowego.

Dla mechanizmu NAT-T symmetric NAT jest problematyczny, ponieważ standardowe techniki wykrywania NAT mogą nie zadziałać poprawnie. Protokół STUN, który służy do wykrywania typu NAT, często zawodzi w przypadku symmetric NAT, ponieważ serwer STUN widzi inny port źródłowy niż ten, który został przydzielony dla ruchu do właściwego serwera VPN. To sprawia, że negocjacja NAT-T może się nie powieść.

W praktyce jedynym niezawodnym sposobem na obsłużenie symmetric NAT jest zastosowanie serwera pośredniczącego TURN lub połączenie przez centralny serwer VPN z publicznym adresem IP. WireGuard z PersistentKeepalive może również działać przez symmetric NAT, jeśli klient regularnie wysyła pakiety do serwera, utrzymując w ten sposób stałe mapowanie w tablicy translacji.

24/56 Budowa pakietu ESP w UDP (RFC 3948)
  • Tryb tunelowy ESP z NAT-T - struktura od zewnatrz:
  • 1. Zewnetrzny naglowek IP (20 B) - adresy publiczne punktow koncowych tunelu.
  • 2. Naglowek UDP (8 B) - port zrodlowy (losowy) i docelowy 4500.
  • 3. Naglowek ESP - SPI (4 B) + Sequence Number (4 B).
  • 4. Zaszyfrowany oryginalny pakiet IP + dane uzytkowe.
  • 5. ESP Trailer - padding + pad length + next header (2-258 B).
  • 6. ESP ICV (Integrity Check Value) - np. 12 B dla SHA-1, 16 B dla SHA-256.
  • Narzut NAT-T: +8 B UDP + ewentualny Non-ESP Marker (4 B). Lacznie ~60-80 B narzutu.

Diagnostyka problemów z NAT-T wymaga systematycznego podejścia i znajomości odpowiednich narzędzi. Najważniejszym z nich jest analizator protokołów Wireshark, który pozwala na przechwytywanie i analizę pakietów na poziomie poszczególnych ramek. Dla diagnostyki NAT-T kluczowe jest filtrowanie ruchu na portach UDP 500 i 4500 oraz analiza zawartości payloadów IKE.

Podczas analizy pakietów IKE należy zwrócić szczególną uwagę na obecność znaczników Vendor ID dla RFC 3947. Jeśli znaczniki te są obecne po obu stronach, oznacza to, że obie strony wspierają NAT-T. Następnie należy sprawdzić, czy przesyłane są pakiety NAT-D oraz czy po ich wymianie następuje przełączenie komunikacji na port 4500.

W systemach RouterOS i Cisco IOS dostępne są również wbudowane narzędzia diagnostyczne. W RouterOS są to komendy z grupy /ip ipsec debug oraz /log print where topics~ipsec. W Cisco IOS służą do tego komendy debug crypto isakmp oraz debug crypto nat. Należy jednak pamiętać, że debugowanie w czasie rzeczywistym może znacząco obciążyć procesor routera, szczególnie w przypadku ruchu produkcyjnego.

25/56 NAT Keepalive - utrzymanie wpisu w tablicy NAT
  • Routery NAT usuwaja nieaktywne wpisy po okreslonym czasie (30 s - 5 min dla UDP).
  • Dla dlugotrwalych tuneli VPN brak aktywnosci = usuniecie wpisu = zerwanie tunelu.
  • NAT Keepalive: mechanizm wysylania pustych pakietow UDP na port 4500.
  • Pakiet: IP + UDP (4500/4500) + 1 bajt danych (0xFF). Lacznie 29 B.
  • Keepalive co 20-60 sekund. Po stronie odbiorcy odrzucany (nie do stosu IPSec).
  • Wysylany tylko przez strone za NAT. Konfigurowalny w RouterOS i Cisco IOS.

WireShark jest nieocenionym narzędziem w diagnostyce problemów z NAT-T, ponieważ pozwala na szczegółowe prześledzenie całego procesu negocjacji IPSec. Po przechwyceniu ruchu na porcie 500 i 4500 można dokładnie przeanalizować każdy krok wymiany pakietów IKE. Szczególnie przydatne jest filtrowanie po typie payloadu, co pozwala szybko zidentyfikować brakujące lub nieprawidłowe elementy negocjacji.

Analiza pakietów NAT-D wymaga zrozumienia, jak obliczane są skróty adresów. Każda ze stron oblicza skrót swojego adresu źródłowego i docelowego na podstawie faktycznych pakietów odebranych z sieci. Jeśli wyniki tych obliczeń różnią się od zadeklarowanych wartości, oznacza to obecność NAT. W praktyce inżynierskiej często tworzy się skrypty automatyzujące tę analizę.

Po przełączeniu na port 4500 należy sprawdzić, czy pakiety ESP są poprawnie enkapsulowane w UDP. W Wiresharku enkapsulowane pakiety ESP są widoczne jako następne w strukturze drzewa protokołów po nagłówku UDP. Jeśli zamiast ESP widoczny jest niezaszyfrowany tekst lub dane o nieznanej strukturze, oznacza to problem z enkapsulacją lub deszyfrowaniem po stronie odbiorcy.

26/56 NAT-T w IKEv1 vs IKEv2
  • IKEv1 (RFC 2409, 1998): NAT-T jako opcjonalne rozszerzenie (RFC 3947). Wymaga Vendor ID. Wykrywanie NAT w Phase 1, negocjacja w Phase 2.
  • IKEv2 (RFC 7296, 2014): NAT-T wbudowany w standard - obowiazkowy. Wykrywanie NAT w IKE_SA_INIT. Bez Vendor ID. Wsparcie dla MOBIKE.
  • IKEv2 znacząco upraszcza NAT-T i czyni go bardziej niezawodnym.
  • MOBIKE (RFC 4555): zmiana adresu IP bez zrywania sesji - kluczowe w srodowiskach z NAT.

Konfiguracja IPSec Site-to-Site z NAT-T w topologii, w której obie strony znajdują się za translacją adresów, wymaga szczególnej uwagi. W takim scenariuszu żadna ze stron nie ma publicznego adresu IP, co uniemożliwia bezpośrednie zainicjowanie połączenia. Rozwiązaniem jest zastosowanie serwera pośredniczącego z publicznym adresem lub techniki UDP hole punching dla WireGuard.

Dla IPSec obie strony muszą mieć skonfigurowany mechanizm NAT-T oraz odpowiednio krótki interwał keepalive. W przypadku gdy jedna ze stron zmienia swój adres publiczny, co zdarza się w sieciach operatorskich z dynamicznym przydziałem adresów, konieczne jest zastosowanie protokołu MOBIKE, który pozwala na aktualizację adresu bez ponownej negocjacji tunelu.

W praktyce inżynierskiej najczęściej stosuje się topologię hub-and-spoke z centralnym punktem posiadającym publiczny lub statyczny adres IP. Jeśli jednak obie strony muszą łączyć się bezpośrednio, zaleca się użycie WireGuard z odpowiednio skonfigurowanym PersistentKeepalive, który automatyzuje proces utrzymywania tunelu przez zmienne translacje adresów.

27/56 NAT-T w trybie transportowym i tunelowym
  • Tryb transportowy: IPSec chroni tylko payload, oryginalny naglowek IP widoczny. Wymaga NAT-OA. Rzadko stosowany.
  • Tryb tunelowy: IPSec szyfruje CALY oryginalny pakiet IP. Nowy zewnetrzny naglowek IP. Standard dla VPN Site-to-Site.
  • W trybie tunelowym adresy widoczne dla NAT to adresy publiczne - bezpieczne.
  • NAT-OA (NAT Original Address): opcjonalny payload przesyłajacy oryginalne adresy przed translacja.

Znacznik Vendor ID w protokole IKE służy do identyfikacji producenta implementacji oraz wspieranych rozszerzeń protokołu. W kontekście NAT-T znacznik ten informuje drugą stronę o tym, że nasza implementacja wspiera mechanizm enkapsulacji ESP w UDP. Bez wymiany tych znaczników obie strony nie wiedzą o wzajemnym wsparciu dla NAT-T, co uniemożliwia przełączenie na port 4500.

W pakietach IKE znacznik Vendor ID jest opcjonalnym payloadem, który może być dodany do każdej wiadomości. Dla NAT-T zdefiniowano dwa standardowe znaczniki: jeden dla RFC 3947 i drugi dla starszego draft-ietf-ipsec-nat-t-ike. Większość współczesnych implementacji wysyła oba znaczniki, aby zapewnić kompatybilność zarówno z nowymi, jak i starszymi wersjami protokołu.

W przypadku gdy jedna ze stron nie wysyła odpowiedniego znacznika Vendor ID, mechanizm NAT-T nie zostanie uruchomiony, nawet jeśli obie strony go obsługują. Jest to częsty problem przy łączeniu urządzeń różnych producentów, gdzie implementacja NAT-T może się różnić. W takiej sytuacji konieczne jest ręczne wymuszenie użycia portu 4500 poprzez odpowiednią konfigurację.

28/56 NAT-T w OpenVPN - mechanizmy adaptacyjne
  • OpenVPN nie potrzebuje NAT-T - caly ruch juz enkapsulowany w UDP/TCP.
  • Opcja float: zmiana zrodlowego adresu IP/portu bez zrywania sesji TLS.
  • explicit-exit-notify: klient informuje serwer o zakonczeniu sesji.
  • Dowolny port (np. TCP 443) - omijanie restrykcyjnych firewalli.
  • TLS do uwierzytelniania -> TCP -> poprawna translacja przez NAT.

Mechanizm NAT-D wykrywania w protokole IKE opiera się na porównaniu czterech skrótów adresów IP i portów. Każda strona oblicza skrót swojego adresu źródłowego i docelowego z perspektywy warstwy IP przed translacją. Następnie strony wymieniają się tymi skrótami w ramach pakietów NAT-D. Jeśli skróty są zgodne, oznacza to brak NAT na drodze pakietów. Różnica w skrótach wskazuje na obecność translacji.

Algorytm obliczania skrótów NAT-D używa funkcji SHA-1 lub MD5, w zależności od wersji IKE. Wynik obliczeń zależy od adresu IP i portu widzianego przez warstwę sieciową po stronie nadawcy. Jeśli między nadawcą a odbiorcą znajduje się NAT, adres widziany przez odbiorcę będzie inny niż ten, który nadawca umieścił w nagłówku IP, co spowoduje różnicę w skrótach.

W IKEv1 pakiety NAT-D są przesyłane w wiadomościach MM3 i MM4 lub AM3 i AM4. W IKEv2 pakiety NAT-D są przesyłane w wiadomościach IKE_SA_INIT. Po wykryciu NAT obie strony automatycznie przełączają się na port 4500 i rozpoczynają enkapsulację ESP w UDP. Cały proces jest w pełni automatyczny i nie wymaga interwencji administratora.

29/56 STUN, TURN, ICE - NAT traversal dla P2P
  • Protokoly dla komunikacji peer-to-peer (WebRTC, VoIP, gry online).
  • STUN (RFC 8489): Klient pyta serwer STUN o swoj publiczny adres IP. Dziala tylko dla Cone NAT.
  • TURN (RFC 8656): Gdy STUN nie dziala (Symmetric NAT) - ruch przez serwer posredniczacy.
  • ICE (RFC 8445): Framework testujacy wszystkie mozliwe sciezki, wybiera najlepsza.
  • W mesh VPN (Tailscale, ZeroTier): ICE do bezposredniego laczenia urzadzen za NAT.

Po wykryciu NAT i przełączeniu na port 4500 wszystkie kolejne pakiety IKE i ESP są enkapsulowane w UDP. Enkapsulacja ESP w UDP polega na dodaniu ośmiobajtowego nagłówka UDP przed oryginalnym pakietem ESP. W nagłówku tym port źródłowy i docelowy mają wartość 4500. Całość jest następnie umieszczana w standardowym pakiecie IP z protokołem oznaczonym jako UDP.

Dla routera NAT taki pakiet wygląda jak zwykły datagram UDP i może być translowany bez żadnych specjalnych modyfikacji. Router modyfikuje adres źródłowy w zewnętrznym nagłówku IP oraz port UDP, a następnie przekazuje pakiet dalej. Po stronie odbiorcy router odwraca translację, a końcowe urządzenie VPN wyodrębnia oryginalny pakiet ESP z enkapsulacji UDP.

Warto zauważyć, że enkapsulacja UDP dodaje 8 bajtów narzutu do każdego pakietu ESP. W przypadku sieci o dużej przepływności może to mieć znaczenie przy obliczaniu MTU i fragmentacji pakietów. Dlatego w konfiguracjach z NAT-T często stosuje się mechanizm MSS clamping, który zapobiega fragmentacji przez obniżenie maksymalnego rozmiaru segmentu TCP.

30/56 NAT-T - podsumowanie mechanizmu
  • NAT-T rozwiazuje 3 fundamentalne problemy IPSec z NAT:
  • 1. Brak portow w ESP -> ESP enkapsulowany w UDP z portami.
  • 2. Naruszenie integralnosci -> NAT modyfikuje tylko zewnetrzny naglowek UDP.
  • 3. Konflikt IKE na porcie 500 -> przelaczenie na port 4500.
  • Proces: Vendor ID -> NAT-D (wykrywanie) -> Przelaczenie na 4500 -> Keepalive.
  • NAT-T jest bezpieczny: enkapsulacja UDP nie narusza szyfrowania ESP.
  • Narzut: +8 B UDP + opcjonalnie 4 B Non-ESP Marker.

Komenda crypto isakmp nat keepalive w systemie Cisco IOS służy do ustawienia interwału wysyłania pakietów keepalive dla tuneli IPSec przechodzących przez NAT. Wartość podawana w sekundach określa, jak często router będzie wysyłał puste pakiety UDP na port 4500 w celu utrzymania wpisów w tablicy translacji NAT. Domyślnie funkcja ta jest wyłączona.

Zalecana wartość keepalive w sieciach korporacyjnych wynosi od 15 do 30 sekund. Wartości niższe niż 10 sekund mogą powodować niepotrzebny narzut sieciowy, podczas gdy wartości wyższe niż 60 sekund mogą nie zapobiec wygaśnięciu wpisów w agresywnych implementacjach NAT, szczególnie u operatorów komórkowych. W przypadku CGNAT zaleca się wartość 15 sekund.

Komenda crypto isakmp nat keepalive jest konfigurowana globalnie i wpływa na wszystkie tunele IPSec na routerze. Jeśli dla konkretnego tunelu potrzebna jest inna wartość, można ją ustawić indywidualnie w ramach konfiguracji crypto map. W systemie RouterOS odpowiednikiem tej funkcji jest automatyczny mechanizm keepalive wbudowany w protokół NAT-T.

31/56 Konfiguracja NAT-T na RouterOS - wprowadzenie
  • MikroTik RouterOS wspiera NAT-T od wersji 3.x (obecnie v6 i v7).
  • W RouterOS v7 IPSec przepisany - lepsza wydajnosc, IKEv2, nowe algorytmy.
  • NAT-T domyslnie WLACZONY dla wszystkich peerow (nat-traversal=yes).
  • Sciezki konfiguracji: /ip ipsec peer (Phase 1), /ip ipsec proposal (Phase 2), /ip ipsec policy.
  • RouterOS v7: dodano /ip ipsec profile dla zaawansowanych ustawien.
  • Scenariusz: Site A za NAT laczy sie z Site B (publiczny IP 1.2.3.4).

W systemie MikroTik RouterOS parametry NAT-T są domyślnie włączone i nie wymagają dodatkowej konfiguracji, ale istnieje kilka kluczowych ustawień, które warto zweryfikować. Przede wszystkim w konfiguracji peera IPSec należy upewnić się, że parametr nat-traversal ma wartość yes. Od wersji RouterOS 6.x jest to ustawienie domyślne, ale starsze wersje mogły mieć je wyłączone.

RouterOS automatycznie wykrywa obecność NAT na podstawie pakietów Vendor ID i NAT-D wymienianych podczas negocjacji IKE. Po wykryciu translacji system automatycznie przełącza komunikację na port 4500 i rozpoczyna enkapsulację ESP w UDP. Administrator nie musi podejmować żadnych dodatkowych działań, co czyni RouterOS jednym z najłatwiejszych w konfiguracji systemów dla IPSec z NAT-T.

W przypadku problemów z działaniem NAT-T w RouterOS, pierwszym krokiem diagnostycznym powinno być sprawdzenie logów systemowych za pomocą komendy /log print where topics~ipsec. Logi te zawierają szczegółowe informacje o procesie negocjacji oraz ewentualnych błędach. Dodatkowo można użyć komendy /ip ipsec debug print, która wyświetla aktualny stan debugowania protokołu IKE.

32/56 RouterOS - konfiguracja peera IPSec z NAT-T (v6/v7)
  • Przyklad: Site A (za NAT, WAN 203.0.113.1) do Site B (publiczny 1.2.3.4).
  • Konfiguracja po stronie Site A:
# Site A - za NAT (203.0.113.1) do Site B (1.2.3.4)
/ip ipsec peer add address=1.2.3.4/32 \
    nat-traversal=yes \
    exchange-mode=ike2 \
    secret=MojeHaslo123 \
    port=500

Konfiguracja peera IPSec w RouterOS dla połączenia przez NAT wymaga kilku specyficznych ustawień. Przede wszystkim adres peera musi być podany jako adres publiczny serwera docelowego, nawet jeśli nasz router znajduje się za NAT. Parametr address określa adres IP, z którym będziemy negocjować tunel, a parametr port określa port docelowy dla pakietów IKE.

Parametr nat-traversal=yes włącza obsługę NAT-T dla tego konkretnego peera. W RouterOS v6 i v7 mechanizm ten działa nieco inaczej - w v7 usprawniono wykrywanie NAT i dodano lepsze wsparcie dla IKEv2. W v6 konieczne było czasem ręczne wskazanie adresu źródłowego za pomocą parametru local-address, szczególnie gdy router miał wiele interfejsów WAN.

Parametr exchange-mode określa tryb wymiany kluczy IKE. Dla środowisk z NAT zaleca się użycie trybu ike2, który ma wbudowane wsparcie dla NAT-T i nie wymaga dodatkowej konfiguracji. Tryby main i aggressive mogą również działać, ale wymagają więcej ręcznej konfiguracji i są bardziej podatne na błędy w środowiskach z translacją adresów.

33/56 RouterOS - Proposal i Policy dla IPSec z NAT-T
  • Po konfiguracji peera, definiujemy algorytmy szyfrowania (Proposal) i reguly ruchu (Policy):
/ip ipsec proposal add name=NAT-T-Proposal \
    enc-algorithms=aes-256-cbc \
    auth-algorithms=sha256 \
    pfs-group=modp2048
/ip ipsec policy add src-address=192.168.1.0/24 \
    dst-address=10.0.0.0/24 \
    sa-src-address=203.0.113.1 \
    sa-dst-address=1.2.3.4 \
    proposal=NAT-T-Proposal \
    tunnel=yes

Proposal w RouterOS definiuje zestaw algorytmów kryptograficznych używanych w fazie 2 negocjacji IPSec. W kontekście NAT-T wybór odpowiednich algorytmów ma znaczenie dla wydajności, ponieważ enkapsulacja UDP dodaje narzut, który może być odczuwalny przy słabszych algorytmach. Zaleca się stosowanie AES-256 w trybie CBC lub GCM, który oferuje dobry balans między bezpieczeństwem a wydajnością.

Parametr pfs-group określa grupę Perfect Forward Secrecy, która zapewnia, że złamanie jednego klucza sesji nie pozwoli na odszyfrowanie poprzednich lub kolejnych sesji. Dla środowisk z NAT-T zaleca się użycie grupy modp2048 lub wyższej, ponieważ niższe grupy mogą być podatne na ataki. W RouterOS dostępne są również grupy oparte na krzywych eliptycznych, które oferują lepszą wydajność.

Policy w RouterOS łączy w sobie źródłową i docelową podsieć oraz przypisuje im odpowiedni proposal. Dla połączeń przez NAT kluczowe jest prawidłowe określenie adresów SA źródłowego i docelowego, które powinny odpowiadać publicznym adresom interfejsów WAN po obu stronach. Błędne ustawienie tych adresów jest jedną z najczęstszych przyczyn niepowodzenia negocjacji IPSec przez NAT.

34/56 RouterOS - NAT Bypass (kluczowy krok!)
  • Ruch do sieci zdalnej przez tunel NIE moze byc translowany przez NAT!
  • Regula bypass musi byc PRZED regula masquerade w /ip firewall nat.
  • Bez tego: pakiety wejda do tunelu z adresem publicznym zamiast prywatnym.
  • Router docelowy nie bedzie wiedzial, dokad zwrocic odpowiedz.
  • Wazne: W RouterOS reguly NAT sa przetwarzane od gory - kolejnosc ma znaczenie!
# NAT bypass - musi byc PRZED masquerade!
/ip firewall nat add chain=srcnat \
    src-address=192.168.1.0/24 \
    dst-address=10.0.0.0/24 \
    action=accept # nie transluj ruchu VPN!
/ip firewall nat add chain=srcnat \
    out-interface=ether1 \
    action=masquerade # reszte transluj

Reguły NAT bypass w RouterOS są absolutnie kluczowe dla poprawnego działania IPSec przez translację adresów. Bez tych reguł ruch przeznaczony do zdalnej sieci VPN byłby translowany przez NAT, co oznaczałoby, że pakiety wchodzące do tunelu miałyby publiczny adres źródłowy zamiast prywatnego. Router po drugiej stronie nie wiedziałby, do której sieci zwrócić odpowiedź, ponieważ adres źródłowy nie należałby do żadnej znanej mu podsieci.

Reguły NAT bypass muszą być umieszczone PRZED regułą masquerade w łańcuchu srcnat. Wynika to z faktu, że RouterOS przetwarza reguły NAT sekwencyjnie od góry. Jeśli reguła masquerade zostanie napotkana wcześniej, cały ruch zostanie przetranslowany, łącznie z ruchem VPN. Dopiero późniejsza reguła bypass nie będzie miała zastosowania, ponieważ pakiet został już zmodyfikowany.

Ważne jest również, aby reguły bypass były precyzyjne i dotyczyły tylko ruchu przeznaczonego do zdalnych sieci VPN. Zbyt szerokie reguły bypass mogą spowodować, że część ruchu, która powinna być translowana, zostanie przepuszczona bez translacji, co może prowadzić do problemów z łącznością z Internetem. Dlatego zaleca się używanie konkretnych adresów źródłowych i docelowych w regułach bypass.

35/56 RouterOS - Firewall i MSS Clamping dla IPSec z NAT-T
  • Otwarcie portow w firewallu:
# Otwarcie portow dla IPSec/NAT-T
/ip firewall filter add chain=input \
    protocol=udp dst-port=500,4500 \
    action=accept
/ip firewall filter add chain=input \
    protocol=esp action=accept
# MSS Clamping - zapobiega fragmentacji
/ip firewall mangle add chain=forward \
    protocol=tcp tcp-flags=syn \
    action=change-mss \
    new-mss=1360

Firewall w RouterOS musi być skonfigurowany tak, aby przepuszczał ruch związany z IPSec i NAT-T. Porty UDP 500 i 4500 muszą być otwarte w łańcuchu input, ponieważ pakiety IKE i enkapsulowane ESP są adresowane bezpośrednio do interfejsu WAN routera. Protokół ESP o numerze 50 również musi być dozwolony w filtracji, choć w przypadku NAT-T jest on enkapsulowany w UDP i nie występuje samodzielnie.

MSS Clamping jest mechanizmem zapobiegającym fragmentacji pakietów TCP w tunelach VPN. Gdy pakiet TCP ma ustawioną flagę Don't Fragment, a jego rozmiar przekracza MTU tunelu, router musi go odrzucić. MSS Clamping rozwiązuje ten problem przez modyfikację deklarowanego maksymalnego rozmiaru segmentu TCP podczas trójstronnego uzgadniania połączenia, zmuszając hosty do używania mniejszych pakietów.

W RouterOS MSS Clamping konfiguruje się za pomocą reguły firewall mangle, która przechwytuje pakiety SYN i modyfikuje pole MSS. Zalecana wartość MSS dla tuneli IPSec z NAT-T wynosi 1360 bajtów. Jest to wartość bezpieczna, która uwzględnia narzut związany z nagłówkami IPSec, enkapsulacją UDP i dodatkowymi nagłówkami IP. W przypadku wątpliwości można zastosować wyższą wartość 1400 lub 1452.

36/56 RouterOS - L2TP/IPSec Server z NAT-T
  • L2TP/IPSec na RouterOS - automatyczny dynamiczny peer IPSec.
  • Wazne: use-ipsec=required - wymusza IPSec dla wszystkich polaczen L2TP.
/interface l2tp-server server set \
    enabled=yes use-ipsec=required \
    ipsec-secret=MojeHaslo123
# Dynamiczny peer dla klientow za NAT
/ip ipsec peer add address=0.0.0.0/0 \
    nat-traversal=yes \
    exchange-mode=ike2

Serwer L2TP/IPSec w RouterOS umożliwia zdalnym klientom bezpieczne łączenie się z siecią korporacyjną przez Internet. W kontekście NAT kluczowe jest ustawienie parametru use-ipsec na wartość required, co wymusza szyfrowanie wszystkich połączeń L2TP za pomocą IPSec. Bez tego ustawienia połączenia L2TP byłyby przesyłane w postaci otwartego tekstu, co stanowi poważne naruszenie bezpieczeństwa.

Dynamiczny peer IPSec z adresem 0.0.0.0/0 pozwala na akceptowanie połączeń przychodzących od klientów z dowolnym adresem źródłowym. Jest to szczególnie ważne w przypadku klientów za NAT, ponieważ ich adres źródłowy może być inny dla każdego połączenia. Parametr nat-traversal=yes dla tego peera zapewnia obsługę translacji adresów dla wszystkich łączących się klientów.

Przy konfiguracji L2TP/IPSec dla klientów za NAT warto również pamiętać o odpowiednim skonfigurowaniu puli adresów IP dla klientów oraz routingu dla zdalnych sieci. Klienci za NAT często otrzymują adresy z puli prywatnej, która nie może kolidować z adresacją sieci lokalnej serwera. W przypadku konfliktu adresów konieczne jest zastosowanie translacji lub zmiany schematu adresacji.

37/56 RouterOS - WireGuard z PersistentKeepalive
  • WireGuard w RouterOS v7 - prosty w konfiguracji, wbudowany w system.
  • Dla NAT: PersistentKeepalive = 25s utrzymuje wpis w tablicy translacji.
  • Konfiguracja przykladowa:
# Strona za NAT - PersistentKeepalive utrzymuje tunel
/interface wireguard add name=wg0 \
    private-key="..." listen-port=13231
/interface wireguard peers add \
    interface=wg0 \
    public-key="klucz-publiczny-serwera" \
    endpoint-address=1.2.3.4:13231 \
    persistent-keepalive=25s \
    allowed-address=10.0.0.0/24

WireGuard w RouterOS v7 jest natywnie zintegrowany z systemem i oferuje prostą konfigurację w porównaniu do tradycyjnego IPSec. Dla połączeń przez NAT kluczowym parametrem jest PersistentKeepalive, który wysyła cykliczne pakiety keepalive w celu utrzymania wpisów w tablicy translacji. Wartość 25 sekund jest zalecana dla większości scenariuszy z NAT.

Konfiguracja WireGuard po stronie klienta za NAT wymaga podania adresu endpointu serwera oraz jego klucza publicznego. Parametr persistent-keepalive powinien być ustawiony na wartość nie mniejszą niż 25 sekund, aby zapobiec wygaśnięciu wpisów NAT. W przypadku agresywnego CGNAT wartość tę można skrócić do 15 sekund, choć zwiększa to nieznacznie obciążenie sieci.

WireGuard ma tę przewagę nad IPSec, że nie wymaga skomplikowanej konfiguracji reguł NAT bypass ani MSS Clamping. Działa on w warstwie transportowej na UDP, co oznacza, że cała translacja adresów odbywa się automatycznie na poziomie routera. Po stronie serwera wystarczy otworzyć port UDP, na którym nasłuchuje WireGuard, i przekierować go do wewnętrznego adresu serwera, jeśli znajduje się on za NAT.

38/56 RouterOS - debugowanie IPSec z NAT-T
  • Komendy diagnostyczne IPSec na RouterOS:
  • /ip ipsec peer print - lista peerow z ich statusem.
  • /ip ipsec installed-sa print - aktywne Security Associations.
  • /ip ipsec policy print - reguly szyfrowania.
  • /log print where topics~ipsec - logi zdarzen IPSec.
  • /ip ipsec debug print - debugowanie IKE.
  • /tool sniffer quick ip-protocol=udp port=4500 - podglad pakietow NAT-T.
  • Wazne: znacznik nat-t=yes w print potwierdza aktywnosc NAT-T.

Diagnostyka IPSec w RouterOS opiera się na kilku kluczowych komendach, które pozwalają na szybkie zlokalizowanie problemów z tunelem. Komenda /ip ipsec peer print wyświetla listę skonfigurowanych peerów wraz z ich aktualnym statusem. Na podstawie tej komendy można sprawdzić, czy peer jest aktywny, czy próbuje nawiązać połączenie oraz czy wykryto NAT na drodze pakietów.

Komenda /ip ipsec installed-sa print pokazuje aktywne security associations, które są podstawą działania tunelu. Jeśli lista jest pusta, oznacza to, że negocjacja IKE nie powiodła się lub nie została jeszcze zainicjowana. W takiej sytuacji warto sprawdzić logi systemowe za pomocą komendy /log print where topics~ipsec, które zawierają szczegółowe informacje o procesie negocjacji.

Komenda /tool sniffer quick ip-protocol=udp port=4500 pozwala na podejrzenie pakietów NAT-T w czasie rzeczywistym. Dzięki niej można sprawdzić, czy pakiety keepalive są wysyłane i odbierane, czy enkapsulacja ESP w UDP działa poprawnie oraz czy nie występują błędy transmisji. Sniffer jest szczególnie przydatny w przypadku podejrzenia problemów z filtracją pakietów na zaporze sieciowej.

39/56 RouterOS - lista kontrolna konfiguracji NAT-T
  • 1. Sprawdz nat-traversal=yes w /ip ipsec peer (domyslnie wlaczone).
  • 2. Otworz porty: UDP 500, UDP 4500, IP 50 (ESP) w firewallu.
  • 3. Dodaj reguly NAT bypass (srcnat) dla ruchu do sieci zdalnej PRZED masquerade.
  • 4. Skonfiguruj MSS Clamping w /ip firewall mangle (MSS = 1360-1400).
  • 5. Dla L2TP/IPSec: use-ipsec=required w serwerze L2TP.
  • 6. Dla WireGuard: PersistentKeepalive = 25s dla peerow za NAT.
  • 7. Sprawdz logi IPSec w razie problemow.

Lista kontrolna konfiguracji NAT-T w RouterOS stanowi praktyczne narzędzie do weryfikacji poprawności wszystkich ustawień. Kolejność sprawdzania poszczególnych punktów ma znaczenie, ponieważ brak wcześniejszych ustawień uniemożliwia poprawne działanie późniejszych. Rozpoczynając od weryfikacji parametru nat-traversal w konfiguracji peera, przechodzimy przez otwarcie portów w firewallu, aż do sprawdzenia logów.

Szczególną uwagę należy zwrócić na reguły NAT bypass i MSS Clamping, ponieważ są to elementy najczęściej pomijane podczas konfiguracji. Nawet jeśli sam tunel IPSec zostanie poprawnie ustanowiony, brak tych reguł może uniemożliwić przepływ ruchu przez tunel. W praktyce inżynierskiej zaleca się testowanie ruchu przez tunel za pomocą narzędzia ping z określonym rozmiarem pakietu.

Dla połączeń L2TP/IPSec i WireGuard lista kontrolna zawiera dodatkowe punkty specyficzne dla tych protokołów. W przypadku L2TP/IPSec należy zweryfikować ustawienie use-ipsec=required oraz konfigurację dynamicznego peera. Dla WireGuard kluczowe jest sprawdzenie parametru PersistentKeepalive oraz poprawność kluczy publicznych. Wszystkie te elementy można zweryfikować za pomocą odpowiednich komend show lub print.

40/56 Konfiguracja NAT-T na Cisco IOS
  • Cisco IOS wspiera NAT-T od wersji 12.3(4)T (z licencja Security).
  • W Cisco Packet Tracer: wymagana aktywacja securityk9 license.
  • NAT-T na Cisco domyslnie wlaczony i automatycznie negocjowany.
  • Glowne komendy:
  • crypto isakmp policy - IKE Phase 1.
  • crypto ipsec transform-set - IKE Phase 2.
  • crypto map ipsec-isakmp - powiazanie wszystkiego.
  • Dodatkowo: crypto isakmp nat keepalive .

Konfiguracja NAT-T na routerach Cisco IOS wymaga przede wszystkim aktywacji odpowiedniej licencji. Bez licencji securityk9 router nie będzie w stanie korzystać z zaawansowanych funkcji kryptograficznych, w tym IPSec z NAT-T. W Cisco Packet Tracer licencję można aktywować za pomocą polecenia license boot module, choć w środowisku symulacyjnym nie wszystkie funkcje są w pełni dostępne.

W odróżnieniu od RouterOS, gdzie NAT-T jest domyślnie włączony, w Cisco IOS administrator musi jawnie skonfigurować kilka elementów. Podstawowa konfiguracja obejmuje utworzenie polityki ISAKMP, zdefiniowanie transform-set, utworzenie crypto map oraz przypisanie jej do interfejsu. Dodatkowo zaleca się włączenie mechanizmu keepalive za pomocą komendy crypto isakmp nat keepalive.

Cisco IOS automatycznie negocjuje NAT-T podczas wymiany pakietów IKE, o ile obie strony wysyłają odpowiednie znaczniki Vendor ID. W przypadku starszych wersji IOS lub niestandardowych konfiguracji może być konieczne ręczne wymuszenie użycia portu 4500. W praktyce inżynierskiej zaleca się korzystanie z IOS w wersji 15.x lub nowszej, która ma w pełni zintegrowane wsparcie dla NAT-T.

41/56 Cisco IOS - ISAKMP Policy z obsluga NAT-T
  • Konfiguracja IKE Phase 1 na przykladzie Site-to-Site:
Router(config)# crypto isakmp policy 10
Router(config-isakmp)# encryption aes 256
Router(config-isakmp)# hash sha256
Router(config-isakmp)# authentication pre-share
Router(config-isakmp)# group 14
Router(config-isakmp)# lifetime 86400
Router(config-isakmp)# exit
Router(config)# crypto isakmp key HasloVPN address 1.2.3.4

Polityka ISAKMP w Cisco IOS definiuje parametry fazy 1 negocjacji IKE, która odpowiada za uwierzytelnienie obu stron i ustanowienie bezpiecznego kanału do dalszej wymiany kluczy. W kontekście NAT-T szczególnie ważny jest wybór grupy Diffie-Hellmana - zaleca się grupę 14 lub wyższą, która zapewnia odpowiedni poziom bezpieczeństwa przy jednoczesnej kompatybilności z NAT-T.

Parametr encryption określa algorytm szyfrowania dla kanału IKE. AES 256 jest obecnie standardem zalecanym przez wszystkie instytucje normalizacyjne. Parametr hash określa funkcję skrótu używaną do uwierzytelniania wiadomości IKE, a authentication określa metodę uwierzytelniania. Dla połączeń site-to-site najczęściej stosuje się uwierzytelnianie za pomocą klucza współdzielonego.

Po skonfigurowaniu polityki ISAKMP należy zdefiniować klucz współdzielony dla konkretnego adresu peera za pomocą komendy crypto isakmp key. W przypadku gdy nasz router znajduje się za NAT, w kluczu podajemy adres publiczny zdalnego routera. Po stronie zdalnego routera klucz jest wiązany z naszym adresem publicznym, który może być dynamiczny, co wymaga użycia parametru address 0.0.0.0 w niektórych scenariuszach.

42/56 Cisco IOS - konfiguracja NAT Keepalive
  • Cisco wymaga recznego wlaczenia NAT Keepalive dla stabilnosci:
! Wlaczenie NAT Keepalive co 20 sekund
Router(config)# crypto isakmp nat keepalive 20
!
! Keepalive zapobiega wygasnieciu wpisu NAT
! przez wysylanie pakietow UDP 4500 co 20s
! Domyslnie: wylaczone (0). Zalecane: 15-30s

Mechanizm NAT Keepalive w Cisco IOS zapobiega zrywaniu tunelu IPSec przez routery NAT, które usuwają nieaktywne wpisy z tablic translacji. W przeciwieństwie do RouterOS, gdzie keepalive działa automatycznie, Cisco wymaga jawnego włączenia tej funkcji za pomocą komendy crypto isakmp nat keepalive z odpowiednią wartością w sekundach.

Keepalive działa poprzez wysyłanie pustych pakietów UDP na port 4500 w regularnych odstępach czasu. Pakiety te mają długość jednego bajtu o wartości 0xFF i nie zawierają żadnych danych kryptograficznych. Ich jedynym celem jest odświeżenie wpisu w tablicy translacji NAT, tak aby router NAT nie uznał tunelu za nieaktywny i nie usunął mapowania portów.

Wybór odpowiedniej wartości keepalive zależy od konfiguracji routera NAT znajdującego się na drodze pakietów. Większość domowych routerów utrzymuje wpisy w tablicy translacji przez około 60 sekund bez aktywności. Dla bezpieczeństwa zaleca się ustawienie keepalive na 20 sekund, co zapewnia kilkukrotną retransmisję przed potencjalnym wygaśnięciem wpisu. W przypadku CGNAT wartość tę można zmniejszyć do 15 sekund.

43/56 Cisco IOS - Transform-set i Crypto Map
  • Konfiguracja Phase 2 (IPSec parameters) i powiazanie z interfejsem:
Router(config)# crypto ipsec transform-set TRANS \
Router(cfg-crypto-trans)# esp-aes 256 esp-sha-hmac
Router(cfg-crypto-trans)# exit
Router(config)# crypto map CMAP 10 ipsec-isakmp
Router(config-crypto-map)# set peer 1.2.3.4
Router(config-crypto-map)# set transform-set TRANS
Router(config-crypto-map)# set pfs group14
Router(config-crypto-map)# match address 101
Router(config-crypto-map)# exit
Router(config)# interface GigabitEthernet0/1
Router(config-if)# crypto map CMAP

Transform-set w Cisco IOS definiuje algorytmy szyfrowania i uwierzytelniania dla fazy 2 negocjacji IPSec, czyli dla właściwego tunelu danych. W przeciwieństwie do fazy 1, która służy do ustanowienia bezpiecznego kanału zarządzania, faza 2 określa, jak będą chronione rzeczywiste pakiety danych przesyłane przez tunel. Dla NAT-T transform-set musi zawierać algorytmy zgodne z możliwościami obu stron.

Crypto map łączy w sobie wszystkie elementy konfiguracji IPSec w jedną spójną całość. Definiuje ona adres peera, transform-set, reguły ACL pasujące do ruchu podlegającego szyfrowaniu oraz opcjonalnie parametry PFS. Po utworzeniu crypto map jest przypisywana do interfejsu sieciowego, co aktywuje IPSec na tym interfejsie dla ruchu pasującego do zdefiniowanych reguł.

W środowiskach z NAT crypto map musi być skonfigurowana z adresem publicznym peera, a nie jego wewnętrznym adresem prywatnym. Jest to szczególnie ważne, gdy router znajdujący się za NAT ma wiele interfejsów z różnymi adresami. W przypadku dynamicznego adresu IP po stronie zdalnej, można użyć parametru set peer z adresem 0.0.0.0, ale wymaga to dodatkowej konfiguracji keepalive.

44/56 Cisco IOS - ACL dla NAT z wykluczeniem VPN
  • KLUCZOWE: ACL dla NAT musi najpierw deny ruch VPN, potem permit reszte.
  • Przyklad ACL na routerze za NAT (R1, LAN 192.168.1.0/24, VPN do 10.0.0.0/24):
  • access-list 100 deny ip 192.168.1.0 0.0.0.255 10.0.0.0 0.0.0.255
  • access-list 100 permit ip 192.168.1.0 0.0.0.255 any
  • ip nat inside source list 100 interface GigabitEthernet0/0 overload
  • Uwaga: deny VPN musi byc PRZED permit any, bo ACL sa przetwarzane sekwencyjnie!

Listy kontroli dostępu w Cisco IOS służą zarówno do definiowania ruchu podlegającego szyfrowaniu, jak i do wykluczania ruchu VPN z translacji NAT. Prawidłowe skonfigurowanie ACL dla NAT jest jednym z najważniejszych elementów konfiguracji IPSec przez translację adresów. Bez odpowiedniej reguły deny ruch VPN zostanie przetranslowany, co uniemożliwi jego poprawne przetworzenie przez tunel.

Kolejność wpisów w ACL ma kluczowe znaczenie, ponieważ listy dostępu są przetwarzane sekwencyjnie od góry. Reguła deny dla ruchu VPN musi znajdować się PRZED regułą permit dla pozostałego ruchu. W przeciwnym razie ruch VPN zostanie dopasowany do reguły permit i poddany translacji NAT, zanim trafi do tunelu IPSec. Jest to jeden z najczęstszych błędów popełnianych podczas konfiguracji.

W przykładzie na slajdzie reguła access-list 100 deny ip 192.168.1.0 0.0.0.255 10.0.0.0 0.0.0.255 wyklucza ruch z sieci lokalnej R1 do sieci zdalnej R2 z translacji NAT. Kolejna reguła access-list 100 permit ip 192.168.1.0 0.0.0.255 any zezwala na translację całego pozostałego ruchu wychodzącego do Internetu. Komenda ip nat inside source list 100 łączy ACL z mechanizmem NAT.

45/56 Cisco IOS - przyklad Site-to-Site z NAT-T
  • Topologia: R1 (za NAT, WAN 203.0.113.1) - R2 (publiczny 1.2.3.4).
  • R1 LAN: 192.168.1.0/24, R2 LAN: 10.0.0.0/24.
  • R2: interfejs loopback 1.2.3.4/32 symulujacy publiczny adres.
  • KONFIGURACJA R1 (za NAT) i R2 (publiczny):
! ===== R1 - za NAT (203.0.113.1) =====
crypto isakmp policy 1
 encryption aes 256
 hash sha256
 authentication pre-share
 group 14
crypto isakmp key VPNHaslo address 1.2.3.4
crypto isakmp nat keepalive 20
!
crypto ipsec transform-set AES256 esp-aes 256 esp-sha-hmac
!
crypto map VPN 10 ipsec-isakmp
 set peer 1.2.3.4
 set transform-set AES256
 set pfs group14
 match address 101
interface GigabitEthernet0/1
 ip address 203.0.113.1 255.255.255.252
 ip nat outside
 crypto map VPN
!
! ACL: najpierw deny VPN, potem permit NAT
access-list 100 deny ip 192.168.1.0 0.0.0.255 10.0.0.0 0.0.0.255
access-list 100 permit ip 192.168.1.0 0.0.0.255 any
ip nat inside source list 100 interface G0/1 overload
! ===== R2 - publiczny (1.2.3.4) =====
crypto isakmp policy 1
 encryption aes 256
 hash sha256
 authentication pre-share
 group 14
crypto isakmp key VPNHaslo address 203.0.113.1
!
crypto ipsec transform-set AES256 esp-aes 256 esp-sha-hmac
!
crypto map VPN 10 ipsec-isakmp
 set peer 203.0.113.1
 set transform-set AES256
 set pfs group14
 match address 102
interface GigabitEthernet0/0
 ip address 1.2.3.4 255.255.255.252
 crypto map VPN
!
access-list 102 permit ip 10.0.0.0 0.0.0.255 192.168.1.0 0.0.0.255

Pełna konfiguracja site-to-site z NAT-T pokazuje, jak wszystkie elementy IPSec współpracują ze sobą w praktycznym scenariuszu. Router R1, znajdujący się za NAT, wymaga dodatkowych ustawień, których nie potrzebuje R2 mający publiczny adres IP. Różnice te obejmują włączenie NAT keepalive, konfigurację NAT bypass oraz ustawienie interfejsu jako ip nat outside.

Router R2 z publicznym adresem IP ma znacznie prostszą konfigurację, ponieważ nie wymaga obsługi NAT ani keepalive. Jego konfiguracja ogranicza się do standardowych ustawień IPSec: polityki ISAKMP, transform-set, crypto map i ACL dla ruchu VPN. Różnica w numerach ACL po obu stronach wynika z odwrotnego kierunku ruchu - każda strona definiuje ruch wychodzący ze swojej sieci lokalnej.

Po skonfigurowaniu obu routerów należy zweryfikować działanie tunelu za pomocą komend show crypto isakmp sa i show crypto ipsec sa. W stanie MM_ACTIVE dla fazy 1 oraz aktywnych SA dla fazy 2 można uznać, że konfiguracja jest poprawna. Dodatkowo warto przetestować łączność między hostami w sieciach LAN za pomocą narzędzia ping z adresu źródłowego na interfejsie wewnętrznym.

46/56 Cisco IOS - sprawdzanie statusu NAT-T
  • Po konfiguracji sprawdz stan:
  • show crypto isakmp sa - status IKE Phase 1.
  • show crypto ipsec sa - status IKE Phase 2 (aktywne SA).
  • show crypto map - wyswietlenie przypisanych crypto map.
  • W show crypto isakmp sa: sprawdz, czy NAT-T jest uzywany (port 4500).
  • W show crypto ipsec sa: sprawdz encaps, decaps, czy pakiety sa szyfrowane.

Komendy show w Cisco IOS są podstawowym narzędziem do weryfikacji poprawności działania IPSec z NAT-T. Komenda show crypto isakmp sa wyświetla status połączeń IKE, w tym stan negocjacji oraz informację o tym, czy używany jest port 4500. Stan MM_ACTIVE oznacza pomyślne zakończenie fazy 1, a wartość portu 4500 w kolumnie dst potwierdza użycie NAT-T.

Komenda show crypto ipsec sa dostarcza szczegółowych informacji o aktywnych security associations dla fazy 2. Można z niej odczytać liczbę zaszyfrowanych i odszyfrowanych pakietów, co pozwala zweryfikować, czy ruch faktycznie przechodzi przez tunel. W przypadku problemów z przepływem danych warto sprawdzić, czy liczniki encaps i decaps rosną podczas generowania ruchu testowego.

Komenda show crypto map wyświetla skonfigurowane mapy kryptograficzne wraz z ich parametrami. Pozwala to na szybką weryfikację, czy crypto map jest poprawnie przypisana do interfejsu oraz czy zawiera prawidłowe ustawienia dla połączenia z NAT. W przypadku błędów konfiguracji warto również sprawdzić logi systemowe za pomocą komendy show logging.

47/56 Cisco IOS - debugowanie IPSec z NAT-T
  • Komendy debug dla diagnozowania IPSec przez NAT:
  • debug crypto isakmp - sledzenie negocjacji IKE (NAT-D, VID, przelaczenie na 4500).
  • debug crypto ipsec - sledzenie SA Phase 2.
  • debug crypto nat - specyficzne sledzenie NAT-T (Cisco IOS).
  • UWAGA: debug crypto jest bardzo szczegolowe i moze obciazyc CPU routera.
  • W Packet Tracer: debug crypto isakmp jest dostepne, ale ograniczone.

Komendy debug w Cisco IOS są niezwykle przydatne do szczegółowej diagnostyki problemów z IPSec i NAT-T, ale należy ich używać z ostrożnością. Debugowanie w czasie rzeczywistym może znacząco obciążyć procesor routera, szczególnie w przypadku dużej liczby tuneli lub intensywnego ruchu. W środowisku produkcyjnym zaleca się stosowanie debugowania tylko w oknach serwisowych lub na kopiach konfiguracji.

Komenda debug crypto isakmp wyświetla szczegółowe informacje o procesie negocjacji IKE, w tym wymianę pakietów Vendor ID i NAT-D. Dzięki niej można prześledzić cały proces NAT-T krok po kroku: od wysłania znaczników Vendor ID, przez wykrycie NAT za pomocą NAT-D, aż po przełączenie na port 4500. Jest to niezastąpione narzędzie w przypadku problemów z negocjacją NAT-T.

Komenda debug crypto nat jest specyficzna dla Cisco IOS i pokazuje informacje związane bezpośrednio z obsługą NAT-T. Wyświetla ona komunikaty o wykryciu NAT, przełączeniu na port 4500 oraz wysyłaniu keepalive. Dzięki niej można szybko zdiagnozować, czy problem leży po stronie NAT-T, czy w innych elementach konfiguracji IPSec.

48/56 Cisco IOS - ograniczenia NAT-T w Packet Tracer
  • Cisco Packet Tracer symuluje podstawowe VPN IPSec site-to-site.
  • NAT-T dziala automatycznie, ale nie ma pelnej kontroli nad parametrami.
  • Packet Tracer nie wspiera: IKEv2, L2TP/IPSec, zaawansowanych opcji NAT-T.
  • Packet Tracer ma limitowana implementacje keepalive.
  • Zalecenie: uzywac GNS3/EVE-NG z obrazami IOS do testowania NAT-T.
  • Packet Tracer wystarczy do nauki podstawowych komend i topologii.

Cisco Packet Tracer jest doskonałym narzędziem edukacyjnym do nauki podstaw IPSec i NAT-T, ale ma swoje ograniczenia. W symulatorze nie wszystkie funkcje dostępne w rzeczywistym IOS są zaimplementowane, co może prowadzić do mylnych wniosków podczas nauki. Przede wszystkim Packet Tracer ma uproszczoną implementację IKEv2 i nie wspiera wszystkich opcji NAT-T dostępnych w pełnym IOS.

W Packet Tracer NAT-T działa automatycznie po skonfigurowaniu podstawowych elementów IPSec, ale administrator nie ma pełnej kontroli nad parametrami. Nie można na przykład ręcznie ustawić interwału keepalive ani wymusić użycia portu 4500. Symulator również nie wspiera zaawansowanych funkcji, takich jak MOBIKE czy IKEv2, które są kluczowe w nowoczesnych wdrożeniach.

Mimo tych ograniczeń Packet Tracer wystarczy do nauczenia się podstawowych komend IPSec i zrozumienia architektury site-to-site. Dla zaawansowanych testów NAT-T zaleca się użycie GNS3 lub EVE-NG, które korzystają z rzeczywistych obrazów IOS. Środowiska te pozwalają na pełną konfigurację i testowanie wszystkich funkcji bez ograniczeń symulatora.

49/56 Cisco IOS - lista kontrolna NAT-T
  • 1. Aktywuj licencję: license boot module c1900 technology-package securityk9
  • 2. crypto isakmp policy 1: encr aes, authentication pre-share, group 2/5
  • 3. crypto isakmp key HASLO address 1.2.3.4
  • 4. (Opcjonalnie) crypto isakmp nat keepalive 20
  • 5. crypto ipsec transform-set SET esp-aes esp-sha-hmac
  • 6. access-list 101 permit ip 192.168.1.0 0.0.0.255 10.0.0.0 0.0.0.255 - ACL VPN
  • 7. crypto map CMAP 1 ipsec-isakmp: set peer, transform-set, match address
  • 8. interface G0/0: crypto map CMAP
  • 9. show crypto isakmp sa, show crypto ipsec sa - weryfikacja

Lista kontrolna NAT-T dla Cisco IOS podsumowuje wszystkie kroki niezbędne do poprawnej konfiguracji IPSec przez translację adresów. Rozpoczyna się od aktywacji licencji securityk9, która jest wymagana do korzystania z funkcji kryptograficznych. Bez tej licencji router nie będzie w stanie ustanowić tunelu IPSec, nawet jeśli wszystkie pozostałe ustawienia są poprawne. W Packet Tracer licencja jest domyślnie aktywna w nowszych wersjach.

Kolejne kroki obejmują konfigurację polityki ISAKMP, klucza współdzielonego, opcjonalnie NAT keepalive oraz transform-set dla fazy 2. Każdy z tych elementów musi być skonfigurowany zgodnie z wymaganiami bezpieczeństwa i kompatybilnością między obiema stronami. W przypadku połączeń z urządzeniami różnych producentów należy upewnić się, że algorytmy kryptograficzne są zgodne.

Ostatnie kroki dotyczą konfiguracji crypto map i przypisania jej do interfejsu oraz weryfikacji za pomocą komend show. Szczególnie ważne jest sprawdzenie, czy crypto map jest przypisana do właściwego interfejsu sieciowego. W przypadku routerów z wieloma interfejsami WAN crypto map musi być przypisana do interfejsu, który faktycznie łączy się z siecią zdalną.

50/56 Zastosowanie: Remote Access przez NAT
  • Scenariusz: Pracownik zdalny laczy sie z siecia firmowa przez domowy NAT.
  • Domowy router: PAT - jeden publiczny IP dla wszystkich urzadzen domowych.
  • Dla IPSec: NAT-T niezbedny do dzialania przez domowy router.
  • Dla OpenVPN/WireGuard: dzialaja od razu (UDP/TCP z portami).
  • Problem CGNAT: podwojny NAT u operatora. Port forwarding nie dziala.
  • W CGNAT: OpenVPN na TCP 443 lub WireGuard z PersistentKeepalive to czesto jedyne dzialajace rozwiazania.

Scenariusz zdalnego dostępu przez domowy NAT jest najczęściej spotykanym przypadkiem użycia VPN w środowiskach korporacyjnych. Pracownik łączący się z domu korzysta z routera ISP, który wykonuje PAT, tłumacząc ruch wszystkich urządzeń domowych na jeden publiczny adres IP. Dla takich połączeń IPSec z NAT-T jest niezbędny do poprawnego działania, ponieważ domowe routery rzadko obsługują bezpośrednio protokół ESP.

Otwarte protokoły VPN, takie jak OpenVPN i WireGuard, mają naturalną przewagę w scenariuszach zdalnego dostępu przez NAT, ponieważ używają standardowych portów UDP lub TCP. OpenVPN może działać na porcie TCP 443, który jest prawie zawsze otwarty w firmowych zaporach sieciowych, a WireGuard dzięki PersistentKeepalive utrzymuje stabilne połączenie nawet przez agresywny NAT.

Problem CGNAT jest szczególnie dotkliwy w przypadku zdalnego dostępu, ponieważ klient znajduje się za podwójną translacją adresów. W takiej sytuacji standardowe techniki, takie jak przekierowanie portów, nie działają, ponieważ klient nie ma kontroli nad bramą operatorską. Rozwiązaniem jest użycie protokołów, które inicjują połączenie wychodzące i utrzymują je za pomocą keepalive, takich jak WireGuard lub OpenVPN w trybie klienta.

51/56 Zastosowanie: Site-to-Site przez CGNAT (podwojny NAT)
  • Scenariusz: Dwa oddzialy firmy, oba za CGNAT (brak publicznych IP).
  • Zadna strona nie ma publicznego adresu - bezposredni tunel niemozliwy.
  • Rozwiazania:
  • 1. Serwer posredniczacy (Hub) z publicznym IP - oba oddzialy lacza sie do Hub-a.
  • 2. Mesh VPN (Tailscale, ZeroTier) - ICE do przebicia przez NAT.
  • 3. VPS w chmurze jako centralny router VPN.
  • Dla IPSec: NAT-T + IKEv2 + MOBIKE daja najlepsze rezultaty w CGNAT.

Scenariusz site-to-site przez CGNAT jest jednym z najtrudniejszych wyzwań dla inżyniera sieciowego. Gdy oba oddziały firmy znajdują się za translacją adresów operatorskich, żaden z nich nie ma publicznego adresu IP, co uniemożliwia bezpośrednie nawiązanie połączenia IPSec. W takiej sytuacji tradycyjne podejście z bezpośrednim tunelowaniem między oddziałami nie działa.

Najczęściej stosowanym rozwiązaniem jest architektura hub-and-spoke z centralnym serwerem VPN posiadającym publiczny adres IP. Oba oddziały inicjują połączenie wychodzące do centrali, która działa jako router przesyłający ruch między nimi. Takie podejście eliminuje problem braku publicznych adresów, ale wymaga odpowiedniej przepustowości łącza centrali oraz konfiguracji routingu między oddziałami.

Alternatywnym rozwiązaniem są mesh VPN, takie jak Tailscale czy ZeroTier, które wykorzystują techniki ICE do przebijania się przez NAT. Systemy te automatycznie negocjują bezpośrednie połączenia między oddziałami z wykorzystaniem technik takich jak UDP hole punching. W przypadku gdy bezpośrednie połączenie nie jest możliwe, ruch jest przekazywany przez serwery pośredniczące, co zapewnia niezawodność kosztem dodatkowego opóźnienia.

52/56 Diagnostyka NAT-T - Wireshark
  • Wireshark: narzedzie nr 1 do diagnozowania problemow z NAT-T.
  • Filtr: udp.port == 4500 || udp.port == 500
  • Co analizowac:
  • 1. Czy IKE wysyla Vendor ID (RFC 3947)? - sprawdz VID payload.
  • 2. Czy NAT-D hashe sie zgadzaja? - NAT-D payloady w MM3/MM4.
  • 3. Czy po NAT-D nastepuje przelaczenie na 4500?
  • 4. Czy ESP jest enkapsulowany w UDP? - IP proto 17, port 4500.
  • 5. Czy sa wysylane NAT Keepalive? - male pakiety UDP 4500 z 0xFF.

Analiza ruchu NAT-T za pomocą Wiresharka wymaga zrozumienia struktury pakietów IKE i ESP. Po przechwyceniu ruchu na interfejsie sieciowym należy zastosować filtr wyświetlania udp.port == 4500 || udp.port == 500, który pokaże tylko pakiety związane z IPSec. Dalsza analiza polega na rozwinięciu poszczególnych pakietów w drzewie protokołów i sprawdzeniu obecności odpowiednich payloadów.

Pierwszym elementem, który należy sprawdzić w przechwyconym ruchu, są pakiety IKE z znacznikiem Vendor ID dla RFC 3947. Znacznik ten ma postać skrótu o długości 16 bajtów i jest wysyłany w pierwszej wiadomości IKE. Jeśli znacznik jest obecny po obu stronach, oznacza to, że obie strony wspierają NAT-T i proces może być kontynuowany.

Po wymianie znaczników VendorID następuje wysłanie pakietów NAT-D. W Wiresharku pakiety te są widoczne jako oddzielne payloady w strukturze wiadomości IKE. Należy sprawdzić, czy wartości skrótów w NAT-D są zgodne z oczekiwaniami. Po udanym wykryciu NAT komunikacja zostaje przełączona na port 4500, co jest widoczne jako zmiana portu źródłowego i docelowego w kolejnych pakietach.

53/56 Najczestsze bledy konfiguracji NAT-T
  • 1. NAT transluje ruch VPN - brak reguly bypass dla zdalnej sieci.
  • 2. Firewall blokuje porty - UDP 500, 4500 lub IP 50 zamkniete.
  • 3. Niespojne parametry IKE - rozne algorytmy szyfrowania po obu stronach.
  • 4. Brak NAT Keepalive - tunel dziala chwile, potem sie zawiesza.
  • 5. Konflikt adresacji IP - obie strony ta sama podsiec (np. 192.168.1.0/24).
  • 6. MTU zbyt wysokie - pakiety fragmentowane lub z flagami DF.
  • 7. NAT-T wylaczony po jednej stronie (nat-traversal=no).
  • 8. Symmetric NAT - NAT-T moze nie dzialac. Rozwiazanie: TURN relay.

Błędy konfiguracji NAT-T można podzielić na kilka kategorii, z których każda wymaga innego podejścia diagnostycznego. Najczęstszym błędem jest brak reguł NAT bypass, co objawia się tym, że tunel IPSec zostaje ustanowiony, ale ruch danych nie przepływa przez niego. Diagnostyka takiego problemu polega na sprawdzeniu ścieżki pakietów za pomocą narzędzia ping z opcją rejestrowania tras.

Drugą kategorią błędów są problemy z filtracją pakietów na zaporze sieciowej. Nawet jeśli tunel zostanie poprawnie skonfigurowany, zamknięte porty UDP 500 i 4500 uniemożliwią nawiązanie połączenia. W takich przypadkach diagnostyka polega na sprawdzeniu, czy porty są otwarte za pomocą narzędzia telnet lub netcat oraz na analizie logów zapory sieciowej.

Trzecią kategorią są błędy związane z niespójnymi parametrami kryptograficznymi po obu stronach tunelu. Różne algorytmy szyfrowania, długości kluczy lub grupy Diffie-Hellmana uniemożliwiają pomyślne zakończenie negocjacji IKE. W takiej sytuacji pomocne jest szczegółowe debugowanie za pomocą komend debug crypto isakmp w Cisco IOS lub /log print where topics~ipsec w RouterOS.

54/56 NAT-T a IPv6 - czy problem znika?
  • W czystym IPv6: kazde urzadzenie ma publiczny adres - NAT zbedny.
  • W teorii: IPSec przez IPv6 nie potrzebuje NAT-T.
  • W praktyce: >70% ruchu to wciaz IPv4. IPv6 nie jest powszechnie wdrozony.
  • Dual-stack: IPv4 pozostaje - NAT na IPv4 nadal potrzebny.
  • NAT64: translacja IPv6<->IPv4 - tez wymaga NAT-T dla IPSec.
  • Wniosek: NAT-T bedzie potrzebny jeszcze przez wiele lat.

Wprowadzenie protokołu IPv6 miało w teorii rozwiązać problem NAT na zawsze, ponieważ każdy host w IPv6 ma globalnie unikalny adres publiczny. W praktyce jednak migracja do IPv6 postępuje wolniej niż oczekiwano, a znaczna część ruchu internetowego wciąż korzysta z IPv4. W wielu sieciach stosuje się podejście dual-stack, w którym oba protokoły działają równolegle, co oznacza, że problem NAT pozostaje aktualny.

Protokół IPSec przez IPv6 nie wymaga NAT-T, ponieważ adresy IPv6 nie podlegają translacji w standardowych scenariuszach. Jednak w przypadku gdy IPv6 jest tunelowany przez IPv4 za pomocą mechanizmów takich jak 6in4 lub Teredo, translacja adresów nadal może wystąpić na poziomie tunelu IPv4. Oznacza to, że nawet w IPv6 problem NAT może pojawić się w określonych scenariuszach.

Mechanizm NAT64, który umożliwia komunikację między hostami IPv6 a serwerami IPv4, sam w sobie wprowadza translację adresów. W przypadku gdy IPSec jest używany przez NAT64, konieczne jest zastosowanie NAT-T, ponieważ pakiety ESP przechodzą przez translator. To pokazuje, że NAT-T pozostanie potrzebny jeszcze przez wiele lat, nawet w miarę postępującej migracji do IPv6.

55/56 Podsumowanie - najwazniejsze wnioski (1/2)
  • NAT jest wszechobecny i stanowi fundamentalne wyzwanie dla VPN warstwy 3 (IPSec).
  • NAT-T (RFC 3947/3948) rozwiazuje problemy przez enkapsulacje ESP w UDP na porcie 4500.
  • Proces NAT-T: Vendor ID -> NAT-D (wykrywanie) -> Przelaczenie na 4500 -> Keepalive.
  • IKEv2 ma wbudowany NAT-T - preferowany wybor dla nowych wdrozen.
  • OpenVPN i WireGuard nie wymagaja NAT-T - uzywaja natywnie UDP/TCP.

Podsumowując pierwszą część wniosków z wykładu, należy podkreślić, że NAT jest wszechobecnym mechanizmem we współczesnych sieciach komputerowych, a jego wpływ na protokoły VPN jest głębszy niż mogłoby się wydawać na pierwszy rzut oka. Nawet proste scenariusze, takie jak połączenie pracownika zdalnego z siecią firmową, wymagają zrozumienia interakcji między translacją adresów a protokołami tunelującymi.

NAT-T w swojej podstawowej formie został zaprojektowany dla IPSec, ale jego zasady mają zastosowanie również do innych protokołów. Wykrywanie obecności NAT, dynamiczne przełączanie portów i utrzymywanie wpisów w tablicy translacji za pomocą keepalive to techniki, które są wykorzystywane w różnej formie przez wszystkie nowoczesne protokoły VPN. Zrozumienie tych mechanizmów pozwala na świadome projektowanie bezpiecznych i niezawodnych połączeń.

Platformy MikroTik RouterOS i Cisco IOS oferują różne poziomy automatyzacji w kontekście NAT-T. RouterOS automatyzuje większość procesów, podczas gdy Cisco wymaga więcej ręcznej konfiguracji, ale oferuje za to większą kontrolę nad szczegółami. Wybór platformy powinien być podyktowany specyficznymi wymaganiami projektu oraz doświadczeniem zespołu inżynierskiego.

56/56 Podsumowanie - najwazniejsze wnioski (2/2)
  • RouterOS: nat-traversal=yes domyslnie, konfiguracja przez /ip ipsec peer.
  • Cisco IOS: NAT-T domyslnie wlaczony, crypto isakmp nat keepalive dla stabilnosci.
  • CGNAT i Symmetric NAT: szczegolne wyzwanie - wymagaja starannej konfiguracji.
  • Diagnostyka: Wireshark (filtry na port 4500) + logi IPSec + show crypto.
  • Znajomosc NAT-T jest niezbedna dla kazdego inzyniera sieciowego projektujacego VPN.
  • Dziekuje za uwage! Pytania? Zapraszam do dyskusji.

Druga część podsumowania koncentruje się na praktycznych aspektach konfiguracji i diagnozowania NAT-T. Komendy dostępne w RouterOS i Cisco IOS pozwalają na szczegółową weryfikację każdego etapu negocjacji IPSec, od wymiany znaczników Vendor ID po finalne ustanowienie security associations. Umiejętność interpretacji wyników tych komend jest kluczowa dla skutecznego rozwiązywania problemów.

CGNAT i symmetric NAT pozostają największymi wyzwaniami dla protokołów VPN na dziś dzień. Podwójna translacja w CGNAT wymaga starannego doboru interwałów keepalive i często zmusza do stosowania alternatywnych protokołów, takich jak WireGuard. Symmetric NAT z kolei może uniemożliwić działanie standardowego NAT-T, co wymaga zastosowania zaawansowanych technik, takich jak TURN lub pośrednictwo serwera centralnego.

Znajomość mechanizmów NAT-T i umiejętność ich konfiguracji na różnych platformach jest jedną z kluczowych kompetencji inżyniera sieciowego. W dobie powszechnej pracy zdalnej i globalizacji firm, umiejętność projektowania i utrzymywania niezawodnych połączeń VPN przez różne typy translacji adresów jest niezbędna w codziennej praktyce zawodowej. Zachęcam do samodzielnych eksperymentów w laboratorium oraz do zgłębiania dokumentacji RFC i producentów sprzętu.