IP-Masquerading konfigurieren

ArticleCategory:

System Administration

AuthorImage:

[Ein Bild des Autors]

TranslationInfo:

original in en Guido Socher

en to de Martin Blank

AboutTheAuthor:

Guido ist ein langjähriger Linux-Fan. Seine Linux-Homepage findet man unter www.oche.de/~bearix/g/

Abstract:

IP-Masquerading ermöglicht es, mehrere Rechner unter Verwendung einer einzigen öffentlichen IP-Adresse via eines Linux-Rechners mit dem Internet zu verbinden. Dadurch kann man einem ganzen privaten Netzwerk den Internet-Zugang ermöglichen und der ISP glaubt, daß man mit nur einem Rechner eine Verbindung aufbaut. Dieser Artikel erklärt, wie man das IP-Masquerading mit einem 2.2.x-Kernel einrichtet; er erklärt nicht, wie man ein Netzwerk aufsetzt. Um eine allgemeine Vorstellung von Computernetzwerken zu erhalten, empfehle ich, zusätzlich den Artikel über LANs in der Januar 2000-Ausgabe zu lesen.

ArticleIllustration:

[Illustration]

ArticleBody:

Allgemeines

Um IP-Maquerading wie in diesem Artikel beschrieben nutzen zu können, benötigt man mindestens eine Linux-Box mit einem 2.2.x-Kernel. Dieser Rechner stellt die Verbindung zum Internet her. Daß die Verbindung über einen Linux-Rechner bereitgestellt wird, heißt nicht, daß auf den Rechnern im internen Netz auch Linux laufen muß. Tatsächlich funktioniert das ganze sehr gut im Zusammenspiel mit Windows, MacOS und diversen Unixen.
In diesem Artikel geht es um den Zugangsrechner. Er ist auf der einen Seite mit dem Internet verbunden, auf der anderen mit dem privaten Netzwerk. Deshalb braucht er mindestens zwei Netzwerkschnittstellen und mindestens zwei IP-Adressen. Eine dieser Adressen ist eine öffentliche IP-Adresse, die im Internet geroutet werden kann. Sie wird üblicherweise vom ISP zugewiesen, sobald man eine Modemverbindung (oder was auch immer sonst man verwendet) zu ihm aufbaut. Die andere Adresse ist eine private IP-Adresse, die man aus einem der folgenden Adressblöcke wählen sollte:

Dieser Artikel beschreibt nicht, wie man ein Netzwerk einrichtet. Ich nehme an, daß das private Netzwerk bereits steht und richtig konfiguriert ist.

Prinzipien des IP-Masquerading

Im Grunde setzt IP-Masquerading interne IP-Adressen in externe um. Dies bezeichnet man als Network Address Translation (NAT); Linux macht dies mit Hilfe sogenannter Port-Nummern. Für die große weite Welt sieht es so aus, als ob alle Verbindungen von der Linuxbox ausgingen. Eine detaillierte Erklärung dazu findet man in der Januarausgabe.

Manche IP-Pakete haben gewisse Eigenheiten, so daß IP-Masquerading vielleicht nicht mit allen Anwendungen klappt, aber in der Mehrzahl der Fälle funktioniert es. Es gibt Module für ICQ, ftp und Quake, die in den Kernel geladen werden müssen, damit diese besonderen Anwendungen korrekt unterstützt werden. Im Allgemeinen funktioniert aber alles wunderbar, was nur HTTP (Webbrowser), telnet, ssh oder SMTP (eMail) verwendet.

Voraussetzungen im Kernel

Wer einen vorkonfigurierten Kernel einer der großen Linux-Distributionen (Red Hat, Mandrake, Debian, SuSE...) verwendet, kann diesen Abschnitt überspringen, weil diese Kernel schon für IP-Masquerading vorbereitet sind.

Ich mache mir normalerweise ein Backup von /usr/src/linux/.config wenn ich einen funktionierenden Kernel kompiliert habe. Wenn ich das nächste Mal einen Kernel kompilieren muß, lade ich einfach diese Konfigurationsdatei und habe dadurch automatisch den vorherigen Kernel als Ausgangskonfiguration. Kleine Änderungen, wie sie z.B. für IP-Masquerading nötig sind, sind dann relativ leicht zu machen.

Für IP-Masquerading muß man bei der Kernelkonfiguration folgende Fragen bejahen [YES]. Dies sind nur die für IP-Masquerading erforderlichen Komponenten, man muß selbstverständlich auch alle anderen Optionen auswählen, die für das jeweilige System notwendig sind.

IP-Masquerading konfigurieren

Wir werden folgendes kleine Skript verwenden, um die Konfiguration des IP-Masquerading zu automatisieren. Dieses sollte man als /etc/rc.d/init.d/ipmasq abspeichern und es mit chmod 755 ipmasq ausführbar machen. Es geht davon aus, daß die Netzwerkschnittstelle zum internen Netzwerk die Adresse 192.168.0.1 hat (ifconfig eth0 192.168.0.1 netmask 255.255.255.0). Gegebenenfalls muß man das Skript an die tatsächlichen Verhältnisse anpassen.
Das folgende Bild zeigt das Netzwerk, das wir im Beispiel benutzen:

