|
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.
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.
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.

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.
|