interfaces
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Ubuntu 20.04 Focal Fossa
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
bei einer Server-Installation systemd-networkd,
bei einer Desktop-Installation NetworkManager.
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¶
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
Man kontrolliere, ob die systemd-Unit networking.service aktiviert wurde (enabled) bzw. aktiviere diese.
systemd-networkd sollte beim Hochlauf nicht gestartet werden.
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:
allow-auto (Synonym zur Spezialform auto), allow-hotplug, allow-GRUPPENNAME
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 SchnittstelleSCHNITTSTELLEN-NAME
angewendet werden soll, wählt man zweckmäßigerweise alsKONFIGURATIONS-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, welchesifup
beherrscht (inet
,inet6
,ipx
odercan
). Dies ist abhängig von den Geräten, mit denen kommuniziert werden soll. Außerdem mussifup
ein low-level-Konfigurationsprogramm zur Verfügung stehen: Fürinet
undinet6
ist dies das auf jedem Standard-Ubuntu-System installierte Programmip
, 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ürPROTOKOLL
: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ürinet
genannten Methoden nochauto
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) alsMETHODE
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 Bereich192.168.0.1
bis192.168.0.254
. Die erste und die letzte Adressse eines IP-Netzwerks, also im Beispiel192.168.0.0
und192.168.0.255
, gehören zwar ebenfalls zum Netzwerk192.168.0.0/24
, sind aber beide als „Broadcast-Adresse“ reserviert und grundsätzlich nicht als Unicast-Adressen nutzbar. Man sollte die moderne Schreibweise192.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 unteradresse
die Prefixlänge nicht angegeben hat. Im Beispiel lautet die Netzmaske255.255.255.0
, d.h. alle Rechner, bei denen die ersten drei Tripel (also in diesem Beispiel192.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 Routinggateway
– 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 beiprivext 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üsselwortauto
zu tun!Die Methode
manual
darf nicht als Gegensatz zum Schlüsselwortauto
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, dessenKONFIGURATIONS-NAME
gleich lautet mitSCHNITTSTELLEN-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 mittelsifup
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 unddas für Hotplug zuständige Subsystem (udev mit systemd) die Schnittstellen aus der Gruppe
hotplug
betreut und diese automatisch durch Aufruf vonifup
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 Gruppehotplug
gehören.“ifup enp63s0 --allow=hardware
bedeutet: „Ich erlaube die Bearbeitung der Schnittstelleenp63s0
, sofern diese zur Gruppehardware
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 mitup
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 beispielhafteth0: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 auf198.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 Schnittstelleeth0
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 vonwpa_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 verwendetwpa_supplicant
den Wertdefault
alsid_str
und startet/sbin/ip -v --force $IFACE=default
. Die iface-Konfigurationen mit dem jeweiligen, demid_str
entsprechendem Namen müssen in der Datei interfaces existieren. Der Wiki-Artikel für wpa_supplicant enthält weitere Angaben. Die Konstantewpa-roam
funktioniert nur in einer iface-Konfiguration mit der Methodemanual
.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 vorangestelltemwpa-
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 Konfigurationwan
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 alsifdown
bzwifquery
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 |
Links¶
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¶
Kapitel 5. Netzwerkkonfiguration 🇩🇪 – Debian-Referenz