Por que o Netplan/Networkd não está trazendo uma interface Ethernet estática?

Por que o Netplan/Networkd não está trazendo uma interface Ethernet estática?

Eu tenho uma máquina rodando Ubuntu Server 18.04. A rede é configurada usando Netplan, então tenho essa configuração em /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 um dispositivo que pode ou não estar ligado (na inicialização ou em qualquer outro momento). Quero executar um servidor DHCP nesta interface.

O problema é que quando inicializo há um atraso de alguns minutos e vejo esta mensagem:

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

Eventualmente, o tempo limite expira, a inicialização continua, mas enp1s0f0nunca é configurada ou ativada. ip link show enp1s0f0dá:

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

Não tenho ideia de qual NO-CARRIERé o significado, mas caso seja relevante, aqui está o 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

Agora, se eu ligar o dispositivo conectado, com certeza enp1s0f0aparecerá:

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

Mas não adianta neste momento - o servidor DHCP não funcionará, porque não poderia iniciar sem enp1s0f0inicialização no momento da inicialização. Eu preciso enp1s0f0instalar e configurar durante a inicialização, o que pensei ser o objetivo de uma configuração de IP estático. Ainda mais estranho é que ele sempre tem um endereço IPv6, mesmo quando está inativo:

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

Se eu verificar a saída de depuração do Netplan, vejo:

$ 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

Minha configuração isc-dhcp-serverdeve conter /etc/default/isc-dhcp-server:

INTERFACESv4="enp1s0f0"

...e /etc/dhcp/dhcpd.confcontém (entre outras coisas):

subnet 10.0.0.0 netmask 255.255.255.0 {
...
}

Em teoria, isso deveria servir DHCP em enp1s0f0. No entanto, como enp1s0f0nunca é ativado, o servidor DHCP não 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!

Isso não foi um problema ifupdown(não tenho ideia de por que enp1s0f0não aparece durante a inicialização, se há ou não alguma coisa na outra extremidade do cabo; pensei que esse era o objetivo de ter um IP estático). É possível fazê-lo funcionar no Netplan? Ou é possível iniciar o servidor DHCP quando enp1s0f0estiver ativo?

Responder1

Parece que você está encontrando o bug que será resolvido porhttps://github.com/CanonicalLtd/netplan/pull/34- atualmente os dispositivos só serão configurados se tiverem operadora, mas esse requisito será eliminado.

Enquanto isso, você provavelmente poderá corrigir isso configurando o dispositivo systemd-networkddiretamente. Remova a enp1s0f0estrofe da configuração do netplan e adicione algo como esta (não testada) configuração do systemd em /etc/systemd/network/10-enp1s0f0.network:

[Match]
Name=enp1s0f0

[Link]
RequiredForOnline=no

[Network]
ConfigureWithoutCarrier=true
Address=10.0.0.1/24

A chave é aquela ConfigureWithoutCarrierque extraí diretamente da solicitação pull.

(Você pode ver o que o netplan gera e partir daí - o arquivo estará em /run/systemd/network.)

Alternativamente, você pode aproveitar o fato de que netplan e ifupdown podem coexistir apt install ifupdowne configurar enp1s0f0com ifupdown.

Responder2

Parece que a Netplan tem um sistema inteligente para descobrir quando o iface tem link ou não e atribuir endereços somente quando o link estiver ativo, automaticamente.

Quando aquela interface não tem link (sinal da portadora), ela fica desconfigurada, porém, se eu ligar o outro dispositivo na outra ponta do cabo, a interface automaticamente aparece com o endereço IP e tudo o que precisa.

Para o DHCP, uma solução seria não vinculá-lo a uma interface específica...

Responder3

Outra possibilidade de se deparar com esse problema é auso de vários nics com as mesmas prioridades, como no meu caso: tenho duas placas de rede USB diretamente integradas à minha máquina virtual Ubuntu 20.04. A cada inicialização, um deles funcionaria bem, mas o outro não possui pacotes TX e RX exibidos no formato ifconfig. O comando ip arevela NO-CARRIER e estado DOWN, e a rede conectada não pode ser acessada através desta nic. Tive que desconectá-lo e reconectá-lo nas configurações da VM por meses até encontrar a solução. Caso alguém esteja enfrentando o mesmo problema:

A solução é abrir a GUI 'Configuração de rede avançada' e garantir que para ambas as nics "conectar automaticamente com prioridade" esteja habilitadomas não com o mesmo valor de prioridade, caso contrário, causaria um conflito e um nic sempre acabaria gritando NO CARRIER e nenhum pacote TX/RX após cada inicialização. Definir um para '0' e o outro para '1' evita esse conflito e após a reinicialização ambas as placas funcionam bem.

informação relacionada