Suche im Katalog
Linux Netzwerker-Handbuch

Linux Netzwerker-Handbuch


Tony Bautts, Terry Dawson & Gregor N. Purdy
3. Auflage Juli 2005
ISBN 3-89721-414-8
382 Seiten
Weitere Informationen zur gedruckten Version des Buches finden Sie unter:
www.oreilly.de/catalog/linag3ger/

Zur Übersicht aller OpenBooks


TOC PREV NEXT INDEX

Kapitel 9

IP-Masquerading und die Umsetzung von Netzwerkadressen

Sie erinnern sich sicher noch gut an die Zeiten, in denen es sich nur große Unternehmen leisten konnten, ihre Rechner in einem lokalen Netzwerk (LAN) miteinander zu vernetzen. Mittlerweile sind die Preise für die Netzwerktechnik dermaßen ins Rutschen geraten, dass sich nun zwei Dinge bemerkbar machen: Erstens sind LANs heutzutage Alltagsgegenstände, die sich sogar bis in viele Haushalte hinein verbreitet haben. Zweifellos gibt es viele Linux-Anwender, die zwei oder mehrere Rechner über irgendein Ethernet miteinander vernetzt haben. Zweitens sind manche Netzwerkressourcen, besonders IP-Adressen, inzwischen Mangelware. Lange Zeit war es üblich, IP-Adressen kostenlos zu bekommen, mittlerweile muss man dafür Geld bezahlen.

Die meisten Leute mit einem LAN wollen vermutlich eine Internet-Verbindung haben, die jeder Rechner in ihrem LAN benutzen kann. Die IP-Routing-Regeln sind ziemlich pingelig darin, wie sie mit dieser Situation umgehen. Traditionelle Lösungen basieren auf der Vergabe von Netzwerkadressen (z.B. Klasse C) für kleine LANs, in denen jede Maschine ihre eigene IP-Adresse erhält. Über einen klassischen Router werden dann die Verbindungen vom LAN ins Internet hergestellt.

In einer kommerzialisierten Internet-Umgebung ist das allerdings ein teures Unterfangen. Erstens müssten Sie für die Ihnen zugewiesene Netzwerkadresse bezahlen. Außerdem müssten Sie damit rechnen, dass Ihr Internet Service Provider Sie für das Privileg kräftig zur Kasse bittet, eine angemessene Route zu Ihrem Netzwerk aufzubauen, damit der Rest des Internet weiß, wie man Sie erreichen kann. Für Firmen ist dieses Vorgehen praktikabel, aber private Netzwerke rechtfertigen die entstehenden Kosten nicht.

Glücklicherweise bietet Linux auch hier einen Ausweg aus dem Dilemma. Die Antwort findet man in Form eines Sets von erweiterten Netzwerkfunktionen, die so genannte Umsetzung von Netzwerkadressen (Network Address Translation, NAT). NAT beschreibt ein Verfahren, wie die in den Paket-Headern enthaltenen Netzwerkadressen (und manchmal auch Portnummern) während der Übertragung modifiziert werden können. Das hört sich zunächst merkwürdig an, wir werden aber sehen, dass dies die ideale Lösung des beschriebenen Problems ist. IP-Masquerading ist eine Form der Netzwerk-Adressenumsetzung. Sie erlaubt allen Hosts in einem privaten Netzwerk Zugriff auf das Internet, wofür nur eine einzige dynamische IP-Adresse benötigt wird. Wenn diese eine Adresse statisch zugewiesen wird, nennt man die beschriebene Funktionalität SNAT (Source NAT). Wir werden beide Techniken im Folgenden als »Masquerading« bezeichnen.

Mit IP-Masquerading können Sie private (nicht-routbare) IP-Netzwerkadressen in Ihrem LAN benutzen, wobei Ihr Linux-basierter Router einige clevere Echtzeit-Übersetzungen von IP-Adressen und Ports durchführt. Wenn der Router ein Paket von einem Rechner im LAN erhält, ermittelt er den Typ des Pakets (TCP, UDP oder ICMP) und modifiziert das Paket dahin gehend, dass es so aussieht, als ob es vom Router selbst erzeugt worden wäre (und merkt sich das auch). Dann überträgt er das Paket mit der einzelnen, oben erwähnten IP-Adresse ins Internet. Wenn der Zielrechner das Paket erhält, glaubt er, dass das Paket vom routenden Host kam, und sendet alle Antworten an diesen zurück. Erreicht die Antwort nun den Linux-Masquerading-Router, schaut dieser in seiner Tabelle der aufgenommenen Masquerading-Verbindungen nach, um festzustellen, ob dieses Paket für einen der LAN-Rechner bestimmt ist. Falls dem so ist, kehrt er die Modifikationen um, die er auf dem Hinweg durchgeführt hatte, und leitet das Paket an den LAN-Rechner weiter. Ein einfaches Beispiel sehen Sie in Abbildung 9-1.
Abbildung 9-1
Eine typische IP-Masquerading-Konfiguration

