host Command liefert leider keinen Hostname fuer Clients die ihre IP per DHSP von einer FritzBox beziehen

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Fuer raspiBackup muss ich immer wieder eine Raspberry bei mir starten um entweder Problemberichte die per github reingekommen sind nachzustellen oder Tests von neuen Funktionen vorzunehmen.

    Die Raspberry die ich dazu nutze holt sich ihre IP per DHCP von meiner Fritzbox und ist leider immer mal wieder nach laengerer Downtime verschieden.

    Deshalb habe ich ein kleines Script geschrieben welches in meinem Homenetz mir alle IPs meiner aktiven Raspberries anzeigt. Das funktioniert auch soweit ganz gut - nur liefert der host Befehl nur fuer meine Raspberries die eine statische IP Definitionen haben den Hostname fuer die Anzeige zurueck. Deshalb habe ich das Script mittlerweile so erweitert dass man mit einer ConfigDatei eine Beschreibung fuer eine MAC Addresse erstellen kann und somit die jeweilige Raspberry identifizieren kann.

    Das sieht dann z.B. wie folgt aus - die IP 192.168.0.162 ist eine Testraspberriy.

    Code
    findRaspis.sh 
    Scanning subnet 192.168.0.0/24 for Raspberries ...
    
    IP address      Mac address       Hostname (Description)
    192.168.0.10    b8:27:eb:3c:94:90 idefix
    192.168.0.12    dc:a6:32:8f:28:fd asterix
    192.168.0.162   b8:27:eb:f7:28:f5 Unknown (rpi3)
    192.168.0.8     b8:27:eb:b4:e8:74 troubadix

    und wie man sieht steht beim rpi3 nur die manuell konfigurierte Beschreibung zu der jeweiligen Mac die ja unabhaengig von der DHCP Leasetime und der zugehoerigen IP Adresse ist.

    Ich wuerde aber gerne das Unknown durch den Hostnamen ersetzt haben. Die Images der Raspberries haben immer sprechende Hostnamen wie bullseye-light oder auch bullseye-desktop

    Der Befehl der ausgefuehrt wird um den Hostnamen zu erhalten ist host <ipAddress> . Leider sehe ich in meiner Fritte den Hostnamen auch nicht :( . Hat jemand eine Idee wie ich den Hostname auch fuer DHCP Clients rausbekommen kann?

    PS: Der Vollstaendigkeit halber: Das vollstaendige Script steht hier

  • host Command liefert leider keinen Hostname fuer Clients die ihre IP per DHSP von einer FritzBox beziehen? Schau mal ob du hier fündig wirst!

  • Leider sehe ich in meiner Fritte den Hostnamen auch nicht :( . Hat jemand eine Idee wie ich den Hostname auch fuer DHCP Clients rausbekommen kann?

    Wenn Du systemd-networkd benutzt und die systemd-Version >/= 223 ist, kannst Du in der *.network-Datei mit einer Section [DHCPV4], das dort konfigurieren:

    Code
    [Network]
    DHCP=ipv4
    
    [DHCPV4]
    SendHostname=true
    Hostname=<hostname>
    Spoiler anzeigen
    Zitat

    SendHostname=

    When true (the default), the machine's hostname will be sent to the DHCP server. Note that the machine's

    hostname must consist only of 7-bit ASCII lower-case characters and no spaces or dots, and be formatted as

    a valid DNS domain name. Otherwise, the hostname is not sent even if this is set to true.

    Zitat

    Hostname=

    Use this value for the hostname which is sent to the DHCP server, instead of machine's hostname. Note that

    the specified hostname must consist only of 7-bit ASCII lower-case characters and no spaces or dots, and be

    formatted as a valid DNS domain name.

    Quelle: manpage systemd.network

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

  • Geht es mit arp?

    Code
    arp -a | grep -E --ignore-case 'b8:27:eb|dc:a6:32|e4:5f:01|28:cd:c1'
    asterix (192.168.0.12) at dc:a6:32:8f:28:fd [ether] on wlp3s0
    troubadix (192.168.0.8) at b8:27:eb:b4:e8:74 [ether] on wlp3s0
    ? (192.168.0.164) at dc:a6:32:cb:d9:7e [ether] on wlp3s0
    idefix (192.168.0.10) at b8:27:eb:3c:94:90 [ether] on wlp3s0

    Da steht leider nur ein Fragezeichen :(

    Wenn Du systemd-networkd benutzt und die systemd-Version >/= 223

    Code
    systemd --version
    systemd 247 (247.3-7+rpi1+deb11u1)
    +PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +ZSTD +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=unified
    
    ps -ef | grep dhcp
    root       535     1  0 09:59 ?        00:00:00 /usr/sbin/dhcpcd -b -q
    pi        1357  1343  0 10:06 pts/0    00:00:00 grep --color=auto dhcp

    Ist ein bullseye small image was offensichtlich den dhcpcd nutzt. Da muss ich mich mal schlau machen wie man den systemd stattdessen nutzen kann :)

    Ist aber irgendwie dumm das der Hostnamen nicht standardmaessig beim DHCP Request mitgeliefert wird :(

  • Ist aber irgendwie dumm das der Hostnamen nicht standardmaessig beim DHCP Request mitgeliefert wird

    Eigentlich sollte der dhcpcd den Hostnamen auch an den DHCP-Server (deine FB) senden.

    Evtl. mit dhcpdump auf deinem PI testen:

    Code
    sudo dhcpdump -i eth0

    und danach ein "sudo systemctl restart dhcpcd". Jetzt schauen ob es eine Ausgabe von dhcpdump gibt und welche Optionen dort gezeigt/verwendet werden.

    Code
    12 (Host name)
    15 (Domainname)

    EDIT:

    BTW: Teste mal mit dem tool kdig oder mit dem tool dig:

    Code
    kdig -x 192.168.0.164 +short @192.168.0.1
    dig -x 192.168.0.164 +short @192.168.0.1

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

    Einmal editiert, zuletzt von rpi444 (1. Dezember 2022 um 12:34)

  • danach ein "sudo systemctl restart dhcpcd".

    Interessant. Der DHCP Request enthaelt den Hostnamen (12). Der Reply enthaelt den DNS (6) und den Domainnamen (15)

    Ist also eigentlich alles ok.

    mit dem tool dig:

    Code
    for ip in 192.168.0.103 192.168.0.158 192.168.0.164; do echo $ip; dig -x $ip +short @192.168.0.1; done 
    192.168.0.103
    raspberrypi-bullseye-desktop.fritz.box.
    192.168.0.158
    raspberrypi.fritz.box.
    192.168.0.164
    raspberrypi4-8GB.fritz.box.
    raspberrypi-bullseye-desktop-2.fritz.box.

    D.h. ich koennte auch dig nehmen um den Hostnamen zu werhalten statt arp. Ist aber irgendwie komisch dass arp den Hostnamen nur liefert bei statischer IP.

    Dabei faellt mir gerade was auf im DHCP Replay: Die Server haben einen festen DNS, die FB eingetragen. Alle Systeme die per DHCP ihre IP bekommen mein PiHole als DNS zugewiesen.

    Code
    for ip in 192.168.0.103 192.168.0.158 192.168.0.164; do echo $ip; dig -x $ip +short @192.168.0.8; done 
    192.168.0.103
    192.168.0.158
    192.168.0.164

    Sprich es liegt daran dass mein PiHole keine Hostnamen zurueckgibt :wallbash:

    D.h. ich koennte den Code jetzt so aendern dass immer der Router und nicht Pihole nach dem Hostnamen gefragt wird :) .ich wuerde dann erst mal pruefen ob beim arp der Hostname zurueckkommt und wenn nicht nehme ich an dass das DefaultGW der DNS ist und frage den per dig nach dem Hostnamen.

    Interessant ist in diesem Zusammenhang dass die IP .164 zwei Hostnamen zurueckbekommt. Klar ist der Hostname oft unterschiedlich da ich auch unterschiedliche Images auf ihnen starte. In diesem Falle ist der erste Name der richtige Hostname. D.h. ich nehme falls mehrere Hostnamen zurueckgegeben werden immer den ersten.

    Vielen Dank fuer Eure Hilfe. Manchmal ist es doch ganz gut mal einen tcpdump anzuschmeissen und nachzusehen was genau ueber die Leuting geht denn daurch ist mir erst aufgefallen dass PiHole seine finger im Spiel hat :blush:

  • Auf keinem meiner Pis ist nmap, dhcpdump oder dig verfügbar?

    Siehe auch:

    Code
    apt-cache show knot-dnsutils dhcpdump dhcping

    kdig wenn Du auch DoT (Port 853) und DoH (Port 443) mit den kompetenten DNS-Servern testen willst:

    Code
    :~ $ kdig +tls heise.de @1.1.1.1 | grep -i from
    ;; From 1.1.1.1@853(TCP) in 66.2 ms
    Code
    :~ $ kdig +https heise.de @1.1.1.1 | grep -i from
    ;; From 1.1.1.1@443(TCP) in 80.6 ms

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

  • Dabei faellt mir gerade was auf im DHCP Replay: Die Server haben einen festen DNS, die FB eingetragen. Alle Systeme die per DHCP ihre IP bekommen mein PiHole als DNS zugewiesen.

    Sprich es liegt daran dass mein PiHole keine Hostnamen zurueckgibt

    Die A-records für die Hostnamen sind bei der FritzBox registriert worden und nicht beim PiHole, oder? D. h. für ein reverse-lookup müsste der PiHole die FritzBox fragen. Könnte man den PiHole so konfigurieren, dass er das macht?

    Mein dnsmasq im (W)LAN macht das (... d. h. er fragt die FritzBox, die u. a. auch in seiner Konfiguration eingetragen ist) . Z. B.:

    Code
    dig -x 192.168.178.40 +short @127.0.0.1
    <richtiger-hostname als A-record der FB>.

    Und das unabhängig davon, ob die IPv4-Adresse per dhcp zugewiesen ist oder statisch bzw. ohne dhcp.

    BTW: arp ist kein dns-tool, sondern ein tool/Programm für den arp-cache konfigurien/anzeigen/manipulieren/ändern/fehlersuchen, ...

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

  • Hast du die Fritzbox in Pihole unter "Settings - DNS - Use Conditional Forwarding" konfiguriert?

    Funktioniert hier genau so: Pihole als DNS, dort als DHCP-Server eingetragener OpenWRT-Router wird für lokales Netz abgefragt.

    Wenn du nichts zu sagen hast, sag einfach nichts.

    2 Mal editiert, zuletzt von llutz (2. Dezember 2022 um 13:54)

  • Perfekt. ich wollte gerade anfangen und den Code wie oben geschrieben anpassen. Aber mit Conditional forwarding funktioniert es perfekt :bravo2:

    Code
    findRaspis.sh
    Scanning subnet 192.168.0.0/24 for Raspberries ...
    
    IP address      Mac address       Hostname (Description)
    192.168.0.8     b8:27:eb:b4:e8:74 troubadix (NetzwerkRaspi)
    192.168.0.10    b8:27:eb:3c:94:90 idefix (HomeAutomation)
    192.168.0.12    dc:a6:32:8f:28:fd asterix (LAN Server)
    192.168.0.158   dc:a6:32:ff:4f:9a raspberrypi.fritz.box (cm4)

    Das sollte vielleicht auf der verlinkten Seite von PiHole eingepflegt werden ...

  • Irgendwie funktioniert der Update noch nicht so ganz.

    Eben habe ich mal eine Raspi3 mit einer SD Karte gestartet und danach dieselbe SD Karte in eine Raspi2 reingesteckt (andere MAC)

    Das Ergebnis:

    Man sieht dass

    Code
    192.168.0.130   b8:27:eb:d6:a6:c9 raspberrypi3.fritz.box (rpi2)

    aber den Hostnamen

    Code
    raspberrypi-bullseye-desktop

    hat :conf:

  • Das sieht fuer die IP .130 besser - sprich aktueller aus . als was beim host Command als Ergebnis geliefert wird :conf:

  • Mit dem o.g. Befehl wird aktiv gepingt. Wenn man dem die Option -sn mitgeben würde, käme es aus dem Cache. Vielleicht hätte ich besser nach beiden Befehlen und in der richtigen Reihenfolge, fragen sollen, also erst mit und dann ohne -sn. :blush:


    //Edit

    Das hatte ich falsch in Erinnerung: -sn macht keinen Portscan. Das war der Unterschied.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!