NAT og PAT: en komplet forklaring

Netværksadresseoversættelse (NAT) er processen med at ændre IP-adresseoplysninger i IP-pakkehovedet, mens de transiterer gennem en trafikrouteringsenhed.

Der findes to forskellige typer NAT:

  • NAT
    • Statisk NAT: Den enkleste type NAT giver en en-til-en-oversættelse af IP-adresser. Den omtales ofte også som en-til-en NAT. I denne type NAT er det kun IP-adresserne, IP-header-kontrolsummen og eventuelle kontrolsummer på højere niveau, der omfatter IP-adressen, der skal ændres. Resten af pakken kan forblive uændret (i det mindste for grundlæggende TCP/UDP-funktioner, nogle protokoller på højere niveau kan kræve yderligere oversættelse). Grundlæggende NAT’er kan anvendes, når der er behov for at forbinde to IP-netværk med inkompatibel adressering. Med statisk NAT findes oversættelser i NAT-oversættelsestabellen, så snart du konfigurerer statisk(e) NAT-kommando(er), og de forbliver i oversættelsestabellen, indtil du sletter den eller de statiske NAT-kommando(er).
    • Dynamisk NAT: Dynamisk NAT har nogle ligheder og forskelle i forhold til statisk NAT. Ligesom statisk NAT opretter NAT-routeren en en-til-en-tilknytning mellem en indvendig lokal og en indvendig global adresse og ændrer IP-adresserne i pakkerne, når de forlader og kommer ind i det indvendige netværk. Men kortlægningen af en lokal indendørs adresse til en global indendørs adresse sker dynamisk. Dynamisk NAT opretter en pulje af mulige globale indefra-adresser og definerer matchningskriterier til at bestemme, hvilke lokale indefra-IP-adresser der skal oversættes med NAT. Den dynamiske post forbliver i tabellen, så længe der lejlighedsvis strømmer trafik. Med dynamisk NAT findes oversættelser ikke i NAT-tabellen, før routeren modtager trafik, der kræver oversættelse. Dynamiske oversættelser har en timeout-periode, hvorefter de slettes fra oversættelsestabellen.
  • PAT
    • Statisk PAT: Statiske PAT-oversættelser tillader, at en bestemt UDP- eller TCP-port på en global adresse oversættes til en bestemt port på en lokal adresse. Statisk PAT er det samme som statisk NAT, bortset fra at det giver dig mulighed for at angive protokollen (TCP eller UDP) og porten for den rigtige og den tilknyttede adresse. Statisk PAT giver dig mulighed for at identificere den samme mappede adresse på tværs af mange forskellige statiske erklæringer, forudsat at porten er forskellig for hver enkelt erklæring. Du kan ikke bruge den samme tilknyttede adresse til flere statiske NAT-meddelelser. Med statisk PAT findes oversættelser i NAT-oversættelsestabellen, så snart du konfigurerer statiske PAT-kommandoer, og de forbliver i oversættelsestabellen, indtil du sletter de(n) statiske PAT-kommando(er).
    • NAT-overbelastning eller PAT: Det er almindeligt at skjule et helt IP-adresseområde, der normalt består af private IP-adresser, bag en enkelt IP-adresse (eller i nogle tilfælde en lille gruppe IP-adresser) i et andet (normalt offentligt) adresseområde. Denne type NAT kaldes PAT i overbelastning. Den dynamiske post forbliver i tabellen, så længe trafikken lejlighedsvis flyder. Med PAT i overbelastning findes oversættelser ikke i NAT-tabellen, før routeren modtager trafik, der kræver oversættelse. Oversættelser har en timeout-periode, hvorefter de slettes fra oversættelsestabellen.

Eksempel #1: Statisk kilde-NAT

Sådan oversættes IP-adressen 172.16.0.5 til ip-adressen 10.16.0.5.

Definér ip nat inside:

Ciscozine(config)#interface fa0/0Ciscozine(config-if)#ip nat inside

Definér ip nat outside:

Ciscozine(config)#interface fa0/1Ciscozine(config-if)#ip nat outside

Definér den statiske NAT-post:

ip nat inside source static 172.16.0.5 10.16.0.5

