109.2 Lektion 1
Zertifikat: |
LPIC-1 |
---|---|
Version: |
5.0 |
Thema: |
109 Netzwerkgrundlagen |
Lernziel: |
109.2 Persistente Netzwerkkonfiguration |
Lektion: |
1 von 2 |
Einführung
In jedem TCP/IP-Netzwerk muss jeder Knoten seine Netzwerkverbindung so konfigurieren, dass sie mit den Netzwerkanforderungen übereinstimmt, sonst ist keine Kommunikation möglich. Daher muss der Systemadministrator die Grundkonfiguration bereitstellen, damit das Betriebssystem in der Lage ist, die entsprechende Netzwerkschnittstelle einzurichten, um sowohl sich selbst wie auch die Grundfunktionen des Netzwerks bei jedem Start zu erkennen.
Die Netzwerkeinstellungen sind unabhängig von den Betriebssystemen, aber diese haben ihre eigenen Methoden, um die Einstellungen zu speichern und anzuwenden. Linux-Systeme verlassen sich auf Konfigurationen, die in Klartextdateien im Verzeichnis /etc
gespeichert sind, um die Netzwerkverbindung während des Boot-Vorgangs herzustellen. Es ist wichtig zu wissen, wie diese Dateien verwendet werden, um einen Verbindungsverlust aufgrund einer lokalen Fehlkonfiguration zu vermeiden.
Die Netzwerkschnittstelle
Mit Netzwerkschnittstelle oder Network Interface bezeichnet das Betriebssystem den Kommunikationskanal, der für die Arbeit mit der an das System angeschlossenen Netzwerkhardware konfiguriert ist, z.B. ein Ethernet- oder WiFi-Gerät. Eine Ausnahme bildet die Loopback-Schnittstelle, die das Betriebssystem verwendet, um eine Verbindung zu sich selbst herzustellen. Der Hauptzweck einer Netzwerkschnittstelle besteht jedoch darin, eine Route bereitzustellen, über die lokale Daten gesendet und entfernte Daten empfangen werden. Wenn die Netzwerkschnittstelle nicht richtig konfiguriert ist, kann das Betriebssystem nicht mit anderen Rechnern im Netzwerk kommunizieren.
In den meisten Fällen sind die richtigen Schnittstelleneinstellungen entweder standardmäßig definiert oder werden bei der Installation des Betriebssystems angepasst. Dennoch müssen Sie diese Einstellungen oft überprüfen oder sogar ändern, wenn die Kommunikation nicht richtig funktioniert oder wenn das Verhalten der Schnittstelle Anpassungen erfordert.
Es gibt viele Linux-Befehle, um Netzwerkschnittstellen im System aufzulisten, aber nicht alle sind in allen Distributionen verfügbar. Der Befehl ip
gehört jedoch zur Grundausstattung aller Linux-Distributionen. Der vollständige Befehl zum Anzeigen der Schnittstellen lautet:
$ ip link show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: enp3s5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 00:16:3e:8d:2b:5b brd ff:ff:ff:ff:ff:ff
Falls verfügbar, können Sie auch den Befehl nmcli device
nutzen:
$ nmcli device DEVICE TYPE STATE CONNECTION enp3s5 ethernet connected Gigabit Powerline Adapter lo loopback unmanaged --
Die in den Beispielen gezeigten Befehle ändern keine Einstellungen im System und können daher auch von einem unprivilegierten Benutzer ausgeführt werden. Beide Befehle listen zwei Netzwerkschnittstellen auf: lo
(die Loopback-Schnittstelle) und enp3s5
(eine Ethernet-Schnittstelle).
Desktops und Laptops mit Linux haben in der Regel zwei oder drei vordefinierte Netzwerkschnittstellen: eine für die virtuelle Loopback-Schnittstelle und die anderen, die der vom System gefundenen Netzwerkhardware zugeordnet sind. Server und Netzwerkgeräte, die unter Linux laufen, können dagegen Dutzende von Netzwerkschnittstellen haben, aber für alle gelten die gleichen Grundsätze. Die vom Betriebssystem bereitgestellte Abstraktion ermöglicht die Einrichtung von Netzwerkschnittstellen mit denselben Methoden, unabhängig von der zugrundeliegenden Hardware.
Die Kenntnis der Details über die zugrundeliegende Hardware einer Schnittstelle hilft dabei zu verstehen, was vor sich geht, wenn die Kommunikation nicht wie erwartet funktioniert. In einem System mit zahlreichen Netzwerkschnittstellen ist beispielsweise nicht unmittelbar zu erkennen, welche dem WLAN und welche dem Ethernet entspricht. Darum folgt Linux einer Namenskonvention für Schnittstellen, anhand derer Sie erkennen, welche Netzwerkschnittstelle zu welchem Gerät und Anschluss gehört.
Benennung von Schnittstellen
Ältere Linux-Distributionen benannten die Ethernet-Interfaces mit eth0
, eth1
usw., nummeriert in der Reihenfolge, in der der Kernel die Geräte identifiziert. Die drahtlosen Schnittstellen hießen wlan0
, wlan1
usw. Aus dieser Namenskonvention geht jedoch nicht hervor, welcher spezifische Ethernet-Port z.B. mit der Schnittstelle eth0
übereinstimmt. Je nachdem, wie die Hardware erkannt wurde, war es sogar möglich, dass zwei Netzwerkschnittstellen nach einem Neustart die Namen tauschten.
Um diese Zweideutigkeit zu überwinden, nutzen neuere Linux-Systeme eine nachvollziehbare Namenskonvention für Netzwerk-Interfaces, die eine engere Beziehung zwischen dem Schnittstellennamen und der zugrundeliegenden Hardwareverbindung herstellt.
In Linux-Distributionen, die dem Benennungsschema von systemd folgen, beginnen alle Schnittstellennamen mit einem Präfix aus zwei Buchstaben, das den Schnittstellentyp angibt:
en
-
Ethernet
ib
-
InfiniBand
sl
-
Serial line IP (slip)
wl
-
Drahtloses lokales Netzwerk (WLAN)
ww
-
Drahtloses WAN (WWAN)
Das Betriebssystem benennt und nummeriert die Netzwerkschnittstellen nach folgenden Regeln, und zwar in absteigender Priorität:
-
Nach dem vom BIOS oder von der Firmware des verbauten Gerätes bereitgestellten Index, z.B.
eno1
. -
Nach dem Index des PCI-Expresssteckplatzes, wie er vom BIOS oder der Firmware angegeben wird, z.B.
ens1
. -
Nach ihrer Adresse am entsprechenden Bus, z.B.
enp3s5
. -
Nach der MAC-Adresse der Schnittstelle, z.B.
enx78e7d1ea46da
. -
Nach der alten Konvention, z.B.
eth0
.
Sie können also davon ausgehen, dass zum Beispiel die Netzwerkschnittstelle enp3s5
so heißt, weil sie nicht zu den ersten beiden Benennungsmethoden passte — stattdessen wurde sie nach ihrer Adresse im entsprechenden Bus und Steckplatz benannt. Die Geräteadresse 03:05.0
, die die Ausgabe des Befehls lspci
liefert, verrät das zugehörige Gerät:
$ lspci | fgrep Ethernet 03:05.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8110SC/8169SC Gigabit Ethernet (rev 10)
Netzwerkschnittstellen erstellt der Linux-Kernel selbst, aber für die Interaktion mit ihnen gibt es zahlreiche Befehle. Normalerweise erfolgt die Konfiguration automatisch und es besteht keine Notwendigkeit, die Einstellungen manuell zu ändern. Dennoch können Sie dem Kernel über den Namen der Schnittstelle mitteilen, wie er bei der Konfiguration vorgehen soll, falls dies erforderlich ist.
Schnittstellenmanagement
Im Laufe der Jahre wurden einige Programme entwickelt, um mit den vom Linux-Kernel bereitgestellten Netzwerkfunktionen zu interagieren. Obwohl ifconfig
für einfache Schnittstellenkonfigurationen und -abfragen immer noch bereitsteht, gilt der Befehl mittlerweile als veraltet, da er Nicht-Ethernetschnittstellen nur eingeschränkt unterstützt. Der Befehl ip
ersetzt ifconfig
, das es viele andere Aspekte von TCP/IP-Schnittstellen, wie Routen und Tunnel, verwaltet.
Die vielen Möglichkeiten des Befehls ip
können für die meisten Standardaufgaben zu viel sein, daher gibt es Hilfsbefehle, die die Aktivierung und Konfiguration der Netzwerkschnittstellen erleichtern: Die Befehle ifup
und ifdown
konfigurieren Netzwerkschnittstellen auf der Grundlage von Schnittstellendefinitionen, die in der Datei /etc/network/interfaces
zu finden sind. Obwohl Sie diese Befehle auch manuell aufrufen können, werden sie normalerweise automatisch während des Systemstarts ausgeführt.
Alle Netzwerkschnittstellen, die ifup
und ifdown
verwalten, sollten in der Datei /etc/network/interfaces
aufgeführt sein. Das Format der Datei ist einfach: Zeilen, die mit dem Wort auto
beginnen, identifizieren physikalische Schnittstellen, die hochgefahren werden, wenn ifup
mit der Option -a
ausgeführt wird. Der Schnittstellenname folgt auf das auto
in derselben Zeile. Alle Schnittstellen, die mit auto
gekennzeichnet sind, werden beim Booten in der Reihenfolge der Auflistung hochgefahren.
Warning
|
Die von |
Die eigentliche Schnittstellenkonfiguration erfolgt in einer weiteren Zeile, beginnend mit dem Wort iface
, gefolgt von dem Schnittstellennamen, dem Namen der Adressfamilie, die die Schnittstelle verwendet, und dem Namen der Methode zur Konfiguration der Schnittstelle. Das folgende Beispiel zeigt eine einfache Konfigurationsdatei für die Schnittstellen lo
(loopback) und enp3s5
:
auto lo iface lo inet loopback auto enp3s5 iface enp3s5 inet dhcp
Die Adressfamilie sollte inet
für TCP/IP-Netzwerke sein, aber es gibt auch Unterstützung für IPX-Netzwerke (ipx
) und IPv6-Netzwerke (inet6
). Loopback-Schnittstellen verwenden die Konfigurationsmethode loopback
. Mit der Methode dhcp
nutzt die Schnittstelle die IP-Einstellungen, die der DHCP-Server des Netzwerks bereitstellt. Die Einstellungen aus der Beispielkonfiguration erlauben die Ausführung des Befehls ifup
mit dem Schnittstellennamen enp3s5
als Argument:
# ifup enp3s5 Internet Systems Consortium DHCP Client 4.4.1 Copyright 2004-2018 Internet Systems Consortium. All rights reserved. For info, please visit https://www.isc.org/software/dhcp/ Listening on LPF/enp3s5/00:16:3e:8d:2b:5b Sending on LPF/enp3s5/00:16:3e:8d:2b:5b Sending on Socket/fallback DHCPDISCOVER on enp3s5 to 255.255.255.255 port 67 interval 4 DHCPOFFER of 10.90.170.158 from 10.90.170.1 DHCPREQUEST for 10.90.170.158 on enp3s5 to 255.255.255.255 port 67 DHCPACK of 10.90.170.158 from 10.90.170.1 bound to 10.90.170.158 -- renewal in 1616 seconds.
In diesem Beispiel wurde für die Schnittstelle enp3s5
die Methode dhcp
gewählt, so dass der Befehl ifup
ein DHCP-Client-Programm aufruft, um die IP-Einstellungen vom DHCP-Server zu beziehen. Ebenso können Sie mit dem Befehl ifdown enp3s5
die Schnittstelle deaktivieren.
In Netzwerken ohne DHCP-Server bietet sich stattdessen die Methode static
an — und die IP-Einstellungen manuell in /etc/network/interfaces
vorzunehmen, z.B.
iface enp3s5 inet static address 192.168.1.2/24 gateway 192.168.1.1
Schnittstellen, die die Methode static
nutzen, brauchen keine entsprechende Direktive namens auto
, da sie immer dann aufgerufen werden, wenn die Netzwerk-Hardware erkannt wird.
Hat dieselbe Schnittstelle mehr als einen iface
-Eintrag, werden alle konfigurierten Adressen und Optionen angewendet, sobald diese Schnittstelle aufgerufen wird. Dies ist nützlich, um sowohl IPv4- als auch IPv6-Adressen oder mehrere Adressen desselben Typs auf einer einzigen Schnittstelle zu konfigurieren.
Lokale und Remote-Namen
Eine funktionierende TCP/IP-Konfiguration ist nur der erste Schritt zur vollständigen Netzwerkfunktionalität. Das System muss nicht nur in der Lage sein, die Knoten im Netz anhand ihrer IP-Nummern zu identifizieren, sondern diesen auch benutzerfreundliche Namen zuweisen.
Dieser Name, mit dem sich das System identifiziert, ist anpassbar, und es ist eine gute Praxis, ihn festzulegen, auch wenn der Rechner nicht in ein Netzwerk eingebunden werden soll. Der lokale Name stimmt oft mit dem Netzwerknamen des Rechners überein, aber das ist nicht unbedingt immer der Fall. Wenn die Datei /etc/hostname
existiert, verwendet das Betriebssystem den Inhalt der ersten Zeile als lokalen Namen, den sogenannten Hostname. Zeilen, die mit #
in /etc/hostname
beginnen, werden ignoriert.
Sie können die Datei /etc/hostname
direkt bearbeiten oder den Hostname des Rechners mit dem Befehl hostnamectl
setzen. Wird der Befehl hostnamectl
mit dem Unterbefehl set-hostname
ausgeführt, schreibt er den als Argument angegebenen Namen nach /etc/hostname
:
# hostnamectl set-hostname storage # cat /etc/hostname storage
Der in /etc/hostname
definierte Hostname ist der statische Hostname, der zur Initialisierung des Hostnamens des Systems beim Booten verwendet wird. Der statische Hostname kann eine freie Zeichenkette von bis zu 64 Zeichen Länge sein. Es empfiehlt sich, nur ASCII-Kleinbuchstaben zu verwenden und auf Leerzeichen und Punkte zu verzichten. Außerdem sollte sich der Name auf das für DNS-Domänennamen zulässige Format beschränken, auch wenn dies nicht zwingend erforderlich ist.
Mit hostnamectl
setzen Sie neben dem statischen Hostnamen zwei weitere Arten von Hostnamen:
- Pretty Hostname
-
Anders als der statische Hostname kann der Pretty Hostname alle Arten von Sonderzeichen enthalten. Sie können einem Rechner damit einen aussagekräftigeren Namen festzulegen, z.B. “LAN Shared Storage”:
# hostnamectl --pretty set-hostname "LAN Shared Storage"
- Transient Hostname
-
Er kommt zum Einsatz, wenn der statische Hostname nicht gesetzt ist oder Standardname
localhost
lautet. Der transiente Hostname wird normalerweise zusammen mit anderen automatischen Konfigurationen gesetzt, ist aber ebenfalls mit dem Befehlhostnamectl
zu ändern, z.B.:# hostnamectl --transient set-hostname generic-host
Ist weder die Option --pretty
noch --transient
angegeben, werden alle drei Hostnamen auf den angegebenen Namen gesetzt. Um den statischen Hostnamen zu setzen, aber nicht den pretty und den transienten Namen, wählen Sie die Option --static
. In allen Fällen wird nur der statische Hostname in der Datei /etc/hostname
gespeichert. Mit dem Befehl hostnamectl
zeigen Sie auch verschiedene beschreibende und identitätsbezogene Informationen über das laufende System an:
$ hostnamectl status Static hostname: storage Pretty hostname: LAN Shared Storage Transient hostname: generic-host Icon name: computer-server Chassis: server Machine ID: d91962a957f749bbaf16da3c9c86e093 Boot ID: 8c11dcab9c3d4f5aa53f4f4e8fdc6318 Operating System: Debian GNU/Linux 10 (buster) Kernel: Linux 4.19.0-8-amd64 Architecture: x86-64
Dies ist die Standardaktion des Befehls hostnamectl
, so dass Sie den Unterbefehl status
auch weglassen können.
Hinsichtlich des Namens entfernter Netzknoten gibt es zwei Ansätze, wie das Betriebssystem Namen und IP-Nummern abgleicht: Eine lokale Quelle oder ein entfernter Server zur Übersetzung von Namen in IP-Nummern und umgekehrt. Beide Methoden können sich gegenseitig ergänzen — ihre Prioritätsreihenfolge ist in der Konfigurationsdatei des Name Service Switch festgelegt: /etc/nsswitch.conf
. System und Anwendungen nutzen diese Datei, um nicht nur die Quellen für die Name/IP-Entsprechungen zu bestimmen, sondern auch die Quellen, aus denen Namensdienstinformationen in einer Reihe von Kategorien, den sogenannten Datenbanken, bezogen werden.
Die Datenbank hosts verwaltet die Zuordnungen zwischen Hostnamen und Hostnummern. Die Zeile in /etc/nsswitch.conf
, die mit hosts
beginnt, definiert die Dienste, die für die Bereitstellung der Zuordnungen verantwortlich sind:
hosts: files dns
In diesem Beispieleintrag sind files
und dns
die Dienstnamen, die angeben, wie der Suchprozess für Hostnamen ablaufen soll. Zuerst sucht das System nach Übereinstimmungen in lokalen Dateien, dann fragt es den DNS-Dienst nach Treffern.
Die lokale Datei für die Host-Ddatenbank ist /etc/hosts
, eine einfache Textdatei, die IP-Adressen mit Hostnamen verknüpft, eine Zeile pro IP-Adresse, z.B.:
127.0.0.1 localhost
Die IP-Nummer 127.0.0.1
ist die Standardadresse für die Loopback-Schnittstelle, daher die Zuordnung zu dem Namen localhost
.
Es ist auch möglich, optionale Aliasnamen an dieselbe IP zu binden. Aliasnamen können alternative Schreibweisen oder kürzere Hostnamen bieten und sollten am Ende der Zeile eingefügt werden:
192.168.1.10 foo.mydomain.org foo
Die Formatierungsregeln für die Datei /etc/hosts
sind:
-
Felder des Eintrags werden durch eine beliebige Anzahl von Leerzeichen und/oder Tabulatorzeichen getrennt.
-
Text nach einem
#
-Zeichen bis zum Ende der Zeile ist ein Kommentar und wird ignoriert. -
Hostnamen dürfen nur alphanumerische Zeichen, Minuszeichen und Punkte enthalten.
-
Hostnamen müssen mit einem alphabetischen Zeichen beginnen und mit einem alphanumerischen Zeichen enden.
Sie könne auch IPv6-Adressen zu /etc/hosts
hinzufügen. Der folgende Eintrag bezieht sich auf die IPv6-Loopback-Adresse:
::1 localhost ip6-localhost ip6-loopback
Nach der Spezifikation des Dienstes files
weist die Spezifikation dns
das System an, einen DNS-Dienst nach der gewünschten Verbindung zwischen Name und IP zu fragen. Der Satz von Routinen, der für diese Methode verantwortlich ist, wird Resolver genannt, und seine Konfigurationsdatei ist /etc/resolv.conf
. Das folgende Beispiel zeigt eine generische /etc/resolv.conf
mit Einträgen für die öffentlichen DNS-Server von Google:
nameserver 8.8.4.4 nameserver 8.8.8.8
Wie im Beispiel gezeigt, gibt das Schlüsselwort nameserver
die IP-Adresse des DNS-Servers an. Es ist nur ein Nameserver erforderlich, aber es können bis zu drei angegeben werden. Die zusätzlichen Nameserver dienen als Fallback. Sind keine Nameservereinträge vorhanden, wird standardmäßig der Nameserver auf dem lokalen Rechner verwendet.
Sie können den Resolver so konfigurieren, dass er die Domäne automatisch zu Namen hinzufügt, bevor er sie auf dem Nameserver abfragt, z.B.:
nameserver 8.8.4.4 nameserver 8.8.8.8 domain mydomain.org search mydomain.net mydomain.com
Der Eintrag domain
setzt mydomain.org
als lokalen Domainnamen, so dass Abfragen nach Namen innerhalb dieser Domain Kurznamen relativ zur lokalen Domain verwenden dürfen. Der Eintrag search
hat einen ähnlichen Zweck, akzeptiert aber eine Liste von Domains, die benutzt werden sollen, wenn ein Kurzname angegeben wird. Standardmäßig enthält er nur den lokalen Domänennamen.
Geführte Übungen
-
Mit welchen Befehlen listen Sie die Netzwerk-Schnittstellen im System auf?
-
Von welchem Typ ist eine Netzwerk-Schnittstelle mit dem Namen
wlo1
? -
Welche Rolle spielt die Datei
/etc/network/interfaces
während des Bootvorgangs? -
Welcher Eintrag in
/etc/network/interfaces
konfiguriert die Schnittstelleeno1
so, dass sie ihre IP-Einstellungen über DHCP bezieht?
Offene Übungen
-
Wie nutzen Sie den Befehl
hostnamectl
, um nur den statischen Hostnamen des lokalen Rechners infirewall
zu ändern? -
Welche anderen Details als Hostnamen können Sie mit dem Befehl
hostnamectl
ändern? -
Welcher Eintrag in
/etc/hosts
verbindet die beiden Namenfirewall
undrouter
mit der IP10.8.0.1
? -
Wie ändern Sie die Datei
/etc/resolv.conf
, um alle DNS-Anfragen an1.1.1.1
zu senden?
Zusammenfassung
In dieser Lektion haben Sie erfahren, wie Sie mit Hilfe von Linux-Standarddateien und -befehlen dauerhafte Änderungen an der lokalen Netzwerkkonfiguration vornehmen. Linux erwartet die TCP/IP-Einstellungen an bestimmten Stellen, und es kann notwendig sein, diese zu ändern, wenn die Standardeinstellungen nicht ausreichen. In dieser Lektion werden die folgenden Themen behandelt:
-
Wie Linux Netzwerkschnittstellen identifiziert.
-
Schnittstellenaktivierung beim Booten und grundlegende IP-Konfiguration.
-
Wie das Betriebssystem Namen mit Hosts verknüpft.
Die behandelten Konzepte, Befehle und Verfahren sind:
-
Namenskonventionen für Schnittstellen.
-
Auflisten von Netzwerkschnittstellen mit
ip
undnmcli
. -
Aktivieren von Schnittstellen mit
ifup
undifdown
. -
Befehl
hostnamectl
und die Datei/etc/hostname
. -
Dateien
/etc/nsswitch.conf
,/etc/hosts
und/etc/resolv.conf
.
Lösungen zu den geführten Übungen
-
Mit welchen Befehlen listen Sie die Netzwerk-Schnittstellen im System auf?
Die Befehle
ip link show
,nmcli device
und das alteifconfig
. -
Von welchem Typ ist eine Netzwerk-Schnittstelle mit dem Namen
wlo1
?Der Name beginnt mit
wl
, es handelt sich also um eine WLAN-Schnittstelle. -
Welche Rolle spielt die Datei
/etc/network/interfaces
während des Bootvorgangs?Sie enthält die Konfigurationen, die der Befehl
ifup
verwendet, um die entsprechenden Schnittstellen während des Bootvorgangs zu aktivieren. -
Welcher Eintrag in
/etc/network/interfaces
konfiguriert die Schnittstelleeno1
so, dass sie ihre IP-Einstellungen über DHCP bezieht?Die Zeile
iface eno1 inet dhcp
.
Lösungen zu den offenen Übungen
-
Wie nutzen Sie den Befehl
hostnamectl
, um nur den statischen Hostnamen des lokalen Rechners infirewall
zu ändern?Mit der Option
--static
:hostnamectl --static set-hostname firewall
. -
Welche anderen Details als Hostnamen können Sie mit dem Befehl
hostnamectl
ändern?hostnamectl
kann auch das Standardsymbol für den lokalen Rechner, seinen Chassis-Typ, den Standort und die Einsatzumgebung festlegen. -
Welcher Eintrag in
/etc/hosts
verbindet die beiden Namenfirewall
undrouter
mit der IP10.8.0.1
?Die Zeile
10.8.0.1 firewall router
. -
Wie ändern Sie die Datei
/etc/resolv.conf
, um alle DNS-Anfragen an1.1.1.1
zu senden?Mit
nameserver 1.1.1.1
als einzigem Nameserver-Eintrag.