isc-dhcp-server falha se a interface não estiver conectada na reinicialização

isc-dhcp-server falha se a interface não estiver conectada na reinicialização

No Ubuntu 18.04 no meu servidor gateway, instalei e configurei o isc-dhcp-server, mas ele não inicia (ou seja, não inicia) se não houver nada conectado ao enp2s0 após uma reinicialização.

Observe que diz "Não configurado para escutar em nenhuma interface!"

$ service isc-dhcp-server status
● isc-dhcp-server.service - ISC DHCP IPv4 server
   Loaded: loaded (/lib/systemd/system/isc-dhcp-server.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Sat 2020-01-18 19:05:34 GMT; 1s ago
     Docs: man:dhcpd(8)
  Process: 3475 ExecStart=/bin/sh -ec      CONFIG_FILE=/etc/dhcp/dhcpd.conf;      if [ -f /etc/ltsp/dhcpd.conf ]; then CONFIG_FILE=/etc/ltsp/dhcpd.conf; fi;      [ -e /var/lib/dhcp/dhcpd.leases ] || touch /v
 Main PID: 3475 (code=exited, status=1/FAILURE)

Jan 18 19:05:34 user-Default-string dhcpd[3475]:
Jan 18 19:05:34 user-Default-string dhcpd[3475]: Not configured to listen on any interfaces!
Jan 18 19:05:34 user-Default-string dhcpd[3475]:
Jan 18 19:05:34 user-Default-string dhcpd[3475]: If you think you have received this message due to a bug rather
Jan 18 19:05:34 user-Default-string dhcpd[3475]: than a configuration issue please read the section on submitting
Jan 18 19:05:34 user-Default-string dhcpd[3475]: bugs on either our web page at www.isc.org or in the README file
Jan 18 19:05:34 user-Default-string dhcpd[3475]: before submitting a bug.  These pages explain the proper
Jan 18 19:05:34 user-Default-string dhcpd[3475]: process and the information we find helpful for debugging..
Jan 18 19:05:34 user-Default-string dhcpd[3475]:
Jan 18 19:05:34 user-Default-string dhcpd[3475]: exiting.

Meu servidor gateway possui duas portas Ethernet, enp1s0 e enp2s0. Eu uso enp1s0 para acesso à Internet por meio de um roteador e enp2s0 simplesmente para servir um aplicativo da web para laptops conectados por Ethernet. enp2s0 é aquele para o qual o servidor DHCP atribui endereços IP (para os laptops que precisam do aplicativo web). EUquererenp1s0 para obter um endereço IP aleatório do roteador conectado à Internet na sub-rede 192.168.1.0, para que a interface não seja gerenciada pelo servidor isc-dhcp, apenas pelo enp2s0.

Aqui está a "rota ip" sem nada conectado ao enp2s0, se isso puder ajudar...

$ ip route
default via 192.168.1.254 dev enp1s0 proto dhcp metric 100
169.254.0.0/16 dev enp1s0 scope link metric 1000
192.168.1.0/24 dev enp1s0 proto kernel scope link src 192.168.1.76 metric 100

Aqui está minha configuração do dhcpd.conf:

default-lease-time 600;
max-lease-time 7200;

# The ddns-updates-style parameter controls whether or not the server will
# attempt to do a DNS update when a lease is confirmed. We default to the
# behavior of the version 2 packages ('none', since DHCP v2 didn't
# have support for DDNS.)
ddns-update-style none;

# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
authoritative;

# This is a very basic subnet declaration.    
subnet 192.168.2.0 netmask 255.255.255.0 {
  range 192.168.2.200 192.168.2.250;
  # option routers rtr-239-0-1.example.org, rtr-239-0-2.example.org;
  option broadcast-address 192.168.2.255;
}

Aqui está minha configuração do servidor isc-dhcp:

# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
#       Separate multiple interfaces with spaces, e.g. "eth0 eth1".
INTERFACESv4="enp2s0"
INTERFACESv6=""

Uma solução é reiniciar o servidor isc-dhcp depois de conectar um laptop ao enp2s0, mas não quero ter que fazer isso após cada reinicialização ou sempre que alguém conectar um laptop ao enp2s0. O servidor DHCP funciona após reiniciar o serviço...

$ sudo service isc-dhcp-server restart
$ service isc-dhcp-server status
● isc-dhcp-server.service - ISC DHCP IPv4 server
   Loaded: loaded (/lib/systemd/system/isc-dhcp-server.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2020-01-18 18:22:01 GMT; 14min ago
     Docs: man:dhcpd(8)
 Main PID: 2437 (dhcpd)
    Tasks: 1 (limit: 2016)
   CGroup: /system.slice/isc-dhcp-server.service
           └─2437 dhcpd -user dhcpd -group dhcpd -f -4 -pf /run/dhcp-server/dhcpd.pid -cf /etc/dhcp/dhcpd.conf enp2s0

Alguma ideia? Tenho certeza de que está faltando uma configuração que resolverá esse problema ...

EDITAR: Saída do comando "nmcli connection show lan" (também conhecido como nmcli cs lan)

$ nmcli connection show lan

connection.id:                          lan
connection.uuid:                        96fbb458-1178-4af2-a1b7-ccce301176e0
connection.stable-id:                   --
connection.type:                        802-3-ethernet
connection.interface-name:              enp2s0
connection.autoconnect:                 yes
connection.autoconnect-priority:        0
connection.autoconnect-retries:         -1 (default)
connection.auth-retries:                -1
connection.timestamp:                   1579379514
connection.read-only:                   no
connection.permissions:                 --
connection.zone:                        --
connection.master:                      --
connection.slave-type:                  --
connection.autoconnect-slaves:          -1 (default)
connection.secondaries:                 --
connection.gateway-ping-timeout:        0
connection.metered:                     unknown
connection.lldp:                        default
connection.mdns:                        -1 (default)
802-3-ethernet.port:                    --
802-3-ethernet.speed:                   0
802-3-ethernet.duplex:                  --
802-3-ethernet.auto-negotiate:          no
802-3-ethernet.mac-address:             --
802-3-ethernet.cloned-mac-address:      --
802-3-ethernet.generate-mac-address-mask:--
802-3-ethernet.mac-address-blacklist:   --
802-3-ethernet.mtu:                     auto
802-3-ethernet.s390-subchannels:        --
802-3-ethernet.s390-nettype:            --
802-3-ethernet.s390-options:            --
802-3-ethernet.wake-on-lan:             default
802-3-ethernet.wake-on-lan-password:    --
ipv4.method:                            manual
ipv4.dns:                               --
ipv4.dns-search:                        --
ipv4.dns-options:                       ""
ipv4.dns-priority:                      0
ipv4.addresses:                         192.168.2.2/24
ipv4.gateway:                           --
ipv4.routes:                            --
ipv4.route-metric:                      -1
ipv4.route-table:                       0 (unspec)
ipv4.ignore-auto-routes:                no
ipv4.ignore-auto-dns:                   no
ipv4.dhcp-client-id:                    --
ipv4.dhcp-timeout:                      0 (default)
ipv4.dhcp-send-hostname:                yes
ipv4.dhcp-hostname:                     --
ipv4.dhcp-fqdn:                         --
ipv4.never-default:                     no
ipv4.may-fail:                          yes
ipv4.dad-timeout:                       -1 (default)
ipv6.method:                            auto
ipv6.dns:                               --
ipv6.dns-search:                        --
ipv6.dns-options:                       ""
ipv6.dns-priority:                      0
ipv6.addresses:                         --
ipv6.gateway:                           --
ipv6.routes:                            --
ipv6.route-metric:                      -1
ipv6.route-table:                       0 (unspec)
ipv6.ignore-auto-routes:                no
ipv6.ignore-auto-dns:                   no
ipv6.never-default:                     no
ipv6.may-fail:                          yes
ipv6.ip6-privacy:                       -1 (unknown)
ipv6.addr-gen-mode:                     stable-privacy
ipv6.dhcp-send-hostname:                yes
ipv6.dhcp-hostname:                     --
ipv6.token:                             --
proxy.method:                           none
proxy.browser-only:                     no
proxy.pac-url:                          --
proxy.pac-script:                       --

EDIT2: Adicionada saída de "nmcli -f name,autoconnect connection show"

$ nmcli -f name,autoconnect connection show
NAME                AUTOCONNECT
Wired connection 1  yes
lan                 yes

EDIT3: Adicionada saída de "cat /etc/NetworkManager/system-connections/lan"

[connection]
id=lan
uuid=96fbb458-1178-4af2-a1b7-ccce301176e0
type=ethernet
interface-name=enp2s0
permissions=
timestamp=1579379263

[ethernet]
mac-address-blacklist=

[ipv4]
address1=192.168.2.2/24
dns-search=
method=manual

[ipv6]
addr-gen-mode=stable-privacy
dns-search=
method=auto

Responder1

A interface (enp2s0) está ativa? Ele precisa ter um endereço IPv4 adicionado e iniciado (ativado)

Não importa se algum cliente está conectado ao hub/switch.

Editar: Gerenciador de rede?

Eu odeio isso de paixão, mas de qualquer forma: se o iface não estiver com um endereço correto, o dhcpd não iniciará, então você precisa descobrir como com o nmcli criar uma configuração estática que esteja sempre ativa.

Editar: O que mostra isso?

nmcli connection show lan

A propriedade connection.autoconnection é interessante.

Editar: O que mostra isso:

  nmcli -f name,autoconnect connection show

Ok, qual é o status

  nmcli -f name,autoconnect connection show

após reiniciar sem o seu hack? A propriedade autoconnect deve ser suficiente para abrir a interface... não saber por que algo falha em algo que é basicamente muito simples é uma das minhas aversões no NetworkManager (muita complexidade para benefícios desconhecidos, vejo o ponto para clientes que são constantemente em movimento, mas servidores que devem simplesmente funcionar??)

Editar: algum arquivo em etc/NetworkManger/system-connections ? Pelo menos foi assim que configurei os dispositivos no meu sistema (é uma configuração em ponte), então uso o NetworkManager para abrir a máquina. A máquina hospeda três convidados, portanto o dispositivo enp1s0 é um escravo.

Editar: o que acontece se você definir o dispositivo LAN (remova-o completamente primeiro), ou seja, algo como:

nmcli connection down lan 
nmcli connection delete lan
nmcli connection add type ethernet ifname enp2s0 con-name lan autoconnect on
nmcli connection modify lan   ipv4.method manual ipv4.addresses 192.168.2.2/24 
nmcli connection lan up

Responder2

A menos que haja uma solução melhor, por enquanto isso funciona para mim: quando meu aplicativo da web é iniciado, as duas primeiras coisas que ele faz são:

  1. sudo nmcli conexãoacimalan ('lan' é o nome da conexão NetworkManager atribuído a enp2s0)
  2. serviço sudo isc-dhcp-serverreiniciar

O aplicativo da web é agendado pelo cron para iniciar @reboot, portanto, o NetworkManager foi iniciado nesse ponto.

O isc-dhcp-server sempre falha se o enp2s0 ainda não estiver "ativado", então tenho que configurá-lo "ativado" e, em seguida, reiniciar o serviço isc-dhcp-server. Não é muito elegante, mas funciona por enquanto.

Responder3

CASO AJUDE ALGUÉM Acabei de resolver esse problema exasperante, no DietPi (Debian Buster) em um Pi Zero W e RESOLVI O PROBLEMA.

isc-dhcp-server é excelente, mas TEM essa peculiaridade, conforme observado pelo pesquisador original acima. Resolvi o problema - não é um bug - e este é o detalhe do motivo:

  1. isc-dhcp-server recusa (lança um erro) se não conseguir ver uma sub-rede de rede Ethernet UP no momento da inicialização; NÃO (ao contrário de alguns comentaristas) requer uma conexão real À porta Ethernet à qual está associado.

  2. Ao desenvolver um dispositivo WiFi Hotspot, normalmente é o caso de usar hostapd como a função do servidor AP (que reconfigura o hardware WiFi para mudar para o modo AP) e junto com o hostapd, você precisa de um servidor dhcp como isc-dhcp-server para fornecer o serviço de locação de endereços IP.

  3. SO: normalmente o ponto inicial é um dispositivo WiFi que na inicialização foi configurado como um dispositivo CLIENTE, mas precisa ser alternado para o modo HOST para atuar como hotspot. Portanto, um passo inicial é definir wlan0 (ou qualquer outro) DOWN, antes de iniciar o hostapd.

MAS essa situação é imediatamente uma daquelas que o isc-dhcp-server não gosta: se você tentar iniciá-lo antes do hostapd, ele irá falhar, reclamando que não há sub-rede para ele escutar.

  1. Então você pode tentar inocentemente, adicionando um novo endereço IP (para o host) ao seu wlan0 (ou equiv) e tentando novamente: ISSO TAMBÉM NÃO FUNCIONARÁ, porque embora agora você tenha um novo IP conectado à porta Ethernet, você também descobrirá que não pode configurá-lo como 'UP' (ip link set wlan0 up irá FALHAR). Isso ocorre porque a porta está 'contaminada' pelo endereço obsoleto ainda ativo e pelo processo suplicante wpa que a estava utilizando.

  2. LONGA HISTÓRIA: você precisa matar o suplicante wpa, para "liberar" o endereço antigo / LIBERAR as configurações de IP da porta / ENTÃO adicionar o novo endereço IP para o host; MESMO ASSIM, você descobrirá que o isc-dhcp-server AINDA não inicia, porque você não pode configurar a interface - ainda. Finalmente - execute o hostapd agora, antes do isc, e a TI (na reconfiguração do chipset) também CONFIGURARÁ a interface wlan0 para UP. Então agora - finalmente - você PODE executar o isc-dhcp-server, e ele iniciará de forma limpa e seu hotspot estará ativo.

Levei cerca de cinco horas, espero que isso economize algum tempo para alguém. Minha nota destilada:

CLASSIFICANDO ISC-DHCP-SERVER junto com HOSTAPD: A SOLUÇÃO

VOCÊ DEVE seguir ESTA SEQUÊNCIA:

  1. MATE o processo wpa-supplicant (que está sustentando a conexão do cliente) desta forma:

     kill -2  $( cat /run/wpa_supplicant.wlan0.pid )
    
     sleep 1
    
     kill -9  $( cat /run/wpa_supplicant.wlan0.pid )
    
  2. LIBERE a configuração do IP WLAN, usando:

    ip addr flush dev wlan0
    
  3. ADICIONE o novo ENDEREÇO ​​IP do host, usando:

    ip addr add 10.1.1.1/24 dev wlan0
    
  4. INICIE o hostapd, que também colocará o wlan0 UP:

     /usr/sbin/hostapd /etc/hostapd/hostapd.conf &
    
  5. START isc-dhcp-server (WLAN está ativo, como host agora):

     sudo service isc-dhcp-server restart
    

ENTÃO o Ponto de Acesso deve estar ATIVO e pronto para aceitar clientes.

Esses são meus endereços, é claro / edite para atender às suas necessidades.

MAIS DUAS DICAS: Os arquivos de configuração hostapd.conf e dhcp.conf também podem deixá-lo louco: -aqui estão exemplos de trabalho. IMPORTANTE: não se preocupe com o 'nome do driver' em hostapd.conf: não é necessário. 'Comentado' está bem:

hostapd.conf

interface=wlan0

#driver=brcmfmac

ssid=THIS-IS-MY-AP

country_code=US

hw_mode=g

channel=6

macaddr_acl=0

auth_algs=1

ignore_broadcast_ssid=0

wpa=2

wpa_passphrase=12345678

wpa_key_mgmt=WPA-PSK

wpa_pairwise=CCMP

wpa_group_rekey=86400

ieee80211n=1

wme_enabled=1

dhcpd.conf

# COMMENT OUT BOTH OF THE TEMPLATES' 'option domain..' lines.. 
# then ADD THIS AT BOTTOM
#
#
subnet 10.1.1.0 netmask 255.255.255.0 {
        range 10.1.1.100 10.1.1.109;
        option broadcast-address 10.1.1.255;
        option routers 10.1.1.1;
        default-lease-time 600;
        max-lease-time 7200;
        option domain-name "mynetwork.org";
        option domain-name-servers 8.8.8.8, 8.8.4.4;
}
#
#

Embora este trabalho no Pi tenha sido no DietPi, que é Debian puro, esse mesmo conselho deve servir para muitos Linux, incluindo Ububtus de vários sabores.

BOA SORTE A TODOS

informação relacionada