У меня есть хост systemd с 4 портами Ethernet.
один порт зарезервирован для изолированных контейнеров. Он установлен как :
# /etc/systemd/network/20-eth3-reserved.network
[Match]
Name=eth3
[Link]
Unmanaged=yes
. Я также устанавливаю псевдонимы для портов, каждый в своем файле ссылок, например.
# /etc/systemd/network/12-alias-eth3.link
[Match]
MACAddress=42:42:42:42:42:03
[Link]
Name=eth3
Позже я использовал неуправляемый интерфейс в контейнере systemd-nspawn с
# /etc/systemd/nspawn/container1.nspawn
...
[Network]
Private=yes
VirtualEthernet=no
Interface=eth3
В какой-то момент (сентябрь)он работал нормально. Но несколько месяцев назад интерфейс с неуправляемой настройкой просто пропал из системы.
nspawn не вызывает контейнер, говоря, что интерфейс не найден.
ip link
не показывает ни eth3, ни mac-адрес.
lshw
странно показывает все управляемые порты, но НЕ указывайте поле macaddress(serial
)для отключенного.
dmesg
прекрасно показывает все порты и указывает правильный MAC-адрес для всех, включая отключенный. Позже он также показывает применяемый псевдоним!
[Wed Nov 10 11:44:31 2021] igb 0000:03:00.3 eth3: renamed from enps0f4
Таким образом, systemd прекрасно видит устройство даже после того, как возникла проблема.
networkclt
показывает все управляемые порты плюс lo
как unmanaged
. Но никаких признаков eth3.
Я не против найти решение этой проблемы, если есть лучший способ «зарезервировать» физический интерфейс для использования с nspawn вместоUnmanaged=yes
Все это было бы слишком забавно, если бы не печальная изюминка того состояния, в котором systemd все еще находится.
Виртуальная машина не была запущена, или она была запущена, и я пытался запустить ее снова? Независимо от случая machinectl list
контейнер не был запущен.
Единственная причина, по которой я мог найти интерфейс, который был виден ядру, заключался в том, что он был перемещен в другое пространство имен, и это должно произойти только тогда, когда nspawn назначает интерфейс работающему контейнеру.
Но не было контейнера, и не было возможности отладить/расследовать, что с ним случилось, или принудительно выпустить релизы.
И, к сожалению, networkctl
еще меньше знает о пространствах имен и контрольных группах, чем легаси ps
. Если интерфейс где-то прикреплен, значит, его уже нет.
В конце концов я не мог понять, что происходит, но обновление системы и перезагрузка решили проблему на данный момент.