我如何稍后再启动DHCP3-server,以便它在加载之前等待网桥接口初始化?


8

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

基本上,br0直到启动周期的后期,也就是DHCP3-server尝试加载之后,才具有与DHCP3-Server一起使用的IP地址。

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

有什么方法可以执行以下操作:-强制dhcp3-server等待接口加载完毕再尝试加载?-在其他所有内容加载完毕后启动dhcp3-server吗?

Answers:


9

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


我已经测试了两个答案,并且此后置/下置解决方案更加整洁且易于升级。感谢您的宝贵建议!我在高端和低端搜索了这样的简单解决方案
user2009 2010年

我的荣幸;)总是很高兴得到赞赏。
LassePoulsen

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地址?)


这绝对是正确的轨道。我立即将其放置在“ /etc/init.d/dhcp3-server”中的“ case“ $ 1” in start)“之后,但是条件” / sbin / ifconfig br0 | fgrep -q“ addr:”“即使没有在线的网桥接口。在终端上键入“ / sbin / ifconfig br0 | fgrep -q“ addr:””不会产生任何输出。
user2009年

同样,尽管脚本的末尾两个“ log_warning_msg”微不足道,但无论成功与否,都将显示它们。如果使用if(max_attempts = n)样式的语句在失败时正确显示这些消息,它们在日志中会更好吗?
user2009年

同样,网桥接口正常需要在接口加载后再建立5-10秒,刚好足以使dhcp3-server失败。
user2009年

@ user2009关于这一grep -q行:1.我认为匹配失败,因为网桥在启动后立即获取了一个IPv6地址。如果你只在IPv4地址感兴趣,只需更换grep由线grep -q 'inet addr:'(上述已完成); 否则,需要找到更复杂的正则表达式,以匹配网桥的所有可能的最终 IP地址。2.该-q选项禁止输出(就像一样> /dev/null
Riccardo Murri

@ user2009感谢您的评论log_warning_msg;我想我已经固定它根据您的建议
里卡尔多·穆里
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.