Handbuch:AMD64/Netzwerk/Fortgeschritten

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page Handbook:AMD64/Networking/Advanced and the translation is 100% complete.
AMD64 Handbuch
Installation
Über die Installation
Auswahl des Mediums
Konfiguration des Netzwerks
Vorbereiten der Festplatte(n)
Installation des Stage Archivs
Installation des Basissystems
Konfiguration des Kernels
Konfiguration des Systems
Installation der Tools
Konfiguration des Bootloaders
Abschluss
Arbeiten mit Gentoo
Portage-Einführung
USE-Flags
Portage-Features
Initskript-System
Umgebungsvariablen
Arbeiten mit Portage
Dateien und Verzeichnisse
Variablen
Mischen von Softwarezweigen
Zusätzliche Tools
Eigener Portage-Tree
Erweiterte Portage-Features
Netzwerk-Konfiguration
Zu Beginn
Fortgeschrittene Konfiguration
Modulare Vernetzung
Drahtlose Netzwerke
Funktionalität hinzufügen
Dynamisches Management


Die Variable config_eth0 ist das Herzstück einer Schnittstellenkonfiguration. Sie ist eine übergeordnete Befehlsliste für die Konfiguration der Schnittstelle (in diesem Fall eth0). Jeder Befehl in der Befehlsliste wird der Reihe nach ausgeführt. Die Schnittstelle gilt als OK, wenn mindestens ein Befehl funktioniert.

Hier ist eine Liste von eingebauten Anweisungen:

Wert Beschreibung
null Nichts tun.
noop Wenn die Schnittstelle aktiv ist und eine Adresse vorhanden ist, wird die Konfiguration erfolgreich abgebrochen.
Eine IPv4 oder IPv6 Adresse Hinzufügen der Adresse zur Schnittstelle.
dhcp, adsl, oder apipa (oder ein benutzerdefinierter Wert aus einem Modul eines Drittanbieters) Ausführen des Moduls, das den Befehl bereitstellt. Zum Beispiel wird dhcp ein Modul starten, das DHCP bereitstellt, das von dhcpcd, dhclient oder pump bedient werden kann.

Wenn ein Befehl fehlschlägt, geben Sie einen Fallback-Wert an. Der Fallback-Wert muss genau mit der Konfigurationsstruktur übereinstimmen.

Es ist möglich diese Werte miteinander zu verknüpfen. Hier sind einige Beispiele aus der Praxis:

DATEI /etc/conf.d/netBeispiele für Konfiguration
# Hinzufügen von drei IPv4-Adressen
config_eth0="192.168.0.2/24
192.168.0.3/24
192.168.0.4/24"

# Hinzufügen einer IPv4-Adresse und zweier IPv6-Adressen
config_eth0="192.168.0.2/24
4321:0:1:2:3:4:567:89ab
4321:0:1:2:3:4:567:89ac"

# Behalten Sie unsere vom Kernel zugewiesene Adresse, es sei denn, die Schnittstelle geht
# aus, also weisen Sie eine anderen über DHCP zu. Wenn DHCP fehlschlägt, fügen Sie eine
# statische Adresse, die von APIPA ermittelt wird hinzu.
config_eth0="noop
dhcp"
fallback_eth0="null
apipa"
Hinweis
Wenn Sie das Modul ifconfig verwenden und mehr als eine Adresse hinzufügen werden für jede zusätzliche Adresse Schnittstellen-Aliase erstellt. In den beiden obigen Beispielen erhält der Benutzer also die Schnittstellen eth0, eth0:1 und eth0:2. Es ist nicht möglich, irgendetwas Spezielles mit diesen Schnittstellen zu tun, da der Kernel und andere Programme eth0:1 und eth0:2 einfach als eth0 behandeln.
Wichtig
Die Rückfallreihenfolge ist wichtig! Wenn die Option null nicht angegeben wurde, wird apipa nur ausgeführt, wenn noop fehlgeschlagen ist.

Netzwerkabhängigkeiten

Init-Skripte in /etc/init.d/ können von einer bestimmten Netzwerkschnittstelle oder einfach von "net" abhängen. Alle Netzwerkschnittstellen in Gentoo's Init-System bieten das, was "net" genannt wird.

Wenn in /etc/rc.conf die Variable rc_depend_strict auf YES gesetzt ist, dann müssen alle Netzwerkschnittstellen, die "net" bereitstellen, aktiv sein, bevor eine Abhängigkeit von "net" angenommen wird. Mit anderen Worten: Wenn ein System über net.eth0 und neth.eth1 verfügt und ein Init-Skript von "net" abhängig ist, müssen beide aktiviert sein.

