ubuntuusers.de

interfaces

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:


Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.

Artikel für fortgeschrittene Anwender

Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

Dieser Artikel beschreibt die Datei /etc/network/interfaces, die Konfigurationsdatei für den Debian ifupdown-Mechanismus.

Hinweis:

Ab Version 17.10 verwendet Ubuntu ifupdown nicht mehr, sondern

In beiden Fällen wird der Netzwerk-Konfigurator über Netplan gesteuert.

Man kann das Netzwerk bei Ubuntu-Systemen ab 18.04 immer noch mit ifupdown konfigurieren, wenn man wie im Artikel „Netplan deaktivieren“ beschrieben vorgeht.

Installation

  1. Das Paket ifupdown muss installiert werden[1]:

    • ifupdown

    Befehl zum Installieren der Pakete:

    sudo apt-get install ifupdown 

    Oder mit apturl installieren, Link: apt://ifupdown

  2. Man kontrolliere, ob die systemd-Unit networking.service aktiviert wurde (enabled) bzw. aktiviere diese.

  3. systemd-networkd sollte beim Hochlauf nicht gestartet werden.

  4. Die Datei /etc/network/interfaces gemäß den eigenen Anforderungen bearbeiten. Insbsondere muss man die Netzwerk-Konfiguration aus den Netplan-Dateien hier umformuliert hinterlegen.

Ubuntu-Desktops verwenden in einer Standard-Installation zur Konfiguration der Netzwerk-Schnittstellen den NetworkManager. In diesem Artikel werden auch mögliche Wechselwirkungen zwischen /etc/network/interfaces und NetworkManager beschrieben.

Bei Verwendung einer anderen Netzwerk-Management-Software, z.B. NetworkManager (NM) oder systemd-networkd, sollte von einer Bearbeitung der /etc/network/interfaces abgesehen werden. Diese Programme verwenden eigene Konfigurationsdateien, weshalb die Bearbeitung der Datei /etc/network/interfaces zur Konfiguration von Netzwerk-Verbindungen nicht sinnvoll ist.

Es ist jedoch möglich, eine Konfiguration zu erstellen, die den „klassischen Weg“ und bei Bedarf die Verwendung des NetworkManagers erlaubt. Siehe hierzu NetworkManager deaktivieren und Aufbau.

Die beiden Methoden verwenden gegensätzliche Strategien:

  • ifupdown macht genau das, was man ihm über die Datei /etc/network/interfaces erlaubt.

  • NetworkManager macht, was ihm sinnvoll erscheint und man ihm nicht explizit verbietet.

Die Wahl zwischen einer Konfiguration über /etc/network/interfaces oder NetworkManager kann für jede Netzwerk-Schnittstelle separat getroffen werden. Dem NetworkManager muss unbedingt mitgeteilt werden, um welche Schnittstellen er sich nicht kümmern darf, da eine unklare Zuständigkeitsverteilung in der Regel zu gar nicht oder nicht zufriedenstellend funktionierendem Netzwerk führt. Siehe hierzu: NetworkManager deaktivieren

Die in der Datei /etc/network/interfaces hinterlegten Konfigurationen werden mit dem Programm ifup aktiviert („Schnittstelle starten“) bzw. mit dem Programm ifdown deaktiviert („Schnittstelle stoppen“). Siehe hierzu die Abschnitte: Anwendung der Konfigurationen und Aktivierung

Hinweis:

Im folgenden Text wird die Schreibweise SEMANTIK zur Kennzeichnung einer semantischen Variablen verwendet. An diesen Stellen ist unbedingt die Zeichenfolge in Großbuchstaben zu ersetzen durch die Angabe eines Namens für ein Objekt mit der geforderten Bedeutung, also beispielsweise:

SCHNITTSTELLEN-NAME ist zu ersetzen durch den Namen einer Schnittstelle wie eth0.

Aufbau

Die Datei /etc/network/interfaces kann in einem Editor [1] mit Root-Rechten [2] bearbeitet werden. In dieser Datei können folgende Schlüsselworte verwendet werden:

Kommentarzeilen werden mit einem Rauten-Zeichen # in der ersten Spalte eingeleitet. Zeilenend-Kommentare sind in dieser Datei nicht möglich. Leerzeilen können zur Gliederung verwendet werden.

Für eine benutzbare Datei /etc/network/interfaces benötigt man nur Konfigurationsblöcke vom Typ iface und ggf. – nur wenn man Schnittstellen beim Rechnerstart automatisch einrichten lassen möchte – die allow-GRUPPENNANME-Anweisungen. Hier folgt ein Beispiel einer solchen Datei:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# /etc/network/interfaces - Beispieldatei 1 aus wiki.ubuntuusers.de
# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback

iface dhcp inet dhcp

iface lan inet static
  address 192.168.0.97/24
  gateway 192.168.0.1
  dns-nameservers 192.168.0.1 203.0.113.203
  dns-search example.net

iface enp63s0 inet manual
  hwaddress     random
# hwaddress     12:34:56:78:9a:bc
  up            dhclient $IFACE
auto enp63s0

Zeilen 3 und 4: Jede interfaces-Datei beginnt traditionell mit den Einträgen für lo (Loopback). Obwohl diese Angaben in Ubuntu 16.04 nicht mehr grundsätzlich erforderlich sind, sollte man sie nicht entfernen oder verändern.

Achtung!

Die Netzwerkschnittstelle lo ist elementarer Bestandteil von Linux. Fehlt diese Schnittstelle oder ist sie falsch konfiguriert, so können Programme nicht mehr untereinander kommunizieren.

Jeder Konfigurationsblock beginnt mit einer Zeile nach folgendem Muster:

iface KONFIGURATIONS-NAME PROTOKOLL METHODE

Er kann ggf. zusätzliche Zeilen umfassen und endet vor einer Zeile mit einem der o.g. Schlüsselwörter. Die Beispieldatei enthält also vier Konfigurationsblöcke mit den Namen lo (nur Zeile 4), dhcp (nur Zeile 6), lan (Zeilen 8-12) und enp63s0 (Zeilen 14-17). Es ist gute Praxis, zur Verbesserung der Lesbarkeit die Folgezeilen zu einer iface-Zeile einzurücken; dies wird aber von der Software ignoriert.

  • Für KONFIGURATIONS-NAME kann eine beliebige Bezeichnung verwendet werden. Grundsätzlich kann jede Konfiguration für jede vorhandene Schnittstelle verwendet werden. Bei einer Konfiguration, die nur für eine ganz bestimmte physische Schnittstelle SCHNITTSTELLEN-NAME angewendet werden soll, wählt man zweckmäßigerweise als KONFIGURATIONS-NAME den Namen dieser Schnittstelle.

    Hinweis:

    Exkurs: Eine Liste aller Netzwerk-Schnittstellen erhält man mit dem Befehl: ip link

  • Für PROTOKOLL muss ein Netzwerkprotokoll ausgewählt werden, welches ifup beherrscht (inet, inet6, ipx oder can). Dies ist abhängig von den Geräten, mit denen kommuniziert werden soll. Außerdem muss ifup ein low-level-Konfigurationsprogramm zur Verfügung stehen: Für inet und inet6 ist dies das auf jedem Standard-Ubuntu-System installierte Programm ip, für die anderen Protokolle müsste es noch installiert[3] werden.

  • Die zulässigen Werte für METHODE sind abhängig vom gewählten Wert für PROTOKOLL:

    • inet kennt u.a. static für eine statische Konfiguration, dhcp für eine dynamische Konfiguration via DHCP, manual als allgemeinste Form.

    • inet6 kennt zusätzlich zu den für inet genannten Methoden noch auto für die bei IPv6 mögliche „zustandslose Autokonfiguration“ (SLAAC) nach RFC4862.

    • Weiterhin sind auch Sonderfälle wie ppp (für Point-to-Point-Protocol) als METHODE möglich, werden in diesem Artikel jedoch nicht weiter behandelt.

