Netzwerk konfigurieren
Baustelle: Dieser Artikel ist eine Baustelle. Das heißt, jemand hat sich dieses Artikels angenommen und überarbeitet ihn gerade. |
Getestet: Dieser Hinweis soll dir dabei helfen, zu entscheiden, ob dieser Artikel auf deinem System funktionieren wird oder nicht. Solltest du feststellen, dass dieser Artikel bei einer ungetestet Version funktioniert, kannst du das gerne hier korrigieren oder im Forum anmerken.
|
Überblick
Unter Debian gibt es mehrere Möglichkeiten, die Netzwerkschnittstellen zu konfigurieren.
- Der „klassische“ Weg ist die statische Konfiguration in der Datei /etc/networking/interfaces. Diese Möglichkeit war früher üblich und wird von Debian weiterhin verwendet, wenn keine grafische Desktopumgebung installiert wird.
- NetworkManager ergänzt die klassische Konfiguration um einen Daemon, der Nutzerinteraktion zulässt. Mit NetworkManager können bspw. auch normale Benutzer neue WLAN-Netzwerke hinzufügen. NetworkManager wird standardmäßig verwendet, wenn GNOME oder KDE verwendet werden.
- systemd-networkd ist ein Daemon zur Verwaltung des Netzwerks, den systemd mitbringt. Seine Verwendung muss explizit vom Anwender eingestellt werden.
Dieser Artikel soll die Grundlagen der drei Ansätze zeigen. Details lassen sich den jeweiligen Manpages entnehmen.
Für die Fehlersuche sei auf den Artikel Basis-Netzwerkdiagnose verwiesen.
Wichtig: beim Experimentieren mit Remote-Maschinen sollte man stets Vorsicht walten lassen, damit man nicht versehentlich das Netzwerk unbrauchbar macht und sich so aus der Maschine aussperrt.
Konfiguration ermitteln
Bei Nutzung von systemd lässt sich relativ einfach herausfinden, wer das Netzwerk steuert, indem der Status der einzelnen Services abgefragt wird.
klassische Konfiguration
Wir fragen systemd, was der Service networking so treibt:
jan@ugly:~$ systemctl status networking --no-pager ● networking.service - Raise network interfaces Loaded: loaded (/lib/systemd/system/networking.service; enabled; vendor preset: enabled) Active: active (exited) since Fri 2018-08-17 14:59:50 CEST; 1h 6min ago Docs: man:interfaces(5) Main PID: 732 (code=exited, status=0/SUCCESS) Tasks: 0 (limit: 4915) CGroup: /system.slice/networking.service
Der Service ist active. Klassisches Netzwerk schließt nicht den NetworkManager aus, da sich beide ergänzen. Man sollte daher auf jeden Fall prüfen, ob zusätzlich NetworkManager arbeitet.
NetworkManager
Man fragt systemd nach dem Status des Service NetworkManager, wobei auf korrekte Groß-/Kleinschreibung geachtet werden muss:
jan@ugly:~$ systemctl status NetworkManager --no-pager ● NetworkManager.service - Network Manager Loaded: loaded (/lib/systemd/system/NetworkManager.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2018-08-17 14:59:51 CEST; 1h 12min ago Docs: man:NetworkManager(8) Main PID: 813 (NetworkManager) Tasks: 4 (limit: 4915) CGroup: /system.slice/NetworkManager.service ├─ 813 /usr/sbin/NetworkManager --no-daemon └─22742 /sbin/dhclient -d -q -sf /usr/lib/NetworkManager/nm-dhcp-h…h0
NetworkManager ist auf dem Rechner ugly also zusätzlich active. Dies ist bspw. bei Verwendung von GNOME oder KDE üblich. Das klassische Netzwerk konfiguriert dann bpsw. das Loopback-Device lo und NetworkManager kümmert sich um alle weiteren Schnittstellen.
systemd-networkd
Wie gehabt, diesmal auf einem headless arbeitenden Server:
jan@proliant:~$ systemctl status systemd-networkd --no-pager ● systemd-networkd.service - Network Service Loaded: loaded (/lib/systemd/system/systemd-networkd.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2018-08-17 02:02:16 CEST; 14h ago Docs: man:systemd-networkd.service(8) Main PID: 285 (systemd-network) Status: "Processing requests..." Tasks: 1 (limit: 9830) Memory: 1.4M CPU: 252ms CGroup: /system.slice/systemd-networkd.service └─285 /lib/systemd/systemd-networkd
Klassisches Networking ist inaktiv, da sich systemd-networkd um das Loopback kümmert:
jan@proliant:~$ systemctl status networking --no-pager ● networking.service - Raise network interfaces Loaded: loaded (/lib/systemd/system/networking.service; disabled; vendor preset: enabled) Active: inactive (dead) Docs: man:interfaces(5)
Und NetworkManager ist auf dem Server nicht mal installiert und der Service demnach unbekannt:
jan@proliant:~$ systemctl status NetworkManager --no-pager Unit NetworkManager.service could not be found.
Alternativ kann man networkctl verwenden:
jan@proliant:~$ networkctl IDX LINK TYPE OPERATIONAL SETUP 1 lo loopback carrier unmanaged 2 eno1 ether routable configuring 3 eno2 ether off unmanaged 4 br0 ether routable configured 6 vethIXB1X2 ether degraded unmanaged 8 vethM5GCM0 ether degraded unmanaged 10 vethOB6RQ7 ether degraded unmanaged
Dann erhält man eine Übersicht, für welche Geräte systemd-networkd verantwortlich ist. lo wird zwar als unmanaged ausgewiesen, wird aber dennoch von systemd-networkd erzeugt.
Wenn systemd-networkd nicht verwendet wird, sieht die Ausgabe so aus:
jan@ugly:~$ networkctl WARNING: systemd-networkd is not running, output will be incomplete. IDX LINK TYPE OPERATIONAL SETUP 1 lo loopback n/a unmanaged 2 eth0 ether n/a unmanaged 3 vboxnet0 ether n/a unmanaged 3 links listed.
Hier bekommt man deutlich gesagt, dass systemd-networkd nicht verwendet wird.
Netzwerk konfigurieren
Klassisch über /etc/network/interfaces
Standard ohne Desktop
NetworkManager
NetworkManager wird standardmäßig bei der Installation von GNOME oder KDE installiert und ist in die Oberflächen eingebunden: wenn man sich aus GNOME heraus mit einem WLAN verbindet, wird im Hintergrund eine neue Verbindung (Connection) im NetworkManager angelegt. Die Verbindungen werden als einzelne Dateien in /etc/NetworkManager/system-connections/ gespeichert.
NetworkManager ist hervorragend für Laptops geeignet, da es WLANs im Empfangsbereich erkennt und sich automatisch mit diesen verbindet, sowie diese einmal bekannt sind. Es greift dabei auf wpa_supplicant zurück.
Über das Kommandozeilentool nmcli (man 1 nmcli) lassen sich Verbindungen konfigurieren, steuern und Informationen dazu abrufen. Eine Übersicht der Verbindungen lässt sich über nmcli connection abrufen:
...
Dabei werden grundsätzlich alle vorhandenen Verbindungen aufgeführt, nicht nur die aktuell verwendeten. Es tauchen dann bspw. alle bekannten WLANs auf.
Informationen zu einer einzelnen Verbindung lassen sich mit nmcli connection show anzeigen:
...
nmcli lässt sich in Grenzen auch von normalen Nutzern verwenden; es sind nicht zwingend root-Rechte erforderlich.
Über nmcli connection up bzw. nmcli connection down lassen sich Netzwerkverbindungen ein- und ausschalten und über nmcli connection add und nmcli connection delete anlegen oder löschen.
Konfiguration über systemd-networkd
Grundlegendes
systemd-networkd eignet sich aktuell (Debian 9) weniger für Desktops oder Laptops, da es keine Integration in Desktop-Umgebungen gibt. Für einen Server, der in einer Kellerecke vor sich hinwerkelt, ist es dagegen gut geeignet. systemd-networkd kann sowohl die Netzwerkverbindungen für Netzwerkgeräte handhaben als auch neue virtuelle Netzwerkgeräte erzeugen, bpsw. eine Bridge. Bei Verwendung von systemd-networkd müssen das klassische Networking und NetworkManager deaktiviert sein. Das Loopback-Device wird automatisch angelegt und muss nicht explizit über eine Unit definiert werden.
Die Units werden unter /etc/systemd/network/ abgelegt und müssen nicht gestartet oder aktiviert werden.
Netzwerke werden über network-Units (man 5 systemd.network) verwaltet.
Eine Network-Unit hat zwei Abschnitte
- Unter [Match] legt man die Kriterien fest, anhand derer das Netzwerkgerät bestimmt wird, für das die Netzwerkverbindung gelten soll. Zu den Kriterien gehört bspw. der Name des Geräts, die MAC-Adresse usw.
- Unter [Network] schließlich werden die Eigenschaften der Verbindung definiert.
Die folgende Unit eno1.network konfiguriert das Netzwerkgerät eno1 für DHCP unter Nutzung von IPv4:
[Match] Name=eno1 [Network] DHCP=ipv4
Den Status der von systemd-networkd verwalteten Verbindungen und Geräte lässt sich über networkctl anzeigen:
jan@proliant:~$ networkctl IDX LINK TYPE OPERATIONAL SETUP 1 lo loopback carrier unmanaged 2 eno1 ether routable configuring 3 eno2 ether off unmanaged 4 br0 ether routable configured 6 vethIXB1X2 ether degraded unmanaged 8 vethM5GCM0 ether degraded unmanaged 10 vethOB6RQ7 ether degraded unmanaged
eno2 ist eine zusätzliche, nicht verwendete Netzwerkkarte. br0 ist eine Netzwerkbrücke, mehr dazu im folgenden Abschnitt. Die veth sind die virtuellen Netzwerkkarten von LXC-Containern. lo wird automatisch erzeugt.
Details zu einer Verbindung lassen sich über networkctl status anzeigen:
jan@proliant:~$ networkctl status br0 ● 4: br0 Link File: /lib/systemd/network/99-default.link Network File: /etc/systemd/network/br0.network Type: ether State: routable (configured) Driver: bridge HW Address: 5a:bb:06:cd:89:73 Address: 192.168.178.8 fe80::58bb:6ff:fecd:8973 Gateway: 192.168.178.1 DNS: 192.168.178.1
Anwendungsfall: Bridge erzeugen
Für eine Bridge müsssen zunächst die bridge-utils installiert werden. Danach definiert man in der Unit br0.netdev (man 5 systemd.netdev) ein neues virtuelles Netzwerkgerät vom Typ Bridge:
[NetDev] Name=br0 Kind=bridge
Dann vergibt man über br0.network eine statische IP für die Bridge :
[Match] Name=br0 [Network] Address=192.168.178.8/24 Gateway=192.168.178.1 DNS=192.168.178.1
Zu guter letzt bringt man die physikalisch vorhandene Netzwerkkarte eno1 über eno1.network in die Bridge ein:
[Match] Name=eno1 [Network] Bridge=br0
Fertig. In diese Bridge kann man nun bspw. die virtuellen Netzwerkgeräte von LXC-Containern einbringen (lxc.network.link = br0 in der Konfiguration des Containers).
Unter [Match] kann man in einer Network-Unit auch Wildcards verwenden. Wollte man mehrere vorhandene Netzwerkkarten eno1, eno2 usw. in die Bridge einbringen, könnte dies über folgende Unit geschehen:
[Match] Name=en* [Network] Bridge=br0