Netzwerk konfigurieren

Aus DebianforumWiki
Zur Navigation springen Zur Suche springen
Wiki ‹ Netzwerk ‹ Netzwerk konfigurieren


Baustelle.png Baustelle: Dieser Artikel ist eine Baustelle. Das heißt, jemand hat sich dieses Artikels angenommen und überarbeitet ihn gerade.


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