web-dev-qa-db-ja.com

ロードする前にブリッジインターフェースが初期化されるのを待つように、後でDHCP3サーバーを起動するにはどうすればよいですか?

現在、仮想マシンで使用するためのブリッジインターフェイス(br0)と同様にdhcp3-serverでUbuntu 10.04サーバーをセットアップしています。私が抱えている問題は、サーバーが再起動したときに、ブリッジされたインターフェースを立ち上げることによって生じる余分な遅延のために、dhcp3-serverがロードに失敗することです。

基本的に、br0には、DHCP3-Serverがロードを試行した後のブートサイクルの後半まで、DHCP3-Serverで使用するIPアドレスがありません。

サーバーが起動したら、「/ etc/init.d/dhcp3-server start」を問題なく実行できます。

いずれかの方法がありますか?-ロードを試みる前に、インターフェイスがロードされるまでdhcp3-serverを強制的に待機させますか? -他のすべてがロードされた後にdhcp3-serverを起動しますか?

8
user2009

解決策の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サーバーを起動し、ブリッジを削除する前にシャットダウンします。

9
LassePoulsen

/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アドレスを取得するのにどれくらい時間がかかりますか?)

2
Riccardo Murri