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:
[...]
enp1s0f0
está 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 enp1s0f0
nunca se configura ni se activa. ip link show enp1s0f0
da:
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-CARRIER
es 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 enp1s0f0
activo en el momento del arranque. Necesito enp1s0f0
configurarlo 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-server
es contener /etc/default/isc-dhcp-server
:
INTERFACESv4="enp1s0f0"
...y /etc/dhcp/dhcpd.conf
contener (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 enp1s0f0
nunca 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é enp1s0f0
no 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 enp1s0f0
esté 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-networkd
directamente. Elimine la enp1s0f0
estrofa 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 ConfigureWithoutCarrier
que 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 ifupdown
y configurar enp1s0f0
con 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 a
revela 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.