Protokoll
Netzwerkprotokoll Beschreibung
inet IP Version 4 IPv4 nach IETF Standard RFC791
inet6 IP Version 6 IPv6 nach IETF Standard RFC2460
ipx IPX/SPX Netzwerkprotokoll von Novell
can Controller Area Network CAN-Bus, serielles Feldbus-System

Hinweis:

Im Folgenden beschränkt sich dieser Artikel, aus Gründen der Übersichtlichkeit und Verbreitung, auf IP.

Statische IP-Konfiguration (static)

Beispiel lan, Zeilen 8-12: Für eine statische IP-Konfiguration wählt man die Methode static. Eine statische IP-Konfiguration ist nötig, wenn es im lokalen Netzwerk keinen DHCP-Server gibt. Dazu muss man in der Konfiguration mindestens zwei, in der Praxis aber oft bis zu fünf Angaben machen:

  • address – Die Adresse des eigenen Rechners. Diese Angabe ist erforderlich. Bei Heimnetzen wählt man meistens eine Adresse aus dem Bereich der Privaten IP-Adressen, also beispielsweise aus dem Bereich 192.168.0.1 bis 192.168.0.254. Die erste und die letzte Adressse eines IP-Netzwerks, also im Beispiel 192.168.0.0 und 192.168.0.255, gehören zwar ebenfalls zum Netzwerk 192.168.0.0/24, sind aber beide als „Broadcast-Adresse“ reserviert und grundsätzlich nicht als Unicast-Adressen nutzbar. Man sollte die moderne Schreibweise 192.168.0.97/24 mit Angabe der Länge des Netzwerkteils bzw. der Prefixlänge (hier /24) benutzen, da man dann keine Netzmaske angeben muss.

  • netmask – Bezeichnet die Netzmaske des Netzwerks. Diese Angabe ist nur dann erforderlich, wenn man unter adresse die Prefixlänge nicht angegeben hat. Im Beispiel lautet die Netzmaske 255.255.255.0, d.h. alle Rechner, bei denen die ersten drei Tripel (also in diesem Beispiel 192.168.0.) der IP-Adresse identisch sind, gehören zum selben Netzwerk. Mit anderen Netzmasken sind andere Bereiche möglich, siehe hierzu Classless Internet Domain Routing

  • gateway – Die IP des Gateways, also im Normalfall die IP des Routers, über den man in das Internet geht, oder sich mit anderen IP-Netzwerken verbindet. Diese optionale Angabe ist funktionaler Sicht sehr oft erforderlich, weil mit dieser Angeabe die Default-Route des Systems definiert wird.

  • dns-nameservers – Optional kann man noch die Auflösung von DNS-Namen zu IP-Adressen durch Angabe von einem oder bis zu drei DNS-Server (vgl. Zeile 11) und ggf. durch Angabe von Suchdomänen (vgl. Zeile 12, dns-search) konfigurieren. Das hierfür erforderliche Paket resolvconf ist bei Ubuntu bereits installiert.

Achtung!

NetworkManager überwacht die Default-Route des Systems und wird jede fremde Änderung korrigieren; aus diesem Grund muss man bei der Einrichtung eines Gateway über interfaces den NetworkManager deaktivieren.

Auch der NetworkManager benutzt resolvconf und beeinflusst darüber die Datei /etc/resolv.conf – dies kann zu unübersichtlichen Konfliktsituationen mit Störung der Namensauflösung führen. Wenn man über die Datei /etc/network/interfaces DNS-Server definieren möchte, sollte man deshalb vorher den NetworkManager deaktivieren.

Dynamische IP-Konfiguration (dhcp)

Beispiel dhcp, Zeile 6: Für eine dynamische IP-Konfiguration wählt man die Methode dhcp (siehe auch DHCP). Weitere Einträge in der /etc/network/interfaces sind für eine solche Konfiguration nicht erforderlich, aber möglich. Der DHCP-Client benutzt ebenfalls resolvconf zur Konfiguration der Namensauflösung; somit sind auch in diesem Fall Konflikte mit NetworkManager möglich!

Achtung!

Methode dhcp kann in Verbindung mit dem Schüsselwort auto dazu führen, dass der Rechner beim Start hängen bleibt oder erst nach einer langen Wartezeit den Startvorgang fortsetzt. Dies geschieht, wenn der DHCP-Client keine Adresse erhält.

Manuelle Konfiguration (manual)

Beispiel enp63s0, Zeilen 14-17: Wählt man als METHODE manual, so wird ifup keine IP-Adresse konfigurieren, aber die Schnittstelle operativ und administrativ einschalten. Dies ist z.B. sinnvoll, wenn eine Netzwerkschnittstelle entweder keine IP-Adresse benötigt (z.B. bei Ports von bridges), oder man die Adresse selbst (z.B. durch eine Berechnung in einem Skript) festlegen will oder auch, wenn man einer Schnittstelle mehrere Adressen zuweisen möchte.

Siehe Abschnitt über die Start/Stopp-Skripte für weitere Beispiele.

Experten-Info:

Bei den Methoden static, dhcp und manual, aber nicht bei auto kann man die MAC-Adresse der Netzwerkkarte ändern durch Hinzufügen folgender Zeile zum iface-Konfigurationsblock: (vgl. Zeilen 14ff der Beispieldatei)

hwaddress 12:34:56:78:9a:bc 

Die hier beispielhaft genannte MAC-Adresse ist nach eigenem Bedarf anzupassen. Wichtig ist es, eine unicast-Adresse zu verwenden, d.h. der erste (ganz links stehende) Wert muss gerade (hier 12) sein.

Anstelle einer konkreten Adresse kann man auch durch Angabe des Spezialwortes random sich eine pseudozufällige Adresse generieren lassen.

Automatische Konfiguration (auto)

