Kapitel 5. Netzwerkkonfiguration

Inhaltsverzeichnis

5.1. Die elementare Netzwerkinfrastruktur
5.1.1. Die Auflösung des Rechnernamens
5.1.2. Der Netzwerkschnittstellenname
5.1.3. Der Netzwerkadressbereich für das LAN
5.1.4. Unterstützung für Netzwerkgeräte
5.2. Moderne Netzwerkkonfiguration für Arbeitsplatzsysteme
5.2.1. Grafische Netzwerkkonfigurations-Werkzeuge
5.3. Moderne Netzwerkkonfiguration ohne grafische Oberfläche
5.4. The modern network configuration for cloud
5.4.1. The modern network configuration for cloud with DHCP
5.4.2. The modern network configuration for cloud with static IP
5.4.3. The modern network configuration for cloud with Network Manager
5.5. Netzwerkkonfiguration auf unterster Ebene
5.5.1. iproute2-Befehle
5.5.2. Sichere Basis-Netzwerkoperationen
5.6. Netzwerkoptimierung
5.6.1. Die optimale MTU finden
5.6.2. WAN-TCP-Optimierung
5.7. Die Netfilter-Infrastruktur
[Tipp] Tipp

Bezüglich einer aktuellen Anleitung für Debian zum Thema Netzwerk lesen Sie Debian Administratorhandbuch — Konfigurieren des Netzwerks.

[Tipp] Tipp

Unter systemd kann networkd für die Netzwerkverwaltung genutzt werden; lesen Sie dazu systemd-networkd(8).

Lassen Sie uns einen Blick auf die elementare Netzwerkinfrastruktur eines modernen Debian-Systems werfen:

Tabelle 5.1. Liste von Werkzeugen zur Netzwerkkonfiguration

Pakete Popcon Größe Art Beschreibung
network-manager V:392, I:459 15542 config::NM NetworkManager (Daemon): das Netzwerk automatisch verwalten
network-manager-gnome V:121, I:369 5583 config::NM NetworkManager (GNOME-Frontend)
netplan.io V:1, I:5 319 config::NM+networkd Netplan (generator): Unified, declarative interface to NetworkManager and systemd-networkd backends
ifupdown V:608, I:979 199 config::ifupdown standardisiertes Werkzeug zum Aktivieren und Deaktivieren des Netzwerks (Debian-spezifisch)
isc-dhcp-client V:217, I:981 2875 config::low-level DHCP-Client
pppoeconf V:0, I:5 186 config::helper Konfigurations-Hilfswerkzeug für PPPoE-Verbindungen
wpasupplicant V:353, I:513 3862 config::helper clientseitige Unterstützung für WPA und WPA2 (IEEE 802.11i)
wpagui V:0, I:1 774 config::helper Qt-GUI-Programm für wpa_supplicant
wireless-tools V:179, I:244 292 config::helper Werkzeuge zum Bearbeiten der Linux Wireless Extensions
iw V:34, I:475 302 config::helper Werkzeug zum Konfigurieren von Drahtlos-Netzwerkgeräten unter Linux
iproute2 V:736, I:972 3606 config::iproute2 iproute2, IPv6 und andere erweiterte Netzwerkkonfiguration: ip(8), tc(8) usw.
iptables V:319, I:718 2414 config::Netfilter Administrationswerkzeuge für Paketfilterung und NAT (Netfilter)
nftables V:106, I:701 182 config::Netfilter Administrationswerkzeuge für Paketfilterung und NAT (Netfilter) (Nachfolger von {ip,ip6,arp,eb}tables)
iputils-ping V:194, I:997 122 Test Erreichbarkeit eines fernen Rechners über das Netzwerk testen, entweder mittels Rechnername oder IP-Addresse (iproute2)
iputils-arping V:3, I:36 50 Test Erreichbarkeit eines fernen Rechners über das Netzwerk mittels seiner ARP-Addresse testen
iputils-tracepath V:2, I:30 47 Test Netzwerkpfad zu einem fernen Rechner verfolgen
ethtool V:95, I:267 739 Test Eigenschaften von Ethernet-Geräten anzeigen oder ändern
mtr-tiny V:5, I:46 156 test::low-level Netzwerkpfad zu einem fernen Rechner verfolgen (Curses-basiert)
mtr V:4, I:41 209 test::low-level Netzwerkpfad zu einem fernen Rechner verfolgen (Curses- und GTK-basiert)
gnome-nettool V:0, I:17 2492 test::low-level Werkzeuge für allgemeine Netzwerkinformations-Operationen (GNOME)
nmap V:25, I:199 4498 test::low-level Netzwerk-Mapper/Port-Scanner (Nmap, konsolen-basiert)
tcpdump V:17, I:175 1340 test::low-level Netzwerkverkehr-Analysator (Tcpdump, konsolen-basiert)
wireshark I:45 10417 test::low-level Netzwerkverkehr-Analysator (Wireshark, GTK-basiert)
tshark V:2, I:25 400 test::low-level Netzwerkverkehr-Analysator (konsolen-basiert)
tcptrace V:0, I:2 401 test::low-level eine Zusammenfassung von Verbindungen auf Basis der tcpdump-Ausgabe erstellen
snort V:0, I:0 2203 test::low-level flexibles Einbruchmeldesystem für das Netzwerk (Snort)
ntopng V:0, I:1 15904 test::low-level Daten über die Netzwerknutzung im Webbrowser anzeigen
dnsutils V:16, I:280 276 test::low-level Netzwerk-Clients, die mit BIND bereitgestellt werden: nslookup(8), nsupdate(8), dig(8)
dlint V:0, I:3 53 test::low-level DNS-Zoneninformationen mittels Nameserver-Abfragen überprüfen
dnstracer V:0, I:1 59 test::low-level eine Verkettung von DNS-Servern zu ihrer Quelle verfolgen

