isc-dhcp-server falla si la interfaz no está conectada al reiniciar

isc-dhcp-server falla si la interfaz no está conectada al reiniciar

En Ubuntu 18.04 en mi servidor de puerta de enlace, instalé y configuré isc-dhcp-server, pero no se inicia (es decir, no se inicia) si no hay nada conectado a enp2s0 después de reiniciar.

Tenga en cuenta que dice "¡No está configurado para escuchar en ninguna interfaz!"

$ 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.

Mi servidor de puerta de enlace tiene dos puertos Ethernet, enp1s0 y enp2s0. Utilizo enp1s0 para acceder a Internet a través de un enrutador y enp2s0 simplemente para ofrecer una aplicación web a computadoras portátiles conectadas a Ethernet. enp2s0 es aquel para el cual el servidor DHCP asigna direcciones IP (para las computadoras portátiles que necesitan la aplicación web). Idesearenp1s0 para obtener una dirección IP aleatoria del enrutador conectado a Internet en la subred 192.168.1.0, de modo que isc-dhcp-server no administre esa interfaz, solo enp2s0.

Aquí está la "ruta IP" sin nada conectado a enp2s0, si eso pudiera ayudar...

$ 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

Aquí está mi configuración de 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;
}

Aquí está mi configuración del 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=""

Una solución es reiniciar el servidor isc-dhcp después de conectar una computadora portátil a enp2s0, pero no quiero tener que hacerlo después de cada reinicio o cada vez que alguien conecte una computadora portátil a enp2s0. El servidor DHCP funciona después de reiniciar el servicio...

$ 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

¿Algunas ideas? Estoy seguro de que me falta algo de configuración que resolverá este problema...

EDITAR: Salida del comando "nmcli connection show lan" (también conocido 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:                       --

EDITAR2: Salida agregada de "nmcli -f nombre, espectáculo de conexión automática"

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

EDITAR3: Salida agregada 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

Respuesta1

¿Está activa la interfaz (enp2s0)? Necesita tener una dirección ipv4 agregada y luego iniciada (arrancada)

No debería importar si hay algún cliente conectado al concentrador/conmutador.

Editar: ¿Administrador de red?

Odio esa cosa con pasión, pero de cualquier manera: si el iface no está activo con una dirección correcta, dhcpd no se iniciará, entonces debes descubrir cómo crear con nmcli una configuración estática que siempre esté activa.

Editar: ¿Qué muestra esto?

nmcli connection show lan

La propiedad connect.autoconnection es interesante.

Editar: Lo que muestra esto:

  nmcli -f name,autoconnect connection show

Ok cual es el estado

  nmcli -f name,autoconnect connection show

¿Después de reiniciar sin tu truco? La propiedad de conexión automática debería ser suficiente para abrir la interfaz... no saber por qué algo falla en algo que es básicamente muy simple es una de mis aversiones sobre NetworkManager (demasiada complejidad para beneficios desconocidos, veo el punto para los clientes que es constantemente en movimiento pero servidores que simplemente deben funcionar??)

Editar: ¿algún archivo en etc/NetworkManger/system-connections? Al menos así es como configuré los dispositivos en mi sistema (es una configuración puenteada), así que uso NetworkManager para abrir la máquina. La máquina alberga a tres invitados, por lo que el dispositivo enp1s0 es esclavo.

Editar: ¿qué sucede si define el dispositivo LAN (primero elimínelo por completo), es decir, 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

Respuesta2

A menos que haya una solución mejor, por ahora esto me funciona: cuando se inicia mi aplicación web, las dos primeras cosas que hace son:

  1. conexión sudo nmcliarribalan ('lan' es el nombre de conexión de NetworkManager asignado a enp2s0)
  2. servicio sudo servidor isc-dhcpReanudar

La aplicación web está programada cron para iniciar @reboot, por lo que NetworkManager se habrá iniciado en ese momento.

isc-dhcp-server siempre falla si enp2s0 aún no está "activo", así que tengo que configurarlo y luego reiniciar el servicio isc-dhcp-server. No es muy elegante, pero por ahora cumple su función.

Respuesta3

EN CASO DE QUE AYUDE A ALGUIEN Acabo de pasar por este problema exasperante, en DietPi (Debian Buster) en una Pi Zero W y HE RESULTADO EL PROBLEMA.

isc-dhcp-server es excelente pero TIENE esta peculiaridad, como señaló el autor de la pregunta original anteriormente. He solucionado el problema, no es un error, y este es el detalle del motivo:

  1. isc-dhcp-server se niega (arroja un error) si no puede ver una subred de la red Ethernet UP en el momento del inicio; NO requiere (al contrario de algunos comentaristas) una conexión real AL puerto Ethernet al que está asociado.

  2. Al desarrollar un dispositivo de punto de acceso WiFi, normalmente se utiliza hostapd como función de servidor AP (que reconfigura el hardware WiFi para cambiar al modo AP) y, junto con hostapd, necesita un servidor dhcp como isc-dhcp-server para proporcionar el servicio de arrendamiento de direcciones IP.

  3. SO: normalmente el punto de inicio es un dispositivo WiFi que en el arranque se configuró como dispositivo CLIENTE, pero debe cambiarse al modo HOST para que actúe como punto de acceso. Entonces, un primer paso es configurar wlan0 (o lo que sea) en ABAJO, antes de iniciar hostapd.

PERO esa situación es inmediatamente una de esas que no le gustan a isc-dhcp-server: si intenta iniciarlo antes de hostapd, fallará y se quejará de que no hay una subred para escuchar.

  1. Así que puedes intentar inocentemente agregar una nueva dirección IP (para el host) a tu wlan0 (o equivalente) y volver a intentarlo: ESO TAMPOCO FUNCIONA, porque aunque ahora tienes una nueva IP conectada al puerto Ethernet, También encontrará que no puede configurarlo en 'ARRIBA' (la configuración del enlace IP wlan0 up FALLARÁ). Esto se debe a que el puerto está "contaminado" por la dirección obsoleta aún activa y el proceso solicitante de wpa que lo estaba usando.

  2. BREVE HISTORIA LARGA: necesita eliminar wpa-supplicant, para "liberar" la dirección anterior / BORRAR la configuración de IP para el puerto / LUEGO agregar la nueva dirección IP para el host; AÚN ENTONCES, encontrará que isc-dhcp-server TODAVÍA no se inicia, porque aún no puede configurar la interfaz. Finalmente, ejecute hostapd ahora, antes de isc, y TI (al reconfigurar el chipset) también CONFIGURARÁ la interfaz wlan0 en UP. Así que ahora, finalmente, PUEDES ejecutar isc-dhcp-server, se iniciará limpiamente y tu punto de acceso estará activo.

Me ha llevado unas cinco horas, espero que esto le ahorre algo de tiempo a alguien. Mi nota destilada:

ORDENAR ISC-DHCP-SERVER junto a HOSTAPD: LA SOLUCIÓN

TIENES QUE SEGUIR ESTA SECUENCIA:

  1. ELIMINAR el proceso solicitante de wpa (que mantiene la conexión del cliente) de esta manera:

     kill -2  $( cat /run/wpa_supplicant.wlan0.pid )
    
     sleep 1
    
     kill -9  $( cat /run/wpa_supplicant.wlan0.pid )
    
  2. ENJUAGUE la configuración de IP WLAN, usando:

    ip addr flush dev wlan0
    
  3. AGREGUE la nueva DIRECCIÓN IP del host, usando:

    ip addr add 10.1.1.1/24 dev wlan0
    
  4. INICIAR hostapd, que también pondrá wlan0 ARRIBA:

     /usr/sbin/hostapd /etc/hostapd/hostapd.conf &
    
  5. INICIAR isc-dhcp-server (WLAN está activa, como host ahora):

     sudo service isc-dhcp-server restart
    

ENTONCES el Punto de Acceso debería estar ARRIBA y listo para aceptar clientes.

Esas son mis direcciones, por supuesto/edítelas según sus necesidades.

DOS CONSEJOS MÁS: Los archivos de configuración hostapd.conf y dhcp.conf también pueden volverte loco: -Aquí hay ejemplos de trabajo. IMPORTANTE: no se preocupe por el 'nombre del controlador' en hostapd.conf: no es necesario. 'Comentado' está bien:

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;
}
#
#

Aunque este trabajo en Pi fue en DietPi, que es directamente Debian, por lo que este mismo consejo debería funcionar para muchos Linux, incluido Ububtus de muchos sabores.

BUENA SUERTE A TODOS

información relacionada