Почему Netplan/Networkd не открывает статический интерфейс Ethernet?

Почему Netplan/Networkd не открывает статический интерфейс Ethernet?

У меня есть машина под управлением Ubuntu Server 18.04. Сеть настроена с помощью Netplan, поэтому у меня есть эта конфигурация в /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подключен к устройству, которое может быть включено или выключено (при загрузке или в любое другое время). Я хочу запустить DHCP-сервер на этом интерфейсе.

Проблема в том, что при загрузке происходит задержка в несколько минут, и я вижу следующее сообщение:

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

В конце концов время ожидания истекает, загрузка продолжается, но enp1s0f0не настраивается и не запускается. ip link show enp1s0f0выдает:

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-CARRIER, но если это важно, вот вывод 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

Теперь, если я включу подключенное устройство, то обязательно 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

Но на данном этапе это бесполезно — DHCP-сервер не будет работать, потому что он не может запуститься без enp1s0f0no up во время загрузки. Мне нужно enp1s0f0up и configure во время загрузки, в чем, как я думал, и заключается весь смысл статической конфигурации IP. Еще более странно то, что у него всегда есть адрес IPv6, даже когда он выключен:

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

Если я проверю отладочный вывод Netplan, то увижу:

$ 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

Моя конфигурация isc-dhcp-serverдолжна /etc/default/isc-dhcp-serverсодержать:

INTERFACESv4="enp1s0f0"

...и /etc/dhcp/dhcpd.confсодержат (помимо прочего):

subnet 10.0.0.0 netmask 255.255.255.0 {
...
}

Теоретически это должно обслуживать DHCP через enp1s0f0. Однако, поскольку enp1s0f0никогда не поднимается, DHCP-сервер не запускается:

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!

Это не было проблемой ifupdown(я понятия не имею, почему enp1s0f0просто не появляется во время загрузки, независимо от того, есть ли что-нибудь на другом конце кабеля; я думал, что в этом и есть смысл иметь статический IP). Возможно ли заставить это работать в Netplan? Или возможно ли запустить DHCP-сервер, когда enp1s0f0он включен?

решение1

Похоже, вы столкнулись с ошибкой, которую можно решитьhttps://github.com/CanonicalLtd/netplan/pull/34- в настоящее время устройства будут настраиваться только при наличии у них оператора связи, но это требование отменяется.

В то же время, вы, вероятно, можете исправить это, настроив устройство systemd-networkdнапрямую. Удалите enp1s0f0строфу из конфигурации netplan и добавьте что-то вроде этого (непроверенного) systemd config в /etc/systemd/network/10-enp1s0f0.network:

[Match]
Name=enp1s0f0

[Link]
RequiredForOnline=no

[Network]
ConfigureWithoutCarrier=true
Address=10.0.0.1/24

Ключевой фрагмент — это тот ConfigureWithoutCarrier, который я извлек непосредственно из запроса на извлечение.

(Вы можете посмотреть, что сгенерирует netplan, и отталкиваться от этого — файл будет в формате /run/systemd/network.)

В качестве альтернативы вы можете воспользоваться тем фактом, что netplan и ifupdown могут сосуществовать, apt install ifupdownи выполнить настройку enp1s0f0с помощью ifupdown.

решение2

Похоже, у Netplan есть умная система, которая определяет, есть ли у iface ссылка или нет, и автоматически назначает адреса только при наличии ссылки.

Когда на этом интерфейсе нет соединения (несущего сигнала), он остается ненастроенным, однако, если я включу другое устройство на другом конце кабеля, интерфейс автоматически поднимется с IP-адресом и всем необходимым.

Для DHCP решением было бы не привязывать его к определенному интерфейсу...

решение3

Другая возможность столкнуться с этой проблемой —использование нескольких сетевых карт с одинаковыми приоритетами, как в моем случае: у меня есть два USB-адаптера, напрямую интегрированных в мою виртуальную машину Ubuntu 20.04. При каждом запуске один из них работал нормально, но у другого в не отображались пакеты TX и RX ifconfig. Команда ip aпоказывает NO-CARRIER и состояние DOWN, а подключенная сеть недоступна через этот сетевой адаптер. Мне приходилось отключать и подключать его снова в настройках виртуальной машины в течение нескольких месяцев, пока я не нашел решение. На всякий случай, если кто-то столкнется с той же проблемой:

Решение — открыть графический интерфейс «Расширенная конфигурация сети» и убедиться, что для обеих сетевых карт включена функция «автоматического подключения с приоритетом».но не с тем же значением приоритета, в противном случае это приведет к конфликту, и один сетевой адаптер будет всегда кричать NO CARRIER и no TX/RX packets после каждой загрузки. Установка одного на '0', а другого на '1' позволяет избежать этого конфликта, и после перезагрузки оба сетевых адаптера будут работать нормально.

Связанный контент