isc-dhcp-server schlägt fehl, wenn die Schnittstelle beim Neustart nicht verbunden ist

isc-dhcp-server schlägt fehl, wenn die Schnittstelle beim Neustart nicht verbunden ist

Ich habe auf meinem Gateway-Server unter Ubuntu 18.04 den isc-dhcp-server installiert und konfiguriert, aber er startet nicht (d. h. der Start schlägt fehl), wenn nach einem Neustart nichts mit enp2s0 verbunden ist.

Beachten Sie, dass dort steht:Nicht zum Abhören von Schnittstellen konfiguriert!"

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

Mein Gateway-Server hat zwei Ethernet-Ports, enp1s0 und enp2s0. Ich verwende enp1s0 für den Internetzugang über einen Router und enp2s0 einfach, um eine Web-App für über Ethernet verbundene Laptops bereitzustellen. enp2s0 ist der Port, dem der DHCP-Server IP-Adressen zuweist (für die Laptops, die die Web-App benötigen). Ichwollenenp1s0, um eine zufällige IP-Adresse vom mit dem Internet verbundenen Router im Subnetz 192.168.1.0 zu erhalten, sodass die Schnittstelle nicht vom ISC-DHCP-Server, sondern nur von enp2s0 verwaltet wird.

Hier ist die „IP-Route“ ohne Verbindung zu enp2s0, falls das hilft …

$ 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

Hier ist mein dhcpd.conf-Setup:

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

Hier ist mein ISC-DHCP-Server-Setup:

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

Eine Lösung besteht darin, den isc-dhcp-Server neu zu starten, nachdem ein Laptop an enp2s0 angeschlossen wurde, aber ich möchte das nicht nach jedem Neustart oder jedes Mal tun müssen, wenn jemand einen Laptop an enp2s0 anschließt. Der DHCP-Server funktioniert nach dem Neustart des Dienstes ...

$ 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

Irgendwelche Ideen? Ich bin sicher, dass ich eine Konfigurationssache übersehen habe, die dieses Problem lösen wird ...