Wir haben ein kleines Ethernet, das eine der reservierten Netzwerkadressen benutzt. Für den Zugang ins Internet benutzt das Netzwerk einen Linux-basierten Masquerading-Router. Eine der Workstations im Netzwerk (192.168.1.3) möchte nun eine Verbindung zum entfernten Host 209.1.106.178 aufbauen. Sie schickt ihr Paket zum Masquerading-Router, der erkennt, dass für dieses Paket Masquerading-Dienste benötigt werden. Er akzeptiert das Paket, bestimmt eine Portnummer (1035), ersetzt die IP-Adresse und Portnummer des Pakets durch seine eigene IP-Adresse und die ermittelte Portnummer und überträgt das Paket an die Zieladresse. Der Zielhost meint, er hätte die Verbindungsanforderung direkt vom Masquerading-Router bekommen, und sendet ein Antwortpaket zurück. Sobald der Masquerading-Router diese Antwort erhält, schaut er in seiner Masquerading-Tabelle nach, kehrt die eben durchgeführte Substitution um und leitet das so modifizierte Antwortpaket an die betreffende Workstation weiter.

Der lokale Host hat den Eindruck, er würde direkt mit dem fernen Host kommunizieren. Dieser weiß überhaupt nichts über den lokalen Host und glaubt, er wäre nur mit dem Linux-Masquerading-Host verbunden. Der Linux-Router weiß aber, dass sich beide Hosts miteinander unterhalten und an welchen Hosts sie das tun, und kann daher die notwendigen Umrechnungen von IP-Adressen und Portnummern durchführen, um die Kommunikation zwischen den beteiligten Hosts aufrechtzuerhalten.

Das mag vielleicht ein wenig konfus wirken, manchmal sogar auch sein, aber es funktioniert und ist sogar recht einfach zu konfigurieren. Machen Sie sich daher keine Sorgen, falls Sie noch nicht alle Einzelheiten verstanden haben.

Nebenwirkungen und zusätzliche Vorteile

IP-Masquerading hat auch eine Reihe von Nebenwirkungen, von denen einige nützlich sind, andere dagegen lästig.

Keiner der Hosts im unterstützten Netzwerk hinter dem Masquerading-Router ist direkt von außen sichtbar. Damit alle Ihre Hosts Netzwerkverbindungen ins Internet aufbauen können, brauchen Sie folglich nur eine gültige und routbare IP-Adresse. Darin liegt ein kleiner Wermutstropfen: Keiner der Hosts ist im Internet sichtbar und Sie können aus dem Internet keine direkte Verbindung zu einem von ihnen aufbauen. Der einzige Host aus dem maskierten Netzwerk, der im Internet sichtbar ist, ist der Masquerading-Host selbst. Das ist wichtig, wenn Sie Dienste wie Mail oder FTP in Betracht ziehen. Es hilft Ihnen bei der Entscheidung, welche Dienste vom Masquerading-Host zur Verfügung gestellt werden sollen, ob Sie dafür Proxy-Mechanismen in Erwägung ziehen oder ob sie auf andere Weise angeboten werden sollen.

Sie können jedoch auf dem Router DNAT (Destination NAT) einsetzen, um eingehende Verbindungen an bestimmte Ports auf internen Servern zu routen. Bei Web- und Mailservern funktioniert das großartig. Sie können solche Dienste auf Hosts im privaten Netzwerk betreiben und dann DNAT verwenden, um eingehende Verbindungen an Port 80 und Port 25 auf die entsprechenden internen Server weiterzuleiten. Auf diese Weise ist der Router-Host nur am Routing beteiligt und stellt keine von außen sichtbaren Dienste zur Verfügung. Mit der gleichen Technik können Sie eingehende Verbindungen an einen hohen Port (etwa 4022) an den SSH-(Secure Shell-)Port (üblicherweise 22) auf einem internen Host routen, so dass Sie über den Router eine direkte SSH-Verbindung zu einem Ihrer internen Hosts aufnehmen können.

