Update to r53486:

Rewrite the NAT chapter to focus on in-kernel NAT, with
a small section about natd at the end.

Reviewed by:	bcr
Differential Revision:	https://reviews.freebsd.org/D22944
This commit is contained in:
Bjoern Heidotting 2019-12-28 22:50:26 +00:00
parent 4b95214c9a
commit 9e74972a83
Notes: svn2git 2020-12-08 03:00:23 +00:00
svn path=/head/; revision=53713

View file

@ -5,7 +5,7 @@
$FreeBSD$
$FreeBSDde: de-docproj/books/handbook/firewalls/chapter.xml,v 1.53 2012/04/30 16:15:52 bcr Exp $
basiert auf: r53425
basiert auf: r53486
-->
<chapter xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
@ -2289,9 +2289,9 @@ $
&dollar;cmd 00999 deny log all from any to any</programlisting>
</sect2>
<sect2 xml:id="network-natd">
<sect2 xml:id="in-kernel-nat">
<info>
<title><acronym>NAT</acronym> Konfiguration</title>
<title>In-Kernel <acronym>NAT</acronym></title>
<authorgroup>
<author>
@ -2302,6 +2302,16 @@ $
<contrib>Beigetragen von </contrib>
</author>
</authorgroup>
<authorgroup>
<author>
<personname>
<firstname>Dries</firstname>
<surname>Michiels</surname>
</personname>
<contrib>Aktualisiert von </contrib>
</author>
</authorgroup>
</info>
<indexterm>
@ -2325,58 +2335,50 @@ $
mit dem internen Netzwerk. Jeder Rechner im internen Netzwerk
sollte eine <link
xlink:href="https://www.ietf.org/rfc/rfc1918.txt">RFC
1918</link> konforme Adresse zugewiesen bekommen. Zudem
muss das Standard-Gateway der Rechner auf die interne
<acronym>IP</acronym>-Adresse des &man.natd.8;-Systems
gesetzt werden.</para>
1918</link> konforme Adresse zugewiesen bekommen.</para>
<para>Es ist noch ein wenig Konfiguration nötig, um die
<acronym>NAT</acronym>-Funktion von
<application>IPFW</application> zu aktivieren. Wenn das
System einen angepassten Kernel hat, muss die
Kernelkonfigurationsdatei die Zeile
<literal>option IPDIVERT</literal> sowie weitere
<literal>IPFIREWALL</literal>-Optionen, die in <xref
linkend="firewalls-ipfw-enable"/> beschrieben sind,
enthalten.</para>
<para>Um die <acronym>NAT</acronym>-Unterstützung beim Booten
zu aktivieren, müssen folgende Einträge in
In-Kernel <acronym>NAT</acronym>-Funktion von
<application>IPFW</application> zu aktivieren. Um die
In-Kernel <acronym>NAT</acronym>-Unterstützung beim Booten zu
aktivieren, müssen folgende Einträge in
<filename>/etc/rc.conf</filename> vorhanden sein:</para>
<programlisting>gateway_enable="YES" # enables the gateway
natd_enable="YES" # enables <acronym>NAT</acronym>
natd_interface="rl0" # specify interface name of NIC attached to Internet
natd_flags="-dynamic -m" # -m = preserve port numbers; additional options are listed in &man.natd.8;</programlisting>
<programlisting>gateway_enable="YES"
firewall_enable="YES"
firewall_nat_enable="YES"</programlisting>
<note>
<para>Es ist auch möglich eine Konfigurationsdatei zu
verwenden, welche die Optionen enthält, die an
&man.natd.8; übergeben werden:</para>
<programlisting>natd_flags="-f /etc/natd.conf"</programlisting>
<para>Die angegebene Datei muss die Konfigurationsoptionen
enthalten, eine Option pro Zeile. Zum Beispiel:</para>
<programlisting>redirect_port tcp 192.168.0.2:6667 6667
redirect_port tcp 192.168.0.3:80 80</programlisting>
<para>Weitere Informationen zu dieser Konfigurationsdatei
finden Sie in &man.natd.8;.</para>
<para>Wenn <literal>firewall_enable</literal> nicht gesetzt
ist, <literal>firewall_nat_enable</literal> jedoch schon,
hat dies keine Auswirkung, da die
<acronym>NAT</acronym>-Implementierung im Kernel nur mit
<application>IPFW</application> kompatibel ist.</para>
</note>
<para>Als nächstes werden die <acronym>NAT</acronym>-Regeln
hinzugefügt. Wenn die Regeln zustandsorientiert sind, ist die
Platzierung der <acronym>NAT</acronym>-Regeln sehr wichtig und
die <literal>skipto</literal>-Aktion wird verwendet. Dies
erfordert, dass jede Regel über eine eindeutige Nummer
verfügt, um eindeutige Sprungziele zu erhalten.</para>
<para>Wenn der Regelsatz zustandsorientierte Regeln enthält, ist
die Position der <acronym>NAT</acronym>-Regel kritisch und die
<literal>skipto</literal>-Aktion wird benutzt. Die Aktion
<literal>skipto</literal> benötigt eine Regelnummer, damit
<application>IPFW</application> weiß, zu welcher Regel es
springen muss. Darüber hinaus ist es aufgrund der Architektur
von &man.libalias.3;, einer Bibliothek die als Kernelmodul
implementiert ist und für das In-Kernel <acronym>NAT</acronym>
von <application>IPFW</application> benutzt wird, notwendig,
<foreignphrase>TCP segmentation offloading</foreignphrase>
(<acronym>TSO</acronym>) zu deaktivieren.
<acronym>TSO</acronym> kann pro Netzwerkschnittstelle mit
&man.ifconfig.8;, oder systemweit mit &man.sysctl.8;
deaktiviert werden. Um <acronym>TSO</acronym> systemweit zu
deaktivieren, muss folgende Zeile in
<filename>/etc/sysctl.conf</filename> enthalten sein:</para>
<para>Das folgende Beispiel baut auf dem im vorherigen Abschnitt
<programlisting>net.inet.tcp.tso="0"</programlisting>
<para>Das folgende Beispiel baut auf den im vorherigen Abschnitt
gezeigten Firewall-Relgelsatz auf. Es werden einige neue
Einträge hinzugefügt und bestehende Regeln modifiziert, um
<acronym>NAT</acronym> zu konfigurieren. Zunächst werden
In-Kernel <acronym>NAT</acronym> zu konfigurieren. Zunächst werden
einige Variablen hinzugefügt, darunter Regelnummern, die
<literal>keep-state</literal>-Option und eine Liste mit
<acronym>TCP</acronym>-Ports um die Anzahl der Regeln zu
@ -2385,24 +2387,74 @@ redirect_port tcp 192.168.0.3:80 80</programlisting>
<programlisting>#!/bin/sh
ipfw -q -f flush
cmd="ipfw -q add"
skip="skipto 500"
skip="skipto 1000"
pif=dc0
ks="keep-state"
good_tcpo="22,25,37,53,80,443,110"</programlisting>
<para>Danach wird eine <acronym>NAT</acronym>-Instanz
konfiguriert. Mit In-Kernel <acronym>NAT</acronym> ist es
möglich, mehrere <acronym>NAT</acronym>-Instanzen mit jeweils
eigener Konfiguration zu betreiben. In diesem Beispiel wird
jedoch nur eine <acronym>NAT</acronym>-Instanz mit der Nummer
1 benötigt. Die Konfiguration nimmt ein paar Argumente und
Schalter an, zum Beispiel: <option>if</option>, dass die
öffentliche Netzwerkschnittstelle angibt,
<option>same_ports</option>, das dafür sorgt, dass Alias-Ports
und lokale Portnummern identisch zugeordnet werden,
<option>unreg_only</option> führt dazu, dass nur
unregistrierte (private) Adressräume von der
<acronym>NAT</acronym>-Instanz verarbeitet werden, und
<option>reset</option>, was dazu beiträgt, dass eine
<acronym>NAT</acronym>-Instanz auch dann erhalten bleibt,
wenn sich die öffentliche <acronym>IP</acronym>-Adresse des
Rechners ändert. Weitere mögliche Optionen, die an einzelne
<acronym>NAT</acronym>-Instanzen übergeben werden können,
finden Sie in &man.ipfw.8;. Darüber hinaus ist es aufgrund
der zustandsorientierten <acronym>NAT</acronym>-Firewall
notwendig, dass übersetzte Pakete zur weiteren Verarbeitung in
die Firewall eingespielt werden können, was durch die
Deaktivierung des <option>one_pass</option>-Verhaltens beim
Start des Firewall-Skripts erreicht werden kann.</para>
<programlisting>ipfw disable one_pass
ipfw -q nat 1 config if &dollar;pif same_ports unreg_only reset</programlisting>
<para>Die <acronym>NAT</acronym>-Regel für eingehende Pakete
wird <emphasis>nach</emphasis> den beiden Regeln, die das
interne Netzwerk und die Loopback-Schnittstelle erlauben und
<emphasis>vor</emphasis> der
interne Netzwerk und die Loopback-Schnittstelle erlauben, und
nach der Reassamble-Regel, aber <emphasis>vor</emphasis> der
<literal>check-state</literal>-Regel eingefügt. Es ist
wichtig, dass die Nummer der <acronym>NAT</acronym>-Regel
(in diesem Beispiel <literal>100</literal>) höher ist, als
die beiden vorherigen Regeln und niedriger, als die
<literal>check-state</literal>-Regel:</para>
die drei vorherigen Regeln und niedriger, als die
<literal>check-state</literal>-Regel. Darüber hinaus wird
aufgrund des Verhaltens von In-Kernel <acronym>NAT</acronym>
empfohlen, eine Reassamble-Regel kurz vor der ersten
<acronym>NAT</acronym>-Regel, aber hinter den Regeln zu
platzieren, die den Datenverkehr auf einer vertrauenswürdigen
Schnittstelle erlauben.</para>
<note>
<para>Die Reassamble-Regel wird beim Userland &man.natd.8;
nicht benötigt, da die Aktion <literal>divert</literal> von
<application>IPFW</application> dies bereits automatisch
übernimmt. Dies ist auch in &man.ipfw.8;
dokumentiert.</para>
<para>Beachten Sie, dass die aktuelle
<acronym>NAT</acronym>-Instanznummer und
<acronym>NAT</acronym>-Regelnummer nicht mit der
voreingestellten <acronym>NAT</acronym>-Instanznummer
und Regelnummer übereinstimmt, wenn sie mit dem
<filename>rc.firewall</filename>-Skript von &os; erstellt
wurde.</para>
</note>
<programlisting>&dollar;cmd 005 allow all from any to any via xl0 # exclude LAN traffic
&dollar;cmd 010 allow all from any to any via lo0 # exclude loopback traffic
&dollar;cmd 100 divert natd ip from any to any in via &dollar;pif # NAT any inbound packets
&dollar;cmd 099 reass all from any to any in # reassamble inbound packets
&dollar;cmd 100 nat 1 ip from any to any in via &dollar;pif # NAT any inbound packets
# Allow the packet through if it has an existing entry in the dynamic rules table
&dollar;cmd 101 check-state</programlisting>
@ -2410,12 +2462,18 @@ good_tcpo="22,25,37,53,80,443,110"</programlisting>
modifiziert, um Aktionen mit der
<literal>&dollar;skipto</literal>-Variable zu erlauben und
anzuzeigen, dass die Prüfung mit der Regel
<literal>500</literal> fortgesetzt wird. Die sieben Regeln
<literal>1000</literal> fortgesetzt wird. Die sieben Regeln
für <acronym>TCP</acronym> wurden durch die Regel
<literal>125</literal> ersetzt, da die sieben erlaubten
ausgehenden Ports in der Variable
<literal>&dollar;good_tcp0</literal> enthalten sind.</para>
<note>
<para>Beachten Sie, dass die Leistung von
<application>IPFW</application> weitgehend von der Anzahl
der im Regelsatz vorhandenen Regeln bestimmt wird.</para>
</note>
<programlisting># Authorized outbound packets
&dollar;cmd 120 &dollar;skip udp from any to x.x.x.x 53 out via &dollar;pif &dollar;ks
&dollar;cmd 121 &dollar;skip udp from any to x.x.x.x 67 out via &dollar;pif &dollar;ks
@ -2431,19 +2489,19 @@ good_tcpo="22,25,37,53,80,443,110"</programlisting>
Regel haben und die Nummer muss über die
<literal>skipto</literal>-Aktion referenziert werden. In
diesem Regelsatz leitet die Regel mit der Nummer
<literal>500</literal> alle ausgehenden Pakete zur
Weiterverarbeitung an &man.natd.8; weiter. Die darauf
<literal>1000</literal> alle ausgehenden Pakete zur
konfigurierten <acronym>NAT</acronym>-Instanz weiter. Die darauf
folgende Regel lässt alle von <acronym>NAT</acronym>
verarbeiteten Pakete passieren.</para>
<programlisting>&dollar;cmd 499 deny log all from any to any
&dollar;cmd 500 divert natd ip from any to any out via &dollar;pif # skipto location for outbound stateful rules
&dollar;cmd 510 allow ip from any to any</programlisting>
<programlisting>&dollar;cmd 999 deny log all from any to any
&dollar;cmd 1000 nat 1 ip from any to any out via &dollar;pif # skipto location for outbound stateful rules
&dollar;cmd 1001 allow ip from any to any</programlisting>
<para>In diesem Beispiel steuern die Regeln
<literal>100</literal>, <literal>101</literal>,
<literal>125</literal>, <literal>500</literal> und
<literal>510</literal> die Adressübersetzung der ein- und
<literal>125</literal>, <literal>1000</literal> und
<literal>1001</literal> die Adressübersetzung der ein- und
ausgehende Pakete, so dass immer die private
<acronym>LAN</acronym> <acronym>IP</acronym>-Adresse in der
dynamische Zustandstabelle registriert werden.</para>
@ -2463,7 +2521,7 @@ good_tcpo="22,25,37,53,80,443,110"</programlisting>
Regel zutreffen, werden zwei Aktionen ausgeführt. Zuerst
wird durch die Aktion <literal>keep-state</literal> ein
dynamischer Eintrag in der Statustabelle erstellt und die
angegebene Aktion <literal>skipto 500</literal> ausgeführt.
angegebene Aktion <literal>skipto 1000</literal> ausgeführt.
Als nächstes durchläuft das Paket <acronym>NAT</acronym> und
wird dann an das Internet gesendet. Nachdem dieses Paket am
Webserver angekommen ist, wird dort eine Antwort erzeugt und
@ -2485,14 +2543,44 @@ good_tcpo="22,25,37,53,80,443,110"</programlisting>
<acronym>LAN</acronym> freigegeben. Das Antwortpaket wird
von der Regel <literal>check-state</literal> als Paket einer
aktiven Sitzung erkannt. Das Paket wird dann von Regel
<literal>500</literal> per <acronym>NAT</acronym>
verarbeitet, bevor es über die externe Schnittstelle versendet
wird.</para>
<literal>1000</literal> per <acronym>NAT</acronym>
verarbeitet, bevor es über die externe Schnittstelle
verschickt wird.</para>
<note>
<para>Der Wechsel vom Userland &man.natd.8; zu In-Kernel
<acronym>NAT</acronym> mag zunächst nahtlos erscheinen, aber
es gibt einen kleinen Haken. Bei Verwendung des
<filename>GENERIC</filename>-Kernels wird
<application>IPFW</application> das Kernelmodul
<filename>libalias.ko</filename> laden, wenn
<literal>firewall_nat_enable</literal> in
<filename>rc.conf</filename> aktiviert ist. Das geladene
Kernelmodul stellt nur grundlegende
<acronym>NAT</acronym>-Funktionalität bereit, während
die Userland-Implementierung &man.natd.8; alle
Funktionalitäten ohne zusätzliche Konfiguration zur
Verfügung stellt. Die gesamte Funktionalität bezieht sich
auf die folgenden Kernelmodule, die bei Bedarf zusätzlich
zu <filename>libalias.ko</filename> geladen werden können:
<filename>alias_cuseeme.ko</filename>,
<filename>alias_ftp.ko</filename>,
<filename>alias_bbt.ko</filename>,
<filename>skinny.ko</filename>, <filename>irc.ko</filename>,
<filename>alias_pptp.ko</filename> und
<filename>alias_smedia.ko</filename> unter Verwendung der
<literal>kld_list</literal> Direktive in
<filename>rc.conf</filename>, um die volle Funktionalität
der Userland-Implementierung zu erreichen. Wenn ein
angepasster Kernel benutzt wird, kann die volle
Funktionalität der Userland-Bibliothek im Kernel mit
<option>option LIBALIAS</option> gebaut werden.</para>
</note>
<sect3>
<title>Weiterleitung von Ports</title>
<para>Der Nachteil von &man.natd.8; ist, dass die Rechner im
<para>Der Nachteil von <acronym>NAT</acronym> ist, dass die Rechner im
<acronym>LAN</acronym> nicht aus dem Internet zugänglich
sind. Diese Rechner können zwar ausgehende Verbindungen
zur Außenwelt aufbauen, jedoch keine eingehenden
@ -2501,7 +2589,7 @@ good_tcpo="22,25,37,53,80,443,110"</programlisting>
anbieten möchten, die aus dem Internet erreichbar sein
sollen. In diesem Fall können Sie die Ports, welche über
das Internet erreichbar sein sollen, über die
&man.natd.8;-Maschine an den Rechner im
<acronym>NAT</acronym>-Maschine an den Rechner im
<acronym>LAN</acronym> weiterleiten.</para>
<para>Angenommen es gibt einen <acronym>IRC</acronym>-Server
@ -2511,39 +2599,42 @@ good_tcpo="22,25,37,53,80,443,110"</programlisting>
(<acronym>IRC</acronym>) und 80 (<acronym>HTTP</acronym>)
an die jeweiligen Rechner weitergeleitet werden.</para>
<para>Die Syntax für <option>-redirect_port</option>
lautet:</para>
<para>Bei In-Kernel <acronym>NAT</acronym> wird die gesamte
Konfiguration in der <acronym>NAT</acronym>-Instanz selbst
vorgenommen. Alle Optionen, die in einer
<acronym>NAT</acronym>-Instanz benutzt werden können, sind
in &man.ipfw.8; dokumentiert. Die Syntax für
<application>IPFW</application> folgt dabei der von
<application>natd</application>. Die Syntax für
<option>-redirect_port</option> lautet:</para>
<programlisting>-redirect_port proto targetIP:targetPORT[-targetPORT]
[aliasIP:]aliasPORT[-aliasPORT]
[remoteIP[:remotePORT[-remotePORT]]]</programlisting>
<programlisting>redirect_port proto targetIP:targetPORT[-targetPORT]
[aliasIP:]aliasPORT[-aliasPORT]
[remoteIP[:remotePORT[-remotePORT]]]</programlisting>
<para>Für das obige Beispiel sollten die Argumente wie folgt
aussehen:</para>
<programlisting>-redirect_port tcp 192.168.0.2:6667 6667
-redirect_port tcp 192.168.0.3:80 80</programlisting>
<programlisting>redirect_port tcp 192.168.0.2:6667 6667
redirect_port tcp 192.168.0.3:80 80</programlisting>
<para>Damit werden die entsprechenden
<acronym>TCP</acronym>-Ports an die Rechner im
<acronym>LAN</acronym> weitergeleitet.</para>
<para>Nachdem diese Argumente der Konfiguration der
<acronym>NAT</acronym>-Instanz 1 im obigen Regelsatz
hinzugefügt wurden, werden die <acronym>TCP</acronym>-Ports
an die Rechner im <acronym>LAN</acronym> weitergeleitet, auf
denen <acronym>IRC</acronym>- und
<acronym>HTTP</acronym>-Dienste laufen.</para>
<para>Portbereiche können über <option>-redirect_port</option>
<programlisting>ipfw -q nat 1 config if &dollar;pif same_ports unreg_only reset \
redirect_port tcp 192.168.0.2:6667 6667 \
redirect_port tcp 192.1683.0.3:80 80</programlisting>
<para>Portbereiche können über <option>redirect_port</option>
festgelegt werden. Zum Beispiel würde
<replaceable>tcp 192.168.0.2:2000-3000
2000-3000</replaceable> alle Verbindungen auf die Ports
2000 bis 3000 an die Ports 2000 bis 3000 an
Rechner <systemitem>A</systemitem> weiterleiten.</para>
<para>Diese Optionen können über
<literal>natd_flags=""</literal> in
<filename>/etc/rc.conf</filename> direkt beim Start an
&man.natd.8; übergeben werden. Alternativ können die
Optionen in eine Konfigurationsdatei eingetragen
werden.</para>
<para>Weitere Konfigurationsmöglichkeiten sind in
&man.natd.8; beschrieben.</para>
</sect3>
<sect3>
@ -2552,9 +2643,9 @@ good_tcpo="22,25,37,53,80,443,110"</programlisting>
<para>Das Weiterleiten von Adressen ist nützlich, wenn
mehr als eine <acronym>IP</acronym>-Adresse zur Verfügung
steht. Jeder Rechner im <acronym>LAN</acronym> kann über
&man.natd.8; seine eigene externe
&man.ipfw.8; seine eigene externe
<acronym>IP</acronym>-Adresse zugewiesen bekommen.
&man.natd.8; wird dann den ausgehenden Datenverkehr der
<application>IPFW</application> wird dann den ausgehenden Datenverkehr der
Rechner aus dem <acronym>LAN</acronym> mit der
entsprechenden externen <acronym>IP</acronym>-Adresse
umschreiben. Auch der eingehenden Datenverkehr über die
@ -2568,56 +2659,103 @@ good_tcpo="22,25,37,53,80,443,110"</programlisting>
<systemitem class="ipaddress">128.1.1.3</systemitem> zur
Verfügung stehen, kann <systemitem
class="ipaddress">128.1.1.1</systemitem> als externe
Adresse der &man.natd.8;-Maschine verwendet werden, während
Adresse der &man.ipfw.8;-Maschine verwendet werden, während
<systemitem class="ipaddress">128.1.1.2</systemitem> und
<systemitem class="ipaddress">128.1.1.3</systemitem> an
Rechner <systemitem>A</systemitem> und
Rechner <systemitem>B</systemitem> im <acronym>LAN</acronym>
weitergeleitet werden.</para>
<para>Die Syntax für <option>-redirect_address</option>
lautet:</para>
<para>Die Syntax für <option>redirect_address</option>
lautet wie im Folgenden, wobei <literal>localIP</literal>
die interne <acronym>IP</acronym>-Adresse des Rechners im
<acronym>LAN</acronym>, und <literal>publicIP</literal> die
externe <acronym>IP</acronym>-Adresse ist, die dem Rechner
im <acronym>LAN</acronym> entspricht.</para>
<programlisting>-redirect_address localIP publicIP</programlisting>
<programlisting>redirect_address localIP publicIP</programlisting>
<informaltable frame="none" pgwide="1">
<tgroup cols="2">
<tbody>
<row>
<entry>localIP</entry>
<entry>Die interne <acronym>IP</acronym>-Adresse des
Rechners im <acronym>LAN</acronym>.</entry>
</row>
<para>Auf das Beispiel bezogen, würden die Argumente so
lauten:</para>
<row>
<entry>publicIP</entry>
<entry>Die externe <acronym>IP</acronym>-Adresse für
den entsprechenden Rechner im
<acronym>LAN</acronym>.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<programlisting>redirect_address 192.168.0.2 128.1.1.2
redirect_address 192.168.0.3 128.1.1.3</programlisting>
<para>Für das obige Beispiel sollten die Argumente wie
folgt aussehen:</para>
<programlisting>-redirect_address 192.168.0.2 128.1.1.2
-redirect_address 192.168.0.3 128.1.1.3</programlisting>
<para>Genau wie bei <option>-redirect_port</option>, werden
diese Argumente innerhalb der
<filename>/etc/rc.conf</filename>-Option
<literal>natd_flags=""</literal> angegeben, oder alternativ
über eine Konfigurationsdatei. Allerdings müssen beim
Weiterleiten von Adressen keine Ports umgeleitet werden, da
der gesamte eingehende Datenverkehr einer bestimmte
<acronym>IP</acronym>-Adresse weitergeleitet wird.</para>
<para>Genau wie bei <option>redirect_port</option>, werden
diese Argumente in der Konfiguration der
<acronym>NAT</acronym>-Instanz gesetzt. Bei der
Weiterleitung von Adressen ist keine Portumleitung
notwendig, da alle Daten, die auf einer bestimmten
<acronym>IP</acronym>-Adresse empfangen werden,
weitergeleitet werden.</para>
<para>Die externe <acronym>IP</acronym>-Adresse der
&man.natd.8;-Maschine muss auf der externen Schnittstelle
&man.ipfw.8;-Maschine muss auf der externen Schnittstelle
aktiv und mit einem Alias versehen sein. Weitere
Einzelheiten sind in &man.natd.8; beschrieben.</para>
Einzelheiten sind in &man.rc.conf.5;; beschrieben.</para>
</sect3>
<sect3>
<title>Userland <acronym>NAT</acronym></title>
<para>Zunächst sei gesagt, dass &man.natd.8;, die
Userland-Implementierung aufwändiger ist als In-Kernel
<acronym>NAT</acronym>. Damit &man.natd.8; Pakete
übersetzen kann, müssen die Pakete vom Kernel ins
Userland und zurück kopiert werden, was zusätzlichen Aufwand
mit sich bringt. Dieser Aufwand entfällt bei In-Kernel
<acronym>NAT</acronym>.</para>
<para>Um den Userland <acronym>NAT</acronym>-Daemon
&man.natd.8; beim Systemstart zu aktivieren, ist etwas
Konfiguration in <filename>/etc/rc.conf</filename> nötig.
<option>natd_interface</option> wird auf den Namen der mit
dem Internet verbundenen Schnittstelle gesetzt. Das
&man.rc.8;-Skript von &man.natd.8; wird selbstständig
prüfen, ob eine dynamische <acronym>IP</acronym>-Adresse
benutzt wird und sich selbst so konfigurieren, dass es damit
umgehen kann.</para>
<programlisting>gateway_enable="YES"
natd_enable="YES"
natd_interface="rl0"</programlisting>
<para>Generell kann der obige Regelsatz, wie er für In-Kernel
<acronym>NAT</acronym> erklärt wurde, auch zusammen mit
&man.natd.8; benutzt werden. Die einzigen Ausnahmen sind,
dass die Konfiguration der In-Kernel
<acronym>NAT</acronym>-Instanz
<literal>(ipfw -q nat 1 config ...)</literal> nicht
anwendbar ist und die Regeln müssen wie unten beschrieben
leicht geändert werden, und Regel 99 wird nicht mehr
benötigt, da die <option>divert</option>-Aktion sich um die
Fragmentierung kümmert.</para>
<programlisting>&dollar;cmd 100 divert natd ip from any to any in via &dollar;pif
&dollar;cmd 1000 divert natd ip from any to any out via &dollar;pif</programlisting>
<para>Um eine Port- oder Adressumleitung zu konfigurieren,
wird eine ähnliche Syntax wie bei In-Kernel
<acronym>NAT</acronym> verwendet. Anstatt die Konfiguration
in unserem Regelsatz-Skript wie bei In-Kernel
<acronym>NAT</acronym> anzugeben, wird die Konfiguration von
&man.natd.8; am besten in einer Konfigurationsdatei
vorgenommen. Dazu muss eine zusätzliche Option in
<filename>/etc/rc.conf</filename> übergeben werden, welche
den Pfad zur Konfigurationsdatei angibt.</para>
<programlisting>natd_flags="-f /etc/natd.conf"</programlisting>
<note>
<para>Die Konfigurationsdatei muss eine Liste von Optionen
enthalten, eine pro Zeile. Weitere Informationen über die
Konfigurationsdatei und mögliche Variablen finden Sie in
&man.natd.8;. Hier zwei Beispieleinträge, einer pro
Zeile:</para>
<programlisting>redirect_port tcp 192.168.0.2:6667 6667
redirect_address 192.168.0.3 128.1.1.3</programlisting>
</note>
</sect3>
</sect2>