Como posso iniciar o servidor DHCP3 mais tarde, para que aguarde que uma interface de ponte seja inicializada antes do carregamento?

8

Eu tenho o servidor Ubuntu 10.04 atualmente configurado com o dhcp3-server, bem como uma interface em ponte (br0) para uso com máquinas virtuais. O problema que tenho é que quando o servidor é reinicializado, o dhcp3-server não carrega devido ao atraso extra causado pela interface em ponte.

Essencialmente, br0 não possui um endereço IP para uso com o DHCP3-Server até o final do ciclo de inicialização, bem depois que o servidor DHCP3 tentou carregar.

Uma vez que o servidor tenha iniciado, posso executar o '/etc/init.d/dhcp3-server start' sem qualquer problema.

Existe alguma maneira que eu possa: - Forçar o dhcp3-server a esperar até que a interface seja carregada antes de tentar carregar? - Inicie o dhcp3-server depois que todo o resto foi carregado?

    
por user2009 05.09.2010 / 09:37

2 respostas

9

Uma solução é informar ao dhcp-server para não iniciar automaticamente e, em seguida, adicionar as duas linhas seguintes ao arquivo /etc/network/interfaces para a definição de ponte

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

Então, vai ficar parecido com isso

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

Desta forma, o gerenciamento de rede (ifup / ifdown, NÃO network-manager) iniciará o servidor DHCP depois de ativar a ponte e desligará antes de remover a ponte.

    
por LassePoulsen 09.09.2010 / 14:10
2

Você pode modificar o script de inicialização /etc/init.d/dhcp3-server para aguardar um endereço IP para estar disponível em br0 . Por exemplo: (Aviso: código não testado!)

# 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 

O snippet deve entrar no script de inicialização, na parte case ... start) , antes da inicialização do daemon DHCP3. Claro, você deve ajustar o tempo de espera e o número de tentativas para corresponder ao seu ambiente (quanto tempo leva para o br0 obter o IP endereço?)

    
por Riccardo Murri 07.09.2010 / 10:09