fbpx
Home Technologie siecioweRouting & Switching NAT i PAT – Network/Port Address Translation
nat -i-pat-network-address-translation-2

NAT i PAT – Network/Port Address Translation

Rafał Rudewicz

Już w połowie lat 90 ubiegłego wieku pula adresów IP w wersji 4 została całkowicie rozdana. Obecnie, aby ubiegać się o blok adresów, należy zapisać się na listę oczekujących lub odkupić od kogoś innego. Oczywiście nadal możliwe jest otrzymanie pojedynczego adresu IPv4 od swojego ISP, ale co w sytuacji, kiedy potrzebujemy takich adresów więcej niż jeden? Rozwiązaniem tego problemu jest oczywiście przejście na IPv6. Dostępna tam pula pozwala na rozdanie po kilka milionów adresów każdej osobie na ziemie i jeszcze zostanie na kilka kolejnych pokoleń. Brzmi świetnie, ale jak to w życiu była nie zawsze możemy skorzystać z IPv6. W takim wypadku możemy wyłożyć pieniądze na stół i kupić dodatkowe adresy lub skorzystać z prywatnych adresów oraz zastosować NAT.

NAT - Zasada działania

NAT został zdefiniowany w RFC 3022 i pozwala hostom, które nie mają poprawnego, zarejestrowanego oraz unikalnego adresu IP na komunikację z innym hostem poprzez Internet.

Wewnątrz naszej sieci możemy korzystać z adresacji prywatnej 10.0.0.0/8 lub należącej do kogoś innego na przykład  1.0.0.0/8 w  swojej sieci lokalnej.

Jeśli nie posiadamy żadnej usługi, która powinna być dostępna poza naszą siecią, nie ma potrzeby przypisywania hostom adresów globalnych. W przypadku niektórych urządzeń np. drukarek nie jest to nawet wskazane.

nat zasada działania

Komunikacja jest możliwa, ponieważ router wykorzystuje poprawny, publiczny adres IPv4 do reprezentowania adresów prywatnych z sieci LAN. W tym celu adres IP nadawcy (source IP) jest podmieniany w każdym wychodzącym pakiecie.

Na poniższym obrazku zobaczysz, jak wygląda taka przykładowa translacja adresów oraz poznasz nowe terminy, które za chwilę omówimy.

NAT source I destination NAT
  • INSIDE LOCAL
    • Słowo Inside odnosi się do faktu, że adres permanentnie należy do jednej z naszych podsieci. Czyli patrząc z naszej perspektywy, adres należy do nas.
    • Termin local oznacza, że adres będzie stosowany do komunikacji lokalnie, wewnątrz naszej sieci, nie w internecie.
  • INSIDE GLOBAL
    • Słowo Inside odnosi się do faktu, że adres permanentnie należy do jednej z naszych podsieci. Czyli patrząc z naszej perspektywy adres, należy do nas.
    • Termin global oznacza, że adres będzie stosowany do komunikacji na zewnątrz, z hostami dostępnymi w internecie.
  • OUTSIDE GLOBAL – W procesie NAT ten adres reprezentuje adres dostępny w internecie i nie jest podmieniany w procesie Source NAT.
  • OUTSIDE LOCAL 
    • Termin ten ma zastosowanie jedynie w przypadku gdy pod uwagę bierzemy Destination NAT.
    • Słowo outside odnosi się do faktu, że host, do którego wysłany został pakiet, jest ogólnodostępny w Internecie.
    • Termin  local oznacza, że prawdziwy odbiorca pakietu korzysta z adresacji prywatnej.

Adresy prywatne - RFC 1918

Adresy prywatne w IPv4 to takie, które nie muszą być unikatowe w skali internetu. Oznacza to, że każdy w ramach swojej sieci może z nich korzystać. Do tego celu IETF wydzieliło 3 specjalne podsieci:

  • 10.0.0.0/8 10.0.0.0 – 10.255.255.255
  • 172.16.0.0/12 172.16.0.0 – 172.31.255.255
  • 192.168.0.0/16 192.168.0.0 – 192.168.255.255

Adresy prywatne stosujemy zawsze tam, gdzie nie potrzebujemy udostępniać zasobów do Internetu. Nie oznacza to oczywiście, że odcinasz się od Internetu. Nadal masz możliwość komunikowania się z hostami, które posiadają publiczny, routowalny adres IPv4.

W protokole IPv4 nie ma wbudowanego mechanizmu, który by blokował trasowanie adresów prywatnych, jednak musisz się liczyć z tym, że powinny one być odfiltrowane przez ISP.

SOURCE NAT

