Traducerea adreselor de rețea (NAT) este procesul de modificare a informațiilor privind adresele IP din anteturile pachetelor IP în timpul tranzitului printr-un dispozitiv de rutare a traficului.
Există două tipuri diferite de NAT:
- NAT
- NAT static: Cel mai simplu tip de NAT oferă o traducere unu-la-unu a adreselor IP. Acesta este adesea denumit și NAT unu-la-unu. În acest tip de NAT trebuie modificate doar adresele IP, suma de control a antetului IP și orice sumă de control de nivel superior care include adresa IP. Restul pachetului poate fi lăsat neatins (cel puțin pentru funcționalitatea TCP/UDP de bază, unele protocoale de nivel superior pot necesita o traducere suplimentară). NAT-urile de bază pot fi utilizate atunci când este necesar să se interconecteze două rețele IP cu adrese incompatibile. Cu NAT static, traducerile există în tabelul de traduceri NAT de îndată ce configurați comanda (comenzile) NAT static și rămân în tabelul de traduceri până când ștergeți comanda (comenzile) NAT static.
- NAT dinamic: NAT dinamic are unele asemănări și diferențe în comparație cu NAT static. La fel ca NAT static, routerul NAT creează o corespondență unu la unu între o adresă locală interioară și o adresă globală interioară și modifică adresele IP din pachete pe măsură ce acestea ies și intră în rețeaua interioară. Cu toate acestea, cartografierea dintre o adresă locală interioară și o adresă globală interioară se realizează în mod dinamic. NAT dinamic stabilește un grup de posibile adrese globale interne și definește criterii de potrivire pentru a determina ce adrese IP locale interne trebuie să fie traduse cu NAT. Intrarea dinamică rămâne în tabel atâta timp cât traficul circulă ocazional. Cu NAT dinamic, traducerile nu există în tabelul NAT până când routerul nu primește trafic care necesită traducere. Traducerile dinamice au o perioadă de așteptare după care sunt eliminate din tabelul de traduceri.
- PAT
- PAT static: Traducerile PAT statice permit ca un port UDP sau TCP specific de pe o adresă globală să fie tradus într-un port specific de pe o adresă locală. Static PAT este la fel ca NAT static, cu excepția faptului că vă permite să specificați protocolul (TCP sau UDP) și portul pentru adresele reale și cele mapate. Static PAT vă permite să identificați aceeași adresă mapată în mai multe declarații statice diferite, cu condiția ca portul să fie diferit pentru fiecare declarație. Nu puteți utiliza aceeași adresă mapată pentru mai multe declarații NAT statice. Cu PAT static, traducerile există în tabelul de traduceri NAT imediat ce configurați comanda (comenzile) PAT static și rămân în tabelul de traduceri până când ștergeți comanda (comenzile) PAT static.
- Supraîncărcare NAT sau PAT: Este obișnuit să ascundeți un întreg spațiu de adrese IP, de obicei format din adrese IP private, în spatele unei singure adrese IP (sau, în unele cazuri, a unui grup mic de adrese IP) dintr-un alt spațiu de adrese (de obicei public). Acest tip de NAT se numește PAT în supraîncărcare. Intrarea dinamică rămâne în tabel atâta timp cât traficul curge ocazional. Cu PAT în supraîncărcare, traducerile nu există în tabelul NAT până când routerul nu primește trafic care necesită traducere. Traducerile au o perioadă de timp de așteptare după care sunt eliminate din tabelul de traduceri.
Exemplu #1: Static Source NAT
Cum se traduce adresa IP 172.16.0.5 în adresa IP 10.16.0.5.
Definiți ip nat inside:
Ciscozine(config)#interface fa0/0Ciscozine(config-if)#ip nat inside
Definiți ip nat outside:
Ciscozine(config)#interface fa0/1Ciscozine(config-if)#ip nat outside
Definiți intrarea NAT static:
ip nat inside source static 172.16.0.5 10.16.0.5
Cu NAT static, traducerea există în tabelul de traducere NAT imediat ce configurați comanda NAT static și rămâne în tabelul de traducere până când ștergeți comanda NAT static:
Ciscozine#sh ip nat translationsPro Inside global Inside local Outside local Outside global--- 10.16.0.5 172.16.0.5 --- ---Ciscozine#
Dacă clientul trimite un pachet ICMP sau o cerere HTTP către serverul web, tabelul nat va fi:
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#
Rețineți: Deoarece adresa mapată este aceeași pentru fiecare conexiune consecutivă cu NAT static și există o regulă de traducere persistentă, NAT static permite gazdelor din rețeaua de destinație să inițieze traficul către o gazdă tradusă (dacă există o listă de acces care permite acest lucru).
Exemplu #2: Dynamic Source NAT
Cum se traduce rețeaua 172.16.0.0/28 în rețeaua 10.16.0.0/29.
Definiți ip nat inside:
Ciscozine(config)#interface fa0/0Ciscozine(config-if)#ip nat inside
Definiți ip nat outside:
Ciscozine(config)#interface fa0/1Ciscozine(config-if)#ip nat outside
Definiți pool-ul nat utilizat în traducerea NAT:
Ciscozine(config)#ip nat pool dynamic-ip 10.0.16.1 10.0.16.6 prefix-length 29
Definiți ce rețea va fi tradusă:
Ciscozine(config)#ip access-list standard client-listCiscozine(config-std-nacl)#permit 172.16.0.0 0.0.0.15
Definiți sursa dinamică NAT:
Ciscozine(config)#ip nat inside source list client-list pool dynamic-ip
Cu NAT dinamic, traducerile nu există în tabelul NAT până când routerul nu primește trafic care necesită traducere.
Ciscozine#sh ip nat translationsCiscozine#
dar când unele pachete se potrivesc cu 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#
Nota: Dacă un nou pachet sosește de la încă o gazdă interioară și are nevoie de o intrare NAT, dar toate adresele IP puse în comun sunt folosite, routerul pur și simplu respinge pachetul.
Acest lucru poate fi verificat activând „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
Utilizatorul trebuie să încerce din nou până când o intrare NAT se epuizează, moment în care funcția NAT funcționează pentru următoarea gazdă care trimite un pachet. În esență, fondul global intern de adrese trebuie să fie la fel de mare ca și numărul maxim de gazde concurente care trebuie să utilizeze Internetul în același timp – cu excepția cazului în care folosim PAT.
Amintiți-vă: Principala diferență între NAT dinamic și un interval de adrese pentru NAT static este că NAT static permite unei gazde de la distanță să inițieze o conexiune cu o gazdă tradusă (dacă există o listă de acces care permite acest lucru), în timp ce NAT dinamic nu o face. De asemenea, aveți nevoie de un număr egal de adrese cartografiate ca adrese reale cu NAT static.
Exemplu #3: Static PAT
Cum să expuneți două servicii diferite pe Internet:
- Serverul Web (172.16.0.5) ascultă pe portul tcp 80; acest server răspunde la adresa publică 88.88.88.88.88:80 de pe Internet (exterior).
- Serverul SSH (172.16.0.6) ascultă pe portul tcp 22; acest server răspunde la adresa publică 88.88.88.88.88:666 de pe Internet (exterior) .
Definiți ip nat inside:
Ciscozine(config)#interface fa0/0Ciscozine(config-if)#ip nat inside
Definiți ip nat outside:
Ciscozine(config)#interface fa0/1Ciscozine(config-if)#ip nat outside
Definiți ip nat outside:
Ciscozine(config)#interface fa0/1Ciscozine(config-if)#ip nat outside
Definiți PAT static:
Serverele web răspund pe portul tcp 80 pe interfața „exterior”.
ip nat inside source static tcp 172.17.0.5 80 88.88.88.88 80
Serverele SSH răspund pe portul tcp 666 pe interfața ‘outside’ ; în acest caz, portul real (22 tcp) este tradus în portul 666 tcp atunci când o cerere vine de pe Internet.
ip nat inside source static tcp 172.17.0.6 22 88.88.88.88 666
Ca și NAT static, traducerea PAT static există în tabelul de traducere NAT imediat ce configurați comanda PAT static și rămâne în tabelul de traducere până când ștergeți comanda PAT static.
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#
Dacă un client de internet trimite o cerere HTTP sau o conexiune SSH (pe portul tcp 666), tabelul nat va fi:
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#
Exemplu #4: PAT – Supraîncărcare NAT
Cum să partajați o conexiune la internet.
Definiți ip nat interior:
Ciscozine(config)#interface fa0/0Ciscozine(config-if)#ip nat inside
Definiți ip nat exterior:
Ciscozine(config)#interface fa0/1Ciscozine(config-if)#ip nat outside
Definiți ce rețea va fi tradusă:
Ciscozine(config)#ip access-list standard client-listCiscozine(config-std-nacl)#permit 172.16.0.0 0.0.0.255
Definiți NAT Overload:
Ciscozine(config)#ip nat inside source list client-list interface fastethernet0/1 overload
Ca NAT dinamic, traducerile nu există în tabelul NAT până când routerul nu primește trafic care necesită traducere:
Ciscozine#sh ip nat translationsCiscozine#
dar când unele pachete se potrivesc cu 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#
Există și alte tipuri de NAT/PAT?
Răspunsul este DA! Un tip de NAT/PAT utilizat pe scară largă este ip nat outside source; această comandă permite traducerea adresei sursă a unui pachet care intră pe interfața ‘outside’ și iese pe interfața ‘inside’.
În termeni simpli, dacă vedeți primul exemplu #1
Comanda:
ip nat outside source static 10.0.0.100 192.168.0.100
traduce adresa 10.0.0.100 în 192.168.0.100 , astfel încât clientul trebuie să apeleze la 192.168.0.100 .100 adresa ip pentru a contacta serverul web și nu adresa 10.0.0.100.
Un alt tip particular de nat este destinația ip nat inside folosită atunci când mai multe dispozitive din interior sunt servere identice cu conținut în oglindă, care din exterior par a fi un singur server de load balancing.
Se definește un pool de adrese care conține adresele gazdelor reale terminate cu „type rotary”, făcând serverele disponibile în mod round-robin. Lista de acces permite acum adresa IP a gazdei virtuale, adică ceea ce lumea exterioară crede că este adresa gazdei. Astfel, gazda virtuală este 123.123.123.123.132, gazdele reale fiind 172.16.0.2 până la 10.
Configurație parțială
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
Această traducere nu este de natură bidirecțională. Va trebui să utilizați o NAT statică unu la unu pentru a o realiza. O funcționalitate de tipul „ip nat inside source static” poate fi obținută cu configurația de mai sus folosind o singură adresă în pool-ul NAT, dar aceasta ar funcționa numai pentru traficul de la exterior la interior.
Unde se aplică nat inside/outside?
În mod obișnuit, „ip nat inside” este configurat pe interfețele din mediul local care nu pot fi rutate către Internet (de obicei, un interval privat de adrese IP) și „ip nat outside” pe interfața care este conectată la Internet.
Când realizează routerul NAT?
De la interior la exterior:
- Dacă este IPSec atunci verificați lista de acces de intrare
- decriptare – pentru CET (Cisco Encryption Technology) sau IPSec
- verificați lista de acces de intrare
- verificați limitele de viteză de intrare
- contabilitate de intrare
- redirecționare to web cache
- policy routing
- routing
- NAT inside to outside (traducere de la local la global)
- crypto (verificați harta și marcați pentru criptare)
- check output access list
- inspect (Context-based Access Control (CBAC))
- TCP intercept
- criptare
- Queueing
Outside to Inside:
- Dacă este vorba de IPSec, atunci verificați lista de acces la intrare
- decriptare – pentru CET sau IPSec
- verificați lista de acces la intrare
- verificați limitele ratei de intrare
- contabilitate la intrare
- redirecționare către cache web
- NAT din exterior spre interior (global spre local) traducere)
- policy routing
- routing
- crypto (verifică harta și marchează pentru criptare)
- check output access list
- inspect CBAC
- TCP intercept
- encryption
- Queueing
Câteva comenzi utile:
- Pentru a vedea unele statistici despre NAT: show ip nat statistics
- Pentru a vedea o listă completă a intrărilor NAT/PAT statice/dinamice: show ip nat translations
- Pentru a șterge intrarea nat dinamică: clear ip na translation *
- Pentru a depana NAT: debug ip nat
.