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-адресов?

Обновление от 21 января: других файлов конфигурации нет./etc/netplan

решение1

Обходной путь от 22 января 2022 г.:

Похоже, что netplan и/или networkd в настоящее время слишком глючны, чтобы поддерживать указанную конфигурацию без дублирования IP-адресов/маршрутов.

Решением стало возвращение к NetworkManager.

  1. В .yaml netplan обязательно замените строку 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
    

    Примечание: может потребоваться отключить автозапуск для проводного подключения в разделе «Настройки»>«Сеть» в случае использования графического режима, чтобы отключить постоянные сообщения 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. При этом выдолженпомните, что эти инструменты могут взаимодействовать друг с другом, например, что произойдет, если физический адаптер Ethernet, управляемый с помощью, NetworkManagerвыйдет из строя? Виртуальный интерфейс, который полагается на этот физический, может выйти из строя, может и нет... зависит от конфигурации виртуального адаптеравнешнийк NetworkManager.

Когда вы переключили рендерер на NetworkManager, в этот момент все начало работать, потому что теперь вы использовали netplanдля настройкиNetworkManager как единственная услуга для настройки сети, предотвращая любую «перекрестную конфигурацию».

Для тех, кто еще сталкивается с этой проблемой, есть несколько способов ее решить: вы можете либо прекратить NetworkManagerнастройку интерфейсов, которые вы хотите настроить с помощью другого рендерера, либо просто NetworkManagerполностью отключить. Я предпочитаю переключиться на netplanwith systemd-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. Перезапуск (или остановка) NetworkManager:sudo systemctl <restart|stop> NetworkManager.service
  2. Проверьте свою netplanконфигурацию:sudo netplan try
  3. Если все выглядит правильно и работает, нажмите, Enterкак указано.

(Необязательный)

  • Запрещать NetworkManager:sudo systemctl disable NetworkManager.service

(Примечание)

  • Хотя это должно быть очевидно, вышеизложенное предполагает, что у вас есть либо доступ к локальной консоли, либо ваше SSH-подключение не зависит от настраиваемого вами интерфейса, поскольку в противном случае вы можете быть отключены и не сможете завершить настройку.

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