Dies ist nur beim Protokoll inet6 möglich und bedeutet die automatische Konfiguration der IPv6-Addressen nach Angaben des Routers (router advertisement). Über Zusatzangaben kann man die Methode der Adressgenerierung beeinflussen:

  • EUI64 nach IETF-Standard RFC4291

    • privext 0 – Der schnittstellenspezifische Teil der Adresse ("interface identifier"), also die niederwertigen 64 Bit werden aus der Ethernet-Adresse abgeleitet. Beim Surfen mit einer solchen Adresse ist man leicht verfolgbar. Für Server ist in aller Regel aber eine zeitlich konstante Adresse vorteilhaft.

  • Privacy extensions nach IETF-Standard RFC4941

    • privext 1 – Es werden zwei global gültige Adressen erzeugt, und zwar zum ersten die zuvor beschriebene zeitlich konstante Adresse und eine zweite mit pseudozufälligem "interface identifier". Die zeitlich konstante Adresse wird bevorzugt, was diese Variante meist uninteressant macht.

    • privext 2 – Es werden wie bei privext 1 zwei Adressen erzeugt, jedoch wird die mit pseudozufälligem "interface identifier" bevorzugt.

  • Stable privacy nach IETF RFC7217 (seit 16.04)

    • ohne "stable secret": Diese Methode benutzt unter Ubuntu 16.04 der NetworkManager als Vorgabe. Bei der Konfiguration über interfaces erreicht man diesen Modus über

      pre-up ip link set addrgenmode none dev $IFACE

      Solange man kein dauerhaftes "stable secret" definiert, wird bei jedem Rechnerstart ein pseudozufälliges erzeugt. Die hieraus abgeleiteten Adressen, sowohl die link-local wie die globalen, sind also – entgegen der Benennung als "stable" – höchst variabel!

    • mit "stable secret": Ein permanentes "stable secret" setzt man mit Root-Rechten[2] in einer Datei im Verzeichnis /etc/sysctl.d/

      # /etc/sysctl.d/60-ipv6-stable-secret.conf
      net.ipv6.conf.default.stable_secret=fd00:1:2:3:4:5:6:7     # IPv6-Adresse beliebig wählbar, sollte vertraulich bleiben!

      oder in der Datei /etc/network/interfaces per sysctl:

      # /etc/network/interfaces
      iface RFC4291 inet6 auto
        privext 0
      iface RFC4941fix inet6 auto
        privext 1
      iface RFC4941var inet6 auto
        privext 2
      iface RFC7217var inet6 auto
        privext 0
        pre-up ip link set addrgenmode none dev $IFACE
      iface RFC7217fix inet6 auto
        privext 0
        pre-up ip link set addrgenmode none dev $IFACE
        pre-up sysctl -w net.ipv6.conf.$IFACE.stable_secret=fd00:1:2:3:4:5:6:7

Hinweis:

  • Die Methode auto hat nichts mit dem Schlüsselwort auto zu tun!

  • Die Methode manual darf nicht als Gegensatz zum Schlüsselwort auto aufgefasst werden!

Anwendung der Konfigurationen

  • Mit einer Zeile in der Datei /etc/network/interfaces der folgenden Form wird die Schnittstelle beim Bootvorgang durch den Init-Prozess gestartet, vgl. Zeilen 3 und 18 der Beispieldatei.

    auto SCHNITTSTELLEN-NAME

    Für SCHNITTSTELLEN-NAME ist der richtige Name zu verwenden und man benötigt einen iface-Konfigurationsblock, dessen KONFIGURATIONS-NAME gleich lautet mit SCHNITTSTELLEN-NAME.

  • Soll eine Schnittstelle nicht beim Bootvorgang gestartet werden, so lässt man diese Zeile weg.

  • Jede noch nicht konfigurierte Schnittstelle (hier beispielhaft enp7s9) kann im laufenden Betrieb über einen Befehl nach folgendem Muster konfiguriert werden [4]:

    #sudo ifup SCHNITTSTELLEN-NAME=KONFIGURATIONS-NAME
    sudo ifup enp7s9=lan   # verwendet Zeilen 8-12 aus Beispieldatei 1 

    Achtung!

    Zu Beachten ist: Der Name der Schnittstelle enp7s9 kommt in der Beispieldatei gar nicht vor! NetworkManager wird deshalb diese Schnittstelle als seine Aufgabe betrachten, sofern man es ihm nicht verbietet. Beachte NetworkManager deaktivieren, sonst Fehlfunktion möglich!

  • Wenn man eine Konfiguration mit dem Namen der Schnittstelle benannt hat, kann man den Start dieser Schnittstelle vereinfachten zu:

    sudo ifup enp63s0     # Kurzform von ifup enp63s0=enp63s0 
  • Zum Stoppen einer Schnittstelle verwendet man ifdown:

    sudo ifdown enp63s0 
  • Man kann im laufenden Betrieb die Konfiguration jeder Schnittstelle ändern, indem man sie zuerst mit ifdown stoppt und dann mit anderer Konfiguration mittels ifup wieder startet:

    sudo ifdown enp63s0
    sudo ifup enp63s0=lan 

ifup und ifdown kann man mit den zusätzlichen Optionen --force und -v aufrufen:

  • ifup --force SCHNITTSTELLEN-NAME wird die Schnittstelle konfigurieren, obwohl diese bereits durch ifupdown konfiguriert wurde.

  • ifdown --force SCHNITTSTELLEN-NAME wird die Schnittstelle dekonfigurieren, obwohl sie nach Meinung von ifupdown nicht konfiguriert ist.

  • ifup -v SCHNITTSTELLEN-NAME bzw. ifdown -v SCHNITTSTELLEN-NAME (-v wie verbose) berichten ausführlich, was sie machen.

Die Befehle ifup und ifdown funktionieren nur bei Netzwerk-Schnittstellen mit Eintrag in /etc/network/interfaces. Bei Schnittstellen, die mit einem anderen Netzwerk-Konfigurationsprogramm verwaltet werden, sind sie unwirksam.

Die vorstehenden Ausführungen reichen bereits aus, um mit der Datei /etc/network/interfaces sinnvoll arbeiten zu können.

Die diesem Hinweis folgenden Informationen richten sich an fortgeschrittene und erfahrene Benutzer.

Schlüsselworte

Im Folgenden werden Schlüsselworte und ihre Verwendung erklärt:

iface

Mit dem Schlüsselwort iface leitet man einen Konfigurationsblock ein. Er kann ggf. zusätzliche Zeilen umfassen und endet vor einer Zeile mit einem der o.g. Schlüsselwörter. In den zusätzlichen Zeilen kann man Konstante mit symbolischem Namen und Wert vereinbaren sowie für jede Phase des Konfigurationsvorganges (pre-up, post-up, pre-down, post-down) ausführbare Kommandos hinterlegen. Man darf ausserdem up als Synonym für post-up und down als Synonym für pre-down verwenden. Die vereinbarten Konstanten und einige weitere Informationen werden als Shell-Variablen an die ausführbaren Kommandos und die Start/Stopp-Skripte übergeben; zur Erläuterung dient folgendes Beispiel:

iface config1 inet dhcp
  const-1 Muster-ohne-Wert
  pre-up sysctl -w net.ipv6.conf.$IFACE.disable_ipv6=0
  up ip -6 addr replace 2001:db8::1/64 dev $IFACE || true
  up ip -4 addr replace 192.168.255.255/32 dev $IFACE || true
  up ip -4 addr replace 192.168.178.22/24 dev $IFACE || true
  down ip addr flush dev $IFACE

