32.9. NAT - Network Address Translation

Beigetragen von Chern Lee.

32.9.1. Überblick

natd(8), der Network-Address-Translation-Daemon von FreeBSD, akzeptiert ankommende Raw-IP-Pakete, ändert den Sender der Daten in den eigenen Rechner und leitet diese Pakete in den ausgehenden IP-Paketstrom um, indem IP-Adresse und Port des Senders so geändert werden, dass bei einer Antwort der ursprüngliche Sender wieder bestimmt und die Daten an ihn weitergeleitet werden können.

Der häufigste Grund für die Verwendung von NAT ist die gemeinsame Nutzung einer Internetverbindung.

32.9.2. Einrichtung

Wegen der begrenzten Verfügbarkeit von IPv4-Adressen und der gestiegenen Anzahl von Breitbandverbindungen über Kabelmodem oder DSL, wird die gemeinsame Nutzung von Internetverbindungen immer wichtiger. Der natd(8)-Daemon ermöglicht die Anbindung von mehreren Rechnern an das Internet unter Nutzung einer gemeinsamen Verbindung und einer IP-Adresse.

Häufig soll ein über Kabelmodem oder DSL und eine IP-Adresse an das Internet angebundener Rechner mehreren Rechnern eines lokalen Netzwerks Internetdienste anbieten.

Um dies zu ermöglichen, muss der FreeBSD-Rechner als Gateway fungieren. Dazu sind zwei Netzwerkkarten notwendig. Eine für die Verbindung zum Internet, die zweite für die Verbindung mit dem lokalen Netzwerk. Sämtliche Rechner des lokalen Netzwerks sind über einen Hub oder einen Switch miteinander verbunden.

Anmerkung: Es gibt verschiedene Möglichkeiten, ein LAN über ein FreeBSD-Gateway an das Internet anzubinden. Das folgende Beispiel beschreibt ein Gateway, das zumindest zwei Netzwerkkarten enthält.

Eine derartige Netzwerkkonfiguration wird vor allem zur gemeinsamen Nutzung einer Internetverbindung verwendet. Ein Rechner des lokalen Netzwerks (LAN) ist mit dem Internet verbunden. Alle anderen Rechner des lokalen Netzwerks haben nur über diesen “Gateway”-Rechner Zugriff auf das Internet.

32.9.3. Boot Loader Konfiguration

Die Kerneleigenschaften für Network Address Translation mit natd(8) sind im GENERIC-Kernel nicht aktiviert, können aber bereits zur Bootzeit geladen werden, indem ein paar Zeilen in die Datei /boot/loader.conf hinzugefügt werden:

ipfw_load="YES"
ipdivert_load="YES"

Zusätzlich kann die Option net.inet.ip.fw.default_to_accept auf 1 gesetzt werden:

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

Anmerkung: Es ist eine gute Idee, diese Option während den ersten Versuchen, eine Firewall und ein NAT-Gateway aufzusetzen, zu aktivieren. Damit ist die Standardvorgehensweise von ipfw(8) diejenige, allow ip from any to any, anstatt der weniger freizügigen deny ip from any to any. Es wird dadurch etwas schwieriger, sich aus Versehen nach einem Neustart aus dem System auszusperren.

32.9.4. Kernelkonfiguration

Wenn Module nicht in Frage kommen oder Sie bevorzugen, alle notwendigen Eigenschaften in den laufenden Kernel einzubauen, müssen die folgenden Optionen in die Kernelkonfigurationsdatei eingetragen werden:

options IPFIREWALL
options IPDIVERT

Die folgende Optionen können ebenfalls eingetragen werden:

options IPFIREWALL_DEFAULT_TO_ACCEPT
options IPFIREWALL_VERBOSE

32.9.5. System Bootkonfiguration

Um Firewall- und NAT-Unterstützung zur Bootzeit zu aktivieren, tragen Sie Folgendes in /etc/rc.conf ein:

gateway_enable="YES" (1)
firewall_enable="YES" (2)
firewall_type="OPEN" (3)
natd_enable="YES"
natd_interface="fxp0" (4)
natd_flags="" (5)
(1)
Richtet den Rechner als Gateway ein. Die Ausführung von sysctl net.inet.ip.forwarding=1 hätte den gleichen Effekt.
(2)
Aktiviert die Firewallregeln in /etc/rc.firewall beim Systemstart.
(3)
Ein vordefinierter Satz von Firewallregeln, der alle Pakete durchlässt. Sehen Sie sich /etc/rc.firewall an, wenn Sie diese Option verwenden wollen.
(4)
Die Netzwerkkarte, die Pakete weiterleitet (und mit dem Internet verbunden ist).
(5)
Zusätzliche Konfigurationsoptionen, die beim Systemstart an natd(8) übergeben werden.

Durch die Definition dieser Optionen in /etc/rc.conf wird die Anweisung natd -interface fxp0 beim Systemstart ausgeführt. Dies kann aber auch manuell erfolgen.

