為什麼 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在啟動時以 no up 啟動。我需要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 {
...
}

理論上,這應該透過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直接配置設備來解決此問題。從 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

遇到此問題的另一種可能性是使用具有相同優先權的多個網路卡,就像我的情況一樣:我有兩個 USB 網路卡直接整合到我的 Ubuntu 20.04 虛擬機器中。每次啟動時,其中一個可以正常工作,但另一個在 中沒有顯示 TX 和 RX 封包ifconfig。此指令ip a顯示 NO-CARRIER 和狀態 DOWN,且無法透過該網卡存取所連接的網路。我不得不在虛擬機設定中斷開連接並重新連接它幾個月,直到我找到解決方案。以防萬一有人面臨同樣的問題:

解決方案是開啟 GUI「進階網路配置」並確保兩個網路卡的「優先自動連線」已啟用但不具有相同的優先權值,否則會導致衝突,並且每次啟動後,一個網卡總是會大喊“NO CARRIER”(沒有載波)並且沒有 TX/RX 封包。將一個設定為“0”,另一個設定為“1”可以避免這種衝突,並且重新啟動後兩個網路卡都可以正常工作。

相關內容