it-swarm-eu.dev

Wie kann ich den DHCP3-Server später starten, damit er vor dem Laden auf die Initialisierung einer Bridge-Schnittstelle wartet?

Ich habe Ubuntu 10.04 Server derzeit mit DHCP3-Server sowie eine Bridged-Schnittstelle (br0) für die Verwendung mit virtuellen Maschinen eingerichtet. Das Problem, das ich habe, ist, dass beim Neustart des Servers der DHCP3-Server aufgrund der zusätzlichen Verzögerung, die durch das Aufrufen der überbrückten Schnittstelle verursacht wird, nicht geladen werden kann.

Grundsätzlich hat br0 erst spät im Boot-Zyklus eine IP-Adresse für die Verwendung mit DHCP3-Server, nachdem der DHCP3-Server versucht hat, diese zu laden.

Sobald der Server hochgefahren ist, kann ich '/etc/init.d/dhcp3-server start' ohne Probleme ausführen.

Kann ich Folgendes tun: - Den DHCP3-Server zwingen, mit dem Ladeversuch zu warten, bis die Schnittstelle geladen wurde? - Starte den DHCP3-Server nachdem alles andere geladen wurde?

8
user2009

Eine Lösung besteht darin, den DHCP-Server anzuweisen, nicht automatisch zu starten, und dann die folgenden zwei Zeilen in die /etc/network/interfaces -Datei für Ihre Brückendefinition einzufügen

post-up /etc/init.d/dhcp3-server start
pre-down /etc/init.d/dhcp3-server stop

So wird es am Ende aussehen

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

Auf diese Weise startet die Netzwerkverwaltung (ifup/ifdown, NICHT network-manager) den DHCP-Server nach dem Hochfahren der Brücke und fährt ihn herunter, bevor die Brücke entfernt wird.

9
LassePoulsen

Sie können das Startskript /etc/init.d/dhcp3-server so ändern, dass es wartet, bis eine IP-Adresse unter br0 verfügbar ist. Zum Beispiel: (Warnung: ungetesteter Code!)

# 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 

Das Snippet sollte vor dem Start des DHCP3-Daemons in das Startskript im Teil case ... start) eingefügt werden. Natürlich sollten Sie die Wartezeit und die Anzahl der Versuche so einstellen, dass sie Ihrer Umgebung entsprechen (wie lange dauert es maximal, bis br0 die IP-Adresse erhält?)

2
Riccardo Murri