私はこれでひどく終わりました。これを機能させるために何時間も試しましたが、困惑しています。あなたの1人が助けてくれることを願っています。 :-)
私は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はbefore NetworkManagerを実行しているように見えます。これにより、eth0(インターネット)およびeth1(ホームネットワーク)インターフェースがセットアップされます。これはrcX.dシンボリックリンク名と関係があると思いますが、そのdhcpdはNetworkManagerより前に開始するように命名されました。そうではありません。私のdhcp3-serverシンボリックリンクは「S99dhcp3-server」という名前で、Network Managerシンボリックリンクは「S50NetworkManager」という名前なので、dhcpサーバーの前に開始する必要があります。さらに、コマンドライン '/etc/init.d/dhcp3-server'から(rootとして)実際に実行すると、サーバーは正常に実行されます。起動時にのみ失敗します!
どのインターフェースでもリッスンするように構成されていないのはなぜですか?ネットワークマネージャーは、インターフェイスeth0およびeth1をafterすべてのブートスクリプトが実行されるまで起動しませんか?これが事実である場合、それはどのような用途ですか?確かに他のスクリプトでは、起動時にこれらのインターフェースを使用できる必要がありますか?これが私の/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"
私の知る限り、これらはすべて正しいです。何か案は?
OK、この問題は修正したと思います。そして、それはIS Linuxのネットワークマネージャのバグです。
ネットワークマネージャーがブートプロセス(「S50NetworkManager」シンボリックリンク)の一部として実行され、イーサネットインターフェイスが表示されることを確認してください。ただし、非同期で実行されます。これは、ネットワークマネージャーがすぐに戻り、その後のスクリプトが「OK-ネットワークがセットアップされた」ことを意味することを意味します。実際にはそうではなく、ネットワーク管理者はバックグラウンドでそこに座って、ネットワークのセットアップに取り掛かっています。その間、起動後の起動スクリプトは、ネットワークインターフェースが使用可能であることを前提として実行されます。これは、ネットワークマネージャーがまだ設定しているかどうかによって、競合状態になります。
これは恐ろしい状況であり、驚いたバグは修正されていません。これを回避する1つの方法は、ネットワークマネージャーを廃止し、代わりに/ 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(ネットワークインターフェイスを待機するように更新する必要があります)のバグです。クラッシュするだけでなく、利用できるようになります)。ただし、これは間違いなく一種のバグです。
/ etc/network/interfacesを次のように変更できます:
iface eth1 inet static
address 192.168.50.1
netmask 255.255.255.0
up service dhcp3-server restart
したがって、dhcp3-serverは、ネットワークインターフェース(eth1)が実際に起動した後に(再)起動されます。
「No subnet declaration for eth1
」や「Not configured to listen on any interfaces!
」などのエラーが発生します。
次に、サブネットがアドレスをリースしていませんが、dhcpd.conf
にeth1 subnet
宣言を追加します。そしてそれは機能します。
subnet 10.32.64.0 netmask 255.255.252.0 {
option routers 10.32.64.1;
}
同様の問題がありましたが、私の場合、ネットワークインターフェイス(eth0)が起動していませんでした-適切に初期化できませんでした。これは断続的に発生していましたが、約20%の時間でした。遅延を入れたり、他の回答で提案されているようにDHCPサーバーを再起動したりしても、問題は解決しませんでした。
私の場合、解決策は次のスクリプトのようなものを介してネットワークサービスとdhcpサーバーの両方を再起動することでした(フラグメントのみ、実行から開始は終了しない)...
# Check if the networking is running ...
# look for "192.168.0.202" within this command's output
ifconfig
# If the networking is not running, then restart the network interfaces via this command:
Sudo service networking restart
# Check if the DHCP service is running ...
# look for "dhcpd" within this command's output
ps -C dhcpd
# If the DHCP service is not running, then restart the DHCP service via this command:
Sudo service isc-dhcp-server restart
私はこのエラーメッセージを1日間戦った。
No subnet declaration for eth1 (no IPv4 addresses).
最後に、私の場合のエラーは、systemctlコマンドで開始することによるdhcpサービススクリプトから発生します。
#cat /etc/systemd/system/dhcpd.service
[Service]
Type=notify
ExecStart=/usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid **eth1**
EthXX番号を変更するだけです
リロード
#systemctl daemon-reload
再起動:
#systemctl start dhcpd
私は別の理由でこの問題を抱えていたと思います。
DHCPを使用して、サーバーがリッスンするインターフェイスを構成しようとしました。 AKA LANがサーバーのeth0ポートに接続されていて、DHCPにeth0を構成させようとしていました。どうやら動作しません。 DHCPリスニングインターフェイスは静的に構成する必要があります(/ etc/network/interfaces)。
私が間違っていたら訂正してください。 DHCPリスニングデバイスを静的に構成する必要があるとは思いませんでした。
私はUbuntuでこの問題に遭遇しましたが、少し違った方法で修正しました。 isc-dhcp-serverサービスを使用していますが、必要なインターフェイスが起動する前に開始しようとし、クラッシュして、再起動制限を使い果たしました。/etc/initのupstart構成ファイルのstart on行を少し編集しました。
start on runlevel [2345] and net-device-up IFACE=eth0
このようにして、サービスは必要なインターフェースが起動するまで開始を試みません。
以下は、エラーが発生しているかどうかを確認するためのポイントのリストです。
/ etc/default/isc-dhcp-server
インターフェース名を識別するファイルのみが動的アドレスを提供します(システムのすべてのインターフェースではなくなり、このファイルでのみ言及されます)。少なくとも1つのインターフェースが定義されていることを確認してください(そしてnot必要になる可能性がありますethもう不要です):
INTERFACES="enp0s31f6"
/ etc/network/interfaces
次の設定ブロックを提供することにより:
# Define the static address and set it to serve with DHCP. Link it to the existing interface.
iface enp0s31f6 inet static
address 10.20.0.1
netmask 255.255.255.240
#below are optional settings
#gateway 192.168.100.251
#dns-nameservers 8.8.8.8
選択したインターフェースの静的アドレスを構成した後、次のコマンドを使用して、それが使用可能であり、定義済みのアドレスが(ネットワークの再起動によって)割り当てられていることを確認します。
Sudo service networking restart
そうでない場合、isc-dhcpd-serverは実行を拒否します
/ etc/dhcp/dhcpd.conf
インターフェイスアドレスに個別のブロック定義(少なくとも1つ)を提供する(選択したインターフェイスの静的IPが構成済みサブネットと一致する必要があります):
subnet 10.20.0.0 netmask 255.255.255.0 {
range 10.20.0.10 10.20.0.100;
option subnet-mask 255.255.255.0;
option routers 10.20.0.1;
option broadcast-address 10.20.0.255;
option domain-name-servers 192.168.100.254, 8.8.8.8;
}
3つすべてのルールに準拠するだけで、UbuntuでDHCPサービスが機能します(バージョン16.04で解決および確認済み)
最後に、次のコマンドを実行してisc-dhcpd-serverを起動します。
Sudo service isc-dhcp-server start
構成の成功を確認するには、別のコマンドを使用します。
Sudo service isc-dhcp-server status
そして、成功の確認のために次の行を調べます。
● isc-dhcp-server.service - ISC DHCP IPv4 server
Active: active (running) since Wed 2017-05-10 15:28:13 CEST; 29min ago
May 10 15:28:13 system-P50 dhcpd[26869]: Listening on LPF/enp0s31f6/0a:3e:47:75:17:a8/10.20.0.0/24