Ubuntu 20.04:透過 netplan 新增橋接時,橋接介面保持可路由,路由條目重複

Ubuntu 20.04:透過 netplan 新增橋接時,橋接介面保持可路由,路由條目重複

作業系統:Ubuntu 20.04.3,安裝了所有最新更新。

我正在嘗試創建一個橋接口,以奴役電流(eno1)

網路規劃配置:

# This is the network config written by 'subiquity'
network:
  version: 2
  renderer: networkd

  ethernets:
    eno1:
      dhcp4: false
      dhcp6: false

  bridges:
    br0:
      interfaces: [eno1]
      addresses: [10.20.0.21/24]
      gateway4: 10.20.0.1
      nameservers:
        search: [example.com]
        addresses: [10.20.0.1,10.20.0.10]
      dhcp4: false
      dhcp6: false

當我運行“netplan try”時,我看到:

** (generate:2332): WARNING **: 12:54:41.673: Problem encountered while validatingdefault route consistency.Please set up multiple routing tables and use `routing-policy` instead.
Error: Conflicting default route declarations for IPv4 (table: main, metric: default), first declared in br0 but also in eno1

如果我重新啟動系統,結果如下:

$ route

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         10.20.0.1       0.0.0.0         UG    0      0        0 br0
default         10.20.0.1       0.0.0.0         UG    0      0        0 eno1
10.20.0.0        0.0.0.0        255.255.255.0   U     0      0        0 br0
10.20.0.0        0.0.0.0        255.255.255.0   U     0      0        0 eno1

系統仍然可用,但配置明顯異常。

$ networkctl

networkctl 
IDX LINK TYPE     OPERATIONAL SETUP     
  1 lo   loopback carrier     unmanaged 
  2 eno1 ether    routable    configured
  3 br0  bridge   routable    configured

$ ip addr show

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
    link/ether 18:c0:4d:63:da:da brd ff:ff:ff:ff:ff:ff
    inet 10.20.0.21/24 brd 10.1.0.255 scope global eno1
       valid_lft forever preferred_lft forever
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 18:c0:4d:63:da:da brd ff:ff:ff:ff:ff:ff
    inet 10.20.0.21/24 brd 10.1.0.255 scope global br0
       valid_lft forever preferred_lft forever
    inet6 fe80::700e:94ff:fea6:fc98/64 scope link 
       valid_lft forever preferred_lft forever

如何使 eno1 受奴役並防止它創建路由條目/IP 位址的重複項?

1月21日更新:下面沒有其他設定文件/etc/netplan

答案1

2022 年 1 月 22 日的解決方法:

看起來 netplan 和/或 networkd 目前的 bug 太多,無法在不複製 IP/路由的情況下支援上述配置。

解決方案是切換回 NetworkManager。

  1. 在 netplan 的 .yaml 中,請確保將渲染器行替換為

    renderer: NetworkManager
    
  2. 確保在 /etc/NetworkManager/NetworkManager.conf 中啟用網路管理介面(下方提供的受影響部分)

    [ifupdown]
    managed=true
    
  3. 在 etc/NetworkManager/conf.d/10-globally-management-devices.conf 中定義要過濾的介面類型:

    [keyfile]
    
    unmanaged-devices=*,except:type:wifi,except:type:wwan,except:type:ethernet
    

    注意:確保檔案 /usr/lib/NetworkManager/conf.d/10-globally-management-devices.conf 為空(大小為零)。

  4. 重新啟動 NetworkManager,或者更好的是重新啟動系統:

    sudo systemctl restart network-manager
    

    注意:如果使用 GUI 模式,可能需要在「設定」>「網路」中停用有線連線的自動啟動,以停用不斷抱怨無法啟動對應連線的 NetworkManager。

答案2

@KonstantinBoyandin - 這裡提供的系統資訊根本不夠任何結論。也就是說,這是對您所遇到的情況的有根據的猜測:

IIRC 預設安裝的 20.04 已經在使用了NetworkManager。這意味著開箱即用,NetworkManager很可能已經配置eno1並創建了您觀察到的預設路由:

default         10.20.0.1       0.0.0.0         UG    0      0        0 eno1

沒有什麼可以阻止您嘗試同時使用兩者NetworkManager systemd-networkd- 我想不出原因這樣做,但沒有什麼可以阻止它。我利用這一點來避免NetworkManager在已經運行的系統上設定wireguard介面時必須處理的問題NetworkManager。這樣做時,您必須請注意,這些工具可以相互交互,例如,如果所管理的實體乙太網路適配器NetworkManager發生故障會發生什麼?依賴實體介面的虛擬介面可能會失敗,也可能不會…取決於虛擬適配器的配置外部的NetworkManager

當您將渲染器切換到 時NetworkManager,一切都開始工作,因為現在您正在使用netplan配置NetworkManager 作為網路配置的唯一服務,防止任何「交叉配置」。

對於遇到此問題的其他人,有幾種方法可以解決此問題,您可以停止NetworkManager配置要使用不同渲染器配置的接口,或完全停用NetworkManager。我的偏好是在伺服器上切換到netplanwithsystemd-networkd並停用,而在桌面 Linux 上,我僅在需要時才保留並利用其他網路服務。NetworkManagerNetworkManager

在典型的 Ubuntu 20.04 伺服器上,以下是如何使用 netplan 並避免 OP 中的衝突:

  1. 配置伺服器(安裝Ubuntu等)
  2. 建立所需的網路規劃配置
  3. 編輯/etc/network/interfaces並註解掉適用於您在中配置的介面的任何部分netplan
# The primary network interface
# auto eno1
# iface eno1 inet dhcp
  1. 重新啟動(或停止)NetworkManagersudo systemctl <restart|stop> NetworkManager.service
  2. 測試您的netplan配置:sudo netplan try
  3. 如果一切看起來正確且運作正常,請Enter按提示點擊

(選修的)

  • 禁用NetworkManagersudo systemctl disable NetworkManager.service

(筆記)

  • 雖然這應該是顯而易見的,但上面假設您具有本地控制台訪問權限,或者您的 SSH 連接不依賴您正在配置的接口,因為您可能會斷開連接,從而無法完成配置。

相關內容