我目前有一台安装了 dhcp3-server 的 Ubuntu 10.04 服务器以及一个用于虚拟机的桥接接口 (br0)。我遇到的问题是,当服务器重新启动时,由于启动桥接接口导致的额外延迟,dhcp3-server 无法加载。
本质上,直到启动周期后期,也就是 DHCP3 服务器尝试加载之后,br0 才具有可供 DHCP3 服务器使用的 IP 地址。
服务器启动后,我就可以毫无问题地运行“/etc/init.d/dhcp3-server start”。
有什么方法可以做到: - 强制 dhcp3-server 等到接口加载完成后再尝试加载? - 在其他所有内容都加载完成后启动 dhcp3-server?
答案1
一个解决方案是告诉 dhcp-server 不要自动启动,然后将以下两行添加到您/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,而不是网络管理器)将在启动网桥后启动 DHCP 服务器,并在移除网桥之前将其关闭。
答案2
您可以修改/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 地址最多需要多长时间?)