Als ausführbare Programme sind prädestiniert: sysctl zur Änderung von Kernel-Variablen und ip, das allgemeine Dienstprogramm für Netzwerkaufgaben unter Linux. Im Grunde ist jede ausführbare Datei möglich, ausgenommen jedoch ifup und ifdown!

Das Beispiel zeigt die Zuweisung mehrerer – hier insgesamt vier – IP-Adressen; eine wird beim Start mit ifup per DHCP bezogen und 3 weitere werden statisch über die Kommandos in den mit up beginnenden Zeilen definiert. Die Kernel-Variable disable_ipv6=0 ist erforderlich, weil sonst keine IPv6-Adresse zugewiesen werden kann. Beim Stopp mit ifdown werden wegen der mit down beginnenden Zeile alle IP-Adressen von der Schnittstelle entfernt.

Hinweis:

Die Form up BEFEHL || true ist ein oft angewendetes Idiom. Es verhindert den Fehlschlag des gesamten Konfigurationsvorgangs, wenn ein einzelner Befehl fehlschlägt.

Bei der Aktivierung dieser Konfiguration, z.b. für eine Schnittstelle enp63s0 mittels

sudo ifup enp63s0=config1 

werden von ifup zunächst die Konstanten als Shell-Variablen gesetzt:

Shell-Variablen für Start-/Stopp-Skripte
Konstante Shell-Variable Wert im Beispiel
KONFIGURATIONS-NAME $LOGICAL config1
PROTOKOLL $ADDRFAM inet
METHODE $METHOD dhcp
SCHNITTSTELLEN-NAME $IFACE enp63s0
Phase $PHASE pre-up, post-up, pre-down, post-down (in zeitlicher Folge)
const-1 $IF_CONST_1 Muster-ohne-Wert
EIGENE KONSTANTE Bildung des Namens der Shell-Variablen: Aus dem Namen der Konstanten werden alle nicht-ASCII-Buchstaben und alle Sonderzeichen außer Binde- und Unterstrich entfernt. Kleinbuchstaben werden zu Großbuchstaben. Der Bindestrich „-“ wird zum Unterstrich „_“. „$IF_“ wird voran gestellt.

Es gibt noch einige weitere, hier nicht behandelte Konstanten.

Anschließend werden die ausführbaren Kommandos in folgender Reihenfolge durchlaufen:

Reihenfolge der Befehle beim Start (ifup) einer Schnittstelle
Phase Aktion
pre-up Kommandos aus der Datei interfaces, die mit pre-up beginnen
Skripte im Verzeichnis /etc/network/if-pre-up.d/
up interne Aktionen von ifup gemäß PROTOKOLL und METHODE, insbesondere:
stets: /bin/ip link set dev $IFACE up 2>/dev/null || true
zusätzlich bei Methode dhcp: DHCP-Client starten
zusätzlich bei Methode static: Setzen von IP-Adresse und Leitwegen aus den Variablen $ADDRESS und $GATEWAY
post-up Kommandos aus der Datei interfaces, die mit post-up oder nur mit up beginnen
Skripte im Verzeichnis /etc/network/if-up.d/

Reihenfolge der Befehle beim Stopp (ifdown) einer Schnittstelle
Phase Aktion
pre-down Kommandos aus der Datei interfaces, die mit pre-down oder nur mit down beginnen
Skripte im Verzeichnis /etc/network/if-down.d/
down interne Aktionen von ifdown gemäß PROTOKOLL und METHODE, insbesondere:
/bin/ip link set dev $IFACE down 2>/dev/null || true
post-down Kommandos aus der Datei interfaces, die mit post-down beginnen
Skripte im Verzeichnis /etc/network/if-post-down.d/

Beispiele zur Anwendung selbst definierter Konstanten finden sich im Abschnitt Schlüsselwort mapping und im Abschnitt Start/Stopp-Skripte.

allow-GRUPPENNAME

Schnittstellen können mit Hilfe des Schlüsselwortes allow- zu Gruppen zusammengefasst werden. Im folgenden Beispiel werden die beiden Gruppen auto und hotplug definiert:

auto lo
allow-auto eth0 enp63s0
auto wlp3s0
allow-hotplug wlp3s0 wlan1

Zur Gruppe auto gehören als Mitglieder die Schnittstellen lo, eth0, enp63s3 und wlp3s0; zur Gruppe hotplug gehören die Schnittstellen wlp3s0 und wlan1. Beim Gruppennamen auto gilt die Besonderheit, dass allow-auto und auto Synonyme sind.

Der Gruppenname ist aus Sicht von ifupdown beliebig und haben für ifupdown selbst keinerlei Bedeutung, abgesehen dass man Konfigurationen für alle Gruppenmitglieder mit einem Befehl auslösen kann:

sudo ifup -a --allow=hotplug 

Voraussetzung hierfür ist, dass ifup für jede Schnittstelle aus der Gruppe eine Konfiguration ermitteln kann. Dies erreicht man entweder, indem man als Konfigurationsname den Namen der Schnittstelle wählt oder über einen im nächsten Abschnitt beschriebenen mapping-Block.

Dennoch sind insbesondere die Gruppennamen auto und hotplug wichtige Elemente in der Datei /etc/network/interfaces, da

  • der Init-Prozess systemd ifup -a --allow=auto ausführt und

  • das für Hotplug zuständige Subsystem (udev mit systemd) die Schnittstellen aus der Gruppe hotplug betreut und diese automatisch durch Aufruf von ifup konfiguriert.

Hinweis:

Die Bezeichnung allow nimmt Bezug auf folgende Semantik:

  • ifup -a --allow=hotplug bedeutet: „Ich erlaube (allow) die Bearbeitung aller (-a) Schnittstellen, sofern diese zur Gruppe hotplug gehören.“

  • ifup enp63s0 --allow=hardware bedeutet: „Ich erlaube die Bearbeitung der Schnittstelle enp63s0, sofern diese zur Gruppe hardware gehört.“

Zu beachten ist die inkonsistente Schreibweise!

  • In der Datei /etc/network/interfaces wird allow- mit einem Bindestrich geschrieben.

  • Im Terminal benutzt man beim Aufruf mit ifup traditionell ein Gleichheitszeichen: ifup -a --allow=auto. (Das Gleichheitszeichen darf man durch ein Leerzeichen ersetzen.)

mapping

Die beim Start einer Schnittstelle zu verwendende Konfiguration wird entweder explizit angegeben (ifup SCHNITTSTELLEN-NAME=KONFIGURATIONS-NAME) oder sie wird von ifupdown automatisch berechnet. Diese Berechnung ist durch einen mapping-Block in der Datei interfaces beeinflussbar. Falls man dort keinen mapping-Block definiert, so verwendet ifupdown effektiv als Vorgabe:

# Vorgabe-Mapping von ifup:
mapping *
  script echo

# Allgemeine Struktur eines mapping-Blocks:
# mapping SUCHMUSTER
#  script PROGRAMM
#  map DATEN
#  map …

