Tłumaczenie adresów sieciowych (NAT) to proces modyfikowania informacji o adresie IP w nagłówkach pakietów IP podczas ich przesyłania przez urządzenie trasujące.
Istnieją dwa różne typy NAT:
- NAT
- Statyczny NAT: Najprostszy typ NAT zapewnia tłumaczenie adresów IP jeden do jednego. Często jest on również określany jako NAT jeden do jednego. W tym typie NATu tylko adresy IP, suma kontrolna nagłówka IP oraz wszelkie sumy kontrolne wyższego poziomu, które zawierają adres IP muszą zostać zmienione. Pozostała część pakietu może pozostać nietknięta (przynajmniej w przypadku podstawowej funkcjonalności TCP/UDP, niektóre protokoły wyższego poziomu mogą wymagać dalszego tłumaczenia). Podstawowe NATy mogą być używane, gdy istnieje wymóg połączenia dwóch sieci IP z niekompatybilnym adresowaniem. W przypadku statycznego NAT tłumaczenia istnieją w tablicy translacji NAT od razu po skonfigurowaniu statycznego polecenia (poleceń) NAT i pozostają w tablicy translacji do momentu usunięcia statycznego polecenia (poleceń) NAT.
- Dynamiczny NAT: Dynamiczny NAT ma pewne podobieństwa i różnice w porównaniu ze statycznym NAT. Podobnie jak statyczny NAT, router NAT tworzy mapowanie jeden do jednego między wewnętrznym adresem lokalnym a wewnętrznym adresem globalnym i zmienia adresy IP w pakietach, gdy wychodzą one i wchodzą do sieci wewnętrznej. Jednak mapowanie wewnętrznego adresu lokalnego na wewnętrzny adres globalny odbywa się dynamicznie. Dynamiczny NAT tworzy pulę możliwych wewnętrznych adresów globalnych i definiuje kryteria dopasowania w celu określenia, które wewnętrzne lokalne adresy IP powinny zostać przetłumaczone za pomocą NAT. Dynamiczny wpis pozostaje w tabeli tak długo, jak długo odbywa się sporadyczny przepływ ruchu. W przypadku dynamicznej translacji NAT, translacje nie istnieją w tabeli NAT dopóki router nie otrzyma ruchu wymagającego translacji. Tłumaczenia dynamiczne mają limit czasu, po którym są usuwane z tabeli tłumaczeń.
- PAT
- Static PAT: Statyczne tłumaczenia PAT umożliwiają przetłumaczenie określonego portu UDP lub TCP w adresie globalnym na określony port w adresie lokalnym. Statyczna translacja PAT jest taka sama jak statyczna translacja NAT, z tą różnicą, że umożliwia określenie protokołu (TCP lub UDP) i portu dla adresu rzeczywistego i mapowanego. Static PAT umożliwia identyfikację tego samego zmapowanego adresu w wielu różnych zestawieniach statycznych, pod warunkiem, że port jest inny dla każdego zestawienia. Nie można używać tego samego odwzorowanego adresu dla wielu statycznych zestawień NAT. W przypadku statycznego PAT translacje istnieją w tabeli translacji NAT od razu po skonfigurowaniu polecenia (poleceń) statycznego PAT i pozostają w tabeli translacji do momentu usunięcia polecenia (poleceń) statycznego PAT.
- Przeciążenie NAT lub PAT: Powszechne jest ukrywanie całej przestrzeni adresowej IP, zwykle składającej się z prywatnych adresów IP, za pojedynczym adresem IP (lub w niektórych przypadkach za małą grupą adresów IP) w innej (zwykle publicznej) przestrzeni adresowej. Ten typ NAT nazywany jest PAT w przeciążeniu. Dynamiczny wpis pozostaje w tablicy tak długo, jak długo trwa sporadyczny przepływ ruchu. W przypadku PAT in overload, translacje nie istnieją w tablicy NAT dopóki router nie otrzyma ruchu wymagającego translacji. Translacje mają okres timeout, po którym są usuwane z tablicy translacji.
Przykład #1: Static Source NAT
Jak przetłumaczyć adres IP 172.16.0.5 na adres IP 10.16.0.5.
Zdefiniuj ip nat inside:
Ciscozine(config)#interface fa0/0Ciscozine(config-if)#ip nat inside
Zdefiniuj ip nat outside:
Ciscozine(config)#interface fa0/1Ciscozine(config-if)#ip nat outside
Zdefiniuj statyczny wpis NAT:
ip nat inside source static 172.16.0.5 10.16.0.5
W przypadku statycznego NAT, tłumaczenie istnieje w tabeli translacji NAT od razu po skonfigurowaniu polecenia statycznego NAT i pozostaje w tabeli translacji do momentu usunięcia polecenia statycznego NAT:
Ciscozine#sh ip nat translationsPro Inside global Inside local Outside local Outside global--- 10.16.0.5 172.16.0.5 --- ---Ciscozine#
Jeśli klient wyśle pakiet ICMP lub żądanie HTTP do serwera WWW, w tabeli nat będzie:
Ciscozine#sh ip nat translationsPro Inside global Inside local Outside local Outside globalicmp 10.16.0.5:1 172.16.0.5:1 10.0.0.100:1 10.0.0.100:1tcp 10.16.0.5:56080 172.16.0.5:56080 10.0.0.100:80 10.0.0.100:80--- 10.16.0.5 172.16.0.5 --- ---Ciscozine#
Pamiętaj: Ponieważ odwzorowany adres jest taki sam dla każdego kolejnego połączenia ze statycznym NAT i istnieje trwała reguła translacji, statyczny NAT pozwala hostom w sieci docelowej inicjować ruch do przetłumaczonego hosta (jeśli istnieje lista dostępu, która na to pozwala).
Przykład #2: Dynamiczny NAT źródłowy
Jak przetłumaczyć sieć 172.16.0.0/28 na sieć 10.16.0.0/29.
Zdefiniuj ip nat inside:
Ciscozine(config)#interface fa0/0Ciscozine(config-if)#ip nat inside
Zdefiniuj ip nat outside:
Ciscozine(config)#interface fa0/1Ciscozine(config-if)#ip nat outside
Zdefiniuj pulę nat używaną w translacji NAT:
Ciscozine(config)#ip nat pool dynamic-ip 10.0.16.1 10.0.16.6 prefix-length 29
Zdefiniuj, która sieć będzie tłumaczona:
Ciscozine(config)#ip access-list standard client-listCiscozine(config-std-nacl)#permit 172.16.0.0 0.0.0.15
Zdefiniuj dynamiczny źródłowy NAT:
Ciscozine(config)#ip nat inside source list client-list pool dynamic-ip
Przy dynamicznym NAT, translacje nie istnieją w tablicy NAT dopóki router nie otrzyma ruchu wymagającego tłumaczenia.
Ciscozine#sh ip nat translationsCiscozine#
ale kiedy niektóre pakiety pasują do ACL…
Ciscozine#sh ip nat translations Pro Inside global Inside local Outside local Outside globalicmp 10.0.16.1:2 172.16.0.1:2 10.0.0.100:2 10.0.0.100:2tcp 10.0.16.2:35694 172.16.0.2:35694 10.0.0.100:80 10.0.0.100:80tcp 10.0.16.1:56185 172.16.0.1:56185 10.0.0.100:80 10.0.0.100:80--- 10.0.16.1 172.16.0.1 --- ------ 10.0.16.2 172.16.0.2 --- ---Ciscozine#
Uwaga: Jeśli nowy pakiet nadchodzi z jeszcze innego hosta wewnętrznego i wymaga wpisu NAT, ale wszystkie zgromadzone adresy IP są w użyciu, router po prostu odrzuca pakiet.
Można to sprawdzić za pomocą polecenia „debug ip nat”.
Feb 12 19:26:09.895: NAT: translation failed (E), dropping packet s=172.16.0.5 d=10.0.0.100
Użytkownik musi próbować ponownie, aż do momentu, gdy wpis NAT się skończy, w którym to momencie funkcja NAT działa dla następnego hosta, który wysyła pakiet. Zasadniczo, wewnętrzna globalna pula adresów musi być tak duża, jak maksymalna liczba hostów, które muszą korzystać z Internetu w tym samym czasie – chyba że używamy PAT.
Pamiętaj: Główna różnica między dynamicznym NAT a zakresem adresów dla statycznego NAT polega na tym, że statyczny NAT pozwala zdalnemu hostowi zainicjować połączenie z tłumaczonym hostem (jeśli istnieje lista dostępu, która na to pozwala), podczas gdy dynamiczny NAT nie. Potrzebna jest również taka sama liczba adresów mapowanych jak adresów rzeczywistych w przypadku statycznego NAT.
Przykład #3: Static PAT
Jak wyeksponować dwie różne usługi w Internecie:
- Serwer WWW (172.16.0.5) nasłuchuje na porcie tcp 80; serwer ten odpowiada na adres publiczny 88.88.88.88:80 z Internetu (na zewnątrz).
- Serwer SSH (172.16.0.6) nasłuchuje na porcie tcp 22; serwer ten odpowiada na adres publiczny 88.88.88.88.88:666 z Internetu (na zewnątrz) .
Zdefiniuj ip nat inside:
Ciscozine(config)#interface fa0/0Ciscozine(config-if)#ip nat inside
Zdefiniuj ip nat outside:
Ciscozine(config)#interface fa0/1Ciscozine(config-if)#ip nat outside
Zdefiniuj static PAT:
Serwer WWW odpowiada na porcie tcp 80 na interfejsie „zewnętrznym”.
ip nat inside source static tcp 172.17.0.5 80 88.88.88.88 80
Serwer SSH odpowiada na porcie tcp 666 na „zewnętrznym” interfejsie; w tym przypadku prawdziwy port (22 tcp) jest tłumaczony na port tcp 666, gdy żądanie pochodzi z Internetu.
ip nat inside source static tcp 172.17.0.6 22 88.88.88.88 666
Jak statyczny NAT, statyczna translacja PAT istnieje w tabeli translacji NAT od razu po skonfigurowaniu polecenia statycznego PAT, i pozostaje w tabeli translacji aż do usunięcia polecenia statycznego PAT.
Ciscozine#sh ip nat translations Pro Inside global Inside local Outside local Outside globaltcp 88.88.88.88:80 172.16.0.5:80 --- ---tcp 88.88.88.88:666 172.16.0.6:22 --- ---Ciscozine#
Jeśli klient internetowy wysyła żądanie HTTP lub połączenie SSH (na porcie tcp 666), w tabeli nat będzie:
Ciscozine#sh ip nat translations Pro Inside global Inside local Outside local Outside globaltcp 88.88.88.88:80 172.16.0.5:80 56.56.56.56:54686 56.56.56.56:54686tcp 88.88.88.88:80 172.16.0.5:80 --- ---tcp 88.88.88.88:666 172.16.0.6:22 56.56.56.56:33704 56.56.56.56:33704tcp 88.88.88.88:666 172.16.0.6:22 --- ---Ciscozine#
Przykład #4: PAT – NAT Overload
Jak współdzielić połączenie internetowe.
Zdefiniuj ip nat inside:
Ciscozine(config)#interface fa0/0Ciscozine(config-if)#ip nat inside
Zdefiniuj ip nat outside:
Ciscozine(config)#interface fa0/1Ciscozine(config-if)#ip nat outside
Zdefiniuj, która sieć będzie tłumaczona:
Ciscozine(config)#ip access-list standard client-listCiscozine(config-std-nacl)#permit 172.16.0.0 0.0.0.255
Zdefiniuj NAT Overload:
Ciscozine(config)#ip nat inside source list client-list interface fastethernet0/1 overload
Podobnie jak dynamiczny NAT, translacje nie istnieją w tablicy NAT dopóki router nie otrzyma ruchu wymagającego translacji:
Ciscozine#sh ip nat translationsCiscozine#
ale gdy niektóre pakiety pasują do ACL..
Ciscozine#show ip nat translationsPro Inside global Inside local Outside local Outside globaltcp 88.88.88.88:7921 172.16.0.2:7921 95.100.96.233:443 95.100.96.233:443tcp 88.88.88.88:8651 172.16.0.5:8651 173.194.44.18:80 173.194.44.18:80tcp 88.88.88.88:8652 172.16.0.111:8652 173.194.44.18:443 173.194.44.18:443tcp 88.88.88.88:8653 172.16.0.223:8653 173.194.70.84:443 173.194.70.84:443udp 88.88.88.88:64116 172.16.0.222:64116 8.8.8.8:53 8.8.8.8:53udp 88.88.88.88:64756 172.16.0.223:64756 8.8.4.4:53 8.8.4.4:53Ciscozine#
Czy istnieją inne typy NAT/PAT?
Odpowiedź brzmi TAK! Jednym z powszechnie stosowanych typów NAT/PAT jest ip nat outside source; polecenie to pozwala na translację adresu źródłowego pakietu, który wchodzi do interfejsu 'zewnętrznego’ i wychodzi z interfejsu 'wewnętrznego’.
W uproszczeniu, jeśli widzisz pierwszy przykład #1
Komenda:
ip nat outside source static 10.0.0.100 192.168.0.100
tłumaczy adres 10.0.0.100 na 192.168.0.100 , więc klient musi wywołać adres 192.168.0.100, aby skontaktować się z serwerem, a nie z adresem 10.0.0.100.
Innym szczególnym typem nat jest ip nat inside destination używany, gdy wiele urządzeń wewnętrznych jest identycznymi serwerami z lustrzaną zawartością, które z zewnątrz wydają się być pojedynczym serwerem równoważącym obciążenie.
Zdefiniujesz pulę adresów zawierającą adresy prawdziwych hostów zakończoną „type rotary”, dzięki czemu serwery będą dostępne w trybie round-robin. Lista dostępu zezwala teraz na adres IP wirtualnego hosta, tj. to, co świat zewnętrzny uważa za adres hosta. Tak więc wirtualny host to 123.123.123.132, a prawdziwe hosty to 172.16.0.2 do 10.
Konfiguracja częściowa
interface FastEthernet0/0ip address 172.16.0.0 255.255.255.0ip nat inside!interface FastEthernet0/1ip address 88.88.88.88 255.255.255.252ip nat outside!ip nat pool real-ip-server 172.16.0.2 172.16.0.10 prefix-length 24 type rotaryip nat inside destination list 1 pool real-ip-server!ip route 0.0.0.0 0.0.0.0 FastEthernet0/1!access-list 1 permit 123.123.123.123
Ta translacja nie jest dwukierunkowa. Będziesz musiał użyć statycznego NAT jeden do jednego, aby to osiągnąć. Funkcjonalność typu „ip nat inside source static” może być osiągnięta w powyższej konfiguracji przy użyciu pojedynczego adresu w puli NAT, ale to będzie działać tylko dla ruchu od zewnątrz do wewnątrz.
Gdzie zastosować nat inside/outside?
Typowo „ip nat inside” jest skonfigurowane na interfejsach w twoim lokalnym środowisku, które nie mogą być kierowane do Internetu (zazwyczaj prywatny zakres adresów IP) i „ip nat outside” na interfejsie, który jest podłączony do Internetu.
Kiedy router wykonuje NAT?
Inside to Outside:
- Jeśli IPSec to sprawdź listę dostępu wejściowego
- decryption – dla CET (Cisco Encryption Technology) lub IPSec
- check input access list
- check input rate limits
- input accounting
- redirect to web cache
- policy routing
- routing
- NAT inside to outside (local to global translation)
- crypto (check map and mark for encryption)
- check output access list
- inspect (Context-based Access Control (CBAC))
- TCP intercept
- encryption
- Queueing
Outside to Inside:
- If IPSec then check input access list
- decryption – for CET or IPSec
- check input access list
- check input rate limits
- input accounting
- redirect to web cache
- NAT outside to inside (global to local translation)
- policy routing
- routing
- crypto (check map and mark for encryption)
- check output access list
- inspect CBAC
- TCP intercept
- encryption
- Queueing
Kilka przydatnych komend:
- Aby zobaczyć statystyki dotyczące NAT: show ip nat statistics
- Aby zobaczyć pełną listę statycznych/dynamicznych wpisów NAT/PAT: show ip nat translations
- Aby wyczyścić dynamiczny wpis NAT: clear ip na translation *
- Aby debugować NAT: debug ip nat
.