Die Auflösung des Rechnernamens (hostname) wird derzeit auch durch den NSS-(Name-Service-Switch-)Mechanismus unterstützt. Die Auflösung läuft wie folgt ab:

  1. Die "/etc/nsswitch.conf"-Datei mit Einträgen wie "hosts: files dns" bestimmt die Reihenfolge der Rechnernamenauflösung. (Dies ersetzt die alte Funktionalität der "order"-Einträge in "/etc/host.conf".)

  2. Als erstes wird in diesem Beispiel die files-Methode aufgerufen. Wenn der Rechnername in der "/etc/hosts"-Datei gefunden wird, werden alle gültigen Adressen für den Rechner ausgegeben und die Abfrage wird beendet. (Die "/etc/host.conf"-Datei enthält "multi on".)

  3. Dann wird die dns-Methode wird aufgerufen. Wenn der Rechnername über das Internet Domain Name System (DNS) (definiert über die Datei "/etc/resolv.conf") gefunden wird, werden alle dafür gültigen Adressen ausgegeben und die Abfrage wird beendet.

A typical workstation may be installed with its host name set to, e.g., "host_name" and its optional domain name set to an empty string. Then, "/etc/hosts" looks like the following.

127.0.0.1 localhost
127.0.1.1 host_name

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Jede Zeile beginnt mit einer IP-Addresse und dahinter steht jeweils der zugeordnete Rechnername.

Die IP-Adresse 127.0.1.1 in der zweiten Zeile dieses Beispiels ist auf einigen anderen Unix-ähnlichen Systemen möglicherweise nicht vorhanden. Der Debian Installer erstellt diesen Eintrag für Systeme ohne feste IP-Adresse als provisorische Lösung für einige Software-Produkte (z.B. GNOME), wie in Fehler #719621 dokumentiert.

The host_name matches the hostname defined in the "/etc/hostname" (see Abschnitt 3.7.1, „Der Rechnername“).

Auf Systemen mit einer festen IP-Adresse sollte allerdings diese feste IP-Adresse statt der 127.0.1.1 verwendet werden.