Da keiner Ihrer maskierten Hosts sichtbar ist, sind sie relativ gut vor Angriffen von außen geschützt. Sie können einen Ihrer Hosts als Firewall und Masquerading-Router einsetzen. Ihr gesamtes Netzwerk ist nur so sicher wie Ihr Masquerading-Host, weshalb Sie ihn mit Firewall-Regeln schützen müssen und keine anderen von außen sichtbaren Dienste auf ihm ausführen sollten.

IP-Masquerading hat einen gewissen Einfluss auf die Leistung Ihres Netzwerks. In typischen Konfigurationen ist das wahrscheinlich kaum messbar. Wenn Sie jedoch eine große Anzahl aktiver Masquerading-Sessions laufen haben, werden Sie möglicherweise feststellen, dass die Verarbeitung, die auf dem Masquerading-Host erforderlich ist, Ihren Netzwerkdurchsatz beeinträchtigt. Verglichen mit dem konventionellen Routing muss ein Rechner für IP-Masquerading einiges an Mehrarbeit leisten. Der alte Rechner, den Sie als Masquerading-Host einsetzen wollen, um eine eigene Verbindung ins Internet zu haben, mag ganz in Ordnung sein, erwarten Sie jedoch nicht zu viel, falls Sie ihn als Router für Ihr Ethernet-Firmennetzwerk verwenden wollen.

Schließlich gibt es noch Netzwerkdienste, die mit Masquerading nicht funktionieren, oder zumindest nicht, ohne dass man dabei kräftig nachhelfen müsste. Bei diesen Diensten handelt es sich in der Regel um solche, die darauf angewiesen sind, dass auch Verbindungen vom Server zum Client aufgebaut werden können. Dazu gehören einige Arten von direkten Kommunikationskanälen (Direct Communications Channels, DCC), Funktionen in IRC und einige Video- und Audio-Multicasting-Dienste. Einige dieser Dienste haben speziell entwickelte Kernel-Module (so genannte »Helper«-Module), um diese Probleme zu lösen. Wir werden gleich näher darauf eingehen. Für andere gibt es möglicherweise überhaupt keine Unterstützung. Achten Sie also darauf, ob Sie IP-Masquerading in Ihrem Fall überhaupt einsetzen können.

Konfiguration des Kernels für IP-Masquerading

Um die Möglichkeiten von IP-Masquerading zu nutzen, muss Ihr Kernel mit Unterstützung für Netzwerk-Paketfilterung kompiliert sein. Bei der Konfiguration des Kernels müssen Sie folgende Optionen auswählen:

Networking options --->
[M] Network packet filtering (replaces ipchains)

Das netfilter-Paket enthält Module, die beim Ausführen der Masquerading-Funktionen helfen. Um beispielsweise eine Verbindungsverfolgung für FTP-Sitzungen zu erlauben, würden Sie die Module ip_conntrack_ftp und ip_nat_ftp.o laden und verwenden. Diese Unterstützung für Verbindungsverfolgung ist erforderlich, damit das Masquerading richtig mit Protokollen funktioniert, die mehrere Verbindungen für eine logische Sitzung umfassen, da sich Masquerading auf die Verbindungsverfolgung verlässt.

Konfiguration von IP-Masquerading

Wenn Sie die Kapitel über Firewalls und Accounting bereits gelesen haben, kommt es für Sie wahrscheinlich nicht überraschend, dass der iptables-Befehl auch zum Konfigurieren der IP-Masquerading-Regeln eingesetzt wird.

Masquerading stellt eine besondere Art der Paketanpassung (Packet Mangling; der technische Ausdruck für das Verändern von Paketen) dar. Sie können nur Pakete maskieren, die an einer Schnittstelle empfangen und an eine andere Schnittstelle geroutet werden. Um eine Masquerading-Regel zu konfigurieren, konstruieren Sie eine Regel, die einer Firewall-Weiterleitungsregel ähnelt. Allerdings enthält diese Regel spezielle Optionen, die dem Kernel mitteilen, dass das Paket maskiert werden soll. Der iptables-Befehl verwendet -j MASQUERADE, um Pakete zu kennzeichnen, die der Regelspezifikation entsprechen und maskiert werden sollen (das gilt für eine dynamische IP-Adresse; falls Sie eine statische IP-Adresse haben, verwenden Sie stattdessen -j SNAT).

