現在、仮想マシンで使用するためのブリッジインターフェイス(br0)と同様にdhcp3-serverでUbuntu 10.04サーバーをセットアップしています。私が抱えている問題は、サーバーが再起動したときに、ブリッジされたインターフェースを立ち上げることによって生じる余分な遅延のために、dhcp3-serverがロードに失敗することです。
基本的に、br0には、DHCP3-Serverがロードを試行した後のブートサイクルの後半まで、DHCP3-Serverで使用するIPアドレスがありません。
サーバーが起動したら、「/ etc/init.d/dhcp3-server start」を問題なく実行できます。
いずれかの方法がありますか?-ロードを試みる前に、インターフェイスがロードされるまでdhcp3-serverを強制的に待機させますか? -他のすべてがロードされた後にdhcp3-serverを起動しますか?
解決策の1つは、dhcp-serverに自動的に起動しないように指示してから、次の2行をブリッジ定義の/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
起動スクリプトを変更して、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
DHCP3デーモンを起動する前に、スニペットをcase ... start)
部分内の起動スクリプトに入れる必要があります。もちろん、環境に合わせて待機時間と試行回数を調整する必要があります(br0がIPアドレスを取得するのにどれくらい時間がかかりますか?)