Netzwerk-Installationsanleitung für Kernel 2.2.x

  [ Allgemeines ]  [ Software ]  [ Grundlagen ]  [ Netzwerk ]  [ Forwarding ]  [ Test ]

  

1. Allgemeines   Seitenanfang

Linux eignet sich hervorragend, um Server verschiedener Art aufzubauen und somit Hardware, Festplattenplatz oder aber Dienste wie eMail, News, einen Internet-Zugang etc. anderen Rechnern bereitzustellen. Anhand dieser kleinen Beschreibung erläutere ich die Anbindung eines kleinen Netzwerkes an einen ADSL-Anschluss.

2. Software   Seitenanfang

Grundsätzlich lässt sich sagen, dass auf dem Server natürlich das Grundsystem der jeweiligen Distribution installiert sein sollte. Eine grafische Oberfläche ist nicht nötig, daher brauchen die verschiedenen Windowmanager und auch XFree86 nicht mitinstalliert zu werden. Des weiteren kann auch auf jegliche Anwendungssoftware wie Mailreader, Newsreader, Grafikbearbeitungsprogramme, Officepakete usw. verzichtet werden.

Selbstverständlich muss für diese Anleitung bereits der ADSL-Zugang auf dem Server/Router installiert sein. Die Anleitungen findet Ihr hier: ADSL-Konfigurationanleitungen.

3. Grundlagen   Seitenanfang

Um ein Netzwerk aufzubauen sind leider einige theoretische Grundlagen nötig, damit man auch versteht, was man eigentlich bei der Installation/Konfiguration anstellt. Ich gebe hier nur einen kurzen Überblick, da sonst die Fülle an Information schnell diese kleine Beschreibung sprengen würde. Wer sich näher mit Netzwerken unter Linux beschäftigen möchte oder wem meine Ausführungen nicht ausreichen, dem empfehle ich das Buch Linux - Wegweiser für Netzwerker aus dem O'Reilly-Verlag, welches auch als Online-Version im Netz steht.

4. Netzwerkgrundkonfiguration   Seitenanfang

Als erstes sollte die Netzwerkkarte für die LAN-Anbindung installiert werden. Hier kommt es darauf an, was Du für eine Netzwerkkarte besitzt. Die folgenden Beispiele zeigen die Verwendung einer 100MBit-Karte mit Realtek-Chipsatz auf der LAN-Seite. Bei PCI-Karten muss vor dem Einbau in den Rechner nichts weiter beachtet werden. Bei einer ISA-Karte sollte die Karte nicht im PnP-Modus (Plug and Pray ;-)) betrieben werden, sondern auf einen festen Interrupt und einen festen I/O-Port eingestellt werden. Dieses geschieht bei neueren Karten mit Hilfe eines Dos-Tools, welches der Karte beiliegt (siehe Beschreibung der Karte). Ältere Karten bieten meist die Konfiguration über Jumper an. Eine mögliche für ISA-Karten verwendete Konfiguration ist folgende:

 IRQ: 3 I/O-Port: 0x300 

Für die Einbindung der Netzwerkkarte kann es sein, dass ein neuer Kernel kompiliert werden muss. Bei den meisten aktuellen Distributionen ist dieses jedoch nicht mehr nötig, da die standardmäßig installierten Kernel schon alle möglichen Netzwerkkarten und -Protokolle unterstützen. Sollte trotzdem das Kompilieren eines neuen Kernels nötig bzw. erwünscht sein, so sollten für einen Router/Gateway alle Optionen aus Bild 1 mit in den Kernel einkompiliert werden. Achtung! Einige Optionen können nur ausgewählt werden, wenn unter Code maturity level options "Prompt for..." aktiviert wurde! Ich habe hier nur die für das Netzwerk relevanten Einstellungen abgebildet (Networking options). Ebenfalls muss natürlich der Treiber für die Netzwerkkarte unter Network device support neben allen anderen Optionen, welche für das System wichtig sind, ausgewählt werden. Näheres über das Kompilieren eines neuen Kernels findest Du im Handbuch Deiner Distribution oder im Kernel-HOWTO. Versuche es jedoch zu vor mit dem mitgelieferten Distributionskernel ! Das kann eine Menge Arbeit ersparen.

