Warum zeigt Netplan/Networkd keine statische Ethernet-Schnittstelle an?

Warum zeigt Netplan/Networkd keine statische Ethernet-Schnittstelle an?

Ich habe eine Maschine mit Ubuntu Server 18.04. Das Netzwerk ist mit Netplan konfiguriert, daher habe ich diese Konfiguration /etc/netplan/01-netcfg.yaml:

network:
  version: 2
  renderer: networkd
  ethernets:
    enp1s0f0:
      optional: false
      addresses:
        - 10.0.0.1/24    
  wifis:
    wlp2s0:
      optional: true
      dhcp4: yes
      access-points:
        [...]

enp1s0f0ist mit einem Gerät verbunden, das eingeschaltet sein kann oder nicht (beim Booten oder zu einem anderen Zeitpunkt). Ich möchte auf dieser Schnittstelle einen DHCP-Server ausführen.

Das Problem ist, dass es beim Booten zu einer Verzögerung von einigen Minuten kommt und ich diese Meldung sehe:

A start job is running for Wait for Network to be Configured

Irgendwann läuft die Zeit ab, der Bootvorgang wird fortgesetzt, enp1s0f0wird aber nie konfiguriert oder gestartet. ip link show enp1s0f0gibt:

2: enp1s0f0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000
    link/ether 10:dd:b1:ef:65:21 brd ff:ff:ff:ff:ff:ff

Ich habe keine Ahnung, was die Bedeutung von NO-CARRIERist, aber falls es relevant ist, hier die Ausgabe von sudo lspci -v:

01:00.0 Ethernet controller: Broadcom Limited NetXtreme BCM57766 Gigabit Ethernet PCIe (rev 01)
    Subsystem: Broadcom Limited NetXtreme BCM57766 Gigabit Ethernet PCIe
    Flags: bus master, fast devsel, latency 0, IRQ 16
    Memory at a0400000 (64-bit, prefetchable) [size=64K]
    Memory at a0410000 (64-bit, prefetchable) [size=64K]
    Capabilities: [48] Power Management version 3
    Capabilities: [50] Vital Product Data
    Capabilities: [58] MSI: Enable- Count=1/8 Maskable- 64bit+
    Capabilities: [a0] MSI-X: Enable+ Count=6 Masked-
    Capabilities: [ac] Express Endpoint, MSI 00
    Capabilities: [100] Advanced Error Reporting
    Capabilities: [13c] Device Serial Number 00-00-10-dd-b1-ef-65-21
    Capabilities: [150] Power Budgeting <?>
    Capabilities: [160] Virtual Channel
    Capabilities: [1b0] Latency Tolerance Reporting
    Kernel driver in use: tg3
    Kernel modules: tg3

Wenn ich nun das angeschlossene Gerät einschalte, enp1s0f0erscheint tatsächlich:

2: enp1s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
    link/ether 10:dd:b1:ef:65:21 brd ff:ff:ff:ff:ff:ff

Aber an diesem Punkt ist das nutzlos – der DHCP-Server funktioniert nicht, weil er enp1s0f0beim Booten nicht gestartet werden konnte, wenn er nicht aktiv ist. Ich muss enp1s0f0ihn beim Booten aktiv und konfiguriert haben, was meiner Meinung nach der Sinn einer statischen IP-Konfiguration ist. Noch seltsamer ist, dass er immer eine IPv6-Adresse hat, selbst wenn er nicht erreichbar ist:

2: enp1s0f0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether 10:dd:b1:ef:65:21 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::12dd:b1ff:feef:6521/64 scope link 
       valid_lft forever preferred_lft forever

Wenn ich die Debug-Ausgabe von Netplan überprüfe, sehe ich:

$ sudo netplan --debug apply
** (generate:1555): DEBUG: 20:39:27.253: Processing input file //etc/netplan/01-netcfg.yaml..
** (generate:1555): DEBUG: 20:39:27.254: starting new processing pass
** (generate:1555): DEBUG: 20:39:27.254: wlp2s0: adding wifi AP 'Jeff Winger's Wireless Hairbrush'
** (generate:1555): DEBUG: 20:39:27.254: wlp2s0: setting default backend to 1
** (generate:1555): DEBUG: 20:39:27.254: enp1s0f0: setting default backend to 1
** (generate:1555): DEBUG: 20:39:27.254: Generating output files..
** (generate:1555): DEBUG: 20:39:27.254: wlp2s0: Creating wpa_supplicant configuration file run/netplan/wpa-wlp2s0.conf
** (generate:1555): DEBUG: 20:39:27.254: Creating wpa_supplicant service enablement link /run/systemd/system/multi-user.target.wants/[email protected]
** (generate:1555): DEBUG: 20:39:27.254: NetworkManager: definition wlp2s0 is not for us (backend 1)
** (generate:1555): DEBUG: 20:39:27.254: NetworkManager: definition enp1s0f0 is not for us (backend 1)
DEBUG:netplan generated networkd configuration exists, restarting networkd
DEBUG:no netplan generated NM configuration exists
DEBUG:replug enp1s0f0: unbinding 0000:01:00.0 from /sys/bus/pci/drivers/tg3
DEBUG:replug enp1s0f0: rebinding 0000:01:00.0 to /sys/bus/pci/drivers/tg3
DEBUG:device wlp2s0 operstate is up, not replugging
DEBUG:netplan triggering .link rules for wlp2s0
DEBUG:device lo operstate is unknown, not replugging
DEBUG:netplan triggering .link rules for lo