Med statisk NAT findes oversættelsen i NAT-oversættelsestabellen, så snart du konfigurerer kommandoen statisk NAT, og den forbliver i oversættelsestabellen, indtil du sletter den statiske NAT-kommando:

Ciscozine#sh ip nat translationsPro Inside global Inside local Outside local Outside global--- 10.16.0.5 172.16.0.5 --- ---Ciscozine#

Hvis klienten sender en ICMP-pakke eller en HTTP-anmodning til webserveren, vil nat-tabellen være:

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#

Husk: Fordi den tilknyttede adresse er den samme for hver på hinanden følgende forbindelse med statisk NAT, og der findes en vedvarende oversættelsesregel, tillader statisk NAT værter på destinationsnetværket at initiere trafik til en oversat vært (hvis der findes en adgangsliste, der tillader det).

Eksempel nr. 2: Dynamisk kilde-NAT

Sådan oversættes 172.16.0.0.0/28-netværket i 10.16.0.0.0/29-netværket.

Definér ip nat inside:

Ciscozine(config)#interface fa0/0Ciscozine(config-if)#ip nat inside

Definér ip nat outside:

Ciscozine(config)#interface fa0/1Ciscozine(config-if)#ip nat outside

Definér den nat pool, der anvendes i NAT-oversættelsen:

Ciscozine(config)#ip nat pool dynamic-ip 10.0.16.1 10.0.16.6 prefix-length 29

Definér, hvilket netværk der skal oversættes:

Ciscozine(config)#ip access-list standard client-listCiscozine(config-std-nacl)#permit 172.16.0.0 0.0.0.15

Definér dynamisk kilde-NAT:

Ciscozine(config)#ip nat inside source list client-list pool dynamic-ip

Med dynamisk NAT findes oversættelser ikke i NAT-tabellen, før routeren modtager trafik, der kræver oversættelse.

Ciscozine#sh ip nat translationsCiscozine#

men når nogle pakker passer til ACL’en…

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#

OBS: Hvis en ny pakke ankommer fra endnu en intern vært, og den har brug for en NAT-post, men alle IP-adresser i puljen er i brug, så kasserer routeren simpelthen pakken.

Dette kan kontrolleres ved at aktivere “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

Brugeren skal prøve igen, indtil en NAT-post udløber, hvorefter NAT-funktionen virker for den næste vært, der sender en pakke. I bund og grund skal den interne globale pulje af adresser være lige så stor som det maksimale antal samtidige værter, der skal bruge internettet på samme tid – medmindre vi bruger PAT.

Husk: Den vigtigste forskel mellem dynamisk NAT og en række adresser til statisk NAT er, at statisk NAT tillader en fjernvært at initiere en forbindelse til en oversat vært (hvis der findes en adgangsliste, der tillader det), mens dynamisk NAT ikke gør det. Du har også brug for lige så mange mappede adresser som reelle adresser med statisk NAT.

Eksempel #3: Statisk PAT

Sådan eksponerer du to forskellige tjenester på internettet:

  1. Webserveren (172.16.0.0.5) lytter på tcp-port 80; denne server svarer på den offentlige adresse 88.88.88.88.88:80 fra internettet (udenfor).
  2. S SSH-serveren (172.16.0.6) lytter på tcp-port 22; denne server svarer på den offentlige adresse 88.88.88.88.88:666 fra internettet (udefra) .

Definér ip nat inside:

Ciscozine(config)#interface fa0/0Ciscozine(config-if)#ip nat inside

Definér ip nat outside:

Ciscozine(config)#interface fa0/1Ciscozine(config-if)#ip nat outside

Definér static PAT:

Webserveren svarer på tcp-port 80 på grænsefladen “outside”.

ip nat inside source static tcp 172.17.0.5 80 88.88.88.88 80

SSH-serveren svarer på tcp-port 666 på grænsefladen “outside” ; i dette tilfælde oversættes den rigtige port (22 tcp) til tcp-port 666, når der kommer en anmodning fra internettet.

ip nat inside source static tcp 172.17.0.6 22 88.88.88.88 666

Lige statisk NAT findes statisk PAT-oversættelse i NAT-oversættelsestabellen, så snart du konfigurerer statisk PAT-kommandoen, og den forbliver i oversættelsestabellen, indtil du sletter den statiske PAT-kommando.

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#