Netztopologie
#!/bin/sh
echo "Setting up IP masquerading ..."
# Wer dieses Skript unter Windows abgespeichert hat, muß es erst
# in eine UNIX Textdatei konvertieren!
#
# IP-Masquerading für ftp aktivieren
/sbin/modprobe ip_masq_ftp
#
#--------------
# N.B.: Die folgenden Module sind auskommentiert, werden also nicht
# geladen. Um die jeweiligen Anwendungen vom LAN aus nutzen zu können,
# muß man das Kommentarzeichen am Zeilenanfang entfernen.
#
# IP-Masquerading für RealAudio via UDP
#/sbin/modprobe ip_masq_raudio
#
# IP-Masquerading für IRC DCC file transfers
#/sbin/modprobe ip_masq_irc
#
# IP-Masquerading für Quake und QuakeWorld 
# Quake I / QuakeWorld (Ports 26000 und 27000)
#/sbin/modprobe ip_masq_quake
#
# Quake I/II/III / QuakeWorld (Ports 26000, 27000, 27910, 27960)
#/sbin/modprobe ip_masq_quake ports=26000,27000,27910,27960
#
# IP-Masquerading für CuSeeme
#/sbin/modprobe ip_masq_cuseeme
#
# IP-Masquerading für VDO-live
#/sbin/modprobe ip_masq_vdolive
#--------------
# Wichtig: IP Forwarding aktivieren. Der Default bei 2.2.x Kerneln
# ist 'disabled'!
echo "1" > /proc/sys/net/ipv4/ip_forward
#
# N.B.: Dies ist ein Beispiel für ein internes Netzwerk mit der
# Netzadresse 192.168.0.x und der netmask 255.255.255.0 bzw. /24.
# Dies muß unbedingt an die tatsächlichen Gegebenheiten angepaßt
# werden!!
#
/sbin/ipchains -P forward DENY
/sbin/ipchains -A forward -s 192.168.0.0/24 -j MASQ
#
#--- end of file

Um es zu testen, muß unbedingt sichergestellt sein, daß alle Rechner im privaten Netzwerk als Standard-Gateway (default gateway) 192.168.0.1 verwenden (also den Linuxrechner, der das IP-Masquerading macht)! Dann führt man das Skript als root aus. Anschließend kann man von einem der Rechner im privaten Netz ein ping an einen Host im Internet (z.B. ping 213.239.9.21) schicken.
Falls das klappt, funktioniert das Masquerading. Man sollte auch einmal ping www.linuxfocus.org ausprobieren. Dies sollte das gleiche Ergebnis liefern wie der vorherige ping; wenn nicht, sollte man die Datei /etc/resolv.conf überprüfen. Diese Datei muß auf allen Clients existieren, in ihr muß der DNS-Server des ISP angegeben sein.
Bei Windows 9x-Clients muß man in der Netzwerkkonfiguration für den TCP/IP-Stack, der an die Netzwerkkarte gebunden ist, DNS aktivieren und unter 'Suchreihenfolge für DNS-Server' den DNS des ISP eintragen.
Sobald die pings funktionieren, funktioniert auch alles andere (z.B. WWW).

Jetzt muß man daran gehen, die Konfiguration des Zugangsrechners so anzupassen, daß beim Booten automatisch das Skript /etc/rc.d/init.d/ipmasq ausgeführt wird. Am besten macht man das meiner Meinung nach, indem man im Skript /etc/rc.d/init.d/network (das sollte bereits vorhanden sein) einen Aufruf von /etc/rc.d/init.d/ipmasq AM SCHLUSS der 'start'-Sektion einfügt (das Skript enthält ein case-Statement, das wiederum u.a. die Option "start)" enthält).

Zusammenfassung

Wie man sehen konnte, ist es nicht schwer, IP-Masquerading einzurichten. Im Grunde besteht es nur aus IP Forwarding und zwei ipchains-Befehlen. IP-Masquerading stellt eine sehr mächtige Anwendung für kleine Netzwerke daheim, in Schulen, in kleinen Geschäften usw. dar.

Für weitere, detailliertere Informationen empfehle ich, das IP-Masquerading-Mini-HOWTO und das IPCHAINS-HOWTO zu lesen.

Um IP-Masquerading nutzen zu können, braucht man natürlich ein korrekt eingerichtetes Netzwerk. Dies wird allerdings von diesem Artikel nicht abgedeckt. Der Artikel Home networking erläutert einige Begriffe dazu, das Net 3 HOWTO und der Network Administrators' Guide erklären das Aufbauen eines Netzwerks im Detail. Ich habe auch vor, später in diesem Jahr einen Artikel über Netzwerke zu schreiben, aber falls man nicht so lange warte möchte... :-)