为什么 Netplan/Networkd 没有启动静态以太网接口?

为什么 Netplan/Networkd 没有启动静态以太网接口?

我有一台运行 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 服务器无法工作,因为它无法enp1s0f0在启动时启动。我需要enp1s0f0在启动期间启动和配置,我认为这是静态 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(我不知道为什么在启动时不会出现,无论电缆的另一端是否有东西;我认为这就是拥有静态 IP 的全部意义所在)。 是否可以在 Netplan 中使其工作? 或者是否可以在启动enp1s0f0时启动 DHCP 服务器?enp1s0f0

答案1

看起来你遇到了一个 bug,可以通过https://github.com/CanonicalLtd/netplan/pull/34- 目前,设备只有在拥有运营商的情况下才会进行配置,但这一要求即将消失。

同时,您可能可以通过systemd-networkd直接配置设备来解决这个问题。从 netplan 配置中删除enp1s0f0节,并在中添加类似这样的(未经测试的)systemd 配置/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 ifupdownenp1s0f0使用 ifupdown 进行配置。

答案2

看起来 Netplan 有一个智能系统,可以确定 iface 是否有链接,并且仅在链接启动时自动分配地址。

当该接口没有链路(载波信号)时,它保持未配置状态,但是,如果我打开电缆另一端的另一个设备,接口将自动启动 IP 地址和所需的一切。

对于 DHCP,解决方案是不将其绑定到特定接口...

答案3

遇到此问题的另一种可能性是使用具有相同优先级的多个网卡,就像我的情况一样:我的 Ubuntu 20.04 虚拟机中直接集成了两个 USB 网卡。每次启动时,其中一个都可以正常工作,但另一个没有显示 TX 和 RX 数据包ifconfig。该命令ip a显示 NO-CARRIER 和状态 DOWN,并且无法通过此网卡访问连接的网络。几个月来,我不得不在虚拟机设置中断开连接并重新连接,直到我想出解决方案。以防有人遇到同样的问题:

解决方案是打开 GUI 的“高级网络配置”,并确保两个网卡的“自动优先连接”都已启用但优先级值不同否则会引起冲突,每次启动后,其中一个网卡都会一直显示无载波,无 TX/RX 数据包。将其中一个设置为“0”,将另一个设置为“1”可避免此冲突,重启后,两个网卡均可正常工作。

相关内容