Als Suchmuster kann man alles verwenden, was die Shell als solches versteht (Shell Glob).SUCHMUSTER wird mit SCHNITTSTELLEN-NAME verglichen; nur falls es passt, wird der mapping-Block auf diese Schnittstelle angewendet, indem das nach script angegebene Programm mit SCHNITTSTELLEN-NAME als einzigem Argument aufgerufen wird. Das Programm muss auf seine Standard-Ausgabe den für diese Schnittstelle zuständigen KONFIGURATIONS-NAME drucken und darf dort sonst nichts ausgeben.

Beim Vorgabe-Mapping passt natürlich * auf jede Schnittstelle und echo als Programm sorgt dann dafür, dass aus dem Aufruf ifup SCHNITTSTELLEN-NAME effektiv ifup SCHNITTSTELLEN-NAME=SCHNITTSTELLEN-NAME wird.

Der mapping-Block kann noch um beliebig viele mit map beginnende Zeilen ergänzt werden. Das für das Mapping zuständige Programm bzw. Skript kann die Angaben nach dem Wort map von seiner Standard-Eingabe lesen und in seiner Entscheidung berücksichtigen.

Hier folgt ein etwas anspruchsvolleres Beispiel, welches viele kabelgebundene Schnittstellen mit derselben Konfiguration versorgt:

mapping en*
  script /root/Skripte/conf-mapper
  map uplink enp63s0
  map bridge-port

iface uplink inet dhcp

iface bridge-port inet manual
  master switch
  pre-up    ip link add name $IF_MASTER type bridge    || true
  pre-up    ip link set  dev $IF_MASTER up             || true
  pre-up    ip link set  dev $IFACE   master $IF_MASTER
  post-down ip link set  dev $IFACE nomaster

Im Beispiel wird von den vielen physischen Schnittstellen eine (enp63s0) vom Router per DHCP konfiguriert, alle anderen werden zu Ports einer Bridge. Auch die Bridge als Schnittstelle wird mit dem Namen switch durch diese Datei automatisch erzeugt. Die Magie steckt im Skript conf-mapper:

#!/bin/sh -e
# /root/Skripte/conf-mapper
: ${1:?}
while read conf pattern _   # erwarte Zeilen '<conf-name> <if-name-pattern>'
  do case $1 in ( ${pattern:-*} ) break; esac; done
echo ${conf:-$1}

Hinweis:

Man kann hinter script nur einen Programm-Namen (ggf. inklusive Pfad), aber keine Verkettung von Programmen und auch kein Programm mit irgendeiner Option oder einem Parameter angeben – man muss die Logik der Konfigurationsfindung leider in ein separates Skript packen!

source und source-directory

Mit Hilfe der Schlüsselworte source bzw. source-directory kann eine andere Text-Datei in die Datei interfaces eingebunden werden bzw. es können alle Dateien aus einem Verzeichnis eingebunden werden. Durch die Aufteilung ergeben sich aber keine neuen Konfigurationsmöglichkeiten. NetworkManager ist auf eine derartige Aufteilung der Datei /etc/network/interfaces nicht vorbereitet; daher wird von einer Nutzung dieser Möglichkeiten abgeraten.

no-auto-down

Eine Schnittstelle mit dieser Kennzeichnung wird beim Herunterfahren des Rechners von der Wirkung des dann ausgeführten Befehls ifdown -a --allow=auto ausgenommen. Dies kann bei Netzwerk-Laufwerken wichtig sein.

no-scripts

Mit no-scripts beginnende Zeilen listen die Schnittstellen auf, für die die Start/Stopp-Skripte in den Verzeichnissen /etc/network/ip-*.d/ nicht ausgeführt werden sollen.

Anwendungsbeispiele

In diesem Abschnitt werden mehrere Punkte, die in der Praxis relevant sein können, zusammengefasst.

Roaming

Dies betrifft Rechner, die sich mit ein- und derselben Netzwerk-Schnittstelle (hier beispielhaft eth0) wechselweise mit unterschiedlichen Netzwerken verbinden sollen. Für jedes Netzwerk kann man eine eigene Konfiguration in der Datei /etc/network/interfaces hinterlegen.

### "auto  eth0" darf nicht aktiviert sein!
### "iface eth0" darf nicht aktiviert sein!
iface home inet dhcp
iface work inet static
    address 10.51.20.42/20

Hierbei wird die Netzwerkschnittstelle eth0 beim Systemstart unkonfiguriert belassen (Keine Zeile auto eth0, keine Zeile iface eth0!).

  • Manuelles Roaming: Nun kann mit dem Befehl [4]

    sudo ifup eth0=work 

    die statische Konfiguration, für das Netzwerk am Arbeitsplatz, gestartet werden. Alternativ dazu ist es auch möglich, mit

    sudo ifup eth0=home 

    die dynamische Konfiguration (z.B. für das Netzwerk zu Hause) zu starten.

  • Ein Wechsel zwischen den Konfigurationen, sofern gleichzeitig mehrere Netze grundsätzlich verfügbar sind, erfolgt nach dem Muster: (Hier beispielhaft: work –> home)

    #sudo ifdown SCHNITTSTELLEN-NAME
    sudo ifdown eth0
    #sudo ifup SCHNITTSTELLEN-NAME=NEUER_KONFIGURATIONS-NAME
    sudo ifup eth0=home 
  • Automatisches Roaming ermöglicht z.B. ein mapping-Block.

Mehrere IP-Adressen

Möglichkeiten, einer Schnittstelle gleichzeitig mehr als eine IP-Adresse zuzuweisen:

  • Adressen durch Aufruf des Programmes ip in mehreren mit up beginnenden Optionszeilen konfigurieren, siehe Beispiel beim Schlüsselwort iface.

  • Mehrere iface-Zeilen mit demselben Konfigurations-Namen in Kombination mit mehreren Optionen address verwenden, zum Beispiel:

       iface multi-addr inet static
         address 192.0.2.44/24
       iface multi-addr inet6 static
         address 2001:db8:dead:beef::197/64
       iface multi-addr inet static
         address 192.168.255.254/30   
  • Zur physischen Schnittstelle (hier beispielhaft eth0) sogenannte virtuelle Schnittstellen definieren: Dieses Verfahren ist veraltet, bietet aber den Vorteil gegenüber den vorgenannten Verfahren, dass man hier für jede Adresse einen eigenen symbolischen Namen erhält. Die virtuellen Schnittstellen müssen mit einem Doppelpunkt und Folgenummer (hier beispielhaft eth0:1) notiert werden:

       iface eth0 inet static
         address 192.0.2.254/24
       iface eth0:1 inet static 
         address 198.51.100.1/24
       auto eth0 eth0:1   

    Eine solche Konfiguration könnte man für einen Server verwenden, der gleichzeitig auf mehreren IP-Adressen unterschiedliche Dienste bereitstellt, z.B. auf 192.0.2.254 einen Webserver und auf 198.51.100.1 einen E-Mail-Server. iptables ist in der Lage, die Schnittstellen über die Namen voneinander zu unterscheiden und ermöglicht damit dienst-spezifische Filtersätze. Für die physische Schnittstelle eth0 wäre auch eine dynamische Konfiguration per DHCP denkbar. Die virtuellen Schnittstellen können nur statische Konfigurationen erhalten und keine andere Rahmenlänge als die physikalische Schnittstelle haben.

  • Eine weitere Möglichkeit zur Konfiguration mehrerer IP-Adressen bietet das im Abschnitt Start/Stopp-Skripte erläuterte Beispiel.