Anmerkung: Falls Sie viele Optionen an natd(8) übergeben müssen, können Sie auch eine Konfigurationsdatei verwenden. Dazu fügen Sie folgende Zeile in /etc/rc.conf ein:

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

Die Datei /etc/natd.conf enthält verschiedene Konfigurationsoptionen, wobei jede Option in einer Zeile steht. Das Beispiel im nächsten Abschnitt würde folgende Konfigurationsdatei verwenden:

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

Wenn Sie eine Konfigurationsdatei verwenden wollen, sollten Sie sich die Handbuchseite zu natd(8) durchlesen, insbesondere den Abschnitt über die Nutzung der Option -f.

Jedem Rechner und jeder Schnittstelle des lokalen Netzwerks sollte eine IP-Adresse des im RFC 1918 definierten privaten Adressraums zugewiesen werden. Der Standardgateway entspricht der internen IP-Adresse des natd-Rechners.

Im Beispiel werden den LAN-Clients A und B die IP-Adressen 192.168.0.2 und 192.168.0.3 zugewiesen, während die LAN-Netzwerkkarte des natd-Rechners die IP-Adresse 192.168.0.1 erhält. Der natd-Rechner mit der IP-Adresse 192.168.0.1 wird als Standardgateway für die Clients A und B gesetzt. Die externe Netzwerkkarte des natd-Rechners muss für die korrekte Funktion von natd(8) nicht konfiguriert werden.

32.9.6. Ports umleiten

Wenn Sie natd(8) verwenden, sind Ihre LAN-Clients von aussen nicht erreichbar. LAN-Clients können zwar Verbindungen nach aussen aufbauen, sind aber für ankommende Verbindungen nicht erreichbar. Wenn Sie Internetdienste auf einem LAN-Client anbieten wollen, haben Sie daher ein Problem. Eine einfache Lösung ist die Umleitung von bestimmten Internetports des natd-Rechners auf einen LAN-Client.

Beispielsweise könnte ein IRC-Server auf Client A und ein Webserver auf Client B laufen. Damit diese Konfiguration funktioniert, müssen Verbindungen, die auf den Ports 6667 (IRC) und 80 (Web) ankommen, auf die entsprechenden Clients umgeleitet werden.

Dazu wird die Option -redirect_port unter Nutzung folgender Syntax an natd(8) übergeben:

     -redirect_port proto targetIP:targetPORT[-targetPORT]
                 [aliasIP:]aliasPORT[-aliasPORT]
                 [remoteIP[:remotePORT[-remotePORT]]]

Für unser Beispiel heißt das:

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

Dadurch werden die entsprechenden tcp-Ports auf die jeweiligen LAN-Clients umgeleitet.

Mit -redirect_port können auch ganze Portbereiche statt einzelner Ports umgeleitet werden. So werden mit tcp 192.168.0.2:2000-3000 2000-3000 alle Verbindungen, die auf den Ports 2000 bis 3000 ankommen, auf die entsprechenden Ports des Clients A umgeleitet.

Diese Optionen können während des Betriebs von natd(8) oder über die Option natd_flags="" in /etc/rc.conf gesetzt werden.

Eine ausführliche Konfigurationsanleitung finden Sie in natd(8).

32.9.7. Adressen umleiten

Die Umleitung von Adressen ist nützlich, wenn mehrere IP-Adressen verfügbar sind, die aber alle auf einem Rechner verbleiben sollen. In diesem Fall kann natd(8) jedem LAN-Client eine eigene externe IP-Adresse zuweisen. Ausgehende Pakete eines LAN-Clients werden so der entsprechenden externen IP-Adresse des Clients zugeordnet. Ankommender Verkehr für diese IP-Adresse wird automatisch an den entsprechenden LAN-Client weitergeleitet. Diesen Vorgang bezeichnet man auch als statisches NAT. Dem natd-Gatewayrechner könnten beispielsweise die IP-Adressen 128.1.1.1, 128.1.1.2 sowie 128.1.1.3 zugewiesen werden. 128.1.1.1 wird als die externe IP-Adresse des natd-Gatewayrechners verwendet, während 128.1.1.2 und 128.1.1.3 an die LAN-Clients A und B weitergegeben werden.

-redirect_address benutzt folgende Syntax:

-redirect_address localIP publicIP
localIP Die interne IP-Adresse des LAN-Clients
publicIP Die externe IP-Adresse des LAN-Clients

Für unser Beispiel hieße dies:

-redirect_address 192.168.0.2 128.1.1.2
-redirect_address 192.168.0.3 128.1.1.3

Analog zur Option -redirect_port können Sie diese Argumente auch in der Option natd_flags="" in /etc/rc.conf angeben. Bei der Nutzung der Adressumleitung ist die Portumleitung überflüssig, weil alle für eine bestimmte IP-Adresse ankommenden Daten umgeleitet werden.

Die externe IP-Adresse des natd-Rechners muss aktiv sein und der externen Netzwerkkarte zugewiesen sein. Weitere Informationen zu diesem Thema finden Sie in rc.conf(5).

Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an <[email protected]>.
Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an <[email protected]>.