original in en Guido Socher
en to de Martin Blank
Guido ist ein langjähriger Linux-Fan. Seine Linux-Homepage findet man unter www.oche.de/~bearix/g/
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:
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.
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.
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:
#!/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).
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... :-)