Bündeln von Netzwerkschnittstellen

Zur Erhöhung der Bandbreite kann man mehrere physische Schnittstellen bündeln und dies auch über die Datei /etc/network/interfaces konfigurieren, siehe hierzu: Netzwerkkarten bündeln

Netzwerkbrücke

Siehe Netzwerkbrücke zum Verbinden mehrerer Netzwerke oder auch das Beispiel beim Schlüsselwort mapping.

WLAN-Konfiguration

Die Einrichtung von Funknetzwerken erfolgt über das Programm wpa_supplicant, welches auch vom NetworkManager verwendet wird und auch direkt über die Datei /etc/network/interfaces aufgerufen werden kann.

wpa_supplicant arbeitet mit dem Treiber der WLAN-Interface-Hardware zusammen und kümmert sich selber nur um die Bereitstellung des Netzwerkmediums (layer 2), nicht um die IP-Konfiguration (layer 3). Die IP-Konfiguration erfolgt über Angaben in der Datei /etc/network/interfaces; dabei muss der Name der Konfiguration mit dem Namen der Schnittstelle übereinstimmen:

  • Grundschema einer interfaces für ein einziges WLAN (managed-mode von wpa_supplicant):

    iface wlan0 inet dhcp
      wpa-conf /root/wpa_supplicant.conf
    auto wlan0

    Man gibt einfach über die Konstante wpa-conf dem Skript von wpa_supplicant den (grundsätzlich beliebigen, sofern beim Rechnerstart erreichbaren) Speicherort einer Konfigurationsdatei für ein einzelnes WLAN an. Diese Konfigurationsdatei muss man natürlich gemäß dem Wiki-Artikel für wpa_supplicant mit Inhalt füllen.

  • mehrere WLAN (roaming-mode von wpa_supplicant)

    iface wlan1 inet manual
      wpa-roam /root/wpa_supplicant_multi.conf
    auto wlan1
    iface default inet6 auto
    iface default inet  dhcp

    Die Konfigurationsdatei wpa_supplicant_multi.conf enthält die Daten (SSID, Passwort, etc.) für mehrere Netzwerke. Die Netzwerke kann man in dieser Datei mit einem eigenen ID-String (id_str) kennzeichnen; wpa_supplicant startet dann /sbin/ip -v --force $IFACE=ID-STR-WERT. Andernfalls verwendet wpa_supplicant den Wert default als id_str und startet /sbin/ip -v --force $IFACE=default. Die iface-Konfigurationen mit dem jeweiligen, dem id_str entsprechendem Namen müssen in der Datei interfaces existieren. Der Wiki-Artikel für wpa_supplicant enthält weitere Angaben. Die Konstante wpa-roam funktioniert nur in einer iface-Konfiguration mit der Methode manual.

  • Bei der Verwendung von wpa_supplicant ist es ebenfalls möglich, die gesamte Konfiguration in der /etc/network/interfaces zu hinterlegen. Hierzu werden die Optionen, die üblicherweise in die wpa_supplicant.conf eingetragen werden, mit einem vorangestelltem wpa- eingetragen.

    Achtung!

    Von dieser Vorgehensweise wird abgeraten, weil dann die WLAN-Passworte für jeden lesbar in der (traditionell world-readable!) Datei /etc/network/interfaces stehen.

Hinweis:

Zur Nutzung von wpa_supplicant muss manchmal noch ein „Treiber“ (driver) gewählt werden. Hiermit ist nicht das Kernel-Modul für die Hardware der WLAN-Schnittstelle gemeint, sondern die „Sprache“, die wpa_supplicant zur Kommunikation mit diesem Hardware-Treiber und dem Kernel verwendet. wpa_supplicant kennt die in folgender Tabelle genannten Treiber.

Wird kein Treiber angegeben, wird das Start/Stopp-Skript von wpa_supplicant automatisch den NETLINK-Treiber nl80211 und den generischen Treiber wext (in dieser Reihenfolge) aussuchen. Das funktioniert bei vielen Karten sehr gut (und ist auch empfohlen).

Wenn es mit dieser Standardeinstellung nicht funktioniert, kann man einen in der Tabelle genannten Treiber mittels der Konstante wpa-driver explizit angeben oder wpa_supplicant selbst aus den Quellen übersetzen:

iface wlan4 inet dhcp
        wpa-driver wext
        wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

Software-Schnittstellen (driver) von wpa_supplicant
Treiber Beschreibung
nl80211 Linux nl80211/cfg80211
wext Linux wireless extensions (generic)
wired wired Ethernet driver
none no driver (RADIUS server/WPS ER)
(weitere) erfordert Kompilierung von wpa_supplicant aus den Quellen

VPN

Es gibt sehr viele Verfahren für VPN. Gemeinsam ist allen der Aufbau einer getunnelten Verbindung über eine gesonderte Netzwerk-Schnittstelle und eine Änderung der Default-Route. Meistens will man den getunnelten Verkehr auch verschlüsseln.

Wegen der Vielfalt der Verfahren ist hier nur ein allgemeiner Überblick zur Konfiguration über interfaces möglich.

Achtung!

Bei der Konfiguration eines VPN über die Datei /etc/network/interfaces darf NetworkManager auf keinen Fall parallel mitlaufen!

NetworkManager überwacht die Default-Route des Systems und wird jede fremde Änderung korrigieren; aus diesem Grund wird eine VPN-Einrichtung über interfaces bei aktivem NetworkManager höchstens fehlerhaft funktionieren.

Grundschema:

iface VPN inet manual
# pre-up     ip link add dev CHNITTSTELLEN-NAME type SCHNITTSTELLEN-TYP
  up         <Befehl zum Aufbau des VPN>
  down       <Befehl zum Abbau des VPN>
# post-down  ip link del dev SCHNITTSTELLEN-NAME

Die Befehle zum Auf- und Abbau des VPN sind spezifisch für die ausgewählte VPN-Technik und enthalten auch die benötigten Optionen und Angaben zu Konfigurationsdateien. Meistens übernehmen diese Befehle auch die Aufgabe der vorherigen Erzeugung und nachträglichen Vernichtung der Tunnel-Schnittstelle, so dass die pre-up- und post-down-Zeilen entfallen.

Der Artikel WireGuard enthält konkrete Beispiele.

Für das bei deutschen Hochschulen oft verwendete Verfahren Cisco-IPsec sieht das konkret z.B. so aus:

iface UNI inet manual
  up    vpnc-connect    VPN-UNI
  down  vpnc-disconnect

Die Programme vpnc-connect und vpnc-disconnect gehören zum Paket vpnc, welches zusätzlich zum Standard installiert[3] werden muss. Seine Konfiguration liest vpnc aus der Datei /etc/vpnc/VPN-UNI.conf, welche man gemäß dem Wiki-Artikel zu vpnc mit Inhalt füllen muss.

