¿Por qué Netplan/Networkd no muestra una interfaz Ethernet estática?

¿Por qué Netplan/Networkd no muestra una interfaz Ethernet estática?

Tengo una máquina que ejecuta Ubuntu Server 18.04. La red está configurada usando Netplan, así que tengo esta configuración en /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:
        [...]

enp1s0f0está conectado a un dispositivo que puede estar encendido o no (al arrancar o en cualquier otro momento). Quiero ejecutar un servidor DHCP en esta interfaz.

El problema es que cuando inicio hay un retraso de unos minutos y veo este mensaje:

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

Finalmente, se agota el tiempo de espera, el arranque continúa, pero enp1s0f0nunca se configura ni se activa. ip link show enp1s0f0da:

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

No tengo idea de cuál NO-CARRIERes el significado de, pero en caso de que sea relevante, aquí está el resultado de 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

Ahora, si enciendo el dispositivo conectado, aparece enp1s0f0:

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

Pero no sirve de nada en este momento: el servidor DHCP no funcionará porque no pudo iniciarse sin estar enp1s0f0activo en el momento del arranque. Necesito enp1s0f0configurarlo durante el arranque, lo cual pensé que era el objetivo de una configuración de IP estática. Aún más extraño es que siempre tiene una dirección IPv6, incluso cuando está inactivo:

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

Si reviso el resultado de depuración de Netplan, veo:

$ 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

Mi configuración isc-dhcp-serveres contener /etc/default/isc-dhcp-server:

INTERFACESv4="enp1s0f0"

...y /etc/dhcp/dhcpd.confcontener (entre otras cosas):

subnet 10.0.0.0 netmask 255.255.255.0 {
...
}

En teoría, esto debería servir DHCP sobre enp1s0f0. Sin embargo, como enp1s0f0nunca aparece, el servidor DHCP no se inicia:

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!

Esto no fue un problema ifupdown(no tengo idea de por qué enp1s0f0no aparece simplemente durante el arranque, ya sea que haya algo en el otro extremo del cable o no; pensé que ese era el objetivo de tener una IP estática). ¿Es posible hacerlo funcionar en Netplan? ¿O es posible hacer que el servidor DHCP se inicie cuando enp1s0f0esté activo?

Respuesta1

Parece que estás encontrando el error que se resolverá conhttps://github.com/CanonicalLtd/netplan/pull/34- Actualmente los dispositivos solo se configurarán si tienen un operador, pero ese requisito desaparecerá.

Mientras tanto, probablemente puedas solucionar este problema configurando el dispositivo systemd-networkddirectamente. Elimine la enp1s0f0estrofa de la configuración de netplan y agregue algo como esta configuración de systemd (no probada) en /etc/systemd/network/10-enp1s0f0.network:

[Match]
Name=enp1s0f0

[Link]
RequiredForOnline=no

[Network]
ConfigureWithoutCarrier=true
Address=10.0.0.1/24

El bit clave es el ConfigureWithoutCarrierque extraje directamente de la solicitud de extracción.

(Puede ver lo que genera netplan y continuar desde allí; el archivo estará en formato /run/systemd/network.)

Alternativamente, puede aprovechar el hecho de que netplan e ifupdown pueden coexistir apt install ifupdowny configurar enp1s0f0con ifupdown.

Respuesta2

Parece que Netplan tiene un sistema inteligente para determinar cuándo el iface tiene un enlace o no y asigna direcciones solo cuando el enlace está activo, de forma automática.

Cuando esa interfaz no tiene enlace (señal portadora), permanece desconfigurada, sin embargo, si enciendo el otro dispositivo en el otro extremo del cable, la interfaz automáticamente aparece con la dirección IP y todo lo que necesita.

Para DHCP, una solución sería no vincularlo a una interfaz específica...

Respuesta3

Otra posibilidad de encontrarse con este problema es lauso de múltiples NIC con las mismas prioridades, como en mi caso: tengo dos nics USB directamente integradas en mi máquina virtual Ubuntu 20.04. En cada inicio, uno de ellos funcionaría bien, pero el otro no muestra paquetes TX y RX en el archivo ifconfig. El comando ip arevela NO-CARRIER y el estado ABAJO, y no se puede acceder a la red conectada a través de esta NIC. Tuve que desconectarlo y volver a conectarlo en la configuración de VM durante meses hasta que encontré la solución. En caso de que alguien se enfrente al mismo problema:

La solución es abrir la GUI 'Configuración de red avanzada' y asegurarse de que para ambas NIC "conectarse automáticamente con prioridad" esté habilitadopero no con el mismo valor de prioridad, de lo contrario causaría un conflicto y una NIC siempre terminaría gritando NO CARRIER y no hay paquetes TX/RX después de cada arranque. Configurar uno en '0' y el otro en '1' evita este conflicto y, después de reiniciar, ambos NIC funcionan bien.

información relacionada