Meine Konfiguration isc-dhcp-serversieht /etc/default/isc-dhcp-serverFolgendes vor:

INTERFACESv4="enp1s0f0"

...und /etc/dhcp/dhcpd.confenthalten (unter anderem):

subnet 10.0.0.0 netmask 255.255.255.0 {
...
}

Theoretisch sollte dies DHCP über bereitstellen enp1s0f0. Da jedoch enp1s0f0nie aufgerufen wird, schlägt der DHCP-Server beim Starten fehl:

No subnet declaration for enp1s0f0 (no IPv4 addresses).
** Ignoring requests on enp1s0f0.  If this is not what
   you want, please write a subnet declaration
   in your dhcpd.conf file for the network segment
   to which interface enp1s0f0 is attached. **


Not configured to listen on any interfaces!

Dies war kein Problem ifupdown(ich habe keine Ahnung, warum enp1s0f0es nicht einfach beim Booten angezeigt wird, egal ob am anderen Ende des Kabels etwas ist oder nicht; ich dachte, das wäre der Sinn einer statischen IP). Ist es möglich, es in Netplan zum Laufen zu bringen? Oder ist es möglich, den DHCP-Server zu starten, wenn es enp1s0f0aktiv ist?

Antwort1

Es sieht so aus, als ob Sie auf den Fehler gestoßen sind, der behoben wird durchhttps://github.com/CanonicalLtd/netplan/pull/34- derzeit werden Geräte nur konfiguriert, wenn sie über einen Netzbetreiber verfügen, aber diese Anforderung wird bald entfallen.

In der Zwischenzeit können Sie das Problem wahrscheinlich beheben, indem Sie das Gerät systemd-networkddirekt mit konfigurieren. Entfernen Sie die enp1s0f0Strophe aus der Netplan-Konfiguration und fügen Sie etwas wie diese (ungetestete) systemd-Konfiguration hinzu /etc/systemd/network/10-enp1s0f0.network:

[Match]
Name=enp1s0f0

[Link]
RequiredForOnline=no

[Network]
ConfigureWithoutCarrier=true
Address=10.0.0.1/24

Das Schlüsselbit ist das ConfigureWithoutCarrier, was ich direkt aus der Pull-Anfrage gezogen habe.

(Sie können sehen, was Netplan generiert, und von dort aus weitermachen – die Datei befindet sich im Format /run/systemd/network.)

Alternativ können Sie die Tatsache ausnutzen, dass Netplan und Ifupdown koexistieren können, und mit Ifupdown apt install ifupdownkonfigurieren .enp1s0f0

Antwort2

Es scheint, als ob Netplan über ein intelligentes System verfügt, das erkennt, ob die Iface über eine Verbindung verfügt oder nicht, und Adressen nur dann automatisch zuweist, wenn die Verbindung aktiv ist.

Wenn diese Schnittstelle keine Verbindung (Trägersignal) hat, bleibt sie unkonfiguriert. Wenn ich jedoch das andere Gerät am anderen Ende des Kabels einschalte, meldet sich die Schnittstelle automatisch mit IP-Adresse und allem, was sie benötigt.

Für DHCP wäre eine Lösung, es nicht an eine bestimmte Schnittstelle zu binden ...

Antwort3

Eine weitere Möglichkeit, auf dieses Problem zu stoßen, ist dieVerwendung mehrerer Netzwerkkarten mit gleichen Prioritäten, wie in meinem Fall: Ich habe zwei USB-Netzwerkkarten direkt in meine virtuelle Maschine mit Ubuntu 20.04 integriert. Bei jedem Start funktioniert eine davon einwandfrei, aber bei der anderen werden keine TX- und RX-Pakete angezeigt ifconfig. Der Befehl ip azeigt NO-CARRIER und den Status DOWN an, und auf das verbundene Netzwerk kann über diese Netzwerkkarte nicht zugegriffen werden. Ich musste sie jetzt monatelang in den VM-Einstellungen trennen und wieder verbinden, bis ich die Lösung gefunden habe. Nur für den Fall, dass jemand das gleiche Problem hat:

Die Lösung besteht darin, die GUI „Erweiterte Netzwerkkonfiguration“ zu öffnen und sicherzustellen, dass für beide Netzwerkkarten die Option „Automatisch mit Priorität verbinden“ aktiviert ist.aber nicht mit dem gleichen Prioritätswert, sonst würde es zu einem Konflikt kommen und eine Netzwerkkarte würde nach jedem Booten immer „NO CARRIER“ und „no TX/RX packets“ melden. Wenn Sie eine auf „0“ und die andere auf „1“ setzen, vermeiden Sie diesen Konflikt und nach dem Neustart funktionieren beide Netzwerkkarten einwandfrei.

verwandte Informationen