У меня есть сервер Ubuntu 10.04, в настоящее время настроенный с dhcp3-сервером, а также мостовой интерфейс (br0) для использования с виртуальными машинами. У меня проблема в том, что когда сервер перезагружается, dhcp3-сервер не загружается из-за дополнительной задержки, вызванной подключением к мостовому интерфейсу.
По существу, br0 не имеет IP-адреса для использования с DHCP3-сервером до конца цикла загрузки, а также после того, как DHCP3-сервер попытался загрузить.
После загрузки сервера я могу без проблем запустить /etc/init.d/dhcp3-server start.
Можно ли как-нибудь: - заставить dhcp3-сервер подождать, пока интерфейс загрузится, прежде чем пытаться загрузить? - Запустить dhcp3-сервер после загрузки всего остального?
Вы можете изменить сценарий запуска /etc/init.d/dhcp3-server
так, чтобы он ожидал появления IP-адреса в br0
. Например: (Предупреждение: непроверенный код!)
# wait 5 secs between br0-ready tests
wait_time_between_probes=5
# maximum number of attempts (i.e., timeout)
max_attempts=10
log_progress_msg "Waiting for br0 to get an IP address"
for n in $(seq 1 $max_attempts); do
if /sbin/ifconfig br0 | egrep -q "inet addr:" ; then
# IP address ready on br0, exit loop
break
else
sleep $wait_time_between_probes
fi
done
if [ "$n" = "$max_attempts" ]; then
log_warning_msg "Maximum number of attempts reached, but br0 has no IP address yet"
log_warning_msg "Continuing anyway but DHCP3 server might not start correctly"
fi
Фрагмент должен войти в сценарий запуска, в части case ... start)
, до запуска демона DHCP3. Конечно, вам следует настроить время ожидания и количество попыток в соответствии с вашей средой (сколько времени займет максимум br0, чтобы получить IP-адрес?)
Одним из решений является указание dhcp-серверу не запускаться автоматически, а затем добавьте следующие две строки в ваш файл /etc/network/interfaces
для определения моста
post-up /etc/init.d/dhcp3-server start
pre-down /etc/init.d/dhcp3-server stop
Таким образом, он будет выглядеть следующим образом
iface br0 inet static
bridge_ports eth0 eth1
address 192.168.1.2
broadcast 192.168.1.255
netmask 255.255.255.0
gateway 192.168.1.1
post-up /etc/init.d/dhcp3-server start
pre-down /etc/init.d/dhcp3-server stop
Таким образом, управление сетью (ifup / ifdown, НЕ network-manager) запустит сервер DHCP после установки моста и выключит его перед удалением моста.