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:
parent
4b95214c9a
commit
9e74972a83
Notes:
svn2git
2020-12-08 03:00:23 +00:00
svn path=/head/; revision=53713
1 changed files with 262 additions and 124 deletions
|
@ -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 @@ $
|
|||
$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 $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>$cmd 005 allow all from any to any via xl0 # exclude LAN traffic
|
||||
$cmd 010 allow all from any to any via lo0 # exclude loopback traffic
|
||||
$cmd 100 divert natd ip from any to any in via $pif # NAT any inbound packets
|
||||
$cmd 099 reass all from any to any in # reassamble inbound packets
|
||||
$cmd 100 nat 1 ip from any to any in via $pif # NAT any inbound packets
|
||||
# Allow the packet through if it has an existing entry in the dynamic rules table
|
||||
$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>$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>$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
|
||||
$cmd 120 $skip udp from any to x.x.x.x 53 out via $pif $ks
|
||||
$cmd 121 $skip udp from any to x.x.x.x 67 out via $pif $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>$cmd 499 deny log all from any to any
|
||||
$cmd 500 divert natd ip from any to any out via $pif # skipto location for outbound stateful rules
|
||||
$cmd 510 allow ip from any to any</programlisting>
|
||||
<programlisting>$cmd 999 deny log all from any to any
|
||||
$cmd 1000 nat 1 ip from any to any out via $pif # skipto location for outbound stateful rules
|
||||
$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 $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>$cmd 100 divert natd ip from any to any in via $pif
|
||||
$cmd 1000 divert natd ip from any to any out via $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>
|
||||
|
||||
|
|
Loading…
Reference in a new issue