Jez*_*Jez 6 dhcp scripting ubuntu init boot
我在这个问题上不知所措;我已经尝试了几个小时来让它工作,但我很难过。希望你们中的一位能提供帮助。:-)
我正在尝试让 dhcp3-server 在 Ubuntu 上工作。它已安装并正确设置为在 rc2,3,4,5.d 运行级别中运行。在启动时,它的 init.d 脚本会运行,在 syslog 中,我得到以下信息:
Oct 18 20:40:37 jez-ubuntu dhcpd: Internet Systems Consortium DHCP Server V3.1.1
Oct 18 20:40:37 jez-ubuntu dhcpd: Copyright 2004-2008 Internet Systems Consortium.
Oct 18 20:40:37 jez-ubuntu dhcpd: All rights reserved.
Oct 18 20:40:37 jez-ubuntu dhcpd: For info, please visit http://www.isc.org/sw/dhcp/
Oct 18 20:40:37 jez-ubuntu dhcpd: Wrote 2 leases to leases file.
Oct 18 20:40:37 jez-ubuntu dhcpd:
Oct 18 20:40:37 jez-ubuntu dhcpd: No subnet declaration for eth1 (0.0.0.0).
Oct 18 20:40:37 jez-ubuntu dhcpd: ** Ignoring requests on eth1. If this is not what
Oct 18 20:40:37 jez-ubuntu dhcpd: you want, please write a subnet declaration
Oct 18 20:40:37 jez-ubuntu dhcpd: in your dhcpd.conf file for the network segment
Oct 18 20:40:37 jez-ubuntu dhcpd: to which interface eth1 is attached. **
Oct 18 20:40:37 jez-ubuntu dhcpd:
Oct 18 20:40:37 jez-ubuntu dhcpd:
Oct 18 20:40:37 jez-ubuntu dhcpd: Not configured to listen on any interfaces!
Oct 18 20:40:39 jez-ubuntu NetworkManager: <info> (eth0): device state change: 1 -> 2
Oct 18 20:40:39 jez-ubuntu NetworkManager: <info> (eth0): bringing up device.
Oct 18 20:40:39 jez-ubuntu NetworkManager: <info> (eth0): preparing device.
[...]
Run Code Online (Sandbox Code Playgroud)
如您所见,dhcpd 似乎在NetworkManager之前运行,它用于设置我的 eth0(互联网)和 eth1(家庭网络)接口。您会认为这与 rcX.d 符号链接名称有关,并且 dhcpd 被命名为在 NetworkManager 之前启动。不是这样。我的 dhcp3-server 符号链接名为“S99dhcp3-server”,网络管理器符号链接名为“S50NetworkManager”,因此它应该在 dhcp 服务器之前启动。此外,如果我实际上从命令行“/etc/init.d/dhcp3-server”运行(以 root 身份)......服务器运行正常!它只在启动时失败!
为什么它说它没有配置为侦听任何接口?网络管理器是不是在我所有的引导脚本都运行之后才启动接口 eth0 和 eth1 ?如果是这样,它有什么用?其他脚本肯定需要这些接口在启动时可用吗?这是我的 /etc/dhcp3/dhcpd.conf 文件:
subnet 192.168.0.0 netmask 255.255.255.0 {
option routers 192.168.0.1;
option subnet-mask 255.255.255.0;
option domain-name-servers 87.194.0.51;
option ip-forwarding off;
range dynamic-bootp 192.168.0.100 192.168.0.254;
default-lease-time 21600;
max-lease-time 43200;
}
Run Code Online (Sandbox Code Playgroud)
和我的 /etc/default/dhcp3-server 文件:
# Defaults for dhcp initscript
# sourced by /etc/init.d/dhcp
# installed at /etc/default/dhcp3-server by the maintainer scripts
#
# This is a POSIX shell fragment
#
# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
# Separate multiple interfaces with spaces, e.g. "eth0 eth1".
INTERFACES="eth1"
Run Code Online (Sandbox Code Playgroud)
据我所知,这些都是正确的。有任何想法吗?
好的,我想我已经解决了这个问题。这是 Linux 网络管理器中的一个错误。
看,网络管理器作为启动过程的一部分运行(即“S50NetworkManager”符号链接)并打开以太网接口。但是,它是异步执行的。这意味着网络管理器立即返回,向其后的脚本暗示“好的 - 网络已设置”。事实上,情况并非如此,网络管理员正坐在后台继续设置网络。同时,启动脚本运行后假设网络接口可用,这是一个竞争条件,具体取决于网络管理器是否已经抽出时间来设置它们。
这是一个可怕的情况,令我惊讶的是一个错误还没有得到修复。解决这个问题的一种方法是放弃网络管理器,而是通过编辑 /etc/network/interfaces 来设置接口。不过,我并没有做这项工作,而是尝试了这个错误报告中建议的丑陋的黑客: https://bugzilla.redhat.com/show_bug.cgi ?id=486372
我在 dhcp3-server 的 init.d 脚本中的启动函数的开头添加了 5 秒延迟(“sleep 5”),这为网络管理员提供了充足的时间来设置网络接口(尽管当然仍然没有保证)——而且它起作用了。现在,dhcpd 启动成功。
正如 bugzilla.redhat.com 上的 bug #486372 和 #447442 中详细描述的,这要么是网络管理器的 bug(它应该阻塞,直到其有线网络接口可用),要么是 dhcpd 的 bug(应该更新以等待网络接口)变得可用,而不是仅仅崩溃)。不过,这绝对是一个错误。
归档时间: |
|
查看次数: |
58228 次 |
最近记录: |