Routing & Switching

NAT i PAT - Network/Port Address Translation

NAT i PAT - Network/Port Address Translation
W: Routing & Switching

Już w połowie lat dziewięćdziesiątych ubiegłego wieku pula adresów IP w wersji 4 została całkowicie rozdysponowana. 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 dostawcy usług internetowych, ale co w sytuacji, kiedy potrzebujemy więcej niż jeden taki adres?

Rozwiązaniem tego problemu jest oczywiście przejście na IPv6. Dostępna tam pula pozwala na przydzielenie po kilka milionów adresów każdej osobie na ziemi i wciąż pozostanie jeszcze wiele dla kolejnych pokoleń. Brzmi świetnie, ale jak to w życiu bywa, nie zawsze możemy skorzystać z IPv6. W takim przypadku możemy wyłożyć pieniądze na stół i kupić dodatkowe adresy, albo skorzystać z prywatnych adresów oraz zastosować NAT.

Network Address Translation

Zasada działania NAT został zdefiniowany w dokumencie RFC 3022 i umożliwia hostom, które nie posiadają poprawnego, zarejestrowanego oraz unikalnego adresu IP, komunikację z innym hostem.

Wewnątrz naszej sieci możemy korzystać z adresacji prywatnej, takiej jak 10.0.0.0/8 lub adresacji należącej do innej organizacji, na przykład 1.0.0.0/8, w naszej sieci lokalnej.

Jeśli nie korzystamy z usług, które powinny być dostępne spoza naszej sieci, nie ma potrzeby przypisywania hostom adresów publicznych. W niektórych przypadkach, na przykład dla drukarek, nie jest to nawet wskazane.

Zasada działania NAT

Komunikacja jest możliwa dzięki temu, że router wykorzystuje właściwy, publiczny adres IPv4 do reprezentowania adresów prywatnych z sieci LAN. W tym celu adres IP nadawcy (źródłowy IP) jest podmieniany w każdym wychodzącym pakiecie.

Poniższy obrazek przedstawia przykładową translację adresów oraz wprowadza nowe terminy, o których za chwilę omówimy.

INSIDE LOCAL

    • Słowo "Inside" odnosi się do faktu, że adres permanentnie należy do jednej z naszych podsieci. 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, a nie w internecie.

INSIDE GLOBAL

  • Słowo "Inside" odnosi się do faktu, że adres permanentnie należy do jednej z naszych podsieci. 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 bierzemy pod uwagę 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ć. W tym 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 w Internecie. Nie oznacza to oczywiście, że odłączasz się od sieci. Nadal masz możliwość komunikowania się z hostami posiadającymi publiczny, routowalny adres IPv4.

Translacja źródłowa (Source NAT)