Bei einer bereits bestehenden IP-Verbindung, beispielsweise über wlan0, verbindet man sich mit dem VPN der Uni über den Befehl[4]:

sudo ifup UNI 

Man kann das VPN als zusätzliche Verbindung auf- und dann auch wieder mittels sudo ifdown UNI sanft abbauen und zur Verbindung über wlan0 zurückkehren.

VPN-Roaming wird im Beispiel zu inherits im Abschnitt Start/Stopp-Skripte behandelt.

Achtung!

Bei der Nutzung eines VPN: Vergiss IPv6 nicht!

Start/Stopp-Skripte

Es gibt mehrere Methoden, über die Datei interfaces Skripte oder Shell-Befehle auszuführen. Dieser Abschnitt stellt die Methoden durch Beispiele vor. Für das Verständnis werden die Abschnitte Schlüsselwort iface und Schlüsselwort mapping benötigt.

Befehle in interfaces

  • Mit dem Beispiel

    iface wan inet static
      address 203.0.113.99/32
      up   systemctl restart apache2
      down systemctl    stop apache2

    wird der Webserver apache2 neu gestartet, sobald eine Netzwerkschnittstelle mit der Konfiguration wan gestartet wurde.

  • Weitere Beispiele siehe beim Schlüsselwort iface und Schlüsselwort mapping.

Skripte in /etc/network/if-*.d/

Dies sind Start/Stopp-Skripte im engeren Sinne. Etliche Programme hinterlegen ihre Skripte in den Verzeichnissen /etc/network/if-*.d/ und man kann dort auch eigene Skripte ablegen. Diese Skripte werden von der System-Shell, bei Ubuntu dash (nicht: bash!), ausgeführt.

Hier folgt beispielhaft ein Skript zur Zuweisung mehrerer Adressen zu einer Netzwerkschnittstelle, welches aus der interfaces aufgerufen wird durch:

iface config inet manual
  addresses 2001:db8::1/64  192.168.255.255/32  192.168.178.22/24

Das folgende Skript muss in alle vier Verzeichnisse /etc/network/if-*.d/ kopiert werden oder besser durch Symlinks verfügbar sein; es wertet die Konstante addresses aus interfaces als Shell-Variable $IF_ADDRESSES aus:

#!/bin/sh -e
# assign addresses from line 'addresses …' in iface-stanza to interface
test -n "$IF_ADDRESSES" || exit 0
case "$PHASE"
in ( pre-up  )	# enable IPv6 iff IPv6-address given
		echo "$IF_ADDRESSES" | grep -q -e':' \
		  && sysctl -w net.ipv6.conf.$IFACE.disable_ipv6=0
;; (post-up  )	for addr in $IF_ADDRESSES
		  do ip addr replace "$addr" dev "$IFACE" || true ; done
;; ( pre-down)	ip addr flush dev "$IFACE"
;; (post-down)	# reset disable_ipv6 to default
		X=$( sysctl -n net.ipv6.conf.default.disable_ipv6 )
		sysctl -w net.ipv6.conf.$IFACE.disable_ipv6=$X
esac

Dieses Skript verzichtet bewusst auf einige sinnvolle Blockierungen unsinniger Eingaben, damit das Prinzip dieser Skripte deutlich wird.

inherits – Konfigurationen vererben

ifupdown kennt das Spezialwort inherits, mit dessen Hilfe man aus einem iface-Konfigurationsblock auf einen anderen, bereits definierten iface-Konfigurationsblock verweisen und dessen Konstanten und Optionen einbinden kann.

Damit ist beispielsweise leicht eine Umschaltung zwischen mehreren VPN-Konfigurationen von vpnc möglich:

iface VPNC inet manual
  up    vpnc-connect    --ifname $LOGICAL $IF_VPN_CONF
  down  vpnc-disconnect
iface UNI inherits VPNC
  VPN-conf  UNI
iface work inherits VPNC
  VPN-conf  Arbeit
iface R2D2 inherits VPNC
  VPN-conf  Kino

Nach diesem Schema macht man beliebig viele VPN-Konfigurationen in der interfaces verfügbar und spart sich das Kopieren der gemeinsamen Aktivierungs-/Deaktivierungsbefehle in jede Konfiguration. Die Aktivierung des einzelnen VPN erfolgt wie gewohnt über „sudo ifup UNI“ usw.

Luxus, aber manchmal hilfreich ist hier die Benennung der Tunnel-Schnittstelle nach dem VPN über den optionalen Zusatz --ifname $LOGICAL.

Das hier gezeigte Muster kann man auch auf das WLAN-Roaming übertragen.

Aktivierung

  • Damit die neuen Einstellungen sofort wirksam werden, wird oft empfohlen, den Job networking mit einem SysV-Init-Befehl neu zu starten [4]:

    sudo /etc/init.d/networking restart    # Nicht verwenden! Veraltet, gefährlich und unnötig 

    Diese Methode ist veraltet, gefährlich und unnötig. Bei über Netzwerk eingebundenen Dateisystemen besteht die Gefahr von Datenverlusten. Dies betrifft sowohl den Rechner, dessen Datei interfaces man ändern möchte als auch jeden Rechner, der mit diesem verbunden ist!

  • Auch die Dienstprogramme von upstart bzw. systemd sollte man nicht verwenden.

  • Stattdessen sollte man für jede einzelne Schnittstelle, deren Konfiguration man verändern will, vor der Bearbeitung der Datei interfaces

    • alle Netzwerkverbindungen beenden und danach

    • die Schnittstelle stoppen und

    • nach der Bearbeitung wieder starten:

      # sudo umount NETZWERK-DATEISYSTEM   # für jedes eingebundene Netzwerk-Dateisystem
      sudo ifdown eth0
      # (jetzt Konfiguration für eth0 in der interfaces bearbeiten.)
      sudo ifup eth0 
  • Wenn man nach sorgfältigem Nachdenken wirklich alle Schnittstellen in der Gruppe auto neu starten möchte, sollte man dabei jedenfalls die Schnittstelle lo nicht stoppen:

    sudo ifdown -a --exclude=lo
    sudo ifup -a 

Hinweis:

Der Jobname networking bezieht sich bei SysV, Upstart und systemd nur auf das ifupdown-System. NetworkManager und andere Netzwerk-Konfigurationsprogramme werden durch einen Neustart von networking entgegen seines mehr versprechenden Namens nicht neu gestartet.

Zusätzliche Aspekte

Die folgenden Abschnitte enthalten Zusatzinformationen und Grundlagenwissen. Sie können für die Bearbeitung der Datei /etc/network/interfaces hilfreich sein.

Eigenschaften der beiden Methoden

Die beiden bei Ubuntu verwendeten Methoden zur Netzwerk-Konfiguration haben sehr unterschiedliche Eigenschaften und ergänzen sich daher:

