Netzwerk-Installationsanleitung für Kernel 2.4 und 2.6

 

  
Zurück Inhalt Vorwärts


Dieses Kapitel wurde freundlicherweise zur Verfügung gestellt von: Michael Schlenstedt

5.0 Router / Gateway

5.1 Internetzugang (Routing)

5.1.1 Einführung

Um einen Router (Gateway) für das lokale Netz aufzubauen, muss der Router über mindestens 2 Netzwerkdevices verfügen, eines auf LAN-Seite und eines auf Internet-Seite. Auf LAN-Seite ist dieses im Allgemeinen eine Ethernet-Karte. Da der ADSL-Zugang über PPPoE und somit mit Hilfe des pppd aufgebaut wird, ist das Netzwerkdevice auf Internetseite nicht etwa die zweite Netzwerkkarte, an der das ADSL-Modem hängt, sondern ein PPP-Device, welches vom pppd angesteuert wird. Die Netzwerkkarte wird erst anschließend als reine Hardware verwendet, um die PPPoE-Pakete zum Modem zu senden, die TCP/IP-Verbindung läuft komplett über den pppd.

Aus diesem Grund kann der ADSL-Router auch lediglich mit einer Netzwerkkarte ausgestattet sein; das ADSL-Modem hängt dann am zentralen Hub bzw. Switch. Alle Rechner im LAN empfangen dann zwar auch die PPPoE-Pakete, die ja ebenfalls über die LAN-Netzwerkkarte (und dann über den Hub/Switch) an das ADSL-Modem gesendet werden, sie können mit diesen Paketen jedoch nichts anfangen und verwerfen sie. Lediglich das ADSL-Modem leitet die Pakete über die ADSL-Leitung an die Gegenstelle der Telefongesellschaft weiter, wo sie dann erkannt und weiterverarbeitet werden.

Der Linuxkernel kann standardmäßig TCP/IP-Pakete zwischen verschiedenen Devices routen, d. h. er kann Pakete an einem Device entgegen nehmen und sie über ein weiteres Device wieder ausgeben. Mit Hilfe des Programms route werden die entsprechenden Routen gesetzt, und damit wird eindeutig festgelegt, welche IP-Adressen über welches Interface erreichbar sind.

Jedoch benötigt jeder Rechner, um im Internet mit anderen Rechnern kommunizieren zu können, eine eindeutige IP-Adresse (siehe: Kapitel 2.2). Das Problem bei privaten Netzen und die Einwahl über einen Internetprovider ist jedoch in aller Regel, dass lediglich der direkt beim Provider eingewählte Rechner vom Provider eine eindeutige, weltweit gültige IP-Adresse zugewiesen bekommt (dynamische IP-Adressen-Vergabe). Einige Provider bieten auch die Möglichkeit, eine feste IP-Adresse bei der Einwahl zugewiesen zu bekommen. Aber auch hier gilt: Nur der eingewählte Rechner kann mit Hilfe dieser IP-Adresse direkt mit anderen Rechnern im Internet kommunizieren. Für unser Netz heißt das also, dass lediglich der Router direkt Verbindungen zu anderen Rechnern im Internet aufbauen kann, alle anderen Rechner in unserem LAN haben IP-Adresen aus dem privaten Bereich, die weltweit nicht eindeutig sind (siehe wieder: Kapitel 2.2).

Masquerading
Abbildung 5.1: Network Adress Translation

Für diesen Anwendungsfall wurde NAT (Network Adress Translation) ins Leben gerufen. Unter Linux kommt eine besondere Art des NAT zum Einsatz: Masquerading. Hierbei ersetzt der Router bei Anfragen der Clients ins Internet deren private IP-Adresse durch seine weltweit gültige Adresse und verschickt das Paket entsprechend. Bei ankommenden Paketen gilt das Gleiche: Der Router hat sich zuvor "gemerkt", welcher Client welche Anfrage gesendet hat. Bei ankommenden Paketen ersetzt er dann wiederum die Ziel-IP-Adresse des Paketes durch die private Adresse des Clients im LAN. Somit ist es möglich, mit lediglich einer weltweit gültigen IP-Adresse ein komplettes Netzwerk ans Internet anzubinden.

5.1.2 Installation

Um die entsprechenden Funktionen im Kernel zu aktivieren, dient seit Kernel 2.4 das Programm iptables. Es greift auf die neuen Netfilter-Module zu, die ebenfalls seit Version 2.4 des Linuxkernels Einzug gehalten haben. Die Unterstützung muss mit in den Kernel einkompiliert sein (idealerweise als Modul). Alle aktuellen Distributionen haben die Netfilter-Module in ihren Standardkerneln aktiviert. Wer selbst einen Kernel kompiliert hat, muss die Module von Hand aktivieren. Abbildung 4.2 zeigt alle Optionen, die beim Kernelkompilieren für die Netzfilterunterstützung aktiviert sein müssen. Die entsprechenden Optionen finden sich unter Networking Options ->IP: Netfilter Configuration.
Kernel-Konfiguration
Abbildung 5.2: Network Adress Translation

