Hoofdstuk 1 - Een inleiding tot Network Address Translation

De noodzaak voor netwerkadresomzetting

IP Network Address Translation (NAT) is oorspronkelijk ontwikkeld om het probleem van een beperkt aantal internet-IPv4-adressen op te lossen. De noodzaak van NAT ontstaat wanneer meerdere apparaten toegang moeten hebben tot internet, maar slechts één IPv4-internetadres is toegewezen door de internetprovider (ISP).

Er zijn ook andere voordelen van het gebruik van NAT. Netwerktopologie buiten het lokale domein kan op veel manieren veranderen. Klanten kunnen van provider veranderen, de backbones van het bedrijf kunnen worden gereorganiseerd of providers kunnen worden samengevoegd of gesplitst. Wanneer de externe topologie verandert, moeten adrestoewijzingen voor hosts binnen het lokale domein ook worden gewijzigd om deze externe wijzigingen weer te geven. Wijzigingen van dit type kunnen worden verborgen voor gebruikers in het domein door wijzigingen te centraliseren in één adresomzettingsrouter. NAT biedt lokale hosts toegang tot het openbare internet en beschermt ze tegen directe toegang van buitenaf. Organisaties met een netwerkinstallatie voornamelijk voor intern gebruik, met behoefte aan incidentele externe toegang, zijn goede kandidaten voor dit schema.

Basisomzetting van NAT- en netwerkadrespoort

Er wordt een nat-router geïnstalleerd tussen het openbare netwerk en het particuliere netwerk. De rol van de nat-router is om te zetten tussen de interne privé-IPv4-adressen en het toegewezen openbare IPv4-adres, zodat alle apparaten in het particuliere netwerk hetzelfde openbare IPv4-adres kunnen delen.

In de basis-implementatie van NAT is de NAT-router eigenaar van een of meer wereldwijd geregistreerde IP-adressen die afwijken van het eigen IP-adres. Deze globale adressen kunnen statisch of dynamisch worden toegewezen aan hosts in het particuliere netwerk. NAPT, of Network Address Port Translation, is een variant van basic NAT, waarbij netwerkadresomzetting wordt uitgebreid met een 'transport'-id. Meestal is dit het poortnummer voor TCP- en UDP-pakketten en de query-id voor ICMP-pakketten.

Verbindingen buiten de NAT-grens worden doorgaans gestart door hosts in het particuliere netwerk die uitgaande pakketten naar een externe host verzenden. Aan deze hosts worden meestal dynamische (tijdelijke) IP-adressen toegewezen voor dit doel. Het is echter ook mogelijk om verbindingen in omgekeerde richting te laten starten als het particuliere netwerk 'servers' heeft, bijvoorbeeld HTTP- of FTP-servers die clientaanvragen van het externe netwerk accepteren. NAT wijst deze lokale hosts doorgaans een statisch (permanent) IP-adres toe: poort.

Hoe netwerkadresomzetting werkt

Een typische netwerkinstallatie met een nat-router wordt geïllustreerd in afbeelding 1.

Een typische netwerkinstallatie met een nat-router

Afbeelding 1- Een typische netwerkinstallatie met een NAT-router

Een router met NAT-functionaliteit heeft doorgaans twee netwerkinterfaces. Eén interface is verbonden met het openbare internet; de andere is verbonden met het particuliere netwerk. Een typische router in deze installatie is verantwoordelijk voor het routeren van IP-datagrammen tussen het particuliere netwerk en het openbare netwerk op basis van het doel-IP-adres. Een nat-router voert adresomzetting uit voordat een IPv4-gegevensgram wordt gerouterd tussen de openbare en de privé-interface. Voor elke TCP- of UDP-sessie wordt een vertaling gemaakt op basis van het interne bronadres, het bronpoortnummer en het externe doeladres en het poortnummer van de bestemming. Voor het datagram voor ICMP-echoaanvragen en -antwoorden wordt de ICMP-query-id gebruikt in plaats van het poortnummer.

Laten we een netwerkconfiguratie in afbeelding 2 bekijken om een typische implementatie van Network Address Translation te illustreren.

Een typische implementatie van Network Address Translation

Afbeelding 2- Een typische implementatie van Network Address Translation

In dit scenario verbindt de NAT-router het particuliere netwerk aan de linkerkant en het openbare netwerk aan de rechterkant. Laten we aannemen dat aan de kant van het openbare netwerk het IP-adres van de NAT-routerinterface 202.151.25.14 is; op de interface van het particuliere netwerk gebruikt de NAT-router het IP-adres 192.168.1.254. Een knooppunt in het particuliere netwerk initieert een TCP-verbinding met een webserver op internet.

