Ubuntu

Ubuntu - dhcp 伺服器“未配置為偵聽任何介面”

  • June 13, 2018

我對此束手無策;我已經嘗試了幾個小時來讓它工作,但我很難過。希望你們中的一個可以提供幫助。:-)

我正在嘗試讓 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.
[...]

如您所見,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;
}

和我的 /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"

據我所知,這些都是正確的。有任何想法嗎?

好的,我想我已經解決了這個問題。它是 Linux 網路管理器中的一個錯誤。

看,網路管理器作為啟動過程的一部分執行(即“S50NetworkManager”符號連結)並啟動您的乙太網介面。但是,它是非同步執行的。這意味著網路管理器立即返回,暗示它之後的腳本,“OK - network’s been set up。” 實際上,它沒有,網路管理員正坐在後台繼續設置網路。同時,啟動腳本在執行後假設網路介面可用,這是一種競爭條件,取決於網路管理員是否已經開始設置它們。

這是一個可怕的情況,我很驚訝的一個錯誤還沒有得到修復。繞過它的一種方法是放棄網路管理器,而是通過編輯 /etc/network/interfaces 來設置你的介面。不過,我沒有做這項工作,而是嘗試了這個錯誤報告中建議的醜陋黑客: https ://bugzilla.redhat.com/show_bug.cgi?id=486372

我在 dhcp3-server 的 init.d 腳本的 start 函式的開頭添加了 5 秒延遲(‘sleep 5’),這給了網路管理員足夠的時間來設置網路介面(當然仍然沒有保證) - 它奏效了。現在,dhcpd 在啟動時成功。

如 bugzilla.redhat.com 上的錯誤 #486372 和 #447442 中所述,這要麼是網路管理器的錯誤(它應該阻塞,直到其有線網路介面可用),或者是 dhcpd(它應該被更新以等待網路介面變得可用,而不僅僅是崩潰)。不過,這絕對是一個錯誤。

引用自:https://serverfault.com/questions/75702