Najczęściej spotykaną formą jest translacja źródłowa (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.

NAT w wersji statycznej, czyli translacja adresów jest z góry określona

Konfiguracja statycznego NAT

NAT statyczny jest najprostszy do skonfigurowania, ale nadal wymaga uwagi. Należy odpowiednio skonfigurować interfejsy, na których ma zostać wykonana translacja, oraz utworzyć pary adresów prywatnych i publicznych. Pamiętaj, że istotna jest kolejność, w jakiej podajesz te adresy.

  1. Użyj polecenia ip nat inside do konfiguracji interfejsu od strony LAN.
  2. Zastosuj polecenie ip nat outside do konfiguracji interfejsu od strony spoza naszej sieci.
  3. Na zakończenie, za pomocą komendy ip nat source static inside-local inside-global, utwórz statyczną 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 różni się od statycznego. Nadal musimy zdefiniować, które interfejsy będą wejściowe (inside), a które wyjściowe (outside). Jednak zamiast tworzenia par statycznych, będziemy korzystać z innych mechanizmów. Stworzymy listę ACL, która będzie wskazywała adresy IP prywatne. Adresy publiczne (globalne) definiujemy, tworząc pulę (ang. pool). Na koniec pozostaje nam tylko połączyć te elementy razem.

  1. Komendę p nat inside stosujemy w konfiguracji interfejsu po stronie naszej sieci wewnętrznej (tak jak w przypadku statycznego NAT).
  2. Polecenie ip nat outside używamy w konfiguracji interfejsu po stronie sieci zewnętrznej (tak jak przy statycznym NAT).
  3. Tworzymy listę ACL (access control list), która określi, które adresy prywatne IPv4 mogą być przetłumaczone.
  4. Tworzymy pulę adresów NAT za pomocą polecenia ip nat pool nazwa pierwszy adres ostatni adres netmask maska podsieci.
  5. Na zakończenie łączymy wszystko w całość za pomocą polecenia ip nat inside source list numer listy pool nazwa puli.
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 postaci, zarówno statyczny, jak i dynamiczny, boryka się z istotnym problemem. Podczas tworzenia pary adresów inside local – inside global, przypisujemy jeden adres globalny do jednego prywatnego. W przypadku posiadania w domu 10 urządzeń, 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 przeciążenia NAT następuje podmiana nie tylko adresu IP, ale również numeru portu. Dzięki temu jesteśmy w stanie obsłużyć do 65 000 adresów prywatnych tylko przy użyciu jednego adresu IP publicznego.

PAT czyli NAT overload

Konfiguracja NAT overload

Konfiguracja NAT overload przebiega w sposób identyczny jak NAT dynamiczny, z tą różnicą, że na końcu dodajemy słowo "overload".

Musimy wskazać interfejsy, na których będzie dokonywana translacja (ip nat inside oraz ip nat outside), zdefiniować listę ACL określającą adresy prywatne do tłumaczenia oraz określić zakres adresów publicznych. Możemy wskazać konkretny interfejs z adresem publicznym lub stworzyć pulę adresów.

  1. Podobnie jak przy NAT, używamy komendy ip nat inside do konfiguracji interfejsu. Interfejs zewnętrzny konfigurujemy poleceniem ip nat outside.
  2. Tak jak przy NAT dynamicznym, tworzymy listę ACL, która określa, które prywatne adresy IP będą tłumaczone na adresy publiczne.
  3. OPCJONALNIE tworzymy pulę adresów publicznych: ip nat pool nazwa pierwszy IP ostatni IP netmask maska podsieci.
  4. Na zakończenie łą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

Rozwiązywanie problemów z NAT

Na samym końcu omówmy troubleshootingu NAT, czyli rozwiązywaniu problemów z tą usługą. Problemy, z którymi możesz się spotkać, zazwyczaj wynikają z złej konfiguracji. Do najczęstszych błędów należą:

  1. Odwrócenie interfejsów inside i outside: Upewnij się, że odpowiednie interfejsy mają przypisane polecenia ip nat inside oraz ip nat outside. Jeśli obie komendy są poprawne, zweryfikuj, czy interfejsy są ustawione w odpowiednich kierunkach, tj. inside w stronę sieci prywatnej, a outside w kierunku Internetu.
  2. Odwrócenie adresów IP w NAT statycznym: Upewnij się, że najpierw podałeś adres IP prywatny, a następnie adres IP publiczny. Nie na odwrót.
  3. ACL: Sprawdź, czy skonfigurowałeś ACL prawidłowo, tak aby obejmowało wszystkie adresy prywatne, które mają być przetłumaczone na adresy publiczne.
  4. Zbyt mała pula adresów publicznych: W przypadku NAT dynamicznego pamiętaj, aby stworzyć pulę adresów publicznych o takiej samej wielkości jak liczba adresów prywatnych.
  5. Brak overload na końcu polecenia: Jeśli nie dodasz overload na końcu konfiguracji PAT, router potraktuje polecenie jako NAT dynamiczny i przepuści jedynie pierwszego hosta, który wysyła pakiet.
  6. Brak ruchu: PAT i NAT dynamiczny tworzą pary adresów dopiero w momencie otrzymania pakietów ze strony sieci inside. Jeśli nie będzie przekazywany żaden ruch, polecenie show ip nat translation nie pokaże żadnych wyników.
Napisane przez
Rafał Rudewicz
Pasjonat sieci komputerowych i automatyzacji. CCNP Enterprise & DevNet Specialist. IP/MPLS SME. Dołącz do mnie, aby razem odkrywać fascynujący świat technologii!
Komentarze
Więcej od Inna Sieć
6 sposobów na labowanie od Cisco
Routing & Switching

6 sposobów na labowanie od Cisco

Cisco oferuje sześć opcji labowania, które wspierają edukację. Narzędzia te obejmują zarówno darmowe symulatory, jak i rozbudowane laboratoria, które pozwalają na testowanie rzeczywistych scenariuszy oraz automatyzacji, co ułatwia naukę i rozwój umiejętności w bezpiecznym środowisku.
Spis treści
Świetnie! Udało ci się pomyślnie zarejestrować.
Witaj z powrotem! Zalogowałeś się pomyślnie.
Pomyślnie subskrybowałeś Inna Sieć.
Twój link wygasł.
Sukces! Sprawdź swoją skrzynkę e-mailową, aby uzyskać magiczny link do logowania.
Sukces! Twoje informacje rozliczeniowe zostały zaktualizowane.
Twoje informacje rozliczeniowe nie zostały zaktualizowane.