Bei Systemen mit einer festen IP-Adresse und einem voll qualifizierten Domain-Namen (FQDN), bereitgestellt durch das Domain Name System (DNS), sollte rechnername.domain-name verwendet werden statt nur rechnername.

Die Datei "/etc/resolv.conf" ist eine statische Datei, falls das Paket resolvconf nicht installiert ist. Falls das Paket installiert ist, ist dies ein symbolischer Link. In beiden Fällen enthält es Informationen zur Initialisierung der Namensauflösungs-Routinen. Wenn das DNS zum Beispiel über die IP "192.168.11.1" erreichbar ist, enthält sie Folgendes:

nameserver 192.168.11.1

Das resolvconf-Paket macht "/etc/resolv.conf" zu einem symbolischen Link und verwaltet ihren Inhalt automatisch über die Hook-Skripte.

For the PC workstation on the typical adhoc LAN environment, the hostname can be resolved via Multicast DNS (mDNS) in addition to the basic files and dns methods.

  • Avahi stellt ein Rahmenwerk für Multicast-DNS-Diensteabfragen auf Debian-Systemen bereit.

  • Es ist ein Äquivalent zu Apple Bonjour / Apple Rendezvous.

  • Das libnss-mdns-Plugin-Paket bietet Rechnernamensauflösung via mDNS für die GNU Name-Service-Switch-(NSS-)Funktionalität der GNU C-Bibliothek (glibc).

  • The "/etc/nsswitch.conf" file should have stanza like "hosts: files mdns4_minimal [NOTFOUND=return] dns" (see /usr/share/doc/libnss-mdns/README.Debian for other configurations).

  • A host name suffixed with the ".local" pseudo-top-level domain is resolved by sending a mDNS query message in a multicast UDP packet using IPv4 address "224.0.0.251" or IPv6 address "FF02::FB".

[Anmerkung] Anmerkung

Die Ausweitung generischer Top-Level-Domains (gTLD) im Domain-Name-System ist in Arbeit. Achten Sie bei Auswahl von Domain-Namen, die nur im lokalen Netzwerk verwendet werden sollen, auf Namenskollisionen.

[Anmerkung] Anmerkung

Use of packages such as libnss-resolve together with systemd-resolved, or libnss-myhostname, or libnss-mymachine, with coressponding listings on the "hosts" line in the "/etc/nsswitch.conf" file may override the traditional network configuration discussed in the above. See nss-resolve(8), systemd-resolved(8), nss-myhostname(8), and nss-mymachines(8) for more.

Auf modernen Debian-Desktop-Systemen mit systemd erfolgt die Initialisierung von Netzwerkschnittstellen für die Loopback-Schnittstelle lo typischerweise durch "networking.service" und für andere Schnittstellen durch "NetworkManager.service".

Debian-Systeme können Netzwerkverbindungen über Software-Daemons wie NetworkManager (NM) (network-manager und zugehörige Pakete) verwalten.

  • Sie haben ihre eigenen grafischen GUI- und Befehlszeilen-Programme als Bedienoberfläche.

  • Sie haben ihre eigenen Daemons als Unterbau.

  • Sie erlauben eine einfache Verbindung Ihres Systems mit dem Internet.

  • Sie ermöglichen eine problemlose Verwaltung von kabelgebundenen und kabellosen Netzwerkkonfigurationen.

  • Sie erlauben uns, das Netzwerk unabhängig vom althergebrachten ifupdown zu konfigurieren.

[Anmerkung] Anmerkung

Verwenden Sie diese automatischen Netzwerkkonfigurations-Werkzeuge nicht für Server. Sie sind primär für die Nutzung auf Arbeitsplatzrechnern oder Laptops gedacht.

Diese modernen Werkzeuge müssen korrekt konfiguriert werden, um Konflikte mit dem ifupdown-Paket und seiner Konfigurationsdatei "/etc/network/interfaces" zu vermeiden.

Offizielle Dokumentation für NM unter Debian ist in "/usr/share/doc/network-manager/README.Debian" verfügbar.