Kernel-Konfiguration

Abbildung 1: Kernelkonfiguration

 

Die Netzwerkkarte sollte nun nach dem Booten erkannt werden. Dieses kannst Du überprüfen, indem Du den Befehl dmesg | less ausführst. Hier sollte eine Zeile ähnlich folgender erscheinen:


rtl8139.c:v1.07 5/6/99 Donald Becker
http://cesdis.gsfc.nasa.gov/linux/drivers/rtl8139.html
eth0: RealTek RTL8139 Fast Ethernet at 0x6000, IRQ 15, 00:00:1c:db:da:93.

Falls Dir das Einbinden der Ethernet-Karte Probleme bereitet, kann auch noch einmal im Ethernet-HOWTO nachgelesen werden.

Wichtig in diesem Zusammenhang: Am häufigsten tritt bei der ADSL-Anbindung wohl eine Installation mit 2 Netzwerkkarten auf: Die eine für die LAN-Anbindung und die Zweite für die Verbindung mit dem ADSL-Modem. Es ist zwar auch möglich, alles über eine Netzwerkkarte (und einen Hub) ablaufen zu lassen, jedoch ist es in Hinblick auf die Sicherheit und den Schutz des lokalen Netzes empfehlenswert, die beiden Netzwerke, die der Server/Router verbindet (Internet und LAN), auch physikalisch durch die Verwendung von 2 Netzwerkkarten zu trennen. Um nun den beiden Netzwerkkarten explizit ein Device zuordnen zu können, ist es nötig, die Treiber als Module in den Kernel einzukompilieren (so wie es bei den Standard-Distributionskernel auch der Fall ist). Anschließend kann in der Datei /etc/modules.conf die Zuweisung eines Device-Namens an die Netzwerkkarte erfolgen:

alias eth0 ne
alias eth1 rtl8139

Hier wurde z.B. der NE2000-Netzwerkkarte das Ethernetdevice eth0 und der 100MBit-Karte mit Realtek-Chipsatz das Device eth1 zugewiesen. Hinweise auf die Namen der Module (ne und rtl8139) findet man beim Bootvorgang (siehe Befehl dmesg weiter oben). Das hat den Vorteil, dass man explizit entscheiden kann, welcher Devicename für welche Karte verwendet werden soll.

Jeder Rechner in unserem privaten Netzwerk muss einen eindeutigen Namen und eine eindeutige IP-Adresse zugewiesen bekommen. Dabei ist darauf zu achten, dass IP-Adressen aus dem privaten Bereich genommen werden. Ich verwende für meine Konfiguration die Daten aus Tabelle 1. Genauer gesagt wird jedem Netzwerkdevice unseres Rechners eine eindeutige IP-Adresse zugewiesen. Bei der Netzwerkeinrichtung auf dem Server und den Clients müssen diese IP-Adressen also bei der Konfiguration der Netzwerkkarte auf der LAN-Seite eingestellt werden. Das ADSL-Netzwerkdevice auf dem Server bekommt seine IP-Adresse vom Provider zugewiesen (das dürfte zumindest meistens der Fall sein, es sei denn, Ihr Provider weist Ihnen eine feste IP-Adresse zu, näheres dazu siehe ADSL-Konfigurationanleitungen).

 
Tabelle 1: Rechnernamen und IP-Adressen
Rechner Name IP-Nummer Domain
Server WGServer1 192.168.99.1 schlenn.de
Client 1 Client1 192.168.99.2 schlenn.de
Client 2 Client2 192.168.99.3 schlenn.de

Die Daten aller Rechner müssen nachträglich in die Datei /etc/hosts eingetragen werden (und zwar auf jedem Rechner!). Das hat den Vorteil, dass alle Rechner im LAN nicht nur über Ihre IP-Adresse verfügbar sind, sondern das für Anfragen auch der Name des Rechners benutzt werden kann, welchem dann die korrekte IP-Adresse durch die Datei /etc/hosts zugeordnet wird. Diese Datei könnte wie in Listing 1 aussehen.

 
Listing 1: Die Datei /etc/hosts