Am sinnvollsten ist es, die entsprechenden iptables-Befehle aufzurufen, sobald eine Verbindung zum Provider besteht und alle Befehle wieder zu deaktivieren, sobald keine Verbindung mehr besteht. Hierzu kann man die beiden Skripte /etc/ppp/ip-up und /etc/ppp/ip-down verwenden. Sie werden nach jedem Verbindungsaufbau bzw. -abbau aufgerufen. Einige Distributionen (wie zum Beispiel SuSE auch) liefern vorgefertigte Skripte mit, die zum Beispiel den Nameserver des Providers nach erfolgreichem Verbindungsaufbau korrekt setzen. Diese Dateien sollte man nur verändern, wenn man ein wenig von Bash-Programmierung versteht. SuSE-Linux stellt daher für weitere Befehle die Dateien /etc/ppp/ip-up.local und /etc/ppp/ip-down.local zur Verfügung. Sollten sich diese Dateien noch nicht im entsprechenden Verzeichnis befinden, so kann man sie leicht anlegen:


touch /etc/ppp/ip-up.local
touch /etc/ppp/ip-down.local

Anschließend müssen sie noch ausführbar gesetzt werden:

 

chmod 755 /etc/ppp/ip-up.local
chmod 755 /etc/ppp/ip-down.local

Existieren diese beiden Dateien, so werden sie nach dem Abarbeiten des ip-up- bzw. ip-down-Skripts ebenfalls aufgerufen. Sehr praktisch an diesen Skripten ist, dass der pppd ihnen einige Parameter der Verbindung beim Starten mit übergibt, wie zum Beispiel die dynamisch zugewiesene IP-Adresse, das Device oder auch die vom Provider übermittelten Nameserver. Diese Parameter sind über Variablen innerhalb des Skripts abzurufen.

Die Netfilter-Funktionen des Linuxkernels werden mit dem Tool iptables aktiviert bzw. gesteuert. Alle Funktionen werden über sogenannte IP-Tabellen gesteuert, die dem neuen Tool iptables auch seinen Namen gegeben haben. Zur Zeit existieren 3 Tabellen:

Angesprochen werden die unterschiedlichen Tabellen durch die Option "-t":


iptables -t <TABELLE>

Die filter-Tabelle ist die Standardtabelle und muss daher nicht gesondert angegeben werden. Innerhalb der Tabellen können (analog zum alten ipchains) Regelketten (Chains) angegeben werden, in denen die IP-Pakete auf gewisse Eigenschaften kontrolliert werden können. Sobald eine Regel bei einem IP-Paket greift, wird das Abarbeiten der Regeln gestoppt und sofort zum sogenannten Ziel der Regel verzweigt. Ein Ziel könnte zum Beispiel sein, dass IP-Paket zu verwerfen. Dazu jedoch später mehr.

Mit Hilfe der Option "-A" wird einer solchen Kette eine neue Regel hinzugefügt (A wie "append"):


itables -t <TABELLE> -A <KETTE>

Innerhalb der NAT-Tabelle zum Beispiel existieren mehrere vordefinierte Ketten. Als wichtigstes existiert die POSTROUTING-Chain. Die POSTROUTING-Kette wird abgearbeitet, kurz bevor ein Paket den Router verlässt. Neben der POSTROUTING-Kette existieren noch die PREROUTING- und die OUTPUT-Kette. Die PREROUTING-Kette wird für alle Pakete verwendet, die gerade auf dem Router eingehen und die OUTPUT-Regel wird für lokale Pakete des Firewalls verwendet, bevor entschieden wird, wohin sie geroutet werden sollen.

 

Mit "-o" wird das Outgoing-Device angegeben, d. h. das ausgebende Device. Mittels "-i" kann analog das Incoming-Device angegeben werden. Mittels "-j" (jump) wird schließlich das Ziel der Regel festgelegt. Das Ziel einer Regel bestimmt, was mit dem IP-Paket geschehen soll. Wie schon erwähnt, wird die Abarbeitung der kompletten Kette sofort abgebrochen, sobald eine Regel auf ein IP-Paket zutrifft. Es wird sofort auf das Ziel dieser Regel gesprungen.

Dieses war nur eine sehr kleine Auswahl an vorhandenen Optionen und Möglichkeiten von iptables. Ich habe mich auf die für das Verständnis dieser Anleitung wichtigen Optionen beschränkt. Weitere Erläuterungen und vor allem eine sehr ausführliche Befehlsübersicht findet sich unter:

Für reines Masquerading aller Verbindungen vom LAN zum Internet und umgekehrt muss der Inhalt des ip-up.local-Skripts wie in Listung 5.1 aussehen.

Download des Skriptes: /etc/ppp/ip-up.local

Listing 5.1: Die Datei /etc/ppp/ip-up.local für NAT/Masquerading

Can't open File