ifupdown …

  • ist die klassische Methode von Debian und dessen Derivaten, somit auch Ubuntu,

  • besteht aus den Komponenten

    • dem Programm ifup (welches auch als ifdown bzw ifquery aufgerufen werden kann),

    • dessen Konfigurationsdatei /etc/network/interfaces,

    • einen Satz von Skripten in den Unterverzeichnissen if-pre-up.d/, if-up.d/, if-down.d/ und if-post-down.d/ im Verzeichnis /etc/network/, die spezielle Aufgaben bei die Initialisierung einer Netzwerkverbindung übernehmen,

    • einigen weiteren Dateien, mit denen sich ifupdown seinen inneren Status merkt,

  • ermöglicht eine sehr „systemnahe“ Konfiguration mit allen überhaupt vom Linux-Kernel bereitgestellten Feinheiten,

  • macht nichts von sich aus, sondern nur nach explizitem Aufruf,

  • hat selbst kaum Netzwerk-Knowhow fest eingebaut,

  • kümmert sich nur um die ihm explizit genannten Netzwerk-Schnittstellen,

  • ist nur über eine Kommandozeile bedienbar.

NetworkManager …

  • besteht aus

    • einem daemon, also ständig aktivem Hintergrund-Prozess und

    • mehreren Front-ends zur Beobachtung und Bedienung des Hintergrund-Prozesses,

  • versucht sich, um alle Netzwerk-Schnittstellen des Systems zu kümmern, konfiguriert diese und überwacht sie auch im Betrieb,

  • versucht eine einmal aktivierte Verbindung ständig verfügbar zu erhalten und weitere mögliche Verbindungen aufzubauen,

  • verfügt über eigene nichttriviale Prozeduren zum Aufbau von Verbindungen,

  • ist über eine Kommandozeile bedienbar, bietet zusätzlich aber auch eine grafische Bedienschnittstelle,

  • benutzt einige vom ifupdown-Mechanismus bereitgestellte Ressourcen: die o.g. Skripte in /etc/network/if-up.d/ (bzw. /etc/network/if-post-down.d/) werden auch vom NetworkManager aufgerufen.

Entscheidungskriterien

Für die Entscheidung, ob man eine Netzwerk-Schnittstelle über ifup oder über den NetworkManager konfigurieren sollte, können folgende Hinweise hilfreich sein:

Für Arbeitsstationen ist in der Regel der NetworkManager die bessere Wahl. Dies trifft in besonderem Maße zu für Laptops bzw. bewegliche Geräte, mit denen man bewusst wechselweise verschiedene WLANs benutzen möchte; jedoch ist auch in diesem Fall eine Netzwerk-Konfiguration über interfaces möglich, sogar mit graphischer Unterstützung. Bei Desktop-Rechnern, die stets über ein LAN-Kabel mit immer demselben Netzwerk gekoppelt werden, kann auch eine Konfiguration über interfaces nützlich sein. Bei Servern und Routern ist meist NetworkManager eine schlechte Idee, da man hier Wert auf eine präzise Kontrolle aller Netzwerk-Eigenschaften legt.

NetworkManager deaktivieren

Hierfür gibt es mehrere Möglichkeiten:

  • Den NetworkManager kann man über das Dienstprogramm des Init-Prozesses zeitweise stoppen und wieder starten. Von dieser Methode wird bei der Arbeit mit interfaces ausdrücklich abgeraten, da NetworkManager beim Stopp sich kompliziert verhält:

    • Netzwerk-Schnittstellen werden nicht wieder in den Zustand beim Rechnerstart zurück versetzt.

    • Verbindungen werden manchmal, aber nicht immer beendet.

    • Die von ihm gestarteten Dienste (dnsmasq, resolvconf) werden manchmal, aber nicht immer beendet.

    • Das konkrete Verhalten des NetworkManagers hängt ab von seiner Programmversion, aber auch von der konkreten Situation des Systems.

  • NM komplett abschalten: Wenn der NetworkManager beim Rechnerstart nicht wieder starten soll, muss man den Init-Prozess konfigurieren [4]:

sudo systemctl disable MetworkManager.service
sudo systemctl disable network-manager 

Alternativ kann man auch den NetworkManager komplett deinstallieren.

  • NM für bestimmte Schnittstellen deaktivieren: Hierfür benötigt man den Namen oder die aktive Ethernet-Adresse der Schnittstelle.

    Hinweis:

    Exkurs: Eine Liste aller Schnittstellen des Systems erhält man mit dem Befehl [4]: ip link

    • Man legt man im Verzeichnis /etc/NetworkManager/conf.d/ mit Root-Rechten [2] mittels eines Editors [1] eine Datei (hier als Beispiel mit dem Namen unmanaged-devices.conf, der Name vor der obligatorischen Endung .conf kann aber beliebig lauten) an:

      1
      2
      3
      # /etc/NetworkManager/conf.d/unmanaged-devices.conf
      [keyfile]
      unmanaged-devices=mac:00:22:68:1c:59:b1;mac:00:1E:65:30:D1:C4;interface-name:eth2
      

      NetworkManager muss nun seine geänderte Konfiguration neu einlesen. Dies erreicht man im laufenden Betrieb durch

      sudo systemctl restart NetworkManager 

  • NM für alle in interfaces genannten Schnittstellen deaktivieren: Dies ist durch die Standardeinstellung des NM vorgeben: NM wertet die Datei /etc/network/interfaces aus und verwaltet die dort genannten Schnittstellen nicht. Man sollte allerdings beachten, dass man durchaus Netzwerk-Schnittstellen über die Datei /etc/network/interfaces konfigurieren kann, obwohl der Name der Schnittstelle nicht in der Datei auftaucht (s.o. Mapping)!

Programm-Dokumentation

Die manpages zu ifupdown auf dem eigenen Rechner liefern wertvolle Informationen und sollten vor einer Bearbeitung der Datei /etc/network/interfaces stets konsultiert werden. Dies ist insbesondere wichtig, wenn man mit unterschiedlichen Versionen arbeitet.

man ifup
man interfaces 

Verwendete Programmversionen beim Test im Feb. 2017 bzw. März 2021
Abfrage der Programmversion Ausgabe für 16.04 Ausgabe für 20.04
lsb_release -ds Ubuntu 16.04.2 LTS Ubuntu 20.04.2 LTS
date -I 2017-02-28 2021-03-07
ifup --version | head -n1 ifup version 0.8.10ubuntu1.2 ifup version 0.8.35ubuntu1
nmcli --version | head -n1 nmcli-Werkzeug, Version 1.2.2 nmcli-Werkzeug, Version 1.22.10
ip -V | head -n1 ip utility, iproute2-ss151103 ip utility, iproute2-ss200127
wpa_supplicant -v | head -n1 wpa_supplicant v2.4 wpa_supplicant v2.9
sysctl -V | head -n1 sysctl von procps-ng 3.3.10 sysctl von procps-ng UNKNOWN
vpnc --version | head -n1 vpnc version 0.5.3r550-2build1

Intern

  • NetworkManager – Standardprogramm bei Ubuntu-Desktops zur automatischen Einrichtung von Netzwerk-Verbindungen

  • systemd-networkd – Standardprogramm bei Ubuntu-Servern zur Netzwerk-Konfiguration

  • WLAN – Übersicht zum Thema WLAN

Extern

Diese Revision wurde am 2. Juli 2021 12:56 von Newubunti erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Netzwerk, System