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.
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.
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.
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.
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"
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.
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
Om de firewall en NAT tijdens het opstarten aan te zetten, moet
het volgende in /etc/rc.conf
staan:
gateway_enable="YES"firewall_enable="YES"
firewall_type="OPEN"
natd_enable="YES" natd_interface="
fxp0
"natd_flags=""
Stelt de machine in om dienst te doen als gateway. Het
draaien van
| |
Activeert de firewall-regels in
| |
Dit specificeert een vooraf gedefinieerde verzameling
van firewall-regels die alles binnenlaat. Raadpleeg
| |
Geeft aan welke interface te gebruiken om pakketten naar door te sturen (de interface die met het Internet verbonden is). | |
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.
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.
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).
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
lokaalIP | Het interne IP-adres van de LAN-cliënt. |
publiekIP | Het 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 https://download.freebsd.org/ftp/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>.