Wenn hingegen rc_depend_strict="NO" gesetzt ist, wird die "net"-Abhängigkeit als aufgelöst markiert, sobald mindestens eine Netzwerkschnittstelle aktiviert ist.

Aber was ist mit net.br0, das von net.eth0 und net.eth1 abhängt? net.eth1 könnte ein drahtloses oder PPP-Gerät sein, das konfiguriert werden muss, bevor es zur Bridge hinzugefügt werden kann. Dies kann nicht in /etc/init.d/net.br0 erfolgen, da dies ein symbolischer Link zu net.lo ist.

Die Antwort ist, eine rc_net_{schnittstelle}_need Einstellung in /etc/conf.d/net zu definieren:

DATEI /etc/conf.d/netHinzufügen einer net.br0-Abhängigkeit
rc_net_br0_need="net.eth0 net.eth1"

Das allein ist jedoch nicht ausreichend. Gentoos Netzwerk-Init-Skripte verwenden eine virtuelle Abhängigkeit namens "net", um dem System mitzuteilen, wann ein Netzwerk verfügbar ist. Im obigen Fall sollte das Netzwerk nur als verfügbar markiert sein, wenn net.br0 verfügbar ist, nicht wenn die anderen verfügbar sind. Also müssen wir das auch in /etc/conf.d/net angeben:

DATEI /etc/conf.d/netAktualisieren der virtuellen Abhängigkeiten und Bestimmungen für die Vernetzung
rc_net_eth0_provide="!net"
rc_net_eth1_provide="!net"

Für eine detaillierte Diskussion über Abhängigkeiten lesen Sie bitte den Abschnitt über das Schreiben von Initskripten im Gentoo Handbuch. Weitere Informationen über /etc/rc.conf sind als Kommentare in dieser Datei verfügbar.

Variablennamen und -werte

Variablennamen sind dynamisch. Sie folgen normalerweise der Struktur von variable_${interface|mac|essid|apmac}. Zum Beispiel enthält die Variable dhcpcd_eth0 den Wert für dhcpcd-Optionen für eth0 und dhcpcd_essid enthält den Wert für dhcpcd-Optionen, wenn eine Schnittstelle mit der ESSID "essid" verbunden ist.

Es gibt jedoch keine feste Regel, die besagt, dass Schnittstellennamen ethx sein müssen. Tatsächlich haben viele drahtlose Schnittstellen Namen wie wlanx, rax oder auch ethx. Außerdem können einige benutzerdefinierte Schnittstellen wie z.B. Bridges, einen beliebigen Namen erhalten. Um das Leben interessanter zu machen, können drahtlose Zugangspunkte Namen mit nicht-alphanumerischen Zeichen haben - dies ist wichtig, weil Benutzer Netzwerkparameter pro ESSID konfigurieren können.

Der Nachteil von all dem ist, dass Gentoo Bash-Variablen für die Vernetzung verwendet- und Bash kann nichts außerhalb der englischen Alphanumerik verwenden. Um diese Einschränkung zu umgehen, ändern wird jedes Zeichen, dass keine englische Alphanumerik ist, in ein _ (Unterstrich) Zeichen.

Ein weiterer Nachteil der Bash ist der Inhalt von Variablen - einige Zeichen müssen mit einem Escape-Zeichen versehen werden. Dies kann erreicht werden, indem man das Zeichen \ (Backslash) vor das Zeichen setzt, das escaped werden muss. Die folgende Liste von Zeichen muss auf diese Weise escaped werden: ", ' und \.

In diesem Beispiel verwenden wir eine drahtlose ESSID, da sie die meisten Zeichen enthalten kann. Wir verwenden die ESSID Mein "\ NET:

DATEI /etc/conf.d/netVariablennamen
# Dies funktioniet zwar, aber die Domäne ist ungültig
dns_domain_My____NET="My \"\\ NET"

Die obige Einstellung setzt die DNS-Domäne auf Mein "\ NET, wenn eine drahtlose Karte eine Verbindung zu einem AP herstellt, dessen ESSID Mein \ NET ist:

Benennung der Netzwerkschnittstellen

Wie es funktioniert

Netzwerkschnittstellennamen werden nicht willkürlich gewählt: Der Linux-Kernel und der Gerätemanager (die meisten Systeme haben udev als Gerätemanager, obwohl auch andere verfügbar sind) wählen den Schnittstellennamen nach einem festen Regelwerk.