Grundsätzlich läuft die Netzwerkkonfiguration für Arbeitsplatzsysteme wie folgt ab:

  1. Fügen Sie den Benutzer, der sich am Arbeitsplatz anmeldet, z.B. foo, mit folgendem Befehl zur Gruppe "netdev" hinzu (alternativ kann dies in modernen Arbeitsplatzumgebungen wie GNOME oder KDE auch automatisch über D-bus erledigt werden):

    $ sudo usermod -a -G foo netdev
  2. Halten Sie die Konfiguration in "/etc/network/interfaces" so einfach wie hier:

    auto lo
    iface lo inet loopback
  3. Starten Sie NM mit folgendem Befehl neu:

    $ sudo systemctl restart network-manager
  4. Konfigurieren Sie Ihr Netzwerk über die grafische GUI-Oberfläche.

[Anmerkung] Anmerkung

Um Konflikte mit ifupdown zu vermeiden, werden nur Schnittstellen, die nicht in "/etc/network/interfaces" aufgelistet sind, von NM verwaltet.

[Tipp] Tipp

Wenn Sie die Fähigkeiten von NM erweitern möchten, suchen Sie nach entsprechenden Plugin-Modulen und zusätzlichen Paketen wie network-manager-openconnect, network-manager-openvpn-gnome, network-manager-pptp-gnome, mobile-broadband-provider-info, gnome-bluetooth usw.

Unter systemd kann das Netzwerk stattdessen in /etc/systemd/network/ konfiguriert werden. Lesen Sie dazu systemd-resolved(8), resolved.conf(5) und systemd-networkd(8).

Dies ermöglicht eine moderne Netzwerkkonfiguration auch ohne grafische Oberfläche.

Eine DHCP-Client-Konfiguration kann durch Erzeugen von "/etc/systemd/network/dhcp.network" eingerichtet werden, z.B. mit:

[Match]
Name=en*

[Network]
DHCP=yes

Eine statische Netzwerkkonfiguration richten Sie über "/etc/systemd/network/static.network" ein, wie hier:

[Match]
Name=en*

[Network]
Address=192.168.0.15/24
Gateway=192.168.0.1

The modern network configuration for cloud may use cloud-init and netplan.io packages (see Abschnitt 3.7.4, „Cloud system initialization“).

The netplan.io package supports systemd-networkd and NetworkManager as its network configuration backends, and enables the declarative network configuration using YAML data. When you change YAML:

  • Run "netplan generate" command to generate all the necessary backend configuration from YAML.

  • Run "netplan apply" command to apply the generated configuration to the backends.

See "Netplan documentation", netplan(5), netplan-generate(8), and netplan-apply(8).

See also "Cloud-init documentation" (especially around "Configuration sources" and "Netplan Passthrough") for how cloud-init can integrate netplan.io configuration with alternative data sources.

Für Netzwerkkonfiguration über die Konsole können Sie unter Linux die iproute2-Programme (ip(8), …) verwenden.

Sie können die folgenden Netzwerkbefehle der untersten Ebene problemlos verwenden, da sie die Netzwerkkonfiguration nicht verändern:


[Tipp] Tipp

Einige dieser Basisbefehle zur Netzwerkkonfiguration sind in "/usr/sbin/" abgelegt. Sie müssen unter Umständen den vollständigen Pfad, wie z.B. "/usr/sbin/ifconfig" angeben oder "/usr/sbin" zur Variable "$PATH" in Ihrer "~/.bashrc"-Datei hinzufügen.

Die grundsätzliche Netzwerkoptimierung liegt außerhalb des Rahmens dieser Dokumentation. Ich erwähne hier nur Dinge, die für Anwender-typische Verbindungen passend sind.


NM setzt den optimalen Wert für die Maximum Transmission Unit (MTU) normalerweise automatisch.