Afbeelding 3 toont een weergave op hoog niveau van het vertaalproces voor netwerkadressen.

Een weergave op hoog niveau van het vertaalproces voor netwerkadressen

Afbeelding 3- Een weergave op hoog niveau van het proces voor het omzetten van netwerkadressen

  1. Client verzendt een TCP SYN-bericht naar de webserver. Het adres van de afzender is 192.168.1.15, poortnummer 6732; het doeladres is 128.15.54.3, poortnummer 80.

  2. Het pakket van de client wordt ontvangen op de privénetwerkinterface door de NAT-router. De regel voor uitgaand verkeer is van toepassing op het pakket: het adres van de afzender (client) wordt omgezet in het openbare IP-adres van de NAT-router 202.15.25.14, en het bronpoortnummer van de afzender (client) wordt omgezet in het TCP-poortnummer 2015 op de openbare interface.

  3. Het pakket wordt vervolgens verzonden via internet en bereikt uiteindelijk de bestemmingshost 128.15.54.3. U ziet dat aan de ontvangstzijde, op basis van het bronadres van de IP-laag en het poortnummer van de TCP-laag, het pakket afkomstig lijkt te zijn van 202.151.24.14, poortnummer 2015. Afbeelding 4 toont het NAT-proces op het retourpad.

    NAT-proces op het retourpad

    Afbeelding 4 - NAT-proces op het retourpad

  4. In dit scenario verzendt de internethost 128.15.54.3 een antwoordpakket met het internetadres van de NAT-router als bestemming.

  5. Het pakket bereikt de NAT-router. Omdat dit een ingebonden pakket is, zijn de regels voor inkomende vertaling van toepassing: het doeladres wordt teruggezet naar het IP-adres van de oorspronkelijke afzender (client): 192.168.1.15, doelpoortnummer 6732.

  6. Het pakket wordt vervolgens doorgestuurd naar de client via de interface die is verbonden met het interne netwerk.

Op deze manier worden het internetnetwerkadres en poortnummer van de afzender niet weergegeven voor andere hosts op het openbare internet.

NetX Duo NAT-functies

Wanneer het NAT-exemplaar wordt gemaakt met behulp van nx_nat_create-aanroep , wordt de NAT-vertaaltabel gemaakt.

UINT nx_nat_create(NX_NAT_DEVICE *nat_ptr, NX_IP *ip_ptr,
    UINT global_interface_index,
    VOID *dynamic_cache_memory,
    UINT dynamic_cache_size);

Om de netwerkadresomzettingen bij te houden voor alle actieve verbindingen tussen lokale en externe netwerken, houdt de netX Duo NAT-router een vertaaltabel bij met informatie over elke privéhostverbinding, waaronder het BRON- en doel-IP-adres en poortnummer.

De locatie van deze vertaaltabel ('cache') wordt ingesteld met de dynamic_cache_memory aanwijzer. Dit gebied moet een uitlijnde bufferruimte van 4 bytes zijn. De grootte van de tabel (of het aantal vermeldingen) wordt bepaald door de cachegrootte dynamic_cache_size te delen door de grootte van een NAT-tabelvermelding. De tabel moet groot genoeg zijn voor het minimale aantal vermeldingen dat is opgegeven door NX_NAT_MIN_ENTRY_COUNT die is gedefinieerd in nx_nat.h. De standaardwaarde is 3.

De time-out voor alle dynamische vermeldingen in de NetX Duo NAT-vertaaltabel wordt geïnitialiseerd naar NX_NAT_ENTRY_RESPONSE_TIMEOUT die is gedefinieerd in nx_nat.h. De standaardwaarde is 4 minuten (of 240 systeemtikken voor een 100 mHz-processor) zoals aanbevolen door RFC 2663. Telkens wanneer NetX Duo NAT een pakket ontvangt of verzendt dat overeenkomt met een dynamische vermelding in de tabel, wordt de time-out van die vermelding opnieuw ingesteld op NX_NAT_ENTRY_RESPONSE_TIMEOUT. Bij het doorzoeken van de tabel controleert NetX Duo NAT ook de tabel op verlopen vermeldingen en verwijdert deze.

Als u binnenkomende vermeldingen wilt maken als statisch in de tabel, bijvoorbeeld voor servers in het lokale netwerk, biedt NetX Duo NAT de nx_nat_inbound_entry_create-service . Als een tabelvermelding de lokale hostverbinding als statisch definieert, verloopt deze nooit.