Wenn eine Schnittstellenkarte in einem System erkannt wird, sammelt der Linux-Kernel die notwendigen Daten über diese Karte. Dazu gehören:

  • Der onboard (auf der Schnittstelle selbst) registrierte Name der Netzwerkkarte, der später durch den Wert ID_NET_NAME_ONBOARD angezeigt wird.
  • Der Steckplatz, in dem die Netzwerkkarte eingesteckt ist, was später durch den ID_NET_NAME_SLOT Wert ersichtlich wird.
  • Der Pfad, über den auf das Netzwerkkartengerät zugegriffen werden kann, der später durch den Wert von ID_NET_NAME_PATH angezeigt wird.
  • Die (vom Hersteller bereitgestellte) MAC-Adresse der Karte, die später durch den Wert ID_NET_NAME_MAC angezeigt wird.

Auf der Grundlage dieser Informationen entscheidet der Gerätemanager, wie die Schnittstelle auf dem System benannt werden soll. Standardmäßig verwendet er den ersten Treffer der ersten drei oben genannten Variablen (ID_NET_NAME_ONBOARD, _SLOT oder _PATH). Wenn zum Beispiel ID_NET_NAME_ONBOARD gefunden und auf eno1 gesetzt wird, dann wird die Schnittstelle eno1 genannt.

Bei einem aktiven Schnittstellennamen können die Werte der angegebenen Variablen mit udevadm angezeigt werden:

root #udevadm test-builtin net_id /sys/class/net/enp3s0 2>/dev/null
ID_NET_NAME_MAC=enxc80aa9429d76
ID_OUI_FROM_DATABASE=Quanta Computer Inc.
ID_NET_NAME_PATH=enp3s0

Da der erste (und eigentlich einzige) Treffer der obersten drei Variablen ID_NET_NAME_PATH ist, wird sein Wert als Schnittstellenname verwendet. Wenn keine der Variablen Wert enthält, kehrt das System zu der vom Kernel bereitgestellten Benennung zurück (eth0, eth1, usw.)

Verwendung der Kernel-Benennung im alten Stil

Vor dieser Änderung wurden Netzwerkkarten vom Linux-Kernel selbst benannt, abhängig von der Reihenfolge, in der die Treiber geladen werden (neben anderen, möglicherweise noch obskureren Gründen). Dieses Verhalten kann immer noch durch Setzen des Bootparameters net.ifnames=0 im Bootloader aktiviert werden.

Verwendung eigener Namen

Die Idee hinter der Namensänderung ist nicht, die Leute zu verwirren, sondern das Ändern der Namen zu erleichtern. Nehmen wir an, ein System hat zwei Schnittstellen, die anders als eth0 und eth1 bezeichnet werden. Eine ist für den drahtgebundenen Zugriff auf das Netzwerk gedacht, die andere für den drahtlosen Zugriff. Mit der Unterstützung für die Benennung von Schnittstellen können Benutzer diese als lan0 (kabelgebunden) und wifi0 (drahtlos) bezeichnen - es ist am besten, die bisher bekannten Namen wie eth* und wlan* zu vermeiden, da diese immer noch mit den vorgeschlagenen Namen kollidieren können.

Finden Sie heraus, welche Parameter für die Karten gelten, und verwenden Sie diese Informationen, um eine benutzerdefinierte eigene Benennungsregel aufzustellen:

root #udevadm test-builtin net_id /sys/class/net/eth0 2>/dev/null
ID_NET_NAME_MAC=enxc80aa9429d76
ID_OUI_FROM_DATABASE=Quanta Computer Inc.
root #vim /etc/udev/rules.d/70-net-name-use-custom.rules
# Die erste verwendet MAC-Informationen und die 70-er Nummer, um vor anderen Netzregeln zu sein
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="c8:0a:a9:42:9d:76", NAME="lan0"
root #vim /etc/udev/rules.d/76-net-name-use-custom.rules
# Second one uses ID_NET_NAME_PATH information, and 76- number to be between
# 75-net-*.rules and 80-net-*.rules
SUBSYSTEM=="net", ACTION=="add", ENV{ID_NET_NAME_PATH}=="enp3s0", NAME="wifi0"

Da die Regeln vor der Standardregel ausgelöst werden (die Regeln werden in alphanumerischer Reihenfolge ausgelöst d.h. 70 kommt vor 80), werden die in der Regeldatei angegebenen Namen anstelle der Standardnamen verwendet. Die der Datei zugewiesenen Nummer sollte zwischen 76 und 79 liegen (die Umgebungsvariablen werden durch eine Regel definiert, die mit 75 beginnt, und die Fallback-Benennung wird in einer Regel mit der Nummer 70 vorgenommen).