Ubuntu 20.04:通过 netplan 添加桥接时,桥接接口仍然可路由,路由条目重复

Ubuntu 20.04:通过 netplan 添加桥接时,桥接接口仍然可路由,路由条目重复

操作系统:Ubuntu 20.04.3,已安装所有最新更新。

我正在尝试创建一个桥接接口,以奴役当前(eno1)

Netplan 配置:

# 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 目前有太多错误,无法在不重复 IP/路由的情况下支持上述配置。

解决方案是切换回 NetworkManager。

  1. 在 netplan 的 .yaml 中,确保将 renderer 行替换为

    renderer: NetworkManager
    
  2. 确保在 /etc/NetworkManager/NetworkManager.conf 中启用网络管理接口(下面提供受影响的部分)

    [ifupdown]
    managed=true
    
  3. 定义在 etc/NetworkManager/conf.d/10-globally-managed-devices.conf 中过滤哪些接口类型:

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

    注意:确保文件 /usr/lib/NetworkManager/conf.d/10-globally-managed-devices.conf 为空(零大小)。

  4. 重新启动 NetworkManager,或者更好的是,重新启动系统:

    sudo systemctl restart network-manager
    

    注意:如果使用 GUI 模式,可能需要在“设置”>“网络中”禁用有线连接的自动启动,以禁用 NetworkManager 不断抱怨无法激活相应连接。

答案2

@KonstantinBoyandin - 这里提供的关于你的系统的信息不够多,任何结论。话虽如此,以下是对您遇到的情况的合理猜测:

我记得 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。我倾向于在服务器上切换到netplansystemd-networkd禁用NetworkManager,而在桌面 Linux 上,我NetworkManager仅在需要时离开并利用其他网络服务。

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

  1. 配置服务器(安装 Ubuntu 等)
  2. 创建所需的 netplan 配置
  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 连接不依赖于您正在配置的接口,因为您可能会断开连接并因此无法完成配置。

相关内容