Schauen wir uns ein Beispiel an. Ein Informatikstudent an der Groucho-Marx-Universität hat zu Hause eine Reihe von Computern herumstehen und sie zu einem kleinen Ethernet-basierten LAN vernetzt. Als Netzwerkadresse hat er eine der offiziell reservierten privaten IP-Adressen genommen. Sein Quartier teilt er mit anderen Studenten, die alle an einem Zugang zum Internet interessiert sind. Da die Finanzen der Studenten begrenzt sind, können sie sich keine dauerhafte Internet-Verbindung leisten und verwenden daher nur eine einzige Internet-Verbindung. Sie alle möchten eine Möglichkeit haben, an der Verbindung teilzunehmen, um IRC zu betreiben, im Web zu surfen und per FTP Dateien direkt auf ihre Computer herunterzuladen. IP-Masquerading ist die ideale Lösung für sie.

Der Student konfiguriert zuerst einen Linux-Host, der die Internet-Verbindung aufbaut und als Router für das LAN arbeitet. Die IP-Adresse, die dem Rechner bei der Einwahl zugewiesen wird, ist kaum von Interesse. Er konfiguriert den Linux-Router mit IP-Masquerading und verwendet eine der privaten Netzwerkadressen für sein LAN: 192.168.1.0. Er stellt sicher, dass bei allen Hosts im LAN die Standard-Route auf den Linux-Router zeigt.

Die folgenden iptables-Befehle sind erforderlich, damit das Masquerading in der Konfiguration funktioniert:

# iptables -t nat -P POSTROUTING DROP
# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

Immer wenn von nun an einer der LAN-Hosts versucht, einen Dienst auf einem entfernten Host anzusprechen, werden die Pakete automatisch vom Linux-Masquerading-Router maskiert. Die erste Regel in jedem Beispiel verhindert, dass der Linux-Host andere Pakete routet, und erhöht auf diese Weise die Sicherheit.

Wenn Sie die Masquerading-Regeln auflisten wollen, die Sie angelegt haben, geben Sie den iptables-Befehl mit der Option -L ein, wie wir es bereits bei unserer Besprechung der Firewalls beschrieben haben:

# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target prot opt source destination

Chain POSTROUTING (policy DROP)
target prot opt source destination
MASQUERADE all -- anywhere anywhere MASQUERADE

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Masquerading-Regeln haben das Ziel MASQUERADE.

Nameserver-Anfragen verarbeiten

Die Durchführung von Nameserver-Anfragen von den Hosts im LAN war mit IP-Masquerading schon immer problematisch. Es gibt zwei Möglichkeiten, DNS an eine Masquerading-Umgebung anzupassen. Sie können zum einen die Hosts anweisen, denselben DNS-Server zu benutzen wie der Linux-Router und IP-Masquerading auch auf die DNS-Anfragen anzuwenden. Alternativ können Sie einen Caching-Nameserver auf dem Linux-Host ausführen und alle LAN-Hosts anweisen, den Linux-Host als ihren DNS-Server zu benutzen. Obwohl diese Lösung etwas aggressiver ist, stellt sie möglicherweise die bessere Option dar, da sie den Umfang des DNS-Verkehrs reduziert, der über die Internet-Verbindung läuft, und da sie für die meisten Anfragen geringfügig schneller ist, weil diese direkt aus dem Cache bedient werden. Allerdings ist diese Konfiguration komplexer. Der Abschnitt »Caching-Only-Konfiguration für named« in Kapitel 5 beschreibt, wie ein Caching-Nameserver konfiguriert wird.

Mehr über Network Address Translation

Die netfilter-Software kann viele verschiedene Arten von NAT ausführen. IP-Masquerading ist nur eine einfache Anwendung.

Es ist zum Beispiel möglich, NAT-Regeln zu bilden, die nur bestimmte Adressen oder Adressbereiche umsetzen und alle anderen Adressen unberührt lassen. Oder Sie können Adressen in ganze Pools von Adressen umsetzen anstatt in eine einzige Adresse wie beim Masquerading. In der Tat können Sie den iptables-Befehl dazu benutzen, um NAT-Regeln anzulegen, die alles Mögliche umsetzen, mit Testkombinationen, die alle möglichen Standardattribute verwenden, wie etwa Quelladressen, Zieladressen, Protokolltypen, Portnummern usw.

Die Umsetzung der Quelladresse eines Pakets wird in iptables als Source NAT oder SNAT bezeichnet. Die Umsetzung der Zieladresse eines Pakets ist als Destination NAT oder DNAT bekannt. SNAT und DNAT sind Ziele, die Sie mit dem iptables-Befehl verwenden können, um aufwändigere Regeln zu erzeugen.


TOC PREV NEXT INDEX


O'Reilly Home | O'Reilly-Partnerbuchhandlungen | Bestellinformationen
Kontakt | Über O'Reilly | Datenschutz

© 2005, O'Reilly Verlag GmbH & Co. KG