Тип подключения routed один из самых простых в настройке. Позволяет выделять статические IP адреса с защитой от подмены. Полезно, если вы отдаёте контейнер третьим лицам.
При первоначальной настройке (lxd init) я пропустил настройку сети и добавил только хранилище. Профиль default выглядит следующим образом
lxc profile show default
config: {}
description: Default LXD profile
devices:
root:
path: /
pool: default
type: disk
name: default
Добавлю в профиль сетевое устройство. При условии, что имя интерфейса на хост-машине enp0s3
lxc profile device add default eth0 nic name=eth0 nictype=routed parent=enp0s3
Проверяю профиль
lxc profile show default
config: {}
description: Default LXD profile
devices:
eth0:
name: eth0
nictype: routed
parent: enp0s3
type: nic
root:
path: /
pool: default
type: disk
name: default
Вносим изменения в параметры ядра Linux на хост-машине
echo "net.ipv4.conf.enp0s3.forwarding = 1" >> /etc/sysctl.conf
sysctl -p
Для удобства я сделаю новый профиль на базе default и добавлю IP адрес. Этого адреса не должно быть на интерфейсе хоста
lxc profile cp default demo-103
lxc profile device set demo-103 eth0 ipv4.address=192.168.1.103
Создаём новый контейнер
lxc launch images:ubuntu/22.04/cloud demo-103 -p demo-103
Сейчас в сетевых настройках контейнера тип подключения DHCP. Как правило этого достаточно. Осталось поправить настройки DNS
lxc exec demo-103 bash
echo "nameserver 192.168.1.1" > /etc/resolv.conf
Если сеть не поднялась, попробуйте настроить вручную. Конфигурация Netplan должна выглядеть примерно так
network:
version: 2
ethernets:
eth0:
dhcp4: false
addresses:
- 192.168.1.103/32
routes:
- to: 0.0.0.0/0
via: 169.254.0.1
on-link: true
nameservers:
addresses:
- 192.168.1.1
Для конфигурации контейнера можно использовать Cloud-init.