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$ $FreeBSD$
$FreeBSDde: de-docproj/books/handbook/firewalls/chapter.xml,v 1.53 2012/04/30 16:15:52 bcr Exp $ $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" <chapter xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" 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> &dollar;cmd 00999 deny log all from any to any</programlisting>
</sect2> </sect2>
<sect2 xml:id="network-natd"> <sect2 xml:id="in-kernel-nat">
<info> <info>
<title><acronym>NAT</acronym> Konfiguration</title> <title>In-Kernel <acronym>NAT</acronym></title>
<authorgroup> <authorgroup>
<author> <author>
@ -2302,6 +2302,16 @@ $
<contrib>Beigetragen von </contrib> <contrib>Beigetragen von </contrib>
</author> </author>
</authorgroup> </authorgroup>
<authorgroup>
<author>
<personname>
<firstname>Dries</firstname>
<surname>Michiels</surname>
</personname>
<contrib>Aktualisiert von </contrib>
</author>
</authorgroup>
</info> </info>
<indexterm> <indexterm>
@ -2325,58 +2335,50 @@ $
mit dem internen Netzwerk. Jeder Rechner im internen Netzwerk mit dem internen Netzwerk. Jeder Rechner im internen Netzwerk
sollte eine <link sollte eine <link
xlink:href="https://www.ietf.org/rfc/rfc1918.txt">RFC xlink:href="https://www.ietf.org/rfc/rfc1918.txt">RFC
1918</link> konforme Adresse zugewiesen bekommen. Zudem 1918</link> konforme Adresse zugewiesen bekommen.</para>
muss das Standard-Gateway der Rechner auf die interne
<acronym>IP</acronym>-Adresse des &man.natd.8;-Systems
gesetzt werden.</para>
<para>Es ist noch ein wenig Konfiguration nötig, um die <para>Es ist noch ein wenig Konfiguration nötig, um die
<acronym>NAT</acronym>-Funktion von In-Kernel <acronym>NAT</acronym>-Funktion von
<application>IPFW</application> zu aktivieren. Wenn das <application>IPFW</application> zu aktivieren. Um die
System einen angepassten Kernel hat, muss die In-Kernel <acronym>NAT</acronym>-Unterstützung beim Booten zu
Kernelkonfigurationsdatei die Zeile aktivieren, müssen folgende Einträge in
<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
<filename>/etc/rc.conf</filename> vorhanden sein:</para> <filename>/etc/rc.conf</filename> vorhanden sein:</para>
<programlisting>gateway_enable="YES" # enables the gateway <programlisting>gateway_enable="YES"
natd_enable="YES" # enables <acronym>NAT</acronym> firewall_enable="YES"
natd_interface="rl0" # specify interface name of NIC attached to Internet firewall_nat_enable="YES"</programlisting>
natd_flags="-dynamic -m" # -m = preserve port numbers; additional options are listed in &man.natd.8;</programlisting>
<note> <note>
<para>Es ist auch möglich eine Konfigurationsdatei zu <para>Wenn <literal>firewall_enable</literal> nicht gesetzt
verwenden, welche die Optionen enthält, die an ist, <literal>firewall_nat_enable</literal> jedoch schon,
&man.natd.8; übergeben werden:</para> hat dies keine Auswirkung, da die
<acronym>NAT</acronym>-Implementierung im Kernel nur mit
<programlisting>natd_flags="-f /etc/natd.conf"</programlisting> <application>IPFW</application> kompatibel ist.</para>
<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>
</note> </note>
<para>Als nächstes werden die <acronym>NAT</acronym>-Regeln <para>Wenn der Regelsatz zustandsorientierte Regeln enthält, ist
hinzugefügt. Wenn die Regeln zustandsorientiert sind, ist die die Position der <acronym>NAT</acronym>-Regel kritisch und die
Platzierung der <acronym>NAT</acronym>-Regeln sehr wichtig und <literal>skipto</literal>-Aktion wird benutzt. Die Aktion
die <literal>skipto</literal>-Aktion wird verwendet. Dies <literal>skipto</literal> benötigt eine Regelnummer, damit
erfordert, dass jede Regel über eine eindeutige Nummer <application>IPFW</application> weiß, zu welcher Regel es
verfügt, um eindeutige Sprungziele zu erhalten.</para> 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 gezeigten Firewall-Relgelsatz auf. Es werden einige neue
Einträge hinzugefügt und bestehende Regeln modifiziert, um 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 einige Variablen hinzugefügt, darunter Regelnummern, die
<literal>keep-state</literal>-Option und eine Liste mit <literal>keep-state</literal>-Option und eine Liste mit
<acronym>TCP</acronym>-Ports um die Anzahl der Regeln zu <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 <programlisting>#!/bin/sh
ipfw -q -f flush ipfw -q -f flush
cmd="ipfw -q add" cmd="ipfw -q add"
skip="skipto 500" skip="skipto 1000"
pif=dc0 pif=dc0
ks="keep-state" ks="keep-state"
good_tcpo="22,25,37,53,80,443,110"</programlisting> 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 <para>Die <acronym>NAT</acronym>-Regel für eingehende Pakete
wird <emphasis>nach</emphasis> den beiden Regeln, die das wird <emphasis>nach</emphasis> den beiden Regeln, die das
interne Netzwerk und die Loopback-Schnittstelle erlauben und interne Netzwerk und die Loopback-Schnittstelle erlauben, und
<emphasis>vor</emphasis> der nach der Reassamble-Regel, aber <emphasis>vor</emphasis> der
<literal>check-state</literal>-Regel eingefügt. Es ist <literal>check-state</literal>-Regel eingefügt. Es ist
wichtig, dass die Nummer der <acronym>NAT</acronym>-Regel wichtig, dass die Nummer der <acronym>NAT</acronym>-Regel
(in diesem Beispiel <literal>100</literal>) höher ist, als (in diesem Beispiel <literal>100</literal>) höher ist, als
die beiden vorherigen Regeln und niedriger, als die die drei vorherigen Regeln und niedriger, als die
<literal>check-state</literal>-Regel:</para> <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 <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 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 # Allow the packet through if it has an existing entry in the dynamic rules table
&dollar;cmd 101 check-state</programlisting> &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 modifiziert, um Aktionen mit der
<literal>&dollar;skipto</literal>-Variable zu erlauben und <literal>&dollar;skipto</literal>-Variable zu erlauben und
anzuzeigen, dass die Prüfung mit der Regel 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 für <acronym>TCP</acronym> wurden durch die Regel
<literal>125</literal> ersetzt, da die sieben erlaubten <literal>125</literal> ersetzt, da die sieben erlaubten
ausgehenden Ports in der Variable ausgehenden Ports in der Variable
<literal>&dollar;good_tcp0</literal> enthalten sind.</para> <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 <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 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 &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 Regel haben und die Nummer muss über die
<literal>skipto</literal>-Aktion referenziert werden. In <literal>skipto</literal>-Aktion referenziert werden. In
diesem Regelsatz leitet die Regel mit der Nummer diesem Regelsatz leitet die Regel mit der Nummer
<literal>500</literal> alle ausgehenden Pakete zur <literal>1000</literal> alle ausgehenden Pakete zur
Weiterverarbeitung an &man.natd.8; weiter. Die darauf konfigurierten <acronym>NAT</acronym>-Instanz weiter. Die darauf
folgende Regel lässt alle von <acronym>NAT</acronym> folgende Regel lässt alle von <acronym>NAT</acronym>
verarbeiteten Pakete passieren.</para> verarbeiteten Pakete passieren.</para>
<programlisting>&dollar;cmd 499 deny log all from any to any <programlisting>&dollar;cmd 999 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 1000 nat 1 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> &dollar;cmd 1001 allow ip from any to any</programlisting>
<para>In diesem Beispiel steuern die Regeln <para>In diesem Beispiel steuern die Regeln
<literal>100</literal>, <literal>101</literal>, <literal>100</literal>, <literal>101</literal>,
<literal>125</literal>, <literal>500</literal> und <literal>125</literal>, <literal>1000</literal> und
<literal>510</literal> die Adressübersetzung der ein- und <literal>1001</literal> die Adressübersetzung der ein- und
ausgehende Pakete, so dass immer die private ausgehende Pakete, so dass immer die private
<acronym>LAN</acronym> <acronym>IP</acronym>-Adresse in der <acronym>LAN</acronym> <acronym>IP</acronym>-Adresse in der
dynamische Zustandstabelle registriert werden.</para> 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 Regel zutreffen, werden zwei Aktionen ausgeführt. Zuerst
wird durch die Aktion <literal>keep-state</literal> ein wird durch die Aktion <literal>keep-state</literal> ein
dynamischer Eintrag in der Statustabelle erstellt und die 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 Als nächstes durchläuft das Paket <acronym>NAT</acronym> und
wird dann an das Internet gesendet. Nachdem dieses Paket am wird dann an das Internet gesendet. Nachdem dieses Paket am
Webserver angekommen ist, wird dort eine Antwort erzeugt und 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 <acronym>LAN</acronym> freigegeben. Das Antwortpaket wird
von der Regel <literal>check-state</literal> als Paket einer von der Regel <literal>check-state</literal> als Paket einer
aktiven Sitzung erkannt. Das Paket wird dann von Regel aktiven Sitzung erkannt. Das Paket wird dann von Regel
<literal>500</literal> per <acronym>NAT</acronym> <literal>1000</literal> per <acronym>NAT</acronym>
verarbeitet, bevor es über die externe Schnittstelle versendet verarbeitet, bevor es über die externe Schnittstelle
wird.</para> 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> <sect3>
<title>Weiterleitung von Ports</title> <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 <acronym>LAN</acronym> nicht aus dem Internet zugänglich
sind. Diese Rechner können zwar ausgehende Verbindungen sind. Diese Rechner können zwar ausgehende Verbindungen
zur Außenwelt aufbauen, jedoch keine eingehenden 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 anbieten möchten, die aus dem Internet erreichbar sein
sollen. In diesem Fall können Sie die Ports, welche über sollen. In diesem Fall können Sie die Ports, welche über
das Internet erreichbar sein sollen, über die 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> <acronym>LAN</acronym> weiterleiten.</para>
<para>Angenommen es gibt einen <acronym>IRC</acronym>-Server <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>) (<acronym>IRC</acronym>) und 80 (<acronym>HTTP</acronym>)
an die jeweiligen Rechner weitergeleitet werden.</para> an die jeweiligen Rechner weitergeleitet werden.</para>
<para>Die Syntax für <option>-redirect_port</option> <para>Bei In-Kernel <acronym>NAT</acronym> wird die gesamte
lautet:</para> 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] <programlisting>redirect_port proto targetIP:targetPORT[-targetPORT]
[aliasIP:]aliasPORT[-aliasPORT] [aliasIP:]aliasPORT[-aliasPORT]
[remoteIP[:remotePORT[-remotePORT]]]</programlisting> [remoteIP[:remotePORT[-remotePORT]]]</programlisting>
<para>Für das obige Beispiel sollten die Argumente wie folgt <para>Für das obige Beispiel sollten die Argumente wie folgt
aussehen:</para> aussehen:</para>
<programlisting>-redirect_port tcp 192.168.0.2:6667 6667 <programlisting>redirect_port tcp 192.168.0.2:6667 6667
-redirect_port tcp 192.168.0.3:80 80</programlisting> redirect_port tcp 192.168.0.3:80 80</programlisting>
<para>Damit werden die entsprechenden <para>Nachdem diese Argumente der Konfiguration der
<acronym>TCP</acronym>-Ports an die Rechner im <acronym>NAT</acronym>-Instanz 1 im obigen Regelsatz
<acronym>LAN</acronym> weitergeleitet.</para> 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 festgelegt werden. Zum Beispiel würde
<replaceable>tcp 192.168.0.2:2000-3000 <replaceable>tcp 192.168.0.2:2000-3000
2000-3000</replaceable> alle Verbindungen auf die Ports 2000-3000</replaceable> alle Verbindungen auf die Ports
2000 bis 3000 an die Ports 2000 bis 3000 an 2000 bis 3000 an die Ports 2000 bis 3000 an
Rechner <systemitem>A</systemitem> weiterleiten.</para> 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>
<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 <para>Das Weiterleiten von Adressen ist nützlich, wenn
mehr als eine <acronym>IP</acronym>-Adresse zur Verfügung mehr als eine <acronym>IP</acronym>-Adresse zur Verfügung
steht. Jeder Rechner im <acronym>LAN</acronym> kann über 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. <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 Rechner aus dem <acronym>LAN</acronym> mit der
entsprechenden externen <acronym>IP</acronym>-Adresse entsprechenden externen <acronym>IP</acronym>-Adresse
umschreiben. Auch der eingehenden Datenverkehr über die 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 <systemitem class="ipaddress">128.1.1.3</systemitem> zur
Verfügung stehen, kann <systemitem Verfügung stehen, kann <systemitem
class="ipaddress">128.1.1.1</systemitem> als externe 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.2</systemitem> und
<systemitem class="ipaddress">128.1.1.3</systemitem> an <systemitem class="ipaddress">128.1.1.3</systemitem> an
Rechner <systemitem>A</systemitem> und Rechner <systemitem>A</systemitem> und
Rechner <systemitem>B</systemitem> im <acronym>LAN</acronym> Rechner <systemitem>B</systemitem> im <acronym>LAN</acronym>
weitergeleitet werden.</para> weitergeleitet werden.</para>
<para>Die Syntax für <option>-redirect_address</option> <para>Die Syntax für <option>redirect_address</option>
lautet:</para> 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"> <para>Auf das Beispiel bezogen, würden die Argumente so
<tgroup cols="2"> lauten:</para>
<tbody>
<row>
<entry>localIP</entry>
<entry>Die interne <acronym>IP</acronym>-Adresse des
Rechners im <acronym>LAN</acronym>.</entry>
</row>
<row> <programlisting>redirect_address 192.168.0.2 128.1.1.2
<entry>publicIP</entry> redirect_address 192.168.0.3 128.1.1.3</programlisting>
<entry>Die externe <acronym>IP</acronym>-Adresse für
den entsprechenden Rechner im
<acronym>LAN</acronym>.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>Für das obige Beispiel sollten die Argumente wie <para>Genau wie bei <option>redirect_port</option>, werden
folgt aussehen:</para> diese Argumente in der Konfiguration der
<acronym>NAT</acronym>-Instanz gesetzt. Bei der
<programlisting>-redirect_address 192.168.0.2 128.1.1.2 Weiterleitung von Adressen ist keine Portumleitung
-redirect_address 192.168.0.3 128.1.1.3</programlisting> notwendig, da alle Daten, die auf einer bestimmten
<acronym>IP</acronym>-Adresse empfangen werden,
<para>Genau wie bei <option>-redirect_port</option>, werden weitergeleitet werden.</para>
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>Die externe <acronym>IP</acronym>-Adresse der <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 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> </sect3>
</sect2> </sect2>