In speziellen Fällen möchten Sie die MTU jedoch vielleicht händisch setzen, nachdem Sie mit ping(8) und seiner Option "-M do" experimentiert haben; Sie haben damit die Möglichkeit, ein ICMP-Paket mit verschiedenen Paketgrößen zu verschicken. MTU ist die größte Paketgröße, bei der das Paket noch erfolgreich ohne Fragmentierung verschickt werden kann plus 28 Byte für die IPv4- bzw. 48 Byte für die IPv6-Adresse. In folgendem Beispiel wurde für eine IPv4-Verbindung eine MTU von 1460 ermittelt und für IPv6 eine MTU von 1500:

$ ping -4 -c 1 -s $((1500-28)) -M do www.debian.org
PING  (149.20.4.15) 1472(1500) bytes of data.
ping: local error: message too long, mtu=1460

---  ping statistics ---
1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms

$ ping -4 -c 1 -s $((1460-28)) -M do www.debian.org
PING  (130.89.148.77) 1432(1460) bytes of data.
1440 bytes from klecker-misc.debian.org (130.89.148.77): icmp_seq=1 ttl=50 time=325 ms

---  ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 325.318/325.318/325.318/0.000 ms
$ ping -6 -c 1 -s $((1500-48)) -M do www.debian.org
PING www.debian.org(mirror-csail.debian.org (2603:400a:ffff:bb8::801f:3e)) 1452 data bytes
1460 bytes from mirror-csail.debian.org (2603:400a:ffff:bb8::801f:3e): icmp_seq=1 ttl=47 time=191 ms

--- www.debian.org ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 191.332/191.332/191.332/0.000 ms

Dies ist das Path MTU (PMTU) Discovery-Verfahren (RFC1191) und der Befehl tracepath(8) kann dies automatisieren.


Zusätzlich zu diesen Grundregeln sollten Sie folgendes wissen:

  • Jegliche Nutzung von Tunneling-Methoden (VPN usw.) kann aufgrund des Overheads den optimalen MTU-Wert reduzieren.

  • Der MTU-Wert sollte den über die experimentelle Methode ermittelten PMTU-Wert nicht überschreiten.

  • Ein größerer MTU-Wert ist grundsätzlich besser, wenn andere Einschränkungen greifen.

Die Maximum Segment Size (MSS) wird als alternative Messmethode für die Paketgröße verwendet. Der Zusammenhang zwischen MSS und MTU ist wie folgt:

  • MSS = "MTU - 40" bei IPv4

  • MSS = "MTU - 60" bei IPv6

[Anmerkung] Anmerkung

Bei Netzwerkoptimierung mittels iptables(8) (lesen Sie dazu auch Abschnitt 5.7, „Die Netfilter-Infrastruktur“) kann die Paketgröße über die MSS begrenzt werden; dies ist für einen Router nützlich. Lesen Sie den Abschnitt bezüglich "TCPMSS" in iptables(8).

The TCP throughput can be maximized by adjusting TCP buffer size parameters as in "TCP tuning" for the modern high-bandwidth and high-latency WAN. So far, the current Debian default settings serve well even for my LAN connected by the fast 1G bps FTTP service.

Netfilter stellt eine Infrastruktur für Stateful Packet Inspection (SPI, zustandsorientierte Paketüberprüfung) und Network Address Translation (NAT) über Module des Linux-Kernels (lesen Sie hierzu Abschnitt 3.9, „Die Kernel-Modul-Initialisierung“) zur Verfügung.


Das vorherrschende Nutzerprogramm für netfilter ist iptables(8). Sie können netfilter von Hand interaktiv über die Shell konfigurieren, seinen Status mit iptables-save(8) sichern und beim Systemstart über ein Init-Skript mittels iptables-restore(8) wiederherstellen.

Konfigurations-Hilfsskripte wie shorewall vereinfachen diesen Prozess.

See documentations at Netfilter Documentation (or in "/usr/share/doc/iptables/html/").

[Tipp] Tipp

Obwohl für Linux 2.4 geschrieben, sind sowohl der iptables(8)-Befehl wie auch die Netfilter-Kernel-Funktionalität für die Linux-Kernel-Serien 2.6 und 3.x passend.