Kiedy w latach 90. ubiegłego wieku nastąpił szybki rozwój Internetu dość szybko zorientowano się, że pula adresów IPv4 będzie niewystarczająca i w pewnym momencie się skończy. Inżynierowie na całym świecie zakasali rękawy i zaczęli szukać rozwiązania tego problemu. Jednym z nich okazał się NAT – Network Address Translation, czyli translacja adresów sieciowych. Rozwiązanie na tyle skuteczne, że dzięki niemu IPv4 został z nami dłużej niż przypuszczano – mimo upływu ponad 20 lat (2022 rok) od jego opracowania IPv6 stanowi około 40% globalnie używanych adresów.
Wprowadzenie do NAT
Translacja adresów sieciowych umożliwia używanie prywatnych adresów IP (czyli adresów, które są przeznaczone do używania wyłącznie w sieciach wewnętrznych i nie mogą być rozgłaszane globalnie w Internecie – są to adresy o prefixach 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16) i jednocześnie komunikowanie się ze wszystkimi urządzeniami w Internecie. Jest to możliwe dzięki zamianie prywatnych adresów IP na publiczne zarejestrowane adresy, zarówno jeden do jednego, jak i jeden do wielu, co będzie bardziej szczegółowo omówione w dalszej części artykułu.
Router mapuje prywatny adres wewnętrzny oraz adres publiczny i dokonuje zamiany adresu IP zarówno, gdy pakiet wychodzi z sieci jak również gdy do niej wraca. Dzięki temu na przykład posiadając nawet jeden publiczny adres IP firma może zapewnić komunikację z Internetem wielu hostom znajdującym się w sieci firmowej.
NAT przyczynił się do żywotności protokołu IPv4, ale ma on również inne zastosowania. Pozwala on dodatkowo na ukrycie informacji o sieci wewnętrznej. Osoba będąca na zewnątrz sieci nie ma informacji na temat adresacji wewnętrznej, widzi tylko adres publiczny, czyli już po tłumaczeniu NAT.NAT daje również możliwość używania pokrywających się podsieci – taka sytuacja może mieć miejsce np. gdy dojdzie do połączenia dwóch korporacji – dzięki translacji adresów możliwe będzie używanie takich samych podsieci, a jednocześnie zapewnienie komunikacji między nimi.
NAT nie jest jednak pozbawiony wad. Użycie translacji może utrudnić bądź uniemożliwić inicjalizowanie połączeń z zewnątrz – domyślnie NAT dopuszcza połączenia z sieci wewnętrznej do zewnętrznej, w przypadku niezestawionych sesji będzie blokować połączenia z zewnątrz do wewnątrz. Nie da się ukryć, że wprowadza on również dodatkową złożoność w sieci. Trzeba wiedzieć, gdzie i jak jest skonfigurowany, by nie doprowadzić do błędów w konfiguracji. Kolejną rzeczą, na którą należy zwrócić uwagę to zwiększone zużycie zasobów urządzenia dokonującego translacji NAT. Mapowanie dużej puli adresów może wyraźnie zwiększyć wymagania w zakresie mocy obliczeniowej urządzenia, co naturalnie może się przełożyć na jego koszt.
Możemy wyróżnić 3 rodzaje NAT, z czego każda z nich oferuje inne możliwości i ma różne zastosowania:
- Static NAT,
- Dynamic NAT
- NAT overload, nazywany wymiennie Port Address Translation (PAT).
Static NAT
Statyczny NAT to dość proste rozwiązanie, które polega na translacji adresów jeden do jednego. Oznacza to, że jeden adres prywatny z sieci wewnętrznej tłumaczony jest na jeden adres publiczny dostępny w Internecie. Co ważne Static NAT w przeciwieństwie do pozostałych odmian jest dwukierunkowy – umożliwia również działanie odwrotne, czyli mapowanie IP publicznego na prywatne. Ta metoda oczywiście nie zwiększa nam dostępnej puli adresów, ale przede wszystkim umożliwia ukrycie faktycznego adresu naszego urządzenia. Typowym przykładem użycia będą serwery. W przeciwieństwie do zwykłych hostów, zmiana adresu serwera może mieć duży wpływ na dostępność usług, więc jest niepożądana. Statycznie przypisanie zarówno adresu prywatnego jak i publicznego gwarantuje, że serwer będzie osiągalny wewnątrz i na zewnątrz sieci.
Wiemy już czym jest Static NAT, zanim jednak przejdziemy do pierwszej konfiguracji musimy poznać podstawowe terminy z nim związane. Terminologia NAT wyróżnia 4 rodzaje adresów:
- Inside local – rzeczywisty adres IP przydzielony hostowi znajdującemu się w sieci wewnętrznej
- Outside local – adres IP zewnętrznego hosta widziany z perspektywy sieci wewnętrznej
- Inside global – jest to adres hosta znajdującego się w sieci wewnętrznej, ale widziany z poziomu Internetu
- Outside global – rzeczywisty adres hosta znajdującego się poza siecią wewnętrzną
Niestety na pierwszy rzut oka może się to wydawać zawiłe, dlatego zobaczmy jak wygląda to na przykładzie:
Teraz możemy przejść do konfiguracji Static NAT. Do adresacji użyjemy powyższego przykładu:
- Pierwszy krokiem w konfiguracji jest stworzenie mapowania adresu prywatnego na publiczny.
R1(config)#ip nat inside source static 10.1.4.112 198.4.2.56
- Następnie określamy, który port będzie interfacem wewnętrznym.
R1(config)#interface GigabitEthernet 0/0
R1(config-if)#ip nat inside
- Oraz analogicznie określamy port zewnętrzny.
R1(config-if)#interface GigabitEthernet 0/1
R1(config-if)#ip nat outside
Dynamic NAT
W przypadku dynamicznego NATu również mamy mapowanie adresu prywatnego na publiczny. Tutaj jednak w przeciwieństwie do Static NAT mamy translację wiele do wielu. Router zamiast jednego adresu ma skonfigurowaną pulę wielu możliwych do wykorzystania adresów. Wybiera on wolny adres z puli i przydzielenie go hostowi. Jeśli przez określony czas host nie będzie aktywny w sieci adres ten zostaje zwolniony (lub jeśli wpisy w tablicy adresów zostaną usunięte ręcznie) i może być przydzielony innemu hostowi. W Dynamic NAT może się zdarzyć tak, że pula adresów lokalnych będzie większa niż liczba dostępnych adresów globalnych. Router będzie przydzielać kolejne adresy globalne, aż do ich wyczerpania. Jeśli zabraknie adresu dla hosta, będzie on musiał czekać, aż zwolni się miejsce w tablicy adresów NAT.
Dynamic NAT nie jest rozwiązaniem spotykanym dość często. Najczęściej będzie używany w firmach mających duże pule publicznych adresów IP, co wiąże się z wysokimi kosztami.
Na powyższym przykładzie widzimy grupę hostów w podsieci 10.1.4.0/24, które mają korzystać z puli publicznych adresów w zakresie od 192.4.2.60/24 do 198.4.2.100/24. Konfiguracja Dynamic NAT przebiega następująco:
- Poprzez access listę określamy listę adresów wewnętrznych, dla których ma być wykonana translacja NAT.
R1(config)#access-list 1 permit 10.1.4.0 0.0.0.255
- Definiujemy pulę adresów publicznych, które będą służyły do translacji.
R1(config)#ip nat pool NAT_POOL 198.4.2.60 198.4.2.100 netmask 255.255.255.0
- Kolejnym poleceniem włączamy Dynamic NAT, gdzie odwołujemy się do puli adresów i access listy utworzonych w poprzednich krokach.
R1(config)#ip nat inside source list 1 pool NAT_POOL
- Następnie określamy, który port będzie interfacem wewnętrznym.
R1(config)#interface GigabitEthernet 0/0
R1(config-if)#ip nat inside
- Oraz analogicznie określamy port zewnętrzny.
R1(config-if)#interface GigabitEthernet 0/1
R1(config-if)#ip nat outside
NAT Overload/PAT
To właśnie NAT Overload jest funkcją, dzięki której udaje się tak długo wykorzystywać adresację IPv4. Dzięki mapowaniu wiele-do-jednego PAT umożliwia dynamiczne mapowanie wielu prywatnych IP na jeden publiczny adres, dzięki temu może być używany nawet w małych firmach. Takie rozwiązanie jest możliwe dzięki przydzieleniu do prywatnego adresu IP dynamicznego numeru portu. Dzięki takiemu zabiegowi jeden adres publiczny może obsługiwać 65 000 adresów wewnętrznych!
Zobaczmy jak w tym przypadku wygląda mapowanie adresów. Szczególną uwagę należy przywiązać do portów, które są przypisane do komunikacji. Przykładowo podczas pierwszej sesji NAT dokonywanej przez router host 10.1.4.108 z przypisanym portem dynamicznym 21567 otrzymał adres publiczny 198.4.2.56 z tożsamy numerem portu – 21567. Kolejna sesja została nawiązana przez hosta 10.1.4.109 z portem 28954. Dostał on również adres 198.4.2.56, ale port został zmieniony na kolejny następujący po wcześniejszym, czyli 21568.
Przejdźmy do konfiguracji PAT:
- Poprzez access listę określamy listę adresów wewnętrznych, dla których ma być wykonana translacja NAT.
R1(config-if)#access-list 1 permit 10.1.4.0 0.0.0.255
- Kolejnym poleceniem włączamy NAT overload, gdzie odwołujemy się do ACL utworzonej w poprzednim kroku.
R1(config)#ip nat inside source list 1 interface Gi0/1 overload
- Następnie określamy, który port będzie interfacem wewnętrznym.
R1(config)#interface GigabitEthernet 0/0
R1(config-if)#ip nat inside
- Oraz analogicznie określamy port zewnętrzny.
R1(config-if)#interface GigabitEthernet 0/1
R1(config-if)#ip nat outside
Cześć. NAT bardzo często wykorzystywany jest również w sieciach wewnętrznych do komunikacji z innymi sieciami wewnątrz. Wszędzie tam gdzie nie możemy użyć bramy, możemy skorzystać z NAT. Generalnie fajny blog. Też jestem sieciowcem, ale w branży ISP. Będę zaglądał 🙂
Cześć loockas – dobre uzupełnienie, faktycznie zabrakło tego w materiale. Dzięki!
Dobrze się zapowiada. Proponuję rozbudować temat o temat Identity NAT.
60-100 to jest akurat 41 😉