Опять в этой убунте перетрясли управление сетями, то у них netplan, то systemd-network, теперь по умолчанию предлагают использовать NetworkManager. Ок, попробуем.
Дано: Хост-машина с одним сетевым интерфейсом, в который воткнут кабель до роутера, контейнеры на хосте, которые надо объединить в одну сеть с хостом.
Ок, создаем bridge:
nmcli con add ifname lxcbr0 type bridge con-name lxcbr0
nmcli con add type bridge-slave ifname enp0s31f6 master lxcbr0
nmcli con modify lxcbr0 bridge.stp no
Перезапускаем NetworkManager:
sudo systemctl restart NetworkManager
Всё вроде работает, контейнеры видны в сети, внешняя сеть доступна. Перезагружаем машину, внешняя сеть не работает, опять перезапускаем NetworkManager, всё работает.
После перезагрузки, но до рестарта NM состояние подключения такое:
$ nmcli d show lxcbr0
GENERAL.DEVICE: lxcbr0
GENERAL.TYPE: bridge
GENERAL.HWADDR: 00:16:3E:00:00:00
GENERAL.MTU: 1500
GENERAL.STATE: 100 (подключено)
GENERAL.CONNECTION: lxcbr0
GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/1
IP4.ADDRESS[1]: 10.0.3.1/24
IP4.GATEWAY: --
IP4.ROUTE[1]: dst = 10.0.3.0/24, nh = 0.0.0.0, mt = 0
IP4.DNS[1]: 192.168.1.1
После перезапуска NM:
$ nmcli d show lxcbr0
GENERAL.DEVICE: lxcbr0
GENERAL.TYPE: bridge
GENERAL.HWADDR: 00:16:3E:00:00:00
GENERAL.MTU: 1500
GENERAL.STATE: 100 (подключено)
GENERAL.CONNECTION: lxcbr0
GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/1
IP4.ADDRESS[1]: 192.168.1.156/24
IP4.ADDRESS[2]: 10.0.3.1/24
IP4.GATEWAY: 192.168.1.1
IP4.ROUTE[1]: dst = 0.0.0.0/0, nh = 192.168.1.1, mt = 425
IP4.ROUTE[2]: dst = 10.0.3.0/24, nh = 0.0.0.0, mt = 0
IP4.ROUTE[3]: dst = 192.168.1.0/24, nh = 0.0.0.0, mt = 425
IP4.ROUTE[4]: dst = 10.0.3.0/24, nh = 0.0.0.0, mt = 425
IP4.DNS[1]: 192.168.1.1
Т.е., после рестарта NM lxcbr0 подхватывает второй IP из нужной сети, контейнеры получают тоже ip вида 192.168.х.х.
Собственно, вопрос, какого лешего NM не хватает при старте системы, чтобы нормально поднять соединение?