Arch Linux O dhcpd não inicia na inicialização - não é possível localizar a declaração de sub-rede

1

Eu quero ter um servidor DHCP em execução no Arch Linux, mas estou com problemas. Estou tendo um problema com a obtenção de dhcpd para iniciar na inicialização. Ele vai começar bem quando eu executar manualmente o sudo systemctl start [email protected] quando eu estiver logado.

Estou executando a versão mais recente do Arch Linux (4.7.0-1) e segui o wiki do Arch em rede para configurá-lo.

Minha configuração

  • o dhcpcd está desativado
  • Eu usei systemd-networkd para fazer o ip estático (ele está ativado), a configuração é ( /etc/systemd/network/wired.network ):

    [Match]
    Name=eth0
    
    [Network]
    Address=10.0.0.2/24
    Gateway=10.0.0.1
    
    • Meu /etc/dhcpd.conf é simples:

      option domain-name-servers 10.0.0.2;   
      option subnet-mask 255.255.255.0;   
      option routers 10.0.0.0.1;   
      subnet 10.0.0.0 netmask 255.255.255.0 {
          range 10.0.0.5 10.0.0.50;   
      }
      
  • Eu criei meu arquivo de serviço systemd ( /etc/systemd/system/[email protected] ) e o habilitei com systemctl enable [email protected] :

    [Unit]
    Description=IPv4 DHCP server on %I
    Wants=network.target
    After=network-pre.target
    Before=network.target
    
    [Service]
    Type=forking
    PIDFile=/run/dhcpd4.pid
    ExecStart=/usr/bin/dhcpd -4 -q -pf /run/dhcpd4.pid %I
    KillSignal=SIGINT
    
    [Install]
    WantedBy=multi-user.target
    

Quando eu reinicio recebo um erro na inicialização que diz (quando eu corro journalctl -xe ):

 No subnet declaration for eth0 (no IPv4 addresses).
 ** Ignoring requests on eth0....

Então, quando eu executo systemctl start [email protected] , tudo corre bem, sem problemas.

Eu fiz muito googling mas não encontrei solução para esse problema. Eu tentei tweaking os arquivos ( dhcpd.conf , [email protected] e wired.network ) para interfaces de código rígido, adicionar declarações DHCP adicionais, alter Unit quer etc e mais; mas nada parece funcionar.

    
por Johnny 16.08.2016 / 01:35

2 respostas

0

Eu encontrei a resposta para o problema! O problema é que o processo de inicialização está tentando iniciar o serviço DHCP enquanto a rede está sendo inicializada / configurada e, portanto, o DHCP não consegue encontrar uma interface de trabalho para vincular. É por isso que sempre funcionou quando eu executei o serviço start dhcpd manualmente e não trabalhei na inicialização.

Encontrei uma pista para a resposta desta postagem: dhcp no arch linux - rasp-pi . O usuário usou uma declaração de reinicialização no arquivo de unidade, o que fez o serviço repetir a cada 6 segundos até que o serviço estivesse ativo. - Essa solução temporária funcionou para mim também.

Eu conheci o site do systemd nos alvos especiais e encontrei este link para executar serviços depois que a rede estiver ativa . A partir das recomendações desta página, fiz os seguintes ajustes:

  • No arquivo da unidade dhcpd4 @ .service, eu removi o Before=... , alterei After para After=network-online.target e alterei Wants para Wants=network-online.target
  • também ativei o systemd-networkd-wait-online.service para iniciar na inicialização.

Agora funciona na inicialização! No entanto, a página de recomendações diz que ativar systemd-networkd-wait-online.service reduz o tempo de inicialização e pode ser executado em 90 segundos (se eu tiver lido corretamente). Embora eu tenha notado apenas 1 ou 2 segundos de aumento no tempo de inicialização no meu caso.

    
por 17.08.2016 / 13:47
0

Você está tentando restringir o dhcpd apenas a eth0? Caso contrário, você pode simplesmente usar o arquivo de serviço systemd padrão dhcpd4.service .

Se você estiver, talvez tente mudar

After=network-pre.target
Before=network.target

para

After=network.target

Isso também é especificado no dhcpd4.service padrão . Parece que o dhcpd precisa de uma interface ativa - o que não é garantido se for iniciado antes network.target .

    
por 17.08.2016 / 11:16