Hvis en internetklient sender en HTTP-forespørgsel eller en SSH-forbindelse (på tcp-port 666), vil nat-tabellen være:

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#

Eksempel #4: PAT – NAT-overbelastning

Hvordan deler man en internetforbindelse.

Definér ip nat inside:

Ciscozine(config)#interface fa0/0Ciscozine(config-if)#ip nat inside

Definér ip nat outside:

Ciscozine(config)#interface fa0/1Ciscozine(config-if)#ip nat outside

Definér hvilket netværk der skal oversættes:

Ciscozine(config)#ip access-list standard client-listCiscozine(config-std-nacl)#permit 172.16.0.0 0.0.0.255

Definér NAT Overload:

Ciscozine(config)#ip nat inside source list client-list interface fastethernet0/1 overload

Lige dynamisk NAT findes oversættelser ikke i NAT-tabellen, før routeren modtager trafik, der kræver oversættelse:

Ciscozine#sh ip nat translationsCiscozine#

men når nogle pakker matcher ACL’en..

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#

Er der andre typer af NAT/PAT?

Svaret er JA! En type NAT/PAT, der er meget udbredt, er ip nat outside source; denne kommando gør det muligt at oversætte kildeadressen på en pakke, der kommer ind i den “ydre” grænseflade og forlader den “indre” grænseflade.

I enkle vendinger, hvis du ser det første eksempel #1

Kommandoen:

ip nat outside source static 10.0.0.100 192.168.0.100

omsætter 10.0.0.0.100 til 192.168.0.100 , så klienten skal ringe til 192.168.0.0.100 ip-adresse for at kontakte serverwebben og ikke 10.0.0.0.100.

En anden particolar type nat er ip nat inside destination, der bruges, når flere inside-enheder er identiske servere med spejlet indhold, som udefra ser ud til at være en enkelt server load balancing.

Du definerer en pulje af adresser, der indeholder de rigtige værtsadresser, der slutter med “type rotary”, hvilket gør serverne tilgængelige på round-robin-manér. Adgangslisten tillader nu IP-adressen på den virtuelle vært, dvs. det, som omverdenen tror er værtsadressen. Så den virtuelle vært er 123.123.123.123.132, mens de virkelige værter er 172.16.0.2 til 10.

Partiel konfiguration

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

Denne oversættelse er ikke bi-direktionel i sin natur. Du bliver nødt til at bruge en en til en statisk NAT for at opnå det. En “ip nat inside source static” slags funktionalitet kan opnås med ovenstående konfiguration ved hjælp af en enkelt adresse i NAT-puljen, men det ville kun fungere for trafik udefra til indefra.

Hvor anvender du nat inside/outside?

Typisk konfigureres “ip nat inside” på de grænseflader i dit lokale miljø, som ikke kan videresendes til internettet (typisk privat række af IP-adresser), og “ip nat outside” på den grænseflade, som er forbundet til internettet.

Hvornår udfører routeren NAT?

Inside til Outside:

  1. Hvis IPSec, så kontroller input access list
  2. dekryptering – for CET (Cisco Encryption Technology) eller IPSec
  3. check input access list
  4. check input rate limits
  5. input accounting
  6. redirect to web cache
  7. policy routing
  8. routing
  9. NAT inside to outside (local to global translation)
  10. crypto (check map and mark for encryption)
  11. check output access list
  12. inspect (Context-based Access Control (CBAC))
  13. TCP intercept
  14. kryptering
  15. Queueueing

Outside to Inside:

  1. Hvis IPSec, så check input access list
  2. dekryptering – for CET eller IPSec
  3. check input access list
  4. check input rate limits
  5. input accounting
  6. redirect to web cache
  7. NAT outside to inside (global to local oversættelse)
  8. policy routing
  9. routing
  10. crypto (check map and mark for encryption)
  11. check output access list
  12. inspect CBAC
  13. TCP intercept
  14. encryption
  15. Queueing

Nogle nyttige kommandoer:

  • For at se nogle statistikker om NAT: show ip nat statistics
  • For at se en komplet liste over de statiske/dynamiske NAT/PAT-poster: show ip nat translations
  • For at slette dynamisk nat-post: clear ip na translation *
  • For at debugge NAT: debug ip nat

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.