#
# hosts This file describes a number of hostname-to-address
# mappings for the TCP/IP subsystem.  It is mostly used at
# boot time, when no name servers are running.  On small
# systems, this file can be used instead of a "named" name
# server.  Just add the names, addresses and any aliases to
# this file...
#
127.0.0.1       localhost
192.168.99.1    WGServer1.schlenn.de  WGServer1  # Der Server
192.168.99.2    Client1.schlenn.de    Client1    # Michael's Kiste
192.168.99.3    Client2.schlenn.de    Client2    # Nils' Compi

Um der Netzwerkkarte nun die richtige LAN-IP-Adresse des jeweiligen Rechners zuzuordnen, kann das Distributions-Konfigurationtool verwendet werden (z.B. DrakConf, YaST, Linuxconf etc.). Natürlich kann die Karte auch "von Hand" mit ifconfig eingerichtet werden. Da sich die Einbindung der Netzwerkkarte bei den einzelnen Distributionen stark unterscheidet, kann ich an dieser Stelle leider nur auf das Handbuch oder die Hilfeseiten der Distribution verweisen.

Auf den Clients muss als Default-Gateway (Default-Route) nun noch die IP-Adresse des Servers eingetragen werden. Dieses geschieht meist ebenfalls mit speziellen Konfigurationtools (siehe oben). Hier kann meist auch gleich der Nameserver eingetragen werden. Da wir vorerst keinen eigenen Nameserver auf unserem Server einrichten wollen, wird auf jedem Rechner in unserem Netz der Nameserver (die IP-Adresse) unseres Providers eingetragen.

Nun sollte man schon einmal ausprobieren, ob alle Rechner im Netzwerk auch gegenseitig erreichbar sind. Dieses kann man mit dem Programm ping feststellen, indem man jeweils von den anderen Rechnern ein ping auf den Server "loslässt":


ping -c10 192.168.99.1

Jeder Rechner sollte auf eine Anfrage der anderen Rechner antworten.

5. Masquerading/Forwarding   Seitenanfang

Damit der Server nun als Router für die Clients fungieren kann, ist es nötig, im Kernel das Masquerading und Forwarding zu aktivieren (siehe weiter oben). Auch diese Option ist meist in den Standard-Installationskerneln der Distributionen aktiviert.

Ein Internet-Router, wie wir ihn aufsetzen wollen, muss im Allgemeinen mit mindestens 2 Netzwerkdevices umgehen können. In unserem Fall ist das auf der Seite des LANs eine Netzwerkkarte (in den folgenden Beispielen eth0) und auf der Seite des Internets ebenfalls eine Netzwerkkarte, die wiederum mit dem ADSL-Modem verbunden ist (in den folgenden Beispielen eth1). Der Router übernimmt nun die Aufgabe, Pakete zwischen diesen beiden Devices weiterzureichen (forwarding). Für die Masquerading- und Forwardregeln muss jedoch als Internet-Device NICHT die zweite Netzwerkkarte (eth1) angegeben werden sondern pppX (meist ppp0), da durch die Verwendung des pppd dieses Device letztendlich das Device in "Richtung Internet" ist!

Masquerading ist nötig, da wir ja für unser kleines Netz nur IP-Nummern aus dem privaten Bereich verwendet haben, da meistens keine öffentlich eindeutigen IP-Nummern zur Verfügung stehen. Im Internet sind diese Rechner also nicht direkt erreichbar. Lediglich der Server bekommt bei der Einwahl eine IP-Adresse des Providers (meist dynamisch, d. h. nur für die gerade aktuelle Verbindung) zugewiesen. Nur dieser Rechner kann also schon mit anderen Rechnern im Internet kommunizieren. Beim Masquerading wird die IP-Adresse aller Pakete, die das LAN verlassen, durch die des Gateways (unseres Servers) ersetzt, da dieser ja nur mit Rechnern aus dem Internet kommunizieren kann. Alle Pakete, die vom Internet wieder zum LAN durchgereicht werden (und natürlich die IP-Adresse des Servers tragen), werden wieder mit den IP-Adressen der Clients versehen (je nachdem, für wen sie bestimmt sind).

