Ubuntu 20.04: Beim Hinzufügen einer Bridge über Netplan bleibt die überbrückte Schnittstelle routbar, Routing-Einträge werden dupliziert

Ubuntu 20.04: Beim Hinzufügen einer Bridge über Netplan bleibt die überbrückte Schnittstelle routbar, Routing-Einträge werden dupliziert

Betriebssystem: Ubuntu 20.04.3, alle neuesten Updates installiert.

Ich versuche eine Brückenschnittstelle zu erstellen, um Strom zu versklaven (eno1)

Netplan-Konfiguration:

# This is the network config written by 'subiquity'
network:
  version: 2
  renderer: networkd

  ethernets:
    eno1:
      dhcp4: false
      dhcp6: false

  bridges:
    br0:
      interfaces: [eno1]
      addresses: [10.20.0.21/24]
      gateway4: 10.20.0.1
      nameservers:
        search: [example.com]
        addresses: [10.20.0.1,10.20.0.10]
      dhcp4: false
      dhcp6: false

Wenn ich „netplan try“ ausführe, sehe ich:

** (generate:2332): WARNING **: 12:54:41.673: Problem encountered while validatingdefault route consistency.Please set up multiple routing tables and use `routing-policy` instead.
Error: Conflicting default route declarations for IPv4 (table: main, metric: default), first declared in br0 but also in eno1

Wenn ich das System neu starte, sind die Ergebnisse wie folgt:

$ route

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         10.20.0.1       0.0.0.0         UG    0      0        0 br0
default         10.20.0.1       0.0.0.0         UG    0      0        0 eno1
10.20.0.0        0.0.0.0        255.255.255.0   U     0      0        0 br0
10.20.0.0        0.0.0.0        255.255.255.0   U     0      0        0 eno1

Das System ist zwar weiterhin nutzbar, die Konfiguration weist jedoch offensichtlich eine Anomalie auf.

$ networkctl

networkctl 
IDX LINK TYPE     OPERATIONAL SETUP     
  1 lo   loopback carrier     unmanaged 
  2 eno1 ether    routable    configured
  3 br0  bridge   routable    configured

$ ip addr show

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
    link/ether 18:c0:4d:63:da:da brd ff:ff:ff:ff:ff:ff
    inet 10.20.0.21/24 brd 10.1.0.255 scope global eno1
       valid_lft forever preferred_lft forever
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 18:c0:4d:63:da:da brd ff:ff:ff:ff:ff:ff
    inet 10.20.0.21/24 brd 10.1.0.255 scope global br0
       valid_lft forever preferred_lft forever
    inet6 fe80::700e:94ff:fea6:fc98/64 scope link 
       valid_lft forever preferred_lft forever

Wie mache ich eno1 zum Sklaven und verhindere, dass es Duplikate von Routing-Einträgen/IP-Adressen erstellt?

Update vom 21. Januar: Es gibt keine weiteren Konfigurationsdateien unter/etc/netplan

Antwort1

Workaround vom 22. Januar 2022:

Es sieht so aus, als ob Netplan und/oder Networkd derzeit zu fehlerhaft sind, um die genannte Konfiguration ohne Duplizieren von IPs/Routen zu unterstützen.

Die Lösung bestand darin, wieder zu NetworkManager zu wechseln.

  1. Stellen Sie sicher, dass Sie in Netplans .yaml die Renderer-Zeile durch ersetzen

    renderer: NetworkManager
    
  2. Stellen Sie sicher, dass Sie Netzwerkverwaltungsschnittstellen in /etc/NetworkManager/NetworkManager.conf aktivieren (der betroffene Abschnitt ist unten aufgeführt).

    [ifupdown]
    managed=true
    
  3. Definieren Sie, welche Schnittstellentypen in etc/NetworkManager/conf.d/10-globally-managed-devices.conf gefiltert werden:

    [keyfile]
    
    unmanaged-devices=*,except:type:wifi,except:type:wwan,except:type:ethernet
    

    Hinweis: Stellen Sie sicher, dass die Datei /usr/lib/NetworkManager/conf.d/10-globally-managed-devices.conf leer ist (Größe Null).

  4. Starten Sie NetworkManager neu, oder besser noch, starten Sie das System neu:

    sudo systemctl restart network-manager
    

    Hinweis: Wenn der GUI-Modus verwendet wird, muss möglicherweise der automatische Start für kabelgebundene Verbindungen unter „Einstellungen > Netzwerk“ deaktiviert werden, um zu verhindern, dass NetworkManager ständig beschwert, dass die entsprechende Verbindung nicht aktiviert werden kann.