Najczęściej spotykaną formą jest source NAT. Kiedy host w naszej sieci lokalnej wysyła pakiet do innego hosta w internecie, router, który dokonuje translacji (zazwyczaj będzie to router brzegowy na styku do internetu), podmienia źródłowy adres IP (inside local) na adres dostępny globalnie (inside global). Aby osiągnąć ten cel, mamy dwie opcje do wyboru. Możemy zdefiniować statycznie pary adresów (inside local – inside global) lub pozwolić, aby tworzyły się dynamicznie, na zasadzie kto pierwszy ten lepszy. W chwili dokonania translacji router zapisuje w swojej pamięci daną parę, aby następnie wracając pakiet przekazać do właściwego hosta w sieci wewnętrznej.

Kiedy stosujemy NAT dynamiczny, musimy zapewnić pulę adresów równą liczbie hostów o adresach prywatne, które moją mieć możliwość komunikacji z hostami w internecie. Pakiety od kolejnych hostów po całkowitym wykorzystaniu puli będą odrzucane.

Nat statyczny

Konfiguracja statycznego NAT

NAT statyczny jest najprostszy do skonfigurowania, jednak nadal wymaga uwagi. Musisz odpowiednio skonfigurować interfejsy, na których ma dokonywać się translacja oraz utworzyć pary z adresów prywatnych i publicznych. Pamiętaj, że ważna jest kolejność, w jakiej podasz te adresy.

  1. Użyj komendy ip nat inside w konfiguracji interfejsu od strony LAN.
  2. Zastosuj komendę ip nat outside w konfiguracji interfejsu od strony, która będzie poza naszą siecią.
  3. Na koniec przy pomocy polecenia ip nat source static inside-local inside-global stwórz statycznie mapę adresów do translacji.
interface GigabitEthernet0/0
 ip address 10.0.0.2 255.0.0.0
 ip nat inside
!
interface GigabitEthernet0/1
 ip address 150.0.0.1 255.255.255.0
 ip nat outside
!
ip nat inside source static 10.0.0.2 150.0.0.1

Router#show ip nat translation
Pro Inside global Inside local Outside local Outside global
--- 150.0.0.1   10.0.0.2          ---          ---

Router#show ip nat statistics
Total translations: 1 (1 static, 0 dynamic, 0 extended)
Outside Interfaces: GigabitEthernet0/1
Inside Interfaces: GigabitEthernet0/0
Hits: 21  Misses: 0
Expired translations: 0
Dynamic mappings:

Konfiguracja dynamicznego NAT

Konfiguracja dynamicznego NAT, jak pewnie się domyślasz, nieco różni się od statycznego. Nadal musimy zdefiniować które interfejsy będą wejściowe (inside) oraz wyjściowe (outside).  Jednak zamiast statycznie stworzonych par wykorzystamy inne mechanizmy. Otóż  stworzymy ACL, która będzie wskazywała adresy IP prywatne. Adresy publiczne (globalne)  definiujemy, tworząc pule (ang. pool). Na koniec nie pozostaje nam nic innego niż połączyć to wszystko razem.

  1. Komendę ip nat inside  używamy w konfiguracji interfejsu po stronie naszej sieci wewnętrznej (tak jak przy statycznym NAT)
  2. Polecenia ip nat outside używamy w konfiguracji interfejsu po stronie sieci zewnętrznej (tak jak przy statycznym NAT)
  3. Tworzymy ACL (access control list), która wskaże nam, które adresy prywatne IPv4 mogą zostać przetłumaczone
  4. Tworzymy  poleceniem ip nat pool nazwa pierwszy adres ostatni adres netmask maska podsieci pulę adresów (inside global).
  5. Na koniec ip nat inside source list numer listy pool nazwa puli łączymy wszystko w całość.
interface GigabitEthernet0/0 
 ip address 10.0.0.2 255.0.0.0 
 ip nat inside 
! 
interface GigabitEthernet0/1 
 ip address 150.0.0.1 255.255.255.0  
 ip nat outside 
! 
ip nat pool INTERNET 150.0.0.1 150.0.0.5 netmask 255.255.255.0
!
ip nat inside list 1 pool INTERNET
!
access-list 1 permit 10.0.0.2
!
Router#show  ip nat statistics 
Total translations: 4 (0 static, 4 dynamic, 4 extended)
Outside Interfaces: GigabitEthernet0/1
Inside Interfaces: GigabitEthernet0/0
Hits: 7  Misses: 8
Expired translations: 4
Dynamic mappings:
-- Inside Source
access-list 1 pool INTERNET refCount 4
 pool INTERNET: netmask 255.255.255.0
       start 150.0.0.1 end 150.0.0.5
       type generic, total addresses 5 , allocated 1 (20%), misses 0

PAT, czyli nat overload

NAT w swojej podstawowej wersji, czy to statyczny, czy dynamiczny, ma jeden znaczący problem. W momencie tworzenia pary inside localinside global, możemy 1 adres globalny połączyć z 1 jednym adresem prywatnym. Jeśli mamy w domu 10 urządzeń to potrzebujemy 10 adresów publicznych.

Router#show ip nat translations
Pro  Inside global  Inside local  Outside local Outside global
icmp 150.0.0.1:10  10.0.0.3:10   200.0.0.1:10 1200.0.0.1:10
icmp 150.0.0.2:1 10.0.0.2:1   200.0.0.1:1  200.0.0.1:1

