Hallo @all,
wie im Beitrag oben angekuendigt, moechte ich hier paar HInweise zur Netzwerkkonfig unter systemd, /etc/network/interfaces und netplan beschreiben.
Mein Problem war, dass ich bei
zehn NICs
vier Bonds
sechs Bridges
und
zwei VLANs
v. deb8 auf deb10, deb11 gehen wollte. Undzwar nicht mit upgrade, sondern durch eine Neuinstallation. Deb8 ist/war noch mit systemV konfigurierbar, deb10/11 nicht mehr, systemd hat dort Einzug gehalten. IMHO ist aber bei einerm Server die Netzwerkkonfig die Achilleus-Sehne, denn, wenn die nicht OK ist, ist der Server aus der produktion. Und/oder man muss im Falle, dass etwas nicht OK ist zuegig eingreifen koennen, warum der Server nicht ins Netz kommt, zudem die o.a. Konfig etwas bunter (historisch gewachsen) ist.
Im Rahmen dieses Problems habe ich zum ersten Mal (yes) den Ubuntu-Server 20.04.3 LTS (Focal Fossa) installiert. Wow, die INstalltion ist _etwas_ anders als Debian, aber an einem Punkt wirklich auch besser. Es wir ein Server installiert und die Routine sieht die QUAD-NIC und bietet einen Bond (keine Bridges) an. Wow.
So als (ungehoerte) Anregung an Debian waere eine Abfrage, wo/wie das System installiert wird auch nicht schlecht, wenn Server wird halt mehr an der Netzwerkkonfig waehrend der INstallation konfiguriert, wenn nicht (z.B. PC/NB etc) wird halt weiter klassisch installiert.
Ebenso koennte diese Abfrage solche ungewollten Geister wie den Networkmanager/connman gar nicht installieren.
Jedoch, Ubuntu macht es auch rel. elegant, in dem netplan eingesetzt wird.
<
https://netplan.io/>
Eine Entwicklung v. Canonical.
Die Konfigdatei ist/liegt
/etc/netplan/00-installer-config.yaml
Am Ende der Installation des Ubuntu-Servers hatte ich eine fast aehnliche Konfig, wei ich sie zuvor unter interfaces hatte, es fehlten nur die Bridges. Netplan konfiguriert aus der yaml-Datei systemd. Eine Bridge laesst sich - der Syntax folgend - sehr zuegig konfigurieren.
Mit
netplan generate
netplan --debug apply
hat man die Netzwerkkonfig in systemd geschrieben (/etc/network/interfaces blank). Hat - wie interfaces - einen ___riesigen___ Vorteil, dass man die __ganze__ Konfig in __einer__ Datei vornimmt, uebersichtlich und zentral, statt wir unter systemd-Konfig zig-Dateien (manuell) anzulegen.
Mit yamllint laesst sich die Syntax valiieren, da Einrueckungen/Ebenen richtig positioniert werden muessen. Obwohl ich paar Stellen - laut yamllint - in der Konfig (noch v. setup) nicht korrekt waren, wurde die netzwerkkonfig trotzdem vollstaendig umgesetzt.
Sowas geht:
interfaces: [bond77]
Aber auch
interfaces:
____
- bond77
(Die Unterstriche sind die Leerstellen)
yamllint /etc/netplan/00-installer-config.yaml
/etc/netplan/00-installer-config.yaml
2:1 warning missing document start "---" (document-start)
6:7 error wrong indentation: expected 8 but found 6 (indentation)
10:9 error wrong indentation: expected 10 but found 8 (indentation)
14:9 error wrong indentation: expected 10 but found 8 (indentation)
ist eine Ausgabe yamllints.
Am Ende hat man sowas (die Einrueckungen sind hier leider weg, keine Ahnung, wie ich das darstellen kann

):
##################################
# This is the network config written by 'subiquity'
network:
bridges:
br77:
interfaces: [bond77]
# addresses: [192.168.99.222/24]
# gateway4: 192.168.99.1
mtu: 1500
# nameservers:
# addresses: [8.8.8.8]
parameters:
stp: false
forward-delay: 4
dhcp4: false
dhcp6: false
bonds:
bond77:
interfaces:
- eno2
- eno3
parameters:
lacp-rate: slow
mode: 802.3ad
transmit-hash-policy: layer2
ethernets:
eno1:
addresses:
- 192.168.99.111/24
gateway4: 192.168.99.1
nameservers:
addresses:
- 192.168.99.4
- 192.168.99.1
- 192.168.99.199
search:
- fhw.zz
eno2: {}
eno3: {}
eno4:
dhcp4: false
optional: true
version: 2
vlans:
eno4.100:
addresses:
- 192.168.100.111/24
gateway4: 192.168.100.1
id: 100
link: eno4
nameservers:
addresses:
- 192.168.100.2
search:
- fhw100.zz
##################################
Netplan laesst sich auch auf deb nachziehen.
Paar Anmerkungen zum Startverhalten systemds, insbesondere zu den laaangen timeouts beim Boot, die es doch oefter gibt, wie ich im Web festellte. Wenn man die console, die Ausgabe nicht auf /dev/ttySx umlenkt, kann man im Nachgang natuerlich auch mit
systemd-analyze
Startup finished in 8.773s (kernel) + 1min 15.369s (userspace) = 1min 24.142s
graphical.target reached after 1min 13.750s in userspace
systemd-analyze critical-chain
systemd-analyze blame
systemd-analyze plot > ./systemd_boot.svg
analysieren und findet den Uebeltaeter, der das lange timeout zu verantworten hat.
Es wird gemeldet:
[ OK ] Reached target Host and Network Name Lookups.
[*** ] A start job is running for Wait for to be Configured (8s / no limit)
oder
aehnliches mit Network ... (8s / 5min)
Als Beispiel:
In meiner Bond-Config sind zwei NIC zu einem Bond gebuendelt, aber nur eine NIC hat ein Kabel (diese NIC, da verkabelt, bekam auch v. connman die dhcp-Adresse), die andere nicht. Ebenso hatte eno4 (ein ausgedachtes VLAN-Netz, auch ohne Kabel, produktiv gibt es aber VLANs auf den Servern) zu einem Timeout gefuehrt, weil halt ohne Kabel alles haengt, bis der timeout zuschlaegt, der Bootvorgang weitergeht.
Mit
journalctl -u networking
Jan 08 00:35:00 hpg8 ifup[9342]: /etc/network/if-pre-up.d/ifenslave: 65: echo: echo: I/O error
Jan 08 00:35:00 hpg8 ifup[9342]: Waiting for a slave to join bond77 (will timeout after 60s)
konnte ich sehen, warum/wieso der Bootvorgang gehangen hat.
Mit
systemctl edit --full systemd-networkd-wait-online.service
kann man den Verzoegerer -bei mir eno3/4- rausnehmen, zudem auch dort die tmeoutzeit *nur* hier auf 10s beschraenkt werden kann.
ExecStart=/lib/systemd/systemd-networkd-wait-online --ignore=eno4 --ignore=eno3 --timeout=10
Klar sollte man hier wissen, dass und was man ueberfaehrt, doch, wenn im o.a. Beispiel eine NIC defekt waere oder ein Kabel ab ist, warum sollte der Start unnoetig lang verzoegert werden?
Manchmal wird auch geraten in
/etc/systemd/system.conf
#DefaultTimeoutStartSec=90s
#DefaultTimeoutStopSec=90s
auf 5s zu setzen. Das ist IMHO _keine_ gute Idee.
Wenn man _keine_ eigene Log-Datei fuehrt, was man am Server, in der Config v. den Default-Einstellungen veraendert hat, gar in der Datei selbst den alten Wert nicht hashed, nicht dort stehen laesst, nur neuen Wert hinterlegt, hat man im Fehlerfall fast keine Chance, wenn man diese systemweiten Parameter massiv veraendert hat. Spaeter weiss man nicht mehr, dass man hier eine Veraenderung eingestellt hat, der fehlerhafte Service, was auch immer wird _immer_ ueberfahren und man wundert sich, dass man im Vorfeld nichts abfangen kann.
Die o.a. Veraenderung ist nur fuer diesen Service, und nicht systemweit fuer alle andere Services.
Eine generelle Einstellung fuer das Netzwerk kann hier vorgenommen werden
/etc/default/networking
# Timeout in seconds for waiting for the network to come online.
#WAIT_ONLINE_TIMEOUT=300
WAIT_ONLINE_TIMEOUT=10
Daher kommen auch die erschreckenden 5min (s.o) beim Boot, wenn etwas mit dem Netzwerk nicht OK ist.
Kurz:
Hat man auf einem akt. System (z.B. Deb11) mehrere NICs, die mit bond/bridges/vlans noch zusaetzlich weiter konfiguriert werden, so macht es Sinn netplan auf das System zu ziehen, wenn man *nur* in systemd bleiben will, dann ist interfaces blank. Man kann die in yaml gehaltene Config sehr gut ueberschauen, alles dort (ohne extrem steiel Lernkurve) sauber konfigurieren, zudem mit yamllint die Syntax validiert werden kann.
Jedoch gibt es auch (noch?) die Moeglichkeit _nur_ mit interfaces das systemd-Netzwerk zu konfigurieren, ohne viele, querverbundene Dateien anzulegen. Diesen Kampf

IMHO kann man nicht gewinnen. Wichtig - allemal fuer Server - nicht nur den NetworkManager, sondern __auch__ connman abzuschalten, stillzulegen und/oder zu loeschen. Denn beide interferieren zu interfaces, ds Ergebnis ist ein Verhalten, was nur irritiert.
Warum in deb11 connman und der Networkmanager zusammen starten, kann ich nicht beantworten. Ebenso koennte debian die Installroutine nach vielen jahren ein weing optimieren, der Ubuntu-Server zeigt, was geht.
Bleibt nur noch eins festzuhalten, wie so oft: Kaum macht man es richtig, schon funktioniert es.
Viel Erfolg.
Gruss
ELindemann