31.10. Network Address Translation

Bijgedragen door Chern Lee.

31.10.1. Overzicht

Het Network Address Translation daemon van FreeBSD, in het algemeen bekend als natd(8), is een daemon dat rauwe binnenkomende IP-pakketten accepteert, de bron naar die van de plaatselijke machine verandert en de pakketten terug in de uitgaande IP-pakketstroom injecteert. natd(8) doet dit door het IP-adres en de poort van de bron zo te veranderen dat wanneer de gegevens weer ontvangen worden, het in staat is om de originele plaats van de gegevens te achterhalen en ze door te sturen naar de originele aanvrager.

NAT wordt het meest gebruikt wat in het algemeen bekend is als het delen van een Internetverbinding.

31.10.2. Installatie

Wegens de krimpende IP-ruimte in IPv4, en het groeiend aantal gebruikers van consumentenlijnen op hoge snelheid zoals kabel of DSL, hebben steeds meer mensen een oplossing als het delen van een Internetverbinding nodig. Vanwege de mogelijkheid om meerdere computers online te verbinden door ťťn verbinding en IP-adres is natd(8) een redelijke keuze.

In de meeste gevallen heeft een gebruiker een machine verbonden met een kabel- of DSL-lijn met ťťn IP-adres en is het gewenst om deze ene verbonden computer te gebruiken om Internettoegang aan meerdere computers over een LAN te geven.

Hiervoor dient de FreeBSD-machine op het Internet dienst doen als gateway. Deze gateway-machine heeft twee NICs nodig — ťťn voor de verbinding met de Internetrouter, de andere voor de verbinding met het LAN. Alle machines op het LAN zijn verbonden door een hub of switch.

Opmerking:

Er zijn vele manieren om een LAN via een FreeBSD-gateway met het Internet te verbinden. Dit voorbeeld behandelt slechts een gateway met tenminste twee NICs.

Netwerkschema

Dit soort installaties wordt in het algemeen gebruikt om een Internetverbinding te delen. Eťn van de LAN-machines is verbonden met het Internet. De rest van de machines hebben internettoegang via die gateway-machine.

31.10.3. Bootloader-configuratie

De mogelijkheden van de kernel voor network address translation met natd(8) staan niet aan in GENERIC, maar ze kunnen worden voorgeladen tijdens het opstarten door enkele opties aan /boot/loader.conf toe te voegen:

ipfw_load="YES"
ipdivert_load="YES"

Ook moet de tunable net.inet.ip.fw.default_to_accept op 1 worden gezet:

net.inet.ip.fw.default_to_accept="1"

Opmerking:

Het is een goed idee om deze optie aan te zetten tijdens de eerste pogingen om een firewall en NAT gateway te installeren. Op deze manier zal het standaardbeleid van ipfw(8) allow ip from any to any zijn in plaats van het minder vrije deny ip from any to any, en zal het iets moeilijker zijn om buitengesloten te worden net na het opnieuw opstarten van het systeem.

31.10.4. Kernelconfiguratie

Wanneer modules geen optie zijn of wanneer het gewenst is om alle benodigde mogelijkheden in de draaiende kernel te bouwen, dienen de volgende opties in het kernelinstellingenbestand aanwezig te zijn:

options IPFIREWALL
options IPDIVERT

De volgende opties kunnen ook van pas komen:

options IPFIREWALL_DEFAULT_TO_ACCEPT
options IPFIREWALL_VERBOSE

31.10.5. Systeeminstellingen voor het opstarten

Om de firewall en NAT tijdens het opstarten aan te zetten, moet het volgende in /etc/rc.conf staan:

gateway_enable="YES" 1
firewall_enable="YES" 2
firewall_type="OPEN" 3
natd_enable="YES"
natd_interface="fxp0" 4
natd_flags="" 5

1

Stelt de machine in om dienst te doen als gateway. Het draaien van sysctl net.inet.ip.forwarding=1 heeft hetzelfde effect.

2

Activeert de firewall-regels in /etc/rc.firewall tijdens het opstarten.

3

Dit specificeert een vooraf gedefinieerde verzameling van firewall-regels die alles binnenlaat. Raadpleeg /etc/rc.firewall voor aanvullende types.

4

Geeft aan welke interface te gebruiken om pakketten naar door te sturen (de interface die met het Internet verbonden is).

5

Alle aanvullende instelopties die tijdens het opstarten aan natd(8) worden doorgegeven.

Het gedefinieerd hebben van de bovenstaande opties in /etc/rc.conf zal natd -interface fxp0 draaien tijdens het opstarten. Dit kan ook handmatig worden gedraaid.

Opmerking:

Het is ook mogelijk om een instellingenbestand voor natd(8) te gebruiken als er teveel opties zijn om door te geven. In dit geval dient het instellingenbestand te worden gedefinieerd door de volgende regel aan /etc/rc.conf toe te voegen:

natd_flags="-f /etc/natd.conf"

Het bestand /etc/natd.conf zal een lijst met instelopties bevatten, ťťn per regel. Het geval in de volgende sectie bijvoorbeeld zal het volgende bestand gebruiken:

