У меня есть хост, который я подключаю к разным сетям. На хосте у меня есть несколько виртуальных машин, и чтобы они могли подключаться к сети, я установил мост. Когда я подключаю хост к сети с доступным DHCP, я хочу, чтобы интерфейс моста использовал DHCP для установки адреса IPv4 и т. Д., Но при отсутствии доступного DHCP-сервера я хочу, чтобы интерфейс вернулся к статическим настройкам. Если DHCP доступен, я не хочу устанавливать какой-либо статический адрес, так как это может привести к конфликту с другими хостами в сети.
Поскольку хост - это безголовый сервер CentOS 8, я использую nmcli для настройки моста. Из того, что я прочитал, способ добиться возврата DHCP к статическому адресу состоит в том, чтобы определить одно соединение с высоким приоритетом с использованием DHCP и ограниченным количеством повторных попыток и другое соединение с более низким приоритетом со статическими настройками.
Моя первая попытка была:
nmcli conn add type bridge con-name br0-dhcp ifname br0
nmcli conn mod br0-dhcp connection.autoconnect-priority 5
nmcli conn mod br0-dhcp conneciton.autoconnect-retries 1
nmcli conn mod br0-dhcp connection.autoconnect-slaves 1
nmcli conn add type bridge-slave con-name eno1slave-br0 ifname eno1 master br0
nmcli conn mod eno1slave-br0 connection.autoconnect no
nmcli conn add type bridge con-name br0-static ifname br0
nmcli conn mod br0-static connection.autoconnect-slaves 1
nmcli conn mod br0-static ipv4.addresses 192.168.1.13/24
nmcli conn mod br0-static ipv4.gateway 192.168.1.1
nmcli conn mod br0-static ipv4.dns 192.168.1.1
nmcli conn mod br0-static ipv4.method manual
Это нормально работает, если в сети присутствует DHCP-сервер, т.е. nmcli conn show
и ip addr
подтверждает, что соединения br0-dhcp и eno1slave-br0 активизируются и интерфейс br0 получает динамические настройки, в то время как соединение br0-static остается отключенным. Однако, если DHCP-сервер отсутствует, он не работает, но хост остается недоступным в сети.
Я также пробовал использовать отдельные мост-подчиненные соединения и мостовые интерфейсы для двух мостовых соединений:
nmcli conn add type bridge con-name br0-dhcp ifname br0dhcp
nmcli conn mod br0-dhcp connection.autoconnect-priority 5
nmcli conn mod br0-dhcp conneciton.autoconnect-retries 1
nmcli conn mod br0-dhcp connection.autoconnect-slaves 1
nmcli conn add type bridge-slave con-name eno1slave-br0dhcp ifname eno1 master br0dhcp
nmcli conn mod eno1slave-br0dhcp connection.autoconnect no
nmcli conn add type bridge con-name br0-static ifname br0static
nmcli conn mod br0-static connection.autoconnect-slaves 1
nmcli conn mod br0-static ipv4.addresses 192.168.1.13/24
nmcli conn mod br0-static ipv4.gateway 192.168.1.1
nmcli conn mod br0-static ipv4.dns 192.168.1.1
nmcli conn mod br0-static ipv4.method manual
nmcli conn add type bridge-slave con-name eno1slave-br0static ifname eno1 master br0static
nmcli conn mod eno1slave-br0static connection.autoconnect no
Однако это приводит к тому, что статический мост всегда работает, поэтому у хоста будет два IPv4-адреса, причем статический адрес может конфликтовать с другим хостом в сети. Я предполагаю, почему это не работает: connection.autoconnect-priority
настройка работает на основе интерфейса, и поскольку в последнем случае два соединения моста используют разные интерфейсы (br0dhcp и br0static, соответственно), разногласий нет, и им обоим разрешено попытаться подняться.
Как я могу получить мост, который использует DHCP, когда доступен, но возвращается к статическому адресу, если DHCP не найден?