Rozwiązaniem tego problemu jest PAT (port address translation), który pozwala na translację wielu adresów prywatnych na jeden – lub kilka- publicznych. Dzieje się tak, ponieważ w przypadku NAT overload podmieniany jest nie tylko adres IP, ale również numer portu. Dzięki temu tylko na jednym adresie IP publicznym jesteśmy w stanie obsłużyć do 65 000 adresów prywatnych.

PAT - NAT Overload

konfiguracja nat overload

Konfiguracja PAT przebiega w sposób identyczny jak NAT dynamicznego z tą różnicą, że na końcu dodajemy słowo overload. Tak więc musimy wskazać interfejsy, na których będzie dokonywana translacja (ip nat inside oraz ip nat outside), zdefiniować ACL określający adresy prywatne do tłumaczenia oraz  określić zakres adresów publicznych. Możemy wskazać konkretny interfejs z adresem publicznym lub stworzyć pulę.

  1. Identycznie jak w przypadku NAT używamy komendy ip nat inside w konfiguracji interfejsu.
  2. Konfigurujemy interfejs poleceniem ip nat outside.
  3. Podobnie jak w przypadku NAT dynamicznego tworzymy ACL, która określa jakie prywatne adresy IP  będą tłumaczone na adresy globalne.
  4. OPCJONALNE Tworzymy pulę adresów publicznych ip nat pool nazwa pierwszy IP  ostatni IP netmask maska podsieci.
  5. Na koniec łączymy wszystko w całość ip nat inside source list numer listy {interface nazwa interfejsu | pool nazwa} overload
interface GigabitEthernet0/0 
 ip address 10.0.0.2 255.0.0.0  
 ip nat inside
! 
interface GigabitEthernet0/1 
 ip address 150.0.0.1 255.255.255.0 
 ip nat outside 
! 
ip nat inside source list 1 interface GigabitEthernet0/1 overload
! 
access-list 1 permit 10.0.0.2
access-list 1 permit 10.0.0.3
! 

Router#show  ip nat statistics 
Total translations: 7 (0 static, 7 dynamic, 7 extended)
Outside Interfaces: GigabitEthernet0/1
Inside Interfaces: GigabitEthernet0/0
Hits: 28  Misses: 2
Expired translations: 0
Dynamic mappings:

Router#show  ip nat translation
Pro  Inside global     Inside local       Outside local      Outside global
tcp 150.0.0.1:1024    10.0.0.3:1025        200.0.0.1:23   200.0.0.1:23
tcp 150.0.0.1:1025     10.0.0.2:1025         200.0.0.1:23    200.0.0.1:23

 

Troubleshooting NAT

Na koniec porozmawiajmy o troubleshootingu NAT, czyli rozwiązywaniu problemów z tą usługą. Problemy, z którymi możesz się spotkać, zazwyczaj dotyczą złej konfiguracji. Do najczęstszych pomyłek należą:

  • Odwrócenie interfejsów inside i outside: Upewnij się, że odpowiednie interfejsy mają przypisane komendy ip nat inside oraz ip nat outside. Jeśli obie komendy są poprawne, zweryfikuj czy interfejsy są w odpowiednich kierunkach, inside w stronę sieci prywatnej, natomiast outside w sprawę Internetu.
  • Odwrócenie adresów IP w NAT statyczny: Upewnij się, że najpierw podałeś IP prywatne następie IP publiczne. Nie na odwrót.
  • ACL: Upewnij się, że skonfigurowałeś poprawnie ACL, tak aby obejmowała wszystkie adresy prywatne, które chcesz tłumaczyć na adresy publiczne.
  • Zbyt mała pula adresów publicznych: Do NAT dynamicznego musisz utworzyć pulę adresów publicznych o takiej samej wielkości jak liczba adresów prywatnych.
  • Brak overload na końcu polecenia: Jeśli nie użyjesz polecenia overload  na końcu konfiguracji PAT, router potraktuje polecenie jako NAT dynamiczny i przepuści jedynie pierwszego hosta, który prześle pakiet.
  • Brak ruchu: PAT i NAT dynamiczny tworzą pary adresy dopiero w momencie otrzymania pakietów z sieci inside. Jeśli nie będą przekazywane żadne pakiety, polecenie show ip nat translation nic nie pokaże.

Możesz być również zainteresowany tymi artykułami:

2 komentarze

Hubert 2 grudnia 2019 - 13:45

RFC dla adresacji prywatnej to 1918 🙂

Odpowiedź
Rafał Rudewicz 2 grudnia 2019 - 20:53

Dzięki za zwrócenie uwagi! Już poprawione 🙂

Odpowiedź

Zostaw komentarz

Na blogu inna sieć wykorzystuję "ciasteczka". Lubię ciastka, a Ty? Lubię ciastka! Chcę wiedzieć więcej