Für die Einstellungen zum Masquerading und Forwarding wird bei 2.2.x'er Kernel das Programm ipchains verwendet. Diese Einstellungen kann man durch ein Init-Skript erledigen oder aber in unserem Fall in der Datei /etc/ppp/ip-up und /etc/ppp/ip-down eintragen, da bei uns Forwarding/Masquerading ja nur nötig ist, wenn eine Verbindung zum Internet besteht. Ein weiterer Vorteil ist, dass dem Skript ip-up als Option direkt die aktuelle IP-Adresse, das Internet-Interface (ppp0) und auch der aktuelle Nameserver (wenn vom Provider übermittelt) übergeben wird. Daher ist es sehr viel einfacher, hier Masquerading-Regeln zu definieren.

Alle Einstellungen (mit Erläuterungen) in den Dateien können aus Listing 2 und 3 entnommen werden. Wer noch nähere Informationen zum Programm ipchains und dessen Optionen benötigt, der findet unter Infos/Links einige weiterführende Links zum Thema Netzwerk.

Zuerst werden die Original-Dateien für eine eventuelle spätere Rekonstruktion der früheren Installation gesichert:

cp /etc/ppp/ip-up /etc/ppp/ip-up.orig
cp /etc/ppp/ip-down /etc/ppp/ip-down.orig

Anschließend können die Dateien /etc/ppp/ip-up und ip-down wie in den Listings gezeigt, abgeändert werden.

HINWEIS: Die hier vorgestellte Lösung ist eine Minimal-Konfiguration, die lediglich sämtliche Datenpakete zwischen dem Internet und dem LAN durchleitet! Es ist dringend anzuraten, seinen Rechner früher oder später auch durch einen Firewall gegen Angriffe oder unbefugte Zugriffe aus dem Internet zu schützen! Entsprechende Anleitungen und Links findet Ihr unter Infos/Links.

 
Listing 2: Die Datei /etc/ppp/ip-up


#!/bin/sh
#
# /etc/ppp/ip-up
#
# Written by: Michael Schlenstedt
# Ver: 0.2  - Mon Oct 23 10:01:55 CEST 2000
# NO SECURITY-OPTIONS!

#
# Variablen festlegen (einige nur fuer einen Firewall wichtig)
#

# Netzwerkdevice auf LAN-Seite
DEV_LNET=eth0

# Netzwerkdevice auf Internet-Seite
DEV_INET=$1

# IP-Adresse des LAN-Netzwerkdevice
IP_LNET=192.168.99.1

# IP-Adresse des Internet-Netzwerkdevice ($4 ist die IP-Adresse,
# welche vom Provider nach dem Verbindungsaufbau zugewiesen wurde:
# siehe man pppd)
IP_INET=$4

# Lokales Netz
LNET=192.168.99.0/24

# Masquerading fue einige Dienste ist nur ueber Module moeglich
MSQ_MODULES="ip_masq_ftp ip_masq_raudio"

# Firewall zuruecksetzen
/sbin/ipchains -F
/sbin/ipchains -X

#
# Firewall/Masquerading-Einstellungen und Freischaltungen
#

# zusaetzliche Masquerading-Module laden (z.B. fuer ftp)
/sbin/modprobe $MSQ_MODULES

# Forwarding ist bei 2.2.x'er Kerneln per default deaktiviert, wir
# bracuhen es jedoch
echo 1 > /proc/sys/net/ipv4/ip_forward

# Alles erlauben. Achtung! Bietet keinerlei Sicherheit!
/sbin/ipchains -P input ACCEPT
/sbin/ipchains -P output ACCEPT
/sbin/ipchains -P forward MASQ

 
Listing 3: Die Datei /etc/ppp/ip-down


#!/bin/sh
#
# /etc/ppp/ip-down
#
# Written by: Michael Schlenstedt
# Ver: 0.2  - Mon Oct 23 10:01:55 CEST 2000
# NO SECURITY-OPTIONS!

#
# Variablen festlegen (einige nur fuer einen Firewall wichtig)
#

