у меня есть сервер под управлением Ubuntu 20.04 LTS, подключенный через один физический интерфейс Ethernet к Интернету. Мой prodiver назначил мне статический первичный IP4 (здесь я буду использовать A.A.A.A для этого IP), поэтому мой файл конфигурации systemd-networkd раньше выглядел так (отключил netplan для работы напрямую с systemd-networkd):
# /etc/systemd/сеть/20-enp7s0.сеть
[Соответствовать]
Имя=enp7s0
[Сеть]
LinkLocalAddressing=ipv6
Адрес=А.А.А.А./32
Шлюз=fe80::1
DNS=X.X.X.1
DNS=X.X.X.2
[Маршрут]
Пункт назначения=0.0.0.0/0
Шлюз=ГГГГГ
ШлюзОнлинк=истина
Мой провайдер предлагает добавить к моему серверу дополнительный IP-адрес, который маршрутизируется на тот же интерфейс, что и основной IP. При добавлении этого второго IP-адреса к моему интерфейсу я могу пропинговать его. Поскольку я использую контейнеры systemd-nspawn, я думал об использовании этого дополнительного IP-адреса для предоставления одному из моих контейнеров эксклюзивного статического IP4 (здесь будет использоваться BBB). Было бы здорово сопоставить записи DNS непосредственно с контейнером на моем сервере, в то время как все остальные приложения на сервере по-прежнему используют основной IP-адрес.
Итак, я начал следовать хорошим инструкциям из Arch wiki на systemd-nspawn и systemd-networkd. Я настроил бридж и перенес на него всю адресацию с физического интерфейса:
/etc/systemd/сеть/br0.netdev
[NetDev]
Имя=br0
Вид = мост
MACAddress=xx:xx:xx:xx:xx:xx # то же, что и мой физ. интерфейс
/etc/systemd/сеть/20-br0.сеть
[Соответствовать]
Имя=br0
[Сеть]
LinkLocalAddressing=ipv6
Адрес=А.А.А.А./32
Шлюз=fe80::1
DNS=X.X.X.1
DNS=X.X.X.2
[Маршрут]
Пункт назначения=0.0.0.0/0
Шлюз=ГГГГГ
ШлюзОнлинк=истина
/etc/systemd/сеть/20-enp7s0.сеть
[Соответствовать]
Имя=enp7s0
[Сеть]
Мост=br0
Переадресация IP4 включена:
$ sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
Я запускаю свой контейнер nspawn со следующей конфигурацией:
/etc/systemd/nspawn/mycontainer.nspawn
[Сеть]
Виртуальный Ethernet=да
Мост=br0
Внутри контейнера (Debian 11 Bullseye) я включил systemd-networkd и использовал следующую конфигурацию для сети:
# /etc/systemd/network/80-container-host0.network
[Соответствовать]
Имя=хост0
[Сеть]
Адрес=B.B.B.B/32
DNS=X.X.X.1
DNS=X.X.X.2
[Маршрут]
Пункт назначения=0.0.0.0/0
Шлюз=ГГГГГ
ШлюзОнлинк=истина
Это результат этой конфигурации. На хосте:
$ ip а
2: enp7s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br0 состояние UP группа по умолчанию qlen 1000
ссылка/эфир xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
ссылка/эфир xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
глобальная область действия inet A.A.A.A/32 br0
valid_lft навсегда
6: vb-mycontainer@if2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br0 состояние UP группа по умолчанию qlen 1000
ссылка/эфир yy:yy:yy:yy:yy:yy brd ff:ff:ff:ff:ff:ff link-netnsid 0
$ networkctl статус -a
1: вот [...]
2: enp7s0
Файл ссылки: /usr/lib/systemd/network/99-default.link
Сетевой файл: /etc/systemd/network/20-enp7s0.network
Тип: эфир
Состояние: порабощено (настроено)
Путь: pci-0000:07:00.0
Драйвер: igb
Поставщик: Корпорация Intel
Модель: I210 Gigabit Network Connection
Аппаратный адрес: хх:хх:хх:хх:хх:хх
MTU: 1500 (минимум: 68, максимум: 9216)
Длина очереди (Tx/Rx): 8/8
Автосогласование: да
Скорость: 1 Гбит/с
Дуплекс: полный
Порт: тп
Политика активации: до
Требуется для онлайн: да
3: бр0
Файл ссылки: /usr/lib/systemd/network/99-default.link
Сетевой файл: /etc/systemd/network/20-br0.network
Тип: мост
Состояние: маршрутизируемый (настроен)
Водитель: мост
Аппаратный адрес: хх:хх:хх:хх:хх:хх
MTU: 1500 (минимум: 68, максимум: 65535)
Задержка вперед: 15 с
Привет Время: 2 с
Максимальный возраст: 20 лет
Время старения: 5 минут
Приоритет: 32768
СТП: нет
Версия многоадресного IGMP: 2
Длина очереди (Tx/Rx): 1/1
Адрес: А.А.А.А.
Шлюз: ГГГГ (Juniper Networks)
fe80::1 (Juniper Networks)
DNS: X.X.X.1
ХХХ2
Политика активации: до
Требуется для онлайн: да
6: vb-мойконтейнер
Файл ссылки: /usr/lib/systemd/network/99-default.link
Сетевой файл: н/д
Тип: эфир
Состояние: деградированное (неуправляемое)
Водитель: вет
Аппаратный адрес: гг:гг:гг:гг:гг:гг
MTU: 1500 (минимум: 68, максимум: 65535)
Длина очереди (Tx/Rx): 1/1
Автосогласование: нет
Скорость: 10 Гбит/с
Дуплекс: полный
Порт: тп
Адрес: fe80::xxxx:xxxx:xxxx:xxxx
Политика активации: до
Требуется для онлайн: да
$ IP-маршрут
по умолчанию через Y.Y.Y.Y dev br0 proto static onlink
И внутри моего контейнера:
# ip а
1: вот: [...]
2: host0@if6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
ссылка/эфир yy:yy:yy:yy:yy:yy brd ff:ff:ff:ff:ff:ff link-netnsid 0
область inet B.B.B.B/32 глобальный host0
valid_lft навсегда
inet6 fe80::xxxx:xxxx:xxxx:xxxx/64 ссылка на область действия
valid_lft навсегда
# статус networkctl -a
1: вот [...]
2: host0
Файл ссылки: н/д
Сетевой файл: /etc/systemd/network/80-container-host0.network
Тип: эфир
Состояние: маршрутизируемый (настроен)
Аппаратный адрес: zz:zz:zz:zz:zz:zz
MTU: 1500 (минимум: 68, максимум: 65535)
QDisc: нет очереди
Режим генерации адреса IPv6: eui64
Длина очереди (Tx/Rx): 1/1
Автосогласование: нет
Скорость: 10 Гбит/с
Дуплекс: полный
Порт: тп
Адрес: B.B.B.B.
fe80::хххх:хххх:хххх:хххх
Шлюз: ГГГГ
DNS: X.X.X.1
ХХХ2
DUID клиента DHCP6: DUID-EN/Vendor: 0000ab117511f183668420370000
17 февраля 19:45:26 mycontainer systemd-networkd[25]: host0: Link UP
17 февраля, 19:45:26 mycontainer systemd-networkd[25]: host0: Получен оператор
17 февраля 19:45:27 mycontainer systemd-networkd[25]: host0: получен IPv6LL
# ip маршрут
по умолчанию через Y.Y.Y.Y dev host0 proto static onlink
Что касается всех других настроек, я придерживаюсь системных значений по умолчанию. Но это не работает, я не могу пинговать от хоста к гостю, а также от гостя к хосту, Интернету или шлюзу, просто получаю Хост назначения недоступен. Так я что-то пропустил здесь? Я не особо разбираюсь в сетях и уже потратил много времени на это, но уже извиняюсь за некоторые глупые ошибки, которые мог допустить. Любая подсказка приветствуется. Спасибо!
РЕДАКТИРОВАТЬ:
Я заглянул в таблицу соседей:
Хозяин:
$ IP-адрес соседа
Y.Y.Y.Y dev br0 lladdr 84:c1:c1:76:ae:9b ДОСТУПНО <- шлюз
fe80::f80b:aff:fe80:d92 dev vb-mycontainer ОШИБКА
fe80::6c91:a7ff:fe1f:19a2 dev br0 НЕУДАЧА
fe80::1 dev br0 lladdr 84:c1:c1:76:ae:9b маршрутизатор УСТАРЕВШИЙ
fe80::f80b:aff:fe80:d92 dev br0 lladdr fa:0b:0a:80:0d:92 УСТАРЕВШИЙ
Гость:
$ IP-адрес соседа
fe80::7e10:c9ff:fe21:ed87 dev host0 lladdr 7c:10:c9:21:ed:87 маршрутизатор STALE
fe80::6c91:a7ff:fe1f:19a2 dev host0 НЕУДАЧА
fe80::1 dev host0 lladdr 84:c1:c1:76:ae:9b маршрутизатор STALE
fe80::6c91:a7ff:fe1f:19a2 — это адрес локали ссылки виртуального интерфейса vb-mycontainer на хосте. Итак, я предполагаю, что есть проблема с соединением между гостем и хостом?