web-dev-qa-db-fra.com

Pourquoi Netplan / Networkd n'apporte-t-il pas une interface Ethernet statique?

J'ai une machine sous Ubuntu Server 18.04. Le réseau est configuré à l'aide de Netplan. J'ai donc cette configuration dans /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 connecté à un périphérique allumé ou non (au démarrage ou à tout autre moment). Je veux exécuter un serveur DHCP sur cette interface.

Le problème, c'est que lorsque je démarre, il y a un délai de quelques minutes et je vois le message suivant:

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

Finalement, le délai expire, le démarrage se poursuit, mais enp1s0f0 n'est jamais configuré ni affiché. ip link show enp1s0f0 donne:

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

Je n'ai aucune idée de la signification de NO-CARRIER, mais si cela est pertinent, voici le résultat 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

Maintenant, si j'allume le périphérique connecté, assez de enp1s0f0 apparaît:

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

Mais cela ne sert à rien à ce stade: le serveur DHCP ne fonctionnera pas car il ne pourrait pas démarrer avec enp1s0f0 no up au démarrage. J'ai besoin de enp1s0f0 up et configuré pendant le démarrage, ce qui, je pensais, était le but d'une configuration IP statique. Encore plus étrange, il a toujours une adresse IPv6, même lorsqu'elle est en panne:

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 je vérifie la sortie de débogage de Netplan, je vois:

$ 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

Ma configuration pour isc-dhcp-server doit avoir /etc/default/isc-dhcp-server contenant:

INTERFACESv4="enp1s0f0"

... et /etc/dhcp/dhcpd.conf contiennent (entre autres):

subnet 10.0.0.0 netmask 255.255.255.0 {
...
}

En théorie, cela devrait servir DHCP sur enp1s0f0. Cependant, étant donné que enp1s0f0 n'est jamais affiché, le serveur DHCP ne parvient pas à démarrer:

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!

Ce n'était pas un problème sous ifupdown (je ne sais pas pourquoi enp1s0f0 ne se présente pas au démarrage, que quelque chose se trouve ou non à l'autre bout du câble; je pensais que c'était la point entier d'avoir une adresse IP statique). Est-il possible de le faire fonctionner dans Netplan? Ou est-il possible de faire démarrer le serveur DHCP lorsque enp1s0f0 est activé?

2
detly

Il semble que vous rencontriez le bogue qui sera résolu par https://github.com/CanonicalLtd/netplan/pull/34 - pour le moment, les périphériques ne seront configurés que s'ils ont un opérateur. cette exigence s'en va.

En attendant, vous pouvez probablement résoudre ce problème en configurant directement le périphérique avec systemd-networkd. Supprimez la strophe enp1s0f0 de la configuration netplan et ajoutez un paramètre similaire à celui (non testé) de la configuration systemd dans /etc/systemd/network/10-enp1s0f0.network:

[Match]
Name=enp1s0f0

[Link]
RequiredForOnline=no

[Network]
ConfigureWithoutCarrier=true
Address=10.0.0.1/24

Le bit clé est le ConfigureWithoutCarrier que j'ai extrait directement de la demande d'extraction.

(Vous pouvez voir ce que netplan génère et commencer à partir de là - le fichier sera dans /run/systemd/network.)

Alternativement, vous pouvez utiliser le fait que netplan et ifupdown peuvent coexister, apt install ifupdown et configurer enp1s0f0 avec ifupdown.

6
dja

Il semble que Netplan dispose d’un système intelligent d’identification automatique du lien iface et d’attribution d’adresses uniquement lorsque le lien est activé.

Lorsque cette interface n'a pas de lien (signal de porteuse), elle reste non configurée. Toutefois, si j'allume l'autre périphérique à l'autre extrémité du câble, l'interface affiche automatiquement l'adresse IP et tout ce dont elle a besoin.

Pour DHCP, une solution serait de ne pas le lier à une interface spécifique ...

1
Adam