Я настраиваю резервную копию роутера / брандмауэра FreeBSD, мой провайдер выдает IP по DHCP, он статичен и привязан к MAC-адресу моей сетевой карты, поэтому, когда карп переключает состояние, я пытаюсь отключить интерфейс на одной машине и включите его на другом. Оно работает. Так хорошо до сих пор...
Моя проблема в том, что когда я перезагружаю машину BACKUP, интерфейс настраивается после перезагрузки - он разговаривает с DHCP-сервером с MAC, который уже используется в сети, и получает ответ. Совсем не хорошо - на мгновение таблицы arp моих коммутаторов направляют пакеты не на тот порт.
Я пытался:
Начало dhclient em0
при переходе в состояние МАСТЕР и ifconfig_em0="down"
в rc.conf, но если в конечном итоге интерфейс переходит в состояние связывания, dhclient завершает работу и не возобновляет работу как devd, который должен возобновить его, проверяет с помощью dhcpif
из network.subr
- и сообщает, что «em0 не поддерживает dhcp».
устанавливать ifconfig_em0="down dhcp"
и удалить dhclient.leases.em0
файл, затем перезагрузитесь - мой интерфейс отключен и настроен после запуска (возможно, он даже был включен, а затем отключен моим сценарием при входе в состояние BACKUP).
Насколько я понимаю, нет способа настроить сетевой адаптер с включенным DHCP, чтобы dhclient при подключении запускался с помощью devd, но при этом он полностью молчал во время процесса загрузки?
В качестве обходного пути я добавил пользовательское задание devd для запуска dhclient без проверок:
# cat /usr/local/etc/devd/dhclient.conf
notify 1 {
match "system" "IFNET";
match "type" "LINK_UP";
media-type "ethernet";
match "subsystem" "em0";
action "/usr/local/sbin/dhcp_linkup_carp.sh";
};
# cat /usr/local/sbin/dhcp_linkup_carp.sh
#!/bin/sh
[ "`ifconfig em0 | grep inet`" ] && dhclient em0
и установить ifconfig_em0="down"
в rc.conf
(интерфейс поднимается скриптами devd carp)