UINT nx_nat_inbound_entry_create(NX_NAT_DEVICE *nat_ptr,
    NX_NAT_TRANSLATION_ENTRY *entry_ptr,
    ULONG local_ip_address, USHORT external_port,
    USHORT local_port, UCHAR protocol);

Deze service wordt in meer detail beschreven in Hoofdstuk 4 - Beschrijving van services

Als de vertaaltabel tijdens runtime vol is en er geen vermeldingen meer kunnen worden toegevoegd, meldt NetX Duo NAT de NAT-toepassing met een volledige cache-callback als er een is geregistreerd bij het NAT-exemplaar. Dit wordt gedaan met behulp van de nx_nat_cache_notify_set-service :

UINT nx_nat_cache_notify_set(NX_NAT_DEVICE *nat_ptr,
    VOID (*cache_full_notify_cb)(NX_NAT_DEVICE *nat_ptr));

Zie Hoofdstuk 4- Beschrijving van services voor meer informatie over deze service.

NAT-pakketverwerking in NetX Duo

NetX Duo NAT is bedoeld voor gebruik op een IPv4-router. NAT werkt alleen als NetX Duo is geconfigureerd voor het doorsturen van pakketten naar de NAT-server. Zie Hoofdstuk 2 over NetX Duo NAT-installatie voor informatie over hoe u dit doet. De NAT-server geeft vervolgens aan of het pakket wordt 'verbruikt' (geprobeerd om door te sturen) naar een host op een van de netwerken. Als het pakket niet wordt verbruikt, wordt het pakket 'teruggestuurd' naar NetX Duo om het pakket te verwerken zoals normaal.

Wanneer de NAT-server een pakket ontvangt om door te sturen van NetX Duo, wordt bepaald of het pakket binnenkomend of uitgaand is.

Voor uitgaande pakketten controleert de NAT-server het bronadres en de poort van de pakket-IP-header. Als de vertaaltabel geen vermelding bevat voor een pakket dat eerder door deze host voor dezelfde bestemming is verzonden, maakt NAT een nieuwe vermelding die een uniek globaal BRON-IP-adres:poort voor de verbinding bevat en wijzigt de pakketheaders met dit nieuwe IP-adres:poort voordat deze naar het externe netwerk wordt verzonden.

Voor inkomende pakketten zoekt de NAT-server naar een eerdere vermelding in de vertaaltabel met een extern IP-adres: poort die overeenkomt met het IP-adres van het pakketdoel: poort. Als er geen overeenkomst wordt gevonden, wordt het pakket verwijderd, tenzij het doeladres: poort het externe adres is voor de server op het lokale netwerk. Als er een overeenkomst wordt gevonden, wordt het externe doel-IP-adres van de pakketheader vervangen: poort door het privé-IP-adres: poort en wordt het pakket naar het lokale netwerk verzonden naar de beoogde privéhost.

NetX Duo NAT maakt gebruik van een reeks TCP-, UDP- en ICMP-vertaalpoorten voor het maken van een uniek lokaal adres: poortverbindingen voor lokale hosts die verbinding maken met externe hosts. De volgende door de gebruiker configureerbare opties, gedefinieerd in nx_nat.h, definiëren het bereik voor elk protocol:

NX_NAT_START_TCP_PORT

NX_NAT_END_TCP_PORT

NX_NAT_START_UDP_PORT

NX_NAT_END_UDP_PORT

NX_NAT_START_ICMP_QUERY_ID

NX_NAT_END_ICMP_QUERY_ID

NAT-vereisten en -beperkingen

NetX Duo NAT vereist NetX Duo 5.8 of hoger. Voor de NAT-toepassing moet één IP-exemplaar en een interface naar het interne en externe fysieke netwerk worden gemaakt.

Beperkingen:

  • NetX Duo NAT ondersteunt TCP, UDP en ICMP. IGMP wordt niet ondersteund.
  • NetX Duo NAT biedt geen ondersteuning voor IPv6-adressering.
  • NetX Duo NAT bevat geen DNS- of DHCP-services, hoewel NetX Duo NAT deze services kan integreren met de NAT-bewerkingen.

RFC's ondersteund door NetX Duo NAT

NetX Duo NAT-implementatie is gebaseerd op informatie in de volgende RFC's:

  • RFC 2663: TERMINOLOGIE en overwegingen voor IP Network Address Translator (NAT)
  • RFC 3022: Traditionele IP Netowrk Address Translator (Traditionele NAT)
  • RFC 4787: Network Address Translation (NAT) Gedragsvereisten voor Unicast UDP