# Netzwerkdevice auf LAN-Seite
DEV_LNET=eth0

# Netzwerkdevice auf Internet-Seite
DEV_INET=$1

# IP-Adresse des LAN-Netzwerkdevice
IP_LNET=192.168.99.1

# IP-Adresse des Internet-Netzwerkdevice ($4 ist die IP-Adresse,
# welche vom Provider nach dem Verbindungsaufbau zugewiesen wurde:
# siehe man pppd)
IP_INET=$4

# Lokales Netz
LNET=192.168.99.0/24

# Firewall zurücksetzen
/sbin/ipchains -F
/sbin/ipchains -X

/sbin/ipchains -P input ACCEPT
/sbin/ipchains -P output ACCEPT
/sbin/ipchains -P forward MASQ

Im Moment sind die Freischaltungen in ip-up und ip-down noch gleich, da wir ja noch keinen Firewall in das System eingebunden haben. Kommen später in ip-up noch richtige Firewall-Regeln dazu wird mit den Befehlen in ip-down erreicht, das nach einer Abwahl alle Regeln der Firewall (die teilweise auch keinerlei Gültigkeit mehr haben) gelöscht werden und alles wieder auf "Erlaubt" gesetzt wird. Das bracht und aber erst später bei der Integration einer Firewall zu interessieren.

WICHTIG: Das PPPoE-Protokoll benötigt 8 Bytes in jedem Ethernet-Paket. Ein Standard- Ethernet-Paket ist 1500 Bytes groß, d. h. mit dem PPPoE-Protokoll wäre jedes Paket 1508 Bytes lang. Die Router der Telekom verwerfen jedoch ohne jegliche Fehlermeldung alle Pakete, die größer als 1500 Bytes sind. Aus diesem Grund ist die MTU (Maximum Transfer Unit) bei PPPoE nie größer als 1492 zu setzen. Die PPPoE-Software (bzw. beim pppoed der pppd) macht das auf dem Router automatisch. Da aber standardmäßig alle Clients im LAN mit einer MTU von 1500 senden, ist es nötig, die MSS (Maximum Segment Size) nachträglich auf dem Router zu korrigieren. Die MSS ist normalerweise 1460 Bytes groß (1500 - 40 Bytes TCP/IP-Header), sie darf also bei Verwendung von PPPoE nur 1452 Bytes groß sein. Beim rp-pppoe zum Beispiel bewirkt die Option "-m 1452" ein nachträgliches korrigieren der MSS. Beim pppoed für Kernel 2.2.X muss dazu das Kernelmodul mssclampfw geladen werden. Alternativ kann natürlich auf jedem Client im LAN die MTU auf 1492 eingestellt werden. Das ist zwar für den Router Resourcen schonender, aber bei größeren LANs bedeutet dieses Vorgehen doch einen erheblichen Mehraufwand.

6. Test...Test...Test...   Seitenanfang

Jetzt kann die LAN-Anbindung getestet werden. Ist keine DialOnDemand-Verbindung auf dem Router/Server installiert, so muss zuerst die Internetverbindung aufgebaut werden. Anschließend testen wir auf den Clients mit dem Befehl

ping -c10 194.25.2.129

ob die Verbindung auch zustande kommt. Klappt das, so kann nun auch die Verbindung mit einem Nameserver gestestet werden:

ping -c10 adsl4linux.de

Funktioniert dieser Befehl nicht, wohl aber der vorherige mit der IP-Adresse, so liegt der Fehler in der Angabe des Nameservers des Providers. Die Datei /etc/resolv.conf sollte nochmals genau auf Tippfehler hin überprüft werden.

Tritt auch beim ersten Befehl schon ein Problem auf, so ist es sehr hilfreich, das Loggen aller Pakete, die ipchains bearbeitet, zu aktivieren, indem man folgende Zeilen an den Schluss der Datei /etc/ppp/ip-up anhängt:

/sbin/ipchains -l -A input -i $DEV_INET
/sbin/ipchains -l -A output -i $DEV_INET

Mit

tail -f /var/log/messages

kann nun der Verbindungsversuch nochmals "Live" verfolgt werden.