redirect_port tcp 192.168.0.2:6667 6667
redirect_port tcpc 192.168.0.3:80 80

Raadpleeg voor meer informatie over het instellingenbestand het gedeelte over de optie -f van de hulppagina natd(8).

Elke machine en interface achter het LAN dient een IP-adres in de privť-netwerkruimte toegewezen te krijgen zoals gedefinieerd in RFC 1918 en een standaard gateway van het interne IP-adres van de natd-machine hebben.

Bijvoorbeeld, cliŽnt A en B achter het LAN hebben IP-adressen 192.168.0.2 en 192.168.0.3, terwijl de LAN-interface van de natd-machine IP-adres 192.168.0.1 heeft. De standaard gateway van cliŽnt A en B dient ingesteld te worden op die van de natd-machine, 192.168.0.1. Voor de externe, of Internet-interface van de natd-machine zijn geen speciale wijzigingen nodig om natd(8) te laten werken.

31.10.6. Poorten omleiden

Het nadeel van natd(8) is dat de LAN-cliŽnten niet vanaf het Internet toegankelijk zijn. CliŽnten op het LAN kunnen uitgaande verbinden naar de wereld maken maar kunnen geen inkomende verbindingen ontvangen. Dit vormt een probleem wanneer geprobeerd wordt om Internetdiensten op een van de LAN-cliŽntmachines te draaien. Een eenvoudige om dit te omzeilen is om bepaalde Internetpoorten op de natd-machine om te leiden naar een LAN-cliŽnt.

Bijvoorbeeld, er draait een IRC-server op cliŽnt A, en er draait een webserver op cliŽnt B. Om dit goed te laten werken, dienen verbindingen die worden ontvangen op poorten 6667 (IRC) en 80 (web) te worden omgeleid naar de respectievelijke machines.

De optie -redirect_port dient aan natd(8) met de juiste opties te worden doorgegeven. De syntaxis is als volgt:

     -redirect_port proto doelIP:doelPOORT[-doelPOORT]
                 [aliasIP:]aliasPOORT[-aliasPOORT]
                 [verIP[:verrePOORT[-verrePOORT]]]

In het bovenstaand voorbeeld dienen de argumenten te zijn:

     -redirect_port tcp 192.168.0.2:6667 6667
-redirectport tcp 192.168.0.3:80 80

Dit zal de juiste tcp-poorten naar de LAN-cliŽnt-machines omleiden.

Het argument -redirect_port kan worden gebruikt om poortbereiken over individuele poorten aan te geven. Bijvoorbeeld, tcp 192.168.0.2:2000-3000 2000-3000 zal alle verbindingen die op poorten 2000 tot 3000 worden ontvangen omleiden naar poorten 2000 tot 3000 op cliŽnt A.

Deze opties kunnen worden gebruikt wanneer natd(8) direct wordt gedraaid, wanneer ze zijn geplaatst in de optie natd_flags="" van /etc/rc.conf, of wanneer ze via een instellingenbestand worden doorgegeven.

Raadpleeg voor meer instelopties natd(8).

31.10.7. Adressen omleiden

Adressen omleiden is handig wanneer er verschillende IP-adressen beschikbaar zijn, maar ze op ťťn machine moeten zitten. Hiermee kan natd(8) aan elke LAN-cliŽnt een eigen extern IP-adres toewijzen. Vervolgens overschrijft natd(8) de uitgaande pakketten van de LAN-cliŽnten met het juiste IP-adres en leidt het al het binnenkomende verkeer op dat ene IP-adres terug naar de specifieke LAN-cliŽnt. Dit staat ook bekend als statisch NAT. Bijvoorbeeld, de IP-adressen 128.1.1.1, 128.1.1.2, en 1281.2..3 behoren toe aan de natd gateway-machine. 128.1.1.1 kan gebruikt worden als het externe IP-adres van de natd gateway-machine, terwijl 128.1.1.2 en 128.1.1.3 terug worden gestuurd naar de LAN-cliŽnten A en B.

De syntaxis van -redirect_address is als volgt:

-redirect_address lokaalIP publiekIP
lokaalIPHet interne IP-adres van de LAN-cliŽnt.
publiekIPHet externe IP-adres overeenkomend met de LAN-cliŽnt.

In het voorbeeld zou dit argument zijn:

-redirect_address 192.168.0.2 128.1.1.2
-redirect_address 192.168.0.3 128.1.1.3

Net zoals -redirect_port worden ook deze argumenten geplaatst in de optie natd_flags="" van /etc/rc.conf, of doorgegeven via een instellingenbestand. Met adresomleiding is het omleiden van poorten niet nodig aangezien alle gegevens die op een bepaald IP-adres worden ontvangen worden omgeleidt.

Het externe IP-adres op de natd machine dient actief en naar een externe interface gealiased te zijn. In rc.conf(5) staat hoe dit te doen.

All FreeBSD documents are available for download at http://ftp.FreeBSD.org/pub/FreeBSD/doc/

Questions that are not answered by the documentation may be sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.