Antwort2

@KonstantinBoyandin - Es gibt einfach nicht genug Informationen über Ihr System hier zur Verfügung gestellt, um zu kommenbeliebigFazit. Hier ist eine fundierte Vermutung darüber, was Sie erlebt haben:

Wenn ich mich richtig erinnere, wird bereits eine Standardinstallation von 20.04 verwendet NetworkManager. Das bedeutet, dass die von Ihnen beobachtete Standardroute NetworkManagerhöchstwahrscheinlich bereits konfiguriert und erstellt wurde:eno1

default         10.20.0.1       0.0.0.0         UG    0      0        0 eno1

Es steht Ihnen frei, beides auszuprobieren.NetworkManager Und systemd-networkd- Mir fällt keinGrunddas zu tun, aber es gibt nichts, was es aufhält. Ich habe dies genutzt, um zu vermeiden, dass ich mich damit befassen muss, NetworkManagerwenn ich Wireguard-Schnittstellen auf Systemen einrichte, die bereits laufen NetworkManager. Dabei müssen SiemussBeachten Sie, dass diese Tools miteinander interagieren können. Was passiert beispielsweise, wenn der von verwaltete physische Ethernet-Adapter NetworkManagerausfällt? Eine virtuelle Schnittstelle, die auf diese physische Schnittstelle angewiesen ist, kann ausfallen, muss aber nicht... hängt von der Konfiguration des virtuellen Adapters ab.externZu NetworkManager.

Wenn Sie den Renderer auf umgestellt haben NetworkManager, funktionierte an diesem Punkt alles, da Sie jetzt netplanzur Konfiguration verwendet habenNetworkManager als einziger Dienst zur Netzwerkkonfiguration, wodurch jegliche „Cross-Configuration“ verhindert wird.

Für alle anderen, die dieses Problem haben, gibt es ein paar Möglichkeiten, es zu lösen. Sie können entweder aufhören, NetworkManagerdie Schnittstellen, die Sie konfigurieren möchten, mit einem anderen Renderer zu konfigurieren, oder sie einfach ganz deaktivieren . Ich bevorzuge es, auf Servern auf „mit“ NetworkManagerumzuschalten und zu deaktivieren , während ich auf dem Desktop-Linux andere Netzwerkdienste nur bei Bedarf lasse und nutze.netplansystemd-networkdNetworkManagerNetworkManager

So verwenden Sie Netplan auf einem typischen Ubuntu 20.04-Server und vermeiden den Konflikt im OP:

  1. Server bereitstellen (Ubuntu installieren usw.)
  2. Erstellen Sie die gewünschte Netplan-Konfiguration
  3. Bearbeiten /etc/network/interfacesund kommentieren Sie alle Abschnitte aus, die für die von Ihnen in konfigurierte Schnittstelle gelten netplan:
# The primary network interface
# auto eno1
# iface eno1 inet dhcp
  1. Neustart (oder Stopp) NetworkManager:sudo systemctl <restart|stop> NetworkManager.service
  2. Testen Sie Ihre netplanKonfiguration:sudo netplan try
  3. Wenn alles richtig aussieht und funktioniert, klicken Sie Enterauf

(Optional)

  • Deaktivieren NetworkManager:sudo systemctl disable NetworkManager.service

(Notiz)

  • Obwohl es offensichtlich sein sollte, wird im obigen Text davon ausgegangen, dass Sie entweder über lokalen Konsolenzugriff verfügen oder dass Ihre SSH-Verbindung nicht von der Schnittstelle abhängig ist, die Sie konfigurieren, da Ihre Verbindung möglicherweise getrennt wird und Sie die Konfiguration daher nicht abschließen können.

verwandte Informationen