如何在以后启动DHCP3服务器,以便在加载之前等待桥接接口初始化?

我目前使用dhcp3-server设置Ubuntu 10.04服务器以及用于虚拟机的桥接接口(br0)。 我遇到的问题是,当服务器重新启动时,由于启动桥接接口引起的额外延迟,dhcp3-server无法加载。

基本上br0没有用于DHCP3-Server的IP地址,直到启动周期的后期,在DHCP3服务器尝试加载之后。

服务器启动后,我可以运行’/etc/init.d/dhcp3-server start’而不会出现任何问题。

有没有办法可以: – 强制dhcp3-server等到接口加载后再尝试加载? – 其他所有内容加载后启动dhcp3-server?

一种解决方案是告诉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,NOT network-manager)将在启动网桥后启动DHCP服务器,并在移除网桥之前将其关闭。

您可以修改/etc/init.d/dhcp3-server启动脚本以等待br0上的IP地址可用。 例如:( 警告:未经测试的代码!)

 # wait 5 secs between br0-ready tests wait_time_between_probes=5 # maximum number of attempts (ie, 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 

在启动DHCP3守护程序之前,代码段应该进入启动脚本,在case ... start)部分内。 当然,您应该调整等待时间和与您的环境匹配的尝试次数(br0获取IP地址需要多长时间?)