Netzwerk-Konfiguration
Dieses Kapitel konzentriert sich auf die Netzwerk-Administration in Debian. Eine allgemeinere Einführung in GNU/Linux findet sich in Net-HOWTO
.
Um sich mit einem Debian-Rechner mit dem Internet zu verbinden, muss seine Netzwerk-Schnittstelle korrekt konfiguriert sein.
Die erste Voraussetzung ist Kernel-Unterstützung für die vorhandenen Geräte. Beispiele solcher Geräte sind: Ethernet-Karten, Wi-Fi-Karten und weitere. Um diese Unterstützung des Kernels zu erhalten, kann es nötig sein, den Kernel neu zu kompilieren oder Module hinzuzufügen, so wie es in Der Linux-Kernel unter Debian, Kapitel 7 beschrieben ist.
Die Konfiguration der Netzwerk-Geräte wird weiter unten beschrieben. Die Angaben in diesem Kapitel sind für Sarge aktualisiert worden. Vieles vom hier gesagten gilt nicht mehr für vorherige Versionen von Debian.
10.1 Netzwerk-Grundlagen mit IP
Ein Debian-Rechner kann mehrere Schnittstellen besitzen, die jeweils unterschiedliche IP (Internet Protokoll)-Adressen haben können. Diese Schnittstellen können auch unterschiedlichen Typs sein, darunter:
-
Loopback: lo
-
Ethernet: eth0, eth1, ...
-
Wi-Fi: wlan0, wlan1, wifi0, ... [6]
-
Token Ring: tr0, tr1, ...
-
PPP: ppp0, ppp1, ...
Es gibt eine Vielzahl anderer Netzwerkgeräte, darunter SLIP, PLIP (IP über serielle und parallele Verbindungen), "shaper"-Geräte, die das Datenaufkommen auf bestimmten Geräten steuern, Frame-Relay, AX.25, X.25, ARCnet und LocalTalk.
Jede Netzwerkschnittstelle, die direkt mit dem Internet (oder IP-basierten Netzwerk) verbunden ist, wird durch eine eindeutige 32-Bit IP-Adresse identifiziert.[7] Die IP-Adresse können in einen Teil für Netzwerkadressierung und einen Teil zur Adressierung des Rechners geteilt werden. Wenn in einer IP-Adresse alle Bits, die Teil der Netzwerkadresse sind, auf Eins gesetzt werden und alle Bits, die Teil der Host-Adresse sind, auf Null gesetzt werden, dann erhält man die so genannte Netzmaske (netmask) des Netzwerks.
IP-Netzwerke sind traditionell in Klassen eingeteilt, deren Netzwerkadressen 8, 16 oder 24 Bit lang sind. Dieses System war nicht flexibel und verschwendete viele IP-Adressen, so dass IPv4-Netzwerke heute unterschiedlich lange Netzwerkadressen zugewiesen bekommen.
IP-Adressen Netzmasken Länge
Class A 1.0.0.0 - 126.255.255.255 255.0.0.0 = /8
Class B 128.0.0.0 - 191.255.255.255 255.255.0.0 = /16
Class C 192.0.0.0 - 223.255.255.255 255.255.255.0 = /24
IP-Adressen, die nicht darin liegen, sind für besondere Zwecke reserviert.
Einige Adressbereiche innerhalb jeder Klasse sind für lokale Netzwerke (LANs) reserviert. Diese Adressen kollidieren garantiert nicht mit irgendwelchen Adressen des Internet. (Aus diesem Grund können die Rechner, die eine solche Adresse zugewiesen bekommen, nicht direkt mit dem Internet verbunden sein, sondern müssen einen Gateway-Rechner als Zwischenschritt verwenden, der entweder die einzelnen Services anbietet oder Network-Adress-Translation (NAT) durchführt.) Diese Adressbereiche und die Anzahl der Bereiche in jeder Klasse sind in der folgenden Tabelle dargestellt.
Netzwerkadressen Länge Anzahl
Class A 10.x.x.x /8 1
Class B 172.16.x.x - 172.31.x.x /16 16
Class C 192.168.0.x - 192.168.255.x /24 256
Die erste Adresse in einem IP-Netzwerk ist die Adresse des Netzwerks selbst. Die letzte Adresse ist die Broadcast-Adresse des Netzwerks.[8] Alle anderen Adressen können einzelnen Rechnern des Netzwerks zugewiesen werden. Üblicherweise wird die erste oder letzte Adresse eines Netzwerks für den Gateway-Rechner verwendet.
Die Routing-Tabelle enthält vom Kernel bereitgestellte Informationen darüber, wie IP-Pakete an ihre Ziele verschickt werden. Hier eine Beispieltabelle eines Debian-Rechners in einem lokalen Netzwerk mit der IP-Adresse 192.168.50.x/24. Der Rechner 192.168.50.1 (ebenfalls im LAN) ist ein Router für das Firmennetzwerk, 172.20.x.x/16 und 192.168.50.254 (ebenfalls im LAN) sind Router für das Internet.
# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
127.0.0.0 * 255.0.0.0 U 0 0 2 lo
192.168.50.0 * 255.255.255.0 U 0 0 137 eth0
172.20.0.0 192.168.50.1 255.255.0.0 UG 1 0 7 eth0
default 192.168.50.254 0.0.0.0 UG 1 0 36 eth0
-
Die erste Zeile nach der Kopfzeile bestimmt, dass Daten für das Netzwerk 127.x.x.x durch das Loopback-Device lo geroutet werden.
-
Die zweite Zeile bestimmt, dass Daten für Hosts im LAN über die eth0-Schnittstelle versendet werden.
-
Die dritte Zeile bestimmt, dass Daten für das Firmennetzwerk ebenfalls über eth0 an das Gateway 192.168.50.1 versendet werden.
-
Die vierte Zeile bestimmt, dass Daten für das Internet ebenfalls über eth0 an das Gateway 192.168.50.254 gesendet werden.
Die IP-Adressen in dieser Tabelle können auch also Namen dargestellt werden, so wie sie in der Datei /etc/networks
hinterlegt sind oder wie sie von der C-Bibliothek aufgelöst werden.
Der Kernel ist neben seiner Aufgabe als Router auch in der Lage, Network Address Translation (NAT), Traffic Shaping und Filtering durchzuführen.
Siehe Net-HOWTO
und other networking HOWTOs
für weitere Informationen zu diesem Thema.
10.2 Netzwerk-Konfiguration auf niederer Ebene
Die traditionellen Werkzeuge, um unter GNU/Linux die Netzwerkkonfiguration auf niederer Ebene vorzunehmen, sind ifconfig
und route
, welche im Paket net-tools
enthalten sind. Diese Werkzeuge wurden offiziel von ip
abgelöst, welches sich im Paket iproute
befindet. Das Programm ip
funktioniert ab Linux 2.2 und leistet mehr als die alten Werkzeuge. Die alten Werkzeuge funktionieren jedoch noch immer und sind mehr Benutzern bekannt.
10.2.1 Netzwerkkonfiguration auf niederer Ebene – ifconfig
und route
An einem Beispiel soll gezeigt werden, wie die IP-Adresse der Schnittstelle eth0 von der Adresse 192.168.0.3 auf 192.168.0.111 zu ändern und eth0 als Route für das Netzwerk 10.0.0.0 via 192.168.0.1 einzurichten ist. Wir starten ifconfig
und route
ohne Argumente, um den derzeitigen Status aller Netzwerkschnittstellen und des Routing darzustellen.
# ifconfig
eth0 Link encap:Ethernet HWaddr 08:00:46:7A:02:B0
inet addr:192.168.0.3 Bcast:192.168.255.255 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:23363 errors:0 dropped:0 overruns:0 frame:0
TX packets:21798 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:13479541 (12.8 MiB) TX bytes:20262643 (19.3 MiB)
Interrupt:9
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:230172 errors:0 dropped:0 overruns:0 frame:0
TX packets:230172 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:22685256 (21.6 MiB) TX bytes:22685256 (21.6 MiB)
# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.0.0 * 255.255.0.0 U 0 0 0 eth0
default 192.168.0.1 255.255.255.255 UG 0 0 0 eth0
Zunächst schalten wir die Schnittstelle ab.
# ifconfig eth0 inet down
# ifconfig
lo Link encap:Local Loopback
... (keine weiteren eth0-Einträge)
# route
... (keine weiteren Routing-Einträge)
Dann schalten wir sie mit einer neuen IP-Adresse und neuem Routing wieder ein.
# ifconfig eth0 inet up 192.168.0.111 \
netmask 255.255.255.0 broadcast 192.168.0.255
# route add -net 10.0.0.0 netmask 255.0.0.0 gw 192.168.0.1 dev eth0
Das Ergebnis:
# ifconfig
eth0 Link encap:Ethernet HWaddr 08:00:46:7A:02:B0
inet addr:192.168.0.111 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
...
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0 ...
# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.0.0 * 255.255.255.0 U 0 0 0 eth0
10.0.0.0 192.168.0.1 255.0.0.0 UG 0 0 0 eth0
Weitere Informationen sind in ifconfig(8)
und route(8)
zu finden.
10.2.2 Netzwerkkonfiguration auf niederer Ebene – ip
Das Programm ip
erledigt folgendermaßen das gleiche wie die obigen Aufrufe von ifconfig
und route
-
ip link show
-
ip route list
-
ip link set eth0 down
-
ip addr del dev eth0 local 192.168.0.3
-
ip addr add dev eth0 local 192.168.0.111/24 broadcast 192.168.0.255
-
ip link set eth0 up
-
ip route add dev eth0 to 10.0.0.0/8 src 192.168.0.111 via 192.168.0.1
Eine Befehlsübersicht des Programms ip
kann mittels des Arguments help aufgerufen werden. Zum Beispiel druckt ip link help:
Usage: ip link set DEVICE { up | down | arp { on | off } |
dynamic { on | off } |
multicast { on | off } | txqueuelen PACKETS |
name NEWNAME |
address LLADDR | broadcast LLADDR |
mtu MTU}
ip link show [ DEVICE ]
Siehe auch ip(8)
.
10.2.3 Konfiguration der Wi-Fi-Schnittstelle
Die Wi-Fi-Schnittstelle wird - zusätzlich zu ifconfig
oder ip
- mit iwconfig
program konfiguriert und befindet sich im Paket wireless-tools
.
Siehe iwconfig(8)
.
10.2.4 Konfiguration der PPP-Schnittstelle
Wenn mit einem Modem über eine Telefonleitung auf das Internet zugegriffen werden soll, dann wird die Verbindung mit Hilfe des Point-to-Point-Protokolls (PPP) aufgebaut. Derartige Verbindungen werden als Netzwerkschnittstellen ppp0, ppp1, usw. dargestellt.
Die PPP-Schnittstelle wird vom PPP-Dämon pppd
verwaltet, der sich im Paket ppp
befindet. Möchte der Benutzer die PPP-Schnittstelle konfigurieren, so bedeutet dies pppd
zu konfigurieren.
10.2.4.1 Manuelle pppd
-Konfiguration
Um eine Netzwerkverbindung herzustellen, muss ein Kommunikationskanal geöffnet werden (üblicherweise eine serielle Schnittstelle), Befehle müssen an das Kommunikationsgerät (meist ein Modem) gesendet werden, eine Telefonnummer muss gewählt werden, die Identität des Benutzers muss dem fremden PPP-Dämon bestätigt werden, der Kernel muss eine PPP-Schnittstelle erzeugen, die Routing-Tabelle muss geändert werden, so dass der Datenverkehr über diese Schnittstelle abgewickelt wird. pppd
kann all dieses leisten und hat daher eine sehr lange Liste von Optionen. Diese Optionen sind in pppd(8)
beschrieben.
Auf einem Debian-System können globale Einstellungen in der Datei /etc/ppp/options
abgelegt werden. Benutzerspezifische Optionen können in ~/.ppprc
gespeichert werden. Optionen, die vom jeweiligen Port abhängen werden in /etc/ppp/options.portname
gespeichert. Zum Beispiel seien zwei Modems vorhanden: Ein eingebautes Lucent MT-Modem, auf das via /dev/LT-modem zugegriffen wird, und ein externes Modem, auf das via /dev/ttyS0 zugegriffen wird. Zur Konfiguration dienen zwei Dateien:
# cat > /etc/ppp/options.LT-modem <115200
init "/usr/sbin/chat -f /etc/chatscripts/setup-LT-modem"
EOF
# cat > /etc/ppp/options.ttyS0 <115200 init "/usr/sbin/chat -f /etc/chatscripts/setup-ttyS0"
EOF
Diese verweisen auf die folgenden chat
-Skripte. Erstens /etc/chatscripts/setup-LT-modem
.
ABORT ERROR
'' ATZ
OK 'ATW2X2 S7=70 S11=55'
OK AT
Zweitens: /etc/chatscripts/setup-ttyS0
.
ABORT ERROR
'' ATZ
OK 'ATL1M1Q0V1W2X4&C1&D2 S6=4 S7=70 S11=55 S95=63 S109=1 +FCLASS=0'
OK AT
Der Inhalt dieser Dateien muss selbstverständlich an die jeweilige Hardware angepasst werden.
Optionen können dem pppd
-Dämon auch als Argumente übergeben werden.
In Debian wird pppd
üblicherweise durch das Kommando pon
gestartet. Das erste Argument von pon
bezeichnet die Optionen-Datei in /etc/pppp/peers/
, welche dann von pppd
gelesen wird. [9] Hier werden Optionen gesetzt, die für einen bestimmten Verbindungspartner gedacht sind, zum Beispiel einen Internet-Service-Provider (ISP).
Nehmen wir an, man pendele zwischen Amsterdam und Den Haag. In jeder Stadt ist der Internetzugang über die beiden ISP-Anbieter Planet und KPN möglich. Zunächst wird ein eine Optionen-Datei für jeden ISP angelegt.
# cat > /etc/ppp/peers/KPN <remotename KPN
noauth
user kpn
noipdefault
ipparam KPN
EOF
# cat > /etc/ppp/peers/Planet <remotename Planet
auth
user user3579@planet.nl
noipdefault
mru 1000
mtu 1000
ipparam Planet
EOF
Diese Dateien setzen die Optionen, die sich zwischen den beiden ISPs unterscheiden. Optionen, die für beide ISPs gleich sind, können in /etc/ppp/options
oder in einer der Dateien für die Schnittstellenkonfiguration abgelegt werden.
Nun werden Dateien für jeden ISP angelegt. In unserem Beispiel liegt der einzige Unterschied zwischen den beiden Anbietern in den verschiedenen Chat-Skripten. (Das Chatscript unterscheiden sich, weil die lokale Telefonnummer für den Internet-Zugriff verschiedenist.)
# cat > /etc/ppp/peers/KPN-Amsterdam <connect "/usr/sbin/chat -v -f /etc/chatscripts/KPN-Amsterdam"
file /etc/ppp/peers/KPN
EOF
# cat > /etc/ppp/peers/KPN-DenHaag <connect "/usr/sbin/chat -v -f /etc/chatscripts/KPN-DenHaag"
file /etc/ppp/peers/KPN
EOF
# cat > /etc/ppp/peers/Planet-Amsterdam <connect "/usr/sbin/chat -v -f /etc/chatscripts/Planet-Amsterdam"
file /etc/ppp/peers/Planet
EOF
# cat > /etc/ppp/peers/Planet-DenHaag <connect "/usr/sbin/chat -v -f /etc/chatscripts/Planet-DenHaag"
file /etc/ppp/peers/Planet
EOF
Der Aufruf von file fügt eine der oben angegebenen Optionen-Dateien ein. Die connect-Anweisung übergibt den Befehl, den pppd
benutzt, um die Verbindung aufzubauen. Normalerweise wird hierfür chat
verwendet, wobei das chat-Skript an den ISP angepaßt werden muss. Hier sind die chat-Skripte für Den Haag; das chat-Skript für Amsterdam ist bis auf die Telefonnummer gleich.
# cat > /etc/chatscripts/KPN-DenHaag <ABORT BUSY
ABORT 'NO CARRIER'
ABORT VOICE
ABORT 'NO DIALTONE'
ABORT 'NO DIAL TONE'
ABORT 'NO ANSWER'
ABORT ERROR
OK-AT-OK ATDT 0676012321
CONNECT \d\c
EOF
# cat > /etc/chatscripts/Planet-DenHaag <ABORT BUSY
ABORT 'NO CARRIER'
ABORT VOICE
ABORT 'NO DIALTONE'
ABORT 'NO DIAL TONE'
ABORT 'NO ANSWER'
ABORT ERROR
OK-AT-OK ATDT 0676002505
CONNECT \d\c
EOF
Um sich mit den ISPs verbinden zu können, benötigt man einen Benutzernamen und das zugehörige Password, die pppd
der Gegenstelle auf Anfrage zuschickt. Diese Informationen werden entweder in /etc/ppp/pap-secrets
(falls das PAP-Protokolk benutzt wird) oder in /etc/ppp/chap-secrets
(falls das CHAP-Protokol benutzt wird) gespeichert. Obwohl CHAP sicherer ist, ist PAP noch weit verbreitet. Da diese Dateien geheime Daten enthalten, sollten die Gruppen und die Welt keine Schreib- und Leserechte besitzen. Das FOrmat dieser Dateien wird in pppd(8)
erklärt. Das Geheimnis "secret" (drittes Feld) wird durch Suche nach dem Benutzernamen (erstes Feld) oder dem Servernamen (zweites Feld) gefunden. Wenn eine Verbindung zu einem ISP aufgenommen wird, ist der Servername in der Regel nciht bekannt, weswegen der Benutzername verwendet wird; dies geschieht in den userZeilen in peers/KPN
und peers/Planet
(siehe oben).
# client name server name secret
kpn * kpn
user3579@planet.nl * myfavoritepet
Siehe /usr/share/doc/ppp/README.Debian.gz
für weitere Informationen.
10.2.4.2 Konfiguration von pppd
mit pppconfig
pppd
ist mit pppconfig
einfach zu konfigurieren; es befindet sich im gleichnamigen Paket. pppconfig
fragt den Benutzer menügesteuert nach den wichtigen Daten und richtet die nötigen Dateien ein.
10.2.4.3 Konfiguration der PPP-Schnittstelle mit wvdial
Ein anderer Ansatz zur Benutzung des pppd
liegt in wvdial
, das im sich im Paket wvdial
findet. Statt pppd
mit chat
aufzurufen, um zu wählen und die Verbindung auszuhandeln, kann wvdial dies tun und daraufhin selbständig pppd
starten. Allein mit der Telefonnummer, dem Benutzernamen und dem Passwort kann wvdial
in den meisten Fällen erfolgreich die Verbindung aufbauen.
10.3 Namensgebung
10.3.1 Hostname
Der Kernel verwaltet einen Namen des Systems, den hostname. Das Initialisierungs-Skript /etc/init.d/hostname.sh
setzt den System-Hostnamen, der sich in der Datei /etc/hostname
befindet, während des Bootens mit dem Befehl hostname
. Diese Datei solle nur den System-Hostnamen beinhalten, keinen voll qualifizierten Domänennamen (FQDN).
Um den derzeitigen Hostnamen auszugeben, wird das Kommando hostname
ohne Argumente aufgerufen.
10.3.2 Mailname
Der mailname eines Rechners ist der Name, den er im Zusammenhang mit E-Mail-Zustellung verwendet. Die Datein /etc/mailname
enthält diesen Namen, der von einem Zeilenwechsel (newline) gefolgt sein muss. Der Mailname ist normalerweise ein voll qualifizierter Domänenname, der sich auch zu einer der IP-Adressen des Rechners auflösen lässt. Siehe mailname(5)
.
Was der Empfänger von E-Mail in der Von:-Zeile der E-Mails von einem Debian-Rechner sieht, hängt von der Konfiguration der E-Mail-Programme (MUA) und dem Mail-Transfer-System (MTA) ab. Angenommen ein lokaler Benutzer namens foo senset eine E-Mail von einem Rechner mit dem Mailnamen meinrechner.dom. Die Von: Kopfzeile der ausgehenden E-Mail wird folgendermaßen aussehen:
-
Von: foo@meinrechner.dom" Falls der MUA keine Von: Kopfzeile gesetzt hat;
-
Von: bar@meinrechner.dom" Falls der MUA "Von: bar" setzt;
-
"From: bar@bogus.dom" Falls der MUA "Von: bar@bogus.dom" setzt.
Selbst wen der MUA eine Von:-Kopfzeile gesetzt hat, kann der MTA eine Zeile "Sender:foo@herman.dom" hinzufügen, um die wahre Herkunft anzuzeigen.
Da jeder beteiligte MTA die Adresse ändern kann, kann sie beim Empfänger völlig anders aussehen.
10.4 Domain Name Service (DNS)
Rechner werden durch ihren Domänennamen ebenso spezifiziert wie durch ihre IP-Adresse. DNS ist ein Client-Server-System, in dem Namensauflösung von Nameservern angeboten wird, die Domänennamen mit IP-Adressen verknüpft (neben weiteren Eigenschaften der Rechner). Die GNU C-Bibliothek resolver(3)
kann ebenfalls IP-Adressen in Dateien nachschlagen oder den Network Information Service (NIS) konsultieren.
Manche Programme (z.B. GNOME) erwarten, dass der kanonische voll qualifizierte Domainname (FQDN) eines Hosts zu einer IP-Adresse aufgelöst werden kann. Dies ist unsauber, da der System-Hostname und der Domänenname zwei sehr verschiedene Dinge sind. Um diese Software zu unterstützen ist es nötig dafür zu sorgen, dass der System-Hostname aufgelöst werden kann. Meist geschieht dies, indem eine Zeile in der Datei hinzugefügt wird, die einige IP-Adressen und den System-Hostnamen enthält. Hat das System eine permanente IP-Adresse, dann wird diese dort eingetragen, in allen anderen Fällen wird kann Adresse 127.0.1.1 verwendet werden.
127.0.0.1 localhost
127.0.1.1 uranus
Ob der System-Hostname zu einer IP-Adresse mit einem vollen qualifizierten Domänennamen aufgelöst werden kann, wird der Befehl hostname --fqdn benutzt.
10.4.1 Resolver
Die Aufgabe des Resolvers (Auflösers) ist die Umsetzung von Domänennamen in IP-Adressen. Der meistgenutzte Resolver sind die Resolver-Funktionen (resolver(3)
) in der GNU C-Bibliothek. Ein anderer Resolver ist FireDNS, der sich im Paket libfiredns
befindet. Es gibt noch andere.
Die Konfigurationsdatei /etc/nsswitch.conf
enthält eine hosts-Zeile, welche bestimmt auf welche Art und Weise der GNU-libC-Resolver Namen auflöst. Diese Zeile listet die Services auf, die zur Namensauflösung verwendet werden: z.B., dns, files, nis, nisplus. Siehe nsswitch.conf(5)
. Wenn dort der Service files genutzt wird, bestimmt die Konfigurationsdatei /etc/hosts
das Verhalten des Resolvers. Siehe hosts(5)
.
Alle genannten Dateien sind statisch und können mit einem beliebigen Editor verändert werden.
Wird der Service dns verwendet, bestimmt die Konfigurationsdatei /etc/resolv.conf
das Verhalten des Resolvers. Siehe resolv.conf(5)
- Eine der wichtigen Funktionen von resolv.conf
ist die Bereitstellung der Adressen der Nameserver, die zur Namensauflösung kontaktiert werden. Diese Liste hängt vom Netzwerk ab und kann sich zur Laufzeit ändern. Programme wie pppd
oder dhclient
können resolv.conf
manipulieren und Zeilen hinzufügen oder entfernen, aber dies funktioniert nicht immer zuverlässig und konfliktfrei, Das Paket resolvconf
löst dieses Problem durch Schaffung einer standardisierten Methode zur Aktualisierung dieser Datei. Siehe Verwaltung von Nameserver-Informationen – resolvconf
, Abschnitt 10.4.2.
10.4.2 Verwaltung von Nameserver-Informationen – resolvconf
Das Paket resolvconf
schafft einen Rahmen für die dynamische Verwaltung von Informationen über erreichbare Nameserver. Es löst das alte Problem der Organisation dynamischer Liste von Nameservern für den Resolver oder DNS-Caches. Resolvconf ist ein Vermittler zwischen den Programmen, die Netzwerkschnittstellen steuern oder Nameserver-Informationen bereitstellen und Programmen, die Nameserver-Dienste erfragen.
resolvconf
funktioniert ohne manuelle Konfiguration. Das Paket ist jedoch relativ neu und benötigt vielleicht Anpassungen, bis es richtig läuft. Falls Pakete angepasst wurden, die ihrerseits /etc/resolv.conf
verändern, so müssen diese Anpassungen allerdings rückgängig gemacht werden. Siehe /usr/share/doc/resolvconf/README.gz
für weiter Details.
10.4.3 Zwischenspeicherung von Hostnamen – nscd
, dnsmasq
, pdnsd
, bind9
Wenn der Nameserver langsam ist, kann nscd
verwendet werden, um die Ergebnisse der Abfragen des libc6
-Resolvers zwischenzuspeichern (Caching).
Wenn auch die Abfragen anderer Rechner im lokalen Netzwerk zwischengespeichert werden sollen, kann ein besonderer Nameserver (Caching Forwarding Nameserver) wie dnsmasq
oder pdnsd
genutzt werden.
Auch named
aus dem Paket bind9
kann als Caching Forwarding Nameserver eingesetzt werden. Dies ist ein umfangreiches Programm, dass nur verwendet werden sollte, wenn dessen weitreichenden Möglichkeiten auch tatsächlich genutzt werden, ansonsten sind die vorher genannten Pakete völlig ausreichend.
Alle diese Pakete arbeiten gut mit resolvconf
zusammen.
10.4.4 Bereitstellung eines Domain Name Service - bind
Falls offizieller Name Service in einer Domäne angeboten werden soll, sollte ein ausgewachsener Nameserver wie named
aus dem bind9
-Paket verwendet werden.
Zusammen mit bind9
sollte auch dnsutils
installiert werden. Auch folgende Pakete enthalten nützliche Werkzeuge: bind9-host
; dns-browse
; dnscvsutil
; nslint
. Die Dokumentation befindet sich in einem eigenen Paket: bind9-doc
. Die Entwicklerpakete befinden sich in diesen Paketen: libbind-dev
; libnet-dns-perl
. Falls Schnittstellen mit DHCP konfiguriert werden sollen, sind diese Pakete nützlich: dhcp-dns
.
Die grundlegende Einrichtung geschieht bei Installation von bind9
oder dem Aufruf von dpkg-reconfigure
mit dem Paketnamen als Argument. Die Konfiguration wird in named.conf
vorgenommen. In Debian befindet sich diese Datei in /etc/bind/
und wird hauptsächlich genutzt, um die elementaren DSN-Zonen festzulegen; sie fügt mit include zwei weitere Dateien ein: named.conf.local
definiert lokale Zonen, während named.conf.options
Optionen festlegt. (Letztere wird von resolvconf
verarbeitet, um daraus /var/run/bind/named.options
zu erzeugen, welche sich vom Original darin unterscheidet, dass die forwarders-Spezifikation eine Liste der derzeit erreichbaren nicht-lokalen Nameserver beinhaltet. Um dieses dann zu nutzen, muss die include-Zeile in named.conf
angepasst werden, so dass /var/run/bind/named.options
eingebunden wird. Siehe Verwaltung von Nameserver-Informationen – resolvconf
, Abschnitt 10.4.2
Datenbankdateien der Form named.conf*
ohne vollen Pfadnamen werden in /var/cache/bind/
gespeichert. An dieser Stelle sollten die Dateien abgelegt werden, die named
erzeugt. zum Beispiel Datenbakdateien für Zonen, für die der Dämon Sekundant istXXX. Statische Datenbankdateien in /etc/bind/
müssen in named.conf
mit vollem Pfadnamen angegeben werden. Siehe /usr/share/doc/bind9/README.Debian.gz
für Details.
10.5 Konfiguration der Netzwerkschnittstelle mit DHCP
Die Low-Level-Konfiguration der Netzwerkschnittstelle kann mit dem Dynamic Configuration Protocol (DHCP) automatisiert werden. Auf diese Weise können Firewalls und Router oder Breitband-ISP ihre IP-Adressen und andere Parameter verteilen.
Dazu müssen folgende Pakete installiert werden:
-
dhcp3-client
(version 3, Internet Software Consortium) -
dhcpcd
(Yoichi Hariguchi and Sergei Viznyuk) -
pump
(Red Hat)
pump
ist einfach und weit verbreitet. dhcp3-client
ist komplexer, aber dafür umfassender konfigurierbar. [10]
10.6 High-Level-Netzworkkonfiguration in Debian
10.6.1 High-Level-Netzwerkkonfiguration mit ifupdown
Um die Netzwerkkonfiguration in Debian zu vereinfachen existieren die High-Level-Konfigurationswerkzeugeifup
und ifdown
, sowie die /etc/network/interfaces
-Datei. [11] Falls das Paket ifupdown
zur Netzwerkkonfiguration genutzt wird, dann sollten die Low-Level-Befehle nicht benutzt werden. Auch andere High-Level-Tools, wie whereami
, divine
, intuitively
, etc., die wiederum Low-Level-Tools aufrufen, sollten gemieden werden. Das Paket ifupdown
wurde entworfen, um allein für die Netzwerkschnittstellen zuständig zu sein.
Um dies zu unterstützen, muss Folgendes getan werden:
# ifdown eth0
# editor /etc/network/interfaces # sollte angepasst werden
# ifup eth0
Weitere Informationen finden sich in interfaces(5)
, /usr/share/doc/ifupdown/examples/network-interfaces.gz
und ifup(8)
.
10.6.1.1 Konfiguration einer Schnittstelle mit einer statischen IP-Adresse
Nehmen wir an eine Ethernet-Schnittstelle soll die feste IP-Adresse 192.168.0.111 zugewiesen bekommen. Diese Adresse beginnt mit 192.168.0, weswegen es sich in einem LAN befinden muss. Das Gateway dieses LANs habe die Adresse 192.168.0.1. Der Datei /etc/network/interfaces
muss also diese Zeile hinzugefügt werden:
iface eth0 inet static
address 192.168.0.111
netmask 255.255.255.0
gateway 192.168.0.1
In "up"- und "down"-Zeilen können andere Aspekte dieser Schnittstelle eingestellt oder Aktionen definiert werden, die beim Auf- oder Abschalten der Schnittstelle durchgeführt werden.
iface eth0 inet static
address 192.168.0.111
netmask 255.255.255.0
gateway 192.168.0.1
up route add -net 10.0.0.0 netmask 255.0.0.0 gw 192.168.0.2 dev $IFACE
down route del -net 10.0.0.0 netmask 255.0.0.0 gw 192.168.0.2 dev $IFACE
up echo Interface $IFACE going up | /usr/bin/logger -t ifup
down echo Interface $IFACE Going down | /usr/bin/logger -t ifdown
Desweiteren können auszuführende Skripte in /etc/network/if-up.d
und /etc/network/if-down.d
plaziert werden. In diesen Skripten können auch weitergehende Optionen programmiert werden. Siehe interfaces(5)
für Details. Zum Beispiel beinhaltet das Paket resolvconf
Skripte, mit denen DNS-Informationen zu /etc/resolv.conf
hinzugefügt werden können, während die Schnittstelle aktiv ist.
iface eth0 inet static
address 192.168.0.111
netmask 255.255.255.0
gateway 192.168.0.1
dns-search somedomain.org
dns-nameservers 195.238.2.21 195.238.2.22
Der Parameter somedomain.org der dns-search-Option entspricht dem Parameterder search -Option in resolv.conf(5)
. Die Parameter 195.238.2.21 und 195.238.2.22 der dns-nameservers-Parameter entspricht den nameserver-Parametern. Andere Optionen sind dns-domain und dns-sortlist. Siehe Verwaltung von Nameserver-Informationen – resolvconf
, Abschnitt 10.4.2.
10.6.1.2 Konfiguration einer Schnittstelle mit DHCP
Um eine Schnittstelle mit DHCP zu konfigurieren, muss in /etc/network/interfaces
eine Zeile wie die folgende hinzugefügt werden:
iface eth0 inet dhcp
Damit dies funktioniert, muss einer der DHCP-Clients installiert sein (siehe Konfiguration der Netzwerkschnittstelle mit DHCP, Abschnitt 10.5).
10.6.1.3 konfiguration einer Wi-Fi-Schnittstelle
Das wireless-tools
-Paket beinhaltet ein Skript /etc/network/if-pre-up.d/wireless-tools
welches Wi-Fi (802.11a/b/g) bevor die Schnittstelle aufgeschaltet wird. Die Konfiguration erledigt das Programm iwconfig
; siehe iwconfig(8)
. Für jeden iwconfig
-Parameter kann eine Option in /etc/network/interfaces
wie jene schon dort vorhandenen hinzugefügt werden, wobei die drahtlosen Varianten durch "wireless-" eingeleitet werden. Um zum Beispiel die ESSID von eth0 auf myessid und den Schlüssel auf 123456789e zu setzen, bevor eth0 mit DHCP aufgeschaltet wird, muss /etc/network/interfaces
folgendermaßen erweitert werden.
iface eth0 inet dhcp
wireless-essid myessid
wireless-key 123456789e
Diese Methode zum Setzen der ESSID sollte nicht verwendet werden, wenn waproamd
diese Schnittstelle überwacht. Wenn ifup
gestartet wird, hat waproamd
die ESSID und den Schlüssel schon gesetzt. Siehe Schalten der Netzwerkkonfiguration - waproamd
, Abschnitt 10.8.4.
10.6.1.4 Konfiguration einer PPP-Schnittstelle
Die Programme ifup
und ifdown
verwenden pon
und poff
um PPP-Schnittstellen zu verwalten; siehe Konfiguration der PPP-Schnittstelle, Abschnitt 10.2.4.
Angenommen eine PPP-Verbindung zu myisp soll aufgebaut werden. Die Datei /etc/network/interfaces
wird die folgende Zeile hinzugefügt:
iface ppp0 inet ppp
provider myisp
Diese Zeile sorgt dafür, dass ifup ppp0
tatsächlich
pon myisp
aufruft. Leider ist es derzeit nicht möglich weitere Optionen an pppd
durch diese Zeile in /etc/network/interfaces
weiterzureichen. [12]
Mit dem Paket ifupdown
kann keine Hilfskonfiguration der PPP-Schnittstelle vorgenommen werden. Da pon
beendet wird, bevor pppd
die Verbindung etabliert hat, startet ifup
die up-Skripte schon bevor die PPP-Schnittstelle bereit ist. Bis zu diesem Fehler[13] ist repariert, muss die Hilfskonfiguration in /etc/ppp/ip-up
oder /etc/ppp/ip-up.d
erledigt werden.
10.6.1.5 Konfiguration der PPPoE-Schnittstelle
Manche Breitband-Internet-Anbieter (ISP) verwenden PPP, um Verbindungen herzustellen, auch wenn die Rechner über Ethernet oder ATM an das Netzwerk angeschlossen sind. Dies wird durch PPP über Ethernet (PPPoE) erreicht, eine Technik, die den PPP-Datenstrom in Ethernet-Frames kapselt. Angenommen, der ISP heiße meinisp Zunächst werden PPP und PPPoE für den Zugang über meinisp konfiguriert. Das Einfachste ist es, das Paket pppoeconf
zu installieren und dann auf der Konsole pppoeconf
zu starten. Dann muss in /etc/network/interfaces
folgende Zeile hinzugefügt werden:
iface eth0 inet ppp
provider myisp
Manchmal gibt es Probleme mit der Maximum Transfer Unit (MTU), wenn PPPoE über Digital Subscriber Line (DSL) verwendet wird. Siehe DSL-HOWTO
für Details.
Wenn ein Breitband-Modem einen Router beinhaltet, dann wird das Modem/der Router die PPPoE-Verbindung verhandeln und im LAN wie ein gewöhnliches Ethernet-Gateway zum Internet erscheinen.
10.6.1.6 Konfiguration verschiedener Ethernet-Schnittstellen für ein Gateway
Angenommen eth0
wird mit einer von DHCP vermittelten IP-Adresse an das Internet angeschlossen und eth1
ist mit der statischen IP-Adresse 192.168.1.1 mit einem LAN verbunden. Die Datei /etc/network/interfaces
wird um folgende Zeilen erweitert:
iface eth0 inet dhcp
iface eth1 inet static
address 192.168.1.1
netmask 255.255.255.0
Wenn an diesem Rechner NAT (siehe Aufbau eines Gateway-Routers, Abschnitt 10.12) aktiviert wird, kann dieser Rechner seine Internet-Verbundung mit allen anderen Rechnern des LAN teilen.
10.6.1.7 Konfiguration virtueller Schnittstellen
Mittels virtueller Schnittstellen kann eine einzelne Ethernet-Karte so eingestellt werden, dass sie den Zugang zu verschiedenen IP-Subnetzwerken bietet. Angenommen ein Rechner ist an das Netzwerk 192.168.0.x/24 angeschlossen. Dieser Rechner soll sich mit der installierten Ethernet-Karte und einer vorhandenen IP-Adresse, die per DHCP bezogen wurde, mit dem Internet verbinden. In diesem Fall muss /etc/network/interfaces
folgende Zeilen beinhalten:
iface eth0 inet static
address 192.168.0.1
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
iface eth0:0 inet dhcp
Die eth0:0-Schnittstelle ist in diesem Fall die virtuelle Schnittstelle. Wenn sie angesprochen wird, so wird auch die übergeordnete Schnittstelle eth0 aufgeschaltet.
10.6.2 High-Level-Konfiguration mit logischen Schnittstellen von ifupdown
Im Folgenden ist es wichtig den Unterschied zwischen physikalischen Schnittstellen und logischen Schnittstellen zu treffen. [14] Eine physikalische Schnittstelle wird "die Schnittstelle" genannt und vom Kernel eth0, eth1, ppp0, usw. genannt. Eine logische Schnittstelle ist ein Satz von Werten der den variablen Parametern einer physikalischen Schnittstelle zugeordnet werden kann. Dies ist kann veranschaulicht werden, indem man statt zu sagen "dies ist die logische Schnittstelle X", klarer formuliert: "diese ist die Schnittstelle mit dem Schnittstellen-Profil X.
Die iface-Definitionen in /etc/network/interfaces
sind tatsächlich Definitionen logischer und nicht physikalischer Schnittstellen. [15] Wenn die Schnittstellen nicht erneut konfiguriert werden sollen, dass kann diese Tatsache einfach ignoriert werden, da der physikalischen Schnittstelle foo per VOreinstellung die logische Schnittstelle foo zugeordnet wird.
Angenommen, der Computer sei ein Laptop, der unterwegs verwendet wird. Wenn er mit einem Firmennetzwerk oder am heimischen LAN angeschlossen wird, muss eth0 entsprechend angepasst konfiguriert werden.
Zunächst werden dazu zwei logische Schnittstellen heim und arbeit angelegt (statt wie vorher eth0), die die Schnittstellen-Konfigurationen für die beiden Arbeitsplätze beinhalten sollen.
iface home inet static
address 192.168.0.123
netmask 255.255.255.0
gateway 192.168.0.1
iface work inet static
address 81.201.3.123
netmask 255.255.0.0
gateway 81.201.1.1
Dann kann die physikalische Schnittstelle eth0 von zu Hause mit der folgenden Kommandozeile aufgeschaltet werden:
# ifup eth0=home
Um eth0 auf das Firmennetzwerk umzuschalten, reicht:
#ifdown eth0
# ifup eth0=work
Wenn die Datei interfaces
wie oben geschildert aussieht, ist es nicht mehr möglich, die Schnittstelle eth0 durch ein einfaches ifup eth0 zu starten. Denn ifup
verwendet den Namen der physikalische Schnittstelle als Namen für die logische Schnittstelle und für eth0 ist keine logische Schnittstelle definiert.
10.6.3 Automatische Netzwerkkonfiguration mit ifupdown
Schnittstellen-Namen können andere Namen abgebildet werden ("mapping"), sobald ifup
läuft. Auf welche Art und Weise diese Abbildung geschieht hängt von den Umständen ab. ifup
kann eine physikalische Schnittstelle als eine bestimmte logische Schnittstelle aus einer Anzahl vorgefertiger Alternativen auswählen.
Die Abbildung logischer Schnittstellen läuft folgendermaßen ab:
-
Wenn kein logisches Laufwerk auf der
ifup
-Kommandozeile übergeben wurde, dann wird der Name der physikalischen Schnittstelle auch für die erste logische Schnittstelle verwendet. -
Wenn der Name der logischen Schnittstelle einem glob-Muster in einer mapping-Zeile entspricht, dann wird diese map verwendet, um einen neuen logischen Schnittstellennamen zu erzeugen. Dies gilt für jede einzelne Umbelegung.
-
Wenn der Name der letzten logischen Schnittstelle als Bezeichnung in
/etc/network/interfaces
auftritt, dann wird die physikalische Schnittstelle als diese logische Schnittstelle aufgeschaltet. Ansonsten wirdifup
folgende Nachricht ausgeben und enden: "Ignoring unknown interface" (unbekannte Schnittstelle wird ignoriert)
Die Syntax der mapping-Zeile ist:
mapping glob-pattern
script script-name
[map script input]
Das Skript, welches in der mapping-Zeile genannt wird, muss immer den Namen der physikalischen Schnittstelle als Argument bekommen und über die Standardeingabe die Inhalte aller folgenden "map"-Zeilen (ohne das Wort "map" selbst. Das Skript schreibt das Ergebnis der Umbelegung auf die Standardausgabe und wird dann beendet.
Zum Beispiel wird der folgende "mapping"-Absatz dafür sorgen, dass ifup
die Schnittstelle eth0 als die logische Schnittstelle aufschalten wird.
mapping eth0
script /usr/local/sbin/echo-home
wobei /usr/local/sbin/echo-home
so aussieht:
#!/bin/sh
echo home
Da die Umbelegung mit einem Skript erledigt wird, kann die Wahl der logischen Schnittstelle auch anhand irgendeines Tests erfolgen. In Wahl logischer Schnittstellen mit guessnet
, Abschnitt 10.6.3.1 finden sich Beispiele.
10.6.3.1 Wahl logischer Schnittstellen mit guessnet
Das Paket guessnet
muss installiert werden und dann folgende Zeilen in /etc/network/interfaces
eingefügt werden:
mapping eth0
script guessnet-ifupdown
map home
map work
Wenn nun ifup eth0
ausgeführt wird, wird guessnet
prüfen, ob eth0 als home oder work aufgeschaltet werden soll. Um diese Entscheidung zu treffen, wird in der Definition der logischen Schnittstelle gespeicherte Information ausgewertet.
10.6.4 Automatische Netzwerkkonfiguration mit laptop-net
Das Paket laptop-net
wählt einen anderen Ansatz zur automagischen Netzwerkkonfiguration. Laptop-net verwendet nicht die logischen Schnittstellen des Pakets ifupdown
sondern hat sein eigenes System von Konfigurations "Schemata und Systemprofilen". Laptop-net verwendet aber dennoch ifup
und ifdown
zur Konfiguration der physikalischen Schnittstellen. Weitere Informationen finden sich in der guten Dokumentation im Paket laptop-net-doc
.
10.6.5 Automatische Netzwerkkonfiguration mit network-manager
Das Programm network-manager
wird derzeit von Fedora-Entwicklern gepflegt und ist auch für Ubuntu erhältlich. Es könnte auch irgendwann in Debian auftauchen und ifupdown und zugehörige Werkzeuge überflüssig machen.
10.7 Umgang mit inkonsistenten Schnittstellennamen seitens des Kernels
Die Namen eth0, eth1, etc. werden vom Kernel in der Reihenfolge der Erstellung vergeben. Während die Anschlüsse, die zur Boot-Zeit angeschlossen daher immer die gleichen Namen erhalten, gilt dies nicht für Geräte, die im Betrieb angeschlossen werden ("hot-plugging"). Diese können in jeder beliebigen Reihenfolge erkannt werden und erhalten so unterschiedliche Namen.
Daher funktioniert die Zuordnung mittels logischer Schnittstellen in /etc/network/interfaces
mit den Namen eth0, eth1, etc. und der Standard-Umbelegung bei Systemen mit Netzwerk-hot-plugging nicht zuverlässig. Instead you must give distinct names to the logical interfaces and use one of the following two methods to restrict which logical interfaces can be assigned to which adapters.
Eine Möglichkeit ist das Werkzeug nameif
(im Paket net-tools
) oder auch das flexiblere ifrename
(im Paket ifrename
), das den Kernel veranlasst Namen anhand von Eigenschaften der Anschlüsse zu vergeben. Sobald das Namensschema aktiviert ist, kann aus dem Namen der physikalischen Schnittstelle gefolgert werden, welcher Anschluss tatsächlich verwendet wird.
Eine andere Möglichkeit ist der Umbelegungsmechanismus von ifup
, der auf ähnliche Weise für eine physikalische Schnittstelle eine logische Schnittstelle wählt anhand der Eigenschaften der Netzwerkkarte.
Angenommen zwei Netzwerkkarten seien für die Netzwerke net1 und net2 zuständig. Das Verzeichnis /usr/share/doc/ifupdown/examples/
enthält ein Mapping-Skript, dass verwendet werden kann, um eine logische Schnittstelle basierend auf der Media Access Controller-Adresse (MAC-Adresse) der jeweiligen Netzwerkkarte auszuwählen. Zunächst wird das Skript in einem angemessenen Verzeichnis installiert.
install -m770 /usr/share/doc/ifupdown/examples/get-mac-address.sh # \
/usr/local/sbin/
Daraufhin werden /etc/network/interfaces
folgende Zeilen hinzugefügt:
mapping eth0
script /usr/local/sbin/get-mac-address.sh
map 02:23:45:3C:45:3C net1
map 00:A3:03:63:26:93 net2
Siehe Multi-stage mapping, Abschnitt 10.9 für komplexere Beispiele.
Meist wird bei diesen Methoden zur Identifikation der Netzwerkkarte die MAC-Adresse verwendet.
10.8 Umschalten der Netzwerkkonfiguration
Es wurde gezeigt, die Schnittstellen konfiguriert und re-konfiguriert werden. Dies muss dann und wann geschehen.
Normalerweise wird das Netzwerk während des Bootens konfiguriert, im Init-Skript /etc/rcS.d/S40networking
, und dies wird selten geändert. Services, die vom Netzwerk abhängig sind, müssen nach dem genannten Init-Skript gestartet werden. Bei Neustart oder Abschalten des Systems müssen die Init-Skripte in umgekehrter Reihenfolge ausgeführt werden.
Es liegt allerdings im Trend Hardware dynamisch zu konfigurieren. Zuerst wurden in GNU/Linux hot-plug-fähige PCMCIA-Karten unterstützt; später wurde der hotplug-Mechanismus hinzugefügt, so dass viel mehr verschiedene Peripherie während des Betriebs ein- und ausgeklinkt werden kann. Dies gilt auch für Netzwerk-Hardware. Note that services that depend on hardware that is hot swapped must only be started after the hardware is inserted and must be stopped when the hardware is removed. Das bedeutet, dass solche Services der Kontrolle des System-V-Init-Systems entzogen werden müssen, damit sie von ifupdown
gesteuert werden können.
Angenommen, der vom Init-Skript /etc/init.d/foo
gesteuerte Service foo sei von einer dynamisch rekonfigurierten Netzwerkschnittstelle eth0 ab.
-
Zuerst muss foo der Kontrolle des Init-Systems entzogen werden. Wenn das Paket
sysv-rc
-Init-System installiert wurde, geschieht dies folgendermaßen: [16]rm /etc/rc[2345].d/S??foo
-
Dann wird foo dem
ifupdown
-Paket unterstellt, indem up- und down-Optionen zu der eth0-Zeile in/etc/network/interfaces
zugefügt werden, die das foo-Init-Skript aufruft.iface eth0 inet dhcp
up /etc/init.d/foo start
down /etc/init.d/foo stop
10.8.1 Umschalten der Netzwerkkonfiguration zur Boot-Zeit
Während des Bootens startet /etc/rcS.d/S40networking
den Befehl ifup -a
. Dieses schaltet alle physikalischen Schnittstellen auf, die in auto-Zeilen in /etc/network/interfaces
aufgelistet sind.
Es wird empfohlen die Netzwerkkonfiguration mit dynamischen Methoden vorzunehmen. Sobald die Mechanismen zur Unterstützung sich dynamisch ändernder Hardware funktioniert, kann auch statische Hardware wie dynamische behandelt werden. Das Booten ist dann nichts anderes als ein weiteres Anschließen mit Hot-plug. (Siehe Schalten der Netzwerkkonfiguraion - hotplug
, Abschnitt 10.8.2.)
Die loopback-Schnittstelle lo soll jedoch auf jeden Fall beim Booten aktiviert werden. Daher beinhaltet /etc/network/interfaces
die folgenden Zeilen:
auto lo
iface lo inet loopback
Es können die Namen weiterer physikalischer Schnittstellen in auto-Zeilen angelegt werden, die ebenfalls beim Booten aufgeschaltet werden. Es sollten niemals PCMCIA-Schnittstellen mit auto eingetragen werden. Der PCMCIA cardmgr
wird später in der Bootsequenz gestartet, also später als /etc/rcS.d/S40networking
XXX.
10.8.2 Schalten der Netzwerkkonfiguraion - hotplug
Hot-Plug-Unterstützung bietet das Paket hotplug
.
Netzwerk-Hardware kann zu folgenden Gelegenheiten eingebunden werden: zur Bootzeit; nachdem eine Netzwerkkarte (z.B. PCMCIA) eingesteckt wurde oder wenn ein Hilfswerkzeug wie discover
gestartet wird und die nötigen Treiber geladen werden.
Wenn der Kernel neue Hardware erkennt, wird der Treiber für die Hardware geladen und dann startet hotplug
um diese Hardware zu konfigurieren. Wenn die Hardware wieder entfernt wird, startet hotplug
erneut, allerdings mit anderen Einstellungen der Umgebungsvariablen. In Debian werden die Skripte in /etc/hotplug/
und /etc/hotplug.d/
von hotplug
aufgerufen. Siehe hotplug(8)
für Details.
Neu eingesteckte Netzwerk-Hardware wird vom Skript /etc/hotplug/net.agent
konfiguriert. [17] Angenommen eine PCMCIA-Netzwerkkarte wurde eingesteckt und die Schnittstelle eth0 bereits bereitgestellt. /etc/hotplug/net.agent
tut Folgendes:[18] :
ifup eth0=hotplug
Wenn keine logische Schnittstellen-Definition und kein Mapping mit dem Namen hotplug zu /etc/network/interfaces
hinzugefügt wurde, dann tut dieser Befehl gar nichts. Damit dieses Kommando eth0 konfigurieren kann, muss folgende Zeile in /etc/network/interfaces
hinzugefügt werden:
mapping hotplug
script echo
Wie in High-Level-Konfiguration mit logischen Schnittstellen von ifupdown
, Abschnitt 10.6.2 erklärt, wird dies das obige Kommando zu Folgendem ummünzen:
ifup eth0=eth0
Eine solche mapping-Zeile sollte keinesfalls eingefügt werden, wenn ifplugd
oder waproamd
von Hotplug gestartet werden.
Wenn nur eth0 und sonst keine anderen Schnittstellen von Hotplug aufgeschaltet werden sollen, dann kann grep
statt echo
verwendet werden:
mapping hotplug
script grep
map eth0
Siehe Automatische Netzwerkkonfiguration mit ifupdown
, Abschnitt 10.6.3 und /usr/share/doc/hotplug/README.Debian
für weitere Tipps.
10.8.3 Schalten der Netzwerkkonfiguration - ifplugd
Der ifplugd
-Dämon schaltet eine Schnittstelle auf oder ab, wenn die zugehörige Hardware an- oder abgestöpselt wird. Das Programm kann ein aktives Netzwerkkabel an der Ethernet-Schnittstelle oder einen Access-Punkt erkennen, der zu einem Wi-Fi-Schnittstelle gehört (jedoch kann waproamd
hier wahrscheinlich bessere Dienst leisten). Wenn ifplugs
erkennt, dass sich der Zustand der Schnittstelle geändert hat, dann wird ein Skript gestartet, dass ifup
oder ifdown
aufruft.
10.8.4 Schalten der Netzwerkkonfiguration - waproamd
Der waproamd
-Dämon ähnelt ifplugs
, nur dass er für Wi-Fi-Karten gedacht ist. Er sucht aktiv nach Access-Punkten, mit denen sich die Wi-FI-Hardware verbinden kann. Wenn eine möglicher Verbindungsaufbau erkannt wird, startet waproamd
dann ifup
.
Falls waproamd
verwendet wird, sollte die Wi-Fi-Karte nur mit waproamd
konfiguriert werden und nicht mit den wireless-*-Optionen in /etc/network/interfaces
.
10.8.5 Netzwerk-Konfiguration und PCMCIA
Es gibt verschiedene Möglichkeiten zur Konfiguration von PCMCIA-Netzwerkkarten (in 2.4 und 2.6 Kernels).
-
Für 32-bit-PCI (CardBus) PCMCIA-Netzwerkkarten:
-
ifupdown
gesteuert vonhotplug
-
In Woody and Sarge muss
hotplug
s Kontrolle überifupdown
lokal aktiviert werden, indem eine mapping-Zeile zu/etc/network/interfaces
hinzugefügt wird, siehe Schalten der Netzwerkkonfiguraion -hotplug
, Abschnitt 10.8.2.
-
-
-
Für 16-Bit ISA-PCMCIA-Netzwerkkarten:
-
ifupdown
gesteuert vonhotplug
mitpcmcia-cs
, um die Module zu laden.-
Empfohlen
-
In Woody and Sarge muss
pcmcia-cs
's Standard-Verhalten abgeschaltet zur Kontrolle vonifupdown
abgeschaltet werden, indem die Zeile exit 0 an den Anfang von/etc/pcmcia/network
gestellt wird. Zudem musshotplug
s KOntrolle überifupdown
hergestellt werden, indem eine mapping-Zeile zu/etc/network/interfaces
hinzugefügt wird, so wie in Schalten der Netzwerkkonfiguraion -hotplug
, Abschnitt 10.8.2
beschrieben.
-
-
ifupdown
gesteuert vonpcmcia-cs
mit den Voreinstellungen in/etc/pcmcia/network
-
Veraltet, aber immer noch die Voreinstellung in Woody und Sarge
-
-
Low-Level-Werkzeuge, die vom
pcmcia-cs
mittels spezieller Kodes in/etc/pcmicia/network
gesteuert werden.-
Veraltet
-
In Woody und Sarge wird der spezielle Code in der Datei
/etc/pcmcia/network.opts
aktiviert.
-
-
16-Bit-Karten sollten seit Kernel 2.4 die Hotplug-Unterstützung für PCMCIA-Karten nutzen. [19]
PCMCIA-Netzwerk-Karten können im Betrieb an- und abgestöpselt werden. Daher sollten alle Services, die auf ein Netzwerk via PCMCIA-Karte zugreifen, so eingerichtet sein, dass sie gestartet werden, wenn die Karte eingesteckt wird und beendet werden, wenn die Karte entfernt wird. Dies wird üblicherweise erreicht, indem der Service gemeinsam mit ifup gestartet und mit ifdown beendet wird. Manche Benutzer beschränken sich darauf, die Geräte nur bei ausgeschaltetem Rechner an- und abzustecken. Sie stecken die Karte vor dem Booten des Systems und starten die Netzwerk-Services in der Boot-Sequenz. Um zu gewährleisten, dass die Karte vollständig konfiguriert ist, bvor der Service startet, sollte Folgendes getan werden:
-
In
/etc/default/pcmcia
soll CARDMGR_OPTS="-f" gesetzt werden, damitcardmgr
im Vordergrund läuft. -
Dann sollte
/etc/rc?.d/S20pcmcia
in/etc/rc?.d/S12pcmcia
(oder ähnlich) umbenannt werden.
Dies funktioniert nur mit 16-Bit PCMCIA-Karten.
Das Paket pcmcia-cs
wird benötigt, wenn 16 bit PCMCIA-Karten verwendet werden. Der in diesem Paket enthaltene cardmgr
-Dämon ist für die Verwaltung der Sockets verantwortlich und für das Laden der Treiber. Der Dämon soll aber keine Netzwerk-Konfiguration via /etc/pcmcia/network
durchführen.
Damit cardmgr
richtig funktioniert, muss eventuell /etc/pcmcia/config.opts
editiert werden, damit die 16-Bit PCMCIA-Karten die richtigen Ressourcen zugewiesen bekommen. Siehe PCMCIA, Abschnitt 7.2.1 und Linux PCMCIA HOWTO
für weitere Informationen.
10.9 Multi-stage mapping
Angenommen die Netzwerkkarten können per Hotplug angeschlossen werden und die automatische Konfiguration ist aktiviert, so wie in Schalten der Netzwerkkonfiguraion - hotplug
, Abschnitt 10.8.2 beschrieben. Weiterhin angenommen, die logischen Schnittstellen müssten auf "physikalische" Schnittstellen abgebildet werden, je nachdem welche Karte angeschlossen ist (wie beschrieben in Umgang mit inkonsistenten Schnittstellennamen seitens des Kernels, Abschnitt 10.7) und mit welchem Netzwerk Verbindung aufgenommen werden soll (wie beschrieben in Wahl logischer Schnittstellen mit guessnet
, Abschnitt 10.6.3.1). Dies kann mit multi-stage mapping erreicht werden.
Die erste Mapping-Stufe nimmt den hotplug-Gruppennamen und gibt den vom Kernel zugewiesenen Schnittstellennamen aus, wenn die Schnittstelle "warm" angeschlossen wird. Die zweite mapping-Stufe erwartet einen vom Kernel zugewiesenen Schnittstellennamen und gibt einen Anschlussnamen aus. In der dritten mapping-Stufe werden Adapternamen auf logische Schnittstellen abgebildet unter Berücksichtigung der Netzwerkumgebung.
# Allow hotplug to bring up interfaces
mapping hotplug
script echo
# Determine whether interface is wired or Wi-Fi
mapping eth?
script /usr/local/sbin/get-mac-address.sh
map 02:23:45:3C:45:3C wired
map 00:A3:03:63:26:93 wifi
# Detect which wired network is available
mapping wired
script guessnet-ifupdown
map work-wired
map home
# Detect which Wi-Fi network is available
mapping wifi
script ifscout
map starbucks
map work-wireless
iface work-wired inet static
...
10.10 Konfiguration der Netzwerk-Dienste
Zur Konfiguration der Netzwerk-Dienste dienen unter anderem:
-
Der Internet-Super-Server und TCP/IP-Dämon-Wrapper, siehe Zugriffskontrolle auf Daemonen, Abschnitt 9.2.5.
-
/etc/inetd.conf
-
-
ssh
: Für die sichere Shell OpenSSH, siehe SSH, Abschnitt 9.5.-
/etc/ssh/ssh_config
-
/etc/ssh/sshd_config
-
-
exim
: Ein Mail-Transport-Agent, siehe Mailname, Abschnitt 10.3.2.-
/etc/exim/exim.conf
-
/etc/mailname
-
/etc/aliases
-
/etc/email-addresses
-
-
fetchmail
: Ein Dämon, um Email von einem POP3-Account abzuholen,.-
/etc/fetchmailrc
-
-
procmail
: ein Programm zur lokalen Zustellung von Email und Filter.-
~/.procmailrc
-
-
Hostname und DNS (Proxy, Cache, ...), siehe Hostname, Abschnitt 10.3.1 und Domain Name Service (DNS), Abschnitt 10.4.
-
/etc/host.conf
-
/etc/hostname
-
/etc/hosts
-
/etc/hosts.allow
-
/etc/hosts.deny
-
/etc/resolv.conf
-
/etc/bind/named.conf
(edit) -
/etc/bind/db.lan
(muss für LAN-Hosts hinzugefügt werden) -
/etc/bind/db.192.168.0
(muss für LAN reverse hinzugefügt werden)
-
-
DHCP, siehe Konfiguration der Netzwerkschnittstelle mit DHCP, Abschnitt 10.5.
-
/etc/dhcp3/dhclient.conf
(DHCP-Client) -
/etc/default/dhcp3-server
(DHCP- Server) -
/etc/dhcp3/dhcpd.conf
(DHCP-Server)
-
-
cvs
: Concurrent Version System, siehe Concurrent Versions System (CVS) – System für simultane Versionen, Abschnitt 12.1.-
/etc/cvs-cron.conf
-
/etc/cvs-pserver.conf
-
-
nfs-kernel-server
: Ein Dateisystem für das Netzwerk, siehe NFS-Konfiguration, Abschnitt 3.4 (für unix-artige Systeme).-
/etc/exports
-
-
samba
: Freigabe von Dateien und Druckern über das Netzwerk für Windows, siehe Samba-Konfiguration, Abschnitt 3.5 und Samba, Abschnitt 8.6.38.-
/etc/samba/smb.conf
-
-
Drucker-Dämon-System, siehe Drucker-Konfiguration, Abschnitt 3.6.
-
/etc/printcap
(für lpr)
-
-
apache
undapache2
: Ein Web-Server.-
/etc/apache/*
-
/etc/apache2/*
-
-
squid
: Ein Web-Proxy-Cache-Server.-
/etc/squid/*
-
10.11 Netzwerk-Fehlersuche
Wenn im Netzwerk Probleme auftreten, sollten die Ausgaben der folgenden Programme geprüft werden:
# ifconfig
# cat /proc/pci
# cat /proc/interrupts
# dmesg | more
Weitere Informationen folgen auf das Kapitel Grundlagen – Prüfung des Netzwerks, Abschnitt 8.6.29.
Bei Problemen mit einzelnen Websites, siehe Eigenartige Probleme beim Zugriff auf einige Webseiten, Abschnitt 3.8.5.
10.12 Aufbau eines Gateway-Routers
Ein Debian-Rechner kann als Gateway verwendet werden, der Network Addresss Translation (NAT, auch als Masquerading bekannt), Email-Transfer, DHCP, DNS-Caching, HTTP-Proxy-Caching, CVS-Service, NFS-Service und Samba-Services anbietet. Siehe Hosts und IP im LAN, Abschnitt 3.1.9 für Beispiele derlei Einrichtung.
10.12.1 Konfiguration von Netfilter
Das Netfilter/Iptables-Projekt erstellt ein Firewall-Subsystem für den Linux-Kernel 2.4 und später. Siehe Netfilter
, dort werden viele Netzwerk-Konfiguraitonen erklärt.
10.12.1.1 Grundlagen von Netfilter
Netfilter-Prozess-Pakete verwenden fünf eingebaute Ketten. PREROUTING, INPUT, FORWARD, OUTPUT, and POSTROUTING.
routing
decision
IN ------> PRE ---> ------> FORWARD -----> ----> POST -----> OUT
interface ROUTING \ filter / ROUTING interface
DNAT | tracking ^ SNAT
REDIRECT | | MASQUERADE
v |
INPUT OUTPUT
| filter ^ filter,DNAT
v |
\-->Lokale Prozesse--/
User-Space Programme
10.12.1.2 Netfilter-Tabelle
Pakete der einzelnen eingebauten Ketten werden anhand folgender Tabellen weiterverarbeitet.
-
filter (packet filter, default)
-
INPUT (für Pakete, die ankommen)
-
FORWARD (für Pakete, die hier weitergeleitet werden)
-
OUTPUT (für lokal erzeugte Pakete).
-
-
nat (network address translation )
-
PREROUTING (um Pakete zu verändern, sobald sie ankommen)
-
OUTPUT (um Pakete zu ändern, bevor sie weitergeleitet werden)
-
POSTROUTING (um Pakete zu verändern, bevor sie abgeschickt werden)
-
-
Adressen-Umsetzung (Mangling) (Netzwerk-Adressen-Mangling ist erst ab Kernel 2.4.18 zu gebrauchen)
-
Alle fünf eingebauten Ketten.
-
10.12.1.3 Netfilter Ziele
Firewall-Regeln haben verschiedene Ziele:
-
Vier elementare Ziele:
-
ACCEPT bedeutet, dass das Paket durchgelassen wird.
-
DROP bedeutet, dass das Paket verworfen wird.
-
QUEUE bedeutet, dass das Paket an den Benutzer-Adressraum (Userspace) weitergeleitet wird (falls der Kernel dies unterstützt).
-
RETURN verläßt diese Kette und setzt die Bearbeitung an der vorherigen (aufrufenden) Kette fort.
-
-
erweiterte Ziele:
-
LOG schaltet das Loggen im Kernel an.
-
REJECT verwirft das Paket und schickt ein Fehlerpaket zurück.
-
SNAT verändert die Quelladresse des Pakets und wird nur in der POSTROUTING-Kette verwendet. (nur für die NAT-Tabelle)
--to-source ipaddr[-ipaddr][:port-port] -
MASQUERADE ist das gleiche wie SNAT, nur für dynamisch zugewiesene IP (Einwahl)-Verbindungen. (nur für die NAT-Tabelle)
--to-ports port[-port]
-
DNAT verändert die Ziel-Adresse des Pakets und wird in den PREROUTING und OUTPUT-Ketten verwendet, oder in in Benutzer-definierten Ketten, die von diesen Ketten aufgerufen werden. (nur für die NAT-Tabelle)
--to-destination ipaddr[-ipaddr][:port-port] -
REDIRECT verändert die IP-Zieladresse, um das Paket an die Maschine zu senden.
--to-ports port[-port]
-
10.12.1.4 Netfilter-Befehle
Die elementaren Befehle von iptables
sind:
iptables -N chain # create a chain
iptables -A chain \ # add rule to chain
-t table \ # use table (filter, nat, mangle)
-p protocol \ # tcp, udp, icmp, or all,
-s source-address[/mask] \
--sport port[:port] \ # source port if -p is tcp or udp
-d destination-address[/mask] \
--dport port[:port] \ # dest. port if -p is tcp or udp
-j target \ # what to do if match
-i in-interface-name \ # for INPUT, FORWARD, PREROUTING
-o out-interface-name # for FORWARD, OUTPUT, POSTROUTING
10.12.1.5 Network Address Translation
Rechner un einem lokalen Netzwerk können Internet-Angebote über einen Gateway-Rechner aufrufen, der die IP-Adressen zwischen dem lokalen Netz und den im Internet verwendeten IP-Adressen umsetzt.
# apt-get install ipmasq
Um den Schutz durch ipmasq
zu verbessern, können die Beispielregeln verwendet werden. Siehe /usr/share/doc/ipmasq/examples/stronger/README
. In Woody mit kernel-image-2.4 muss das richtige Kernelmodul geladen werden. Die Sarge-Version von ipmasq hat dieses Problem nicht. Siehe Netzwerk-Funktionalität, Abschnitt 7.2.3 für Konfigurationsanleitungen.
Wird Debian mit kernel-image-2.2 verwendet, muss Z92timeouts.rul
in /etc/masq/rules
wie folgt verändert werden, um sicher zu stellen, dass die Verbindung zu anderen Rechnern länger aufrecht erhalten wird (dies ist hilfreich beim Laden großer Emails, etc.):
# tcp, tcp-fin, udp
# 2h, 10 Sek, 160 Sek. - Voreinstellung
# 1 Tag, 10 Min, 10 Min - laengeres Beispiel
$IPCHAINS -M -S 86400 600 600
Wenn das Netzwerk mit einer PCMCIA-Netzwerkkarte verwendet wird, muss ipmasq
aus /etc/pcmcia/network.opts
(d.h. /usr/share/doc/ipmasq/ipmasq.txt.gz
) oder aus /etc/network/interfaces
(siehe Netzwerk-Konfiguration und PCMCIA, Abschnitt 10.8.5 und Umschalten der Netzwerkkonfiguration, Abschnitt 10.8) gestartet werden.
10.12.1.6 Umlenkung von SMTP-Verbindungen (2.4)
Ein Email-Programm kann an verschiedenen Netzwerken betrieben werden, ohne es neu zu konfigurieren.
Folgende Regeln fügen mittels iptables
Regeln hinzu, die dafür sorgen, dass die SMTP-Verbindung zum Gateway-Rechner aufgebaut wird.
# iptables -t nat -A PREROUTING -s 192.168.1.0/24 -j REDIRECT \
-p tcp --dport smtp --to-port 25 # smtp=25, INPUT is open
Einen Satz weitaus ausführlicherer Umlenkungsregeln ermöglicht das ipmasq
-Paket, wenn die Datei
in das Verzeichnis M30redirect.def
/etc/ipmasq/rules
kopiert wird.
10.12.2 Verschiedene Netzwerk-Verbindungen verwalten
[FIXME] Policy routing (by Phil Brutsche pbrutsch@tux.creighton.edu
): Siehe iproute manual
für Details. Traffic-Kontrolle (tc) ist ebenfalls interessant.
Umgebung:
eth0: 192.168.1.2/24; gateway 192.168.1.1
eth1: 10.0.0.2/24; gateway 10.0.0.1
Kein Masquerading auf dieser Maschine.
Spezielle Magie:
ip rule add from 192.168.1.2 lookup 1
ip rule add from 10.0.0.2 lookup 2
ip route add to default via 10.0.0.1 metric 0
ip route add to default via 192.168.1.1 metric 1
ip route add table 1 to 192.168.1.0/24 via eth0
ip route add table 1 to 10.0.0.2/24 via eth1
ip route add table 1 to default via 192.168.1.1
ip route add table 2 to 192.168.1.0/24 via eth0
ip route add table 2 to 10.0.0.2/24 via eth1
ip route add table 2 to default via 10.0.0.2
[FIXME] nicht getestet. Wie man eine Einwahlverbindung als Ersatz für eine schnelle Verbindung mit Selbstwahl einrichtet. Hier wird noch ein Patch benötigt. :)