BEARBEITEN: Ausgabe vom Befehl „nmcli connection show lan“ (auch bekannt als: 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: Ausgabe von „nmcli -f name,autoconnect connection show“ hinzugefügt

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

EDIT3: Ausgabe von „cat /etc/NetworkManager/system-connections/lan“ hinzugefügt

[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

Antwort1

Ist die Schnittstelle (enp2s0) überhaupt aktiv? Sie muss mit einer IPv4-Adresse versehen und dann gestartet werden.

Es sollte keine Rolle spielen, ob Clients mit dem Hub/Switch verbunden sind.

Bearbeiten: Netzwerkmanager?

Ich hasse dieses Ding abgrundtief, aber so oder so: Wenn das Iface nicht mit einer korrekten Adresse aktiv ist, startet DHCP nicht. Sie müssen also herausfinden, wie Sie mit nmcli eine statische Konfiguration erstellen, die immer aktiv ist.

Bearbeiten: Was zeigt das?

nmcli connection show lan

Interessant ist die Eigenschaft connection.autoconnection.

Bearbeiten: Was zeigt dies:

  nmcli -f name,autoconnect connection show

Okay, wie ist der Status

  nmcli -f name,autoconnect connection show

nach dem Neustart ohne Ihren Hack? Die Autoconnect-Eigenschaft sollte ausreichen, um die Schnittstelle aufzurufen ... nicht zu wissen, warum etwas bei etwas fehlschlägt, das im Grunde sehr einfach ist, ist eine der Sachen, die ich an NetworkManager nicht mag (zu viel Komplexität für unbekannte Vorteile, ich sehe den Sinn bei Clients, die ständig in Bewegung sind, aber Servern, die einfach funktionieren müssen??)

Bearbeiten: irgendwelche Dateien in etc/NetworkManger/system-connections? So habe ich zumindest die Geräte in meinem System konfiguriert (es ist eine überbrückte Konfiguration), also verwende ich NetworkManager, um die Maschine hochzufahren. Die Maschine ist Host für drei Gäste, also ist das Gerät enp1s0 ein Slave.

Bearbeiten: Was passiert, wenn Sie das LAN-Gerät definieren (es zuerst vollständig entfernen), also etwa Folgendes:

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

Antwort2

Sofern es keine bessere Lösung gibt, funktioniert für mich im Moment Folgendes: Wenn meine Web-App gestartet wird, geschieht Folgendes:

  1. sudo nmcli-Verbindunghochlan („lan“ ist der NetworkManager-Verbindungsname, der enp2s0 zugewiesen ist)
  2. sudo-Dienst ISC-DHCP-ServerNeustart

Der Start der Webanwendung ist per Cron so geplant, dass er bei @reboot beginnt, sodass NetworkManager zu diesem Zeitpunkt bereits gestartet ist.

isc-dhcp-server schlägt immer fehl, wenn enp2s0 noch nicht „aktiv“ ist, also muss ich es „aktiv“ einrichten und dann den isc-dhcp-server-Dienst neu starten. Das ist nicht sehr elegant, aber es funktioniert vorerst.

Antwort3

FALLS ES JEMANDEM HILFT: Ich habe dieses ärgerliche Problem gerade auf DietPi (Debian Buster) auf einem Pi Zero W durchgemacht und habe das Problem gelöst.

isc-dhcp-server ist ausgezeichnet, hat aber diese Eigenart, wie der ursprüngliche Fragesteller oben anmerkte. Ich bin dem Problem auf den Grund gegangen – es ist kein Fehler – und hier ist die genaue Ursache:

  1. Der isc-dhcp-server lehnt ab (gibt einen Fehler aus), wenn beim Start kein UP-Ethernet-Netzwerksubnetz erkannt wird. Er benötigt (entgegen der Meinung einiger Kommentatoren) KEINE tatsächliche Verbindung zum Ethernet-Port, mit dem er verknüpft ist.

  2. Bei der Entwicklung eines WiFi-Hotspot-Geräts verwenden Sie normalerweise hostapd als AP-Serverfunktion (die die WiFi-Hardware neu konfiguriert, um in den AP-Modus zu wechseln) und neben hostapd benötigen Sie einen DHCP-Server wie isc-dhcp-server, um den IP-Adressleasingdienst bereitzustellen.

  3. Also: Normalerweise ist der Startpunkt ein WLAN-Gerät, das beim Booten als CLIENT-Gerät konfiguriert wurde, aber in den HOST-Modus geschaltet werden muss, um als Hotspot zu fungieren. Ein früher Schritt besteht also darin, wlan0 (oder was auch immer) DOWN zu setzen, bevor hostapd gestartet wird.

ABER diese Situation ist sofort eine von denen, die dem isc-dhcp-server nicht gefallen: Wenn Sie versuchen, ihn vor hostapd zu starten, schlägt er fehl und meldet, dass kein Subnetz vorhanden ist, auf dem er lauschen kann.

  1. Sie können dann in aller Unschuld versuchen, Ihrem wlan0 (oder gleichwertig) eine neue IP-Adresse (für den Host) hinzuzufügen und es erneut zu versuchen: DAS WIRD AUCH NICHT FUNKTIONIEREN, denn obwohl Sie jetzt eine neue IP an den Ethernet-Port angeschlossen haben, werden Sie feststellen, dass Sie diese nicht „UP“ einrichten können (ip link set wlan0 up schlägt fehl). Dies liegt daran, dass der Port durch die noch aktive, veraltete Adresse und den WPA-Supplicant-Prozess, der sie verwendet hat, „verunreinigt“ ist.

  2. LANGE GESCHICHTE KURZ GESAGT: Sie müssen wpa-supplicant beenden, um die alte Adresse „freizugeben“ / die IP-Einstellungen für den Port LÖSCHEN / DANN die neue IP-Adresse für den Host hinzufügen; SELBST DANN werden Sie feststellen, dass isc-dhcp-server IMMER NOCH nicht startet, weil Sie die Schnittstelle noch nicht einrichten können. Und schließlich: Führen Sie jetzt hostapd aus, vor isc, und ES wird (beim Neukonfigurieren des Chipsatzes) auch die wlan0-Schnittstelle auf UP EINSTELLEN. Jetzt können Sie also – endlich – isc-dhcp-server ausführen, es wird sauber starten und Ihr Hotspot wird aktiv sein.

Ich habe ungefähr fünf Stunden dafür gebraucht, ich hoffe, das spart jemandem etwas Zeit. Meine kurze Anmerkung:

ISC-DHCP-SERVER neben HOSTAPD SORTIEREN: DIE LÖSUNG

DIESE REIHENFOLGE MÜSSEN SIE EINHALTEN:

  1. Beenden Sie den WPA-Supplicant-Prozess (der die Client-Verbindung aufrechterhält) folgendermaßen:

     kill -2  $( cat /run/wpa_supplicant.wlan0.pid )
    
     sleep 1
    
     kill -9  $( cat /run/wpa_supplicant.wlan0.pid )
    
  2. Leeren Sie das WLAN-IP-Setup mit:

    ip addr flush dev wlan0
    
  3. Fügen Sie die neue Host-IP-ADRESSE hinzu, und zwar mit:

    ip addr add 10.1.1.1/24 dev wlan0
    
  4. STARTEN Sie hostapd, wodurch auch wlan0 aktiviert wird:

     /usr/sbin/hostapd /etc/hostapd/hostapd.conf &
    
  5. STARTEN Sie den isc-dhcp-Server (WLAN ist aktiv, jetzt als Host):

     sudo service isc-dhcp-server restart
    

DANN sollte der Access Point aktiv und bereit sein, Clients zu empfangen.

Dies sind natürlich meine Adressen. Bearbeiten Sie sie nach Ihren Wünschen.

ZWEI WEITERE TIPPS: Auch die Konfigurationsdateien hostapd.conf und dhcp.conf können Sie in den Wahnsinn treiben: -hier sind funktionierende Beispiele. WICHTIG: Machen Sie sich keine Gedanken über den „Treibernamen“ in hostapd.conf: Er wird nicht benötigt. „Auskommentiert“ ist in Ordnung:

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

Dies funktionierte zwar auf Pi, aber auf DietPi, einem reinen Debian-System. Daher sollte dieser Rat für viele Linux-Versionen gelten, einschließlich Ubuntu in vielen Varianten.

VIEL GLÜCK EUCH ALLEN

verwandte Informationen