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:

  1. ⚓︎ Einen Editor öffnen

  2. ⚓︎ Root-Rechte erlangen

  3. ⚓︎ Installation von Programmen, optional

  4. ⚓︎ Ein Terminal öffnen

Inhaltsverzeichnis
  1. Installation
  2. Aufbau
    1. Statische IP-Konfiguration (static)
    2. Dynamische IP-Konfiguration (dhcp)
    3. Manuelle Konfiguration (manual)
    4. Automatische Konfiguration (auto)
  3. Anwendung der Konfigurationen
  4. Schlüsselworte
    1. iface
    2. allow-GRUPPENNAME
    3. mapping
    4. source und source-directory
    5. no-auto-down
    6. no-scripts
  5. Anwendungsbeispiele
    1. Roaming
    2. Mehrere IP-Adressen
    3. Bündeln von Netzwerkschnittstellen
    4. Netzwerkbrücke
    5. WLAN-Konfiguration
    6. VPN
  6. Start/Stopp-Skripte
    1. Befehle in interfaces
    2. Skripte in /etc/network/if-*.d/
    3. inherits – Konfigurationen vererben
  7. Aktivierung
  8. Zusätzliche Aspekte
    1. Eigenschaften der beiden Methoden
    2. Entscheidungskriterien
    3. NetworkManager deaktivieren
  9. Programm-Dokumentation
  10. Links
    1. Intern
    2. Extern

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:

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.

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:

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:

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

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

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

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!

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!).

Mehrere IP-Adressen

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

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:

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

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

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 …

NetworkManager …

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:

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

Alternativ kann man auch den NetworkManager komplett deinstallieren.

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

Extern