_DuBu_
Anmeldungsdatum: 14. November 2017
Beiträge: Zähle...
|
Hallöchen, ich habe einen DHCP/DNS-Server mit dnsmasq am laufen, der den Clients unter anderem seine IP-Adresse als DNS-Server-Adresse in der DHCP-Antwort mitschickt. Die Clients sind über /etc/systemd/network/10-eth0.network als DHCP-Clients konfiguriert.
Im Netzwerk-Dump von tcpdump auf'm Server sehe ich, daß das DHCP Handshake korrekt ausgeführt wird und auch alle notwendigen Informationen an die Clients mitgeschickt werden. Danach sehe ich aber, wie die Clients hostname-lookups zwar mit der korrekten, vom DHCP-Server vergebenen, IP-Adresse als Quelladresse verschicken, diese aber an Name-Server von Google (8.8.4.4 und 8.8.8.8) geschickt werden. Das ganze wird ein paar mal, weil keiner antwortet, in größer werdenden Abständen wiederholt, bis dann nach ca. 30 Sek. die lookups mit der korrekten Zieladdresse (meines Servers) verschickt werden und dann auch ordentlich von meinem Server beantwortet werden.
An der Quelladresse der Anfragen sehe ich, dass die Antwort vom DHCP-Server korrekt empfangen wurde. Mir ist nur schleierhaft warum der systemd-resolved erst nach ca. 30 Sek. auch den DNS-Server-Eintrag aus der DHCP-Antwort verwendet.
Hat jemand eine Ahnung was da los ist? Grüße aus Berlin!
|
lubux
Anmeldungsdatum: 21. November 2012
Beiträge: 13938
|
_DuBu_ schrieb: Danach sehe ich aber, wie die Clients hostname-lookups zwar mit der korrekten, vom DHCP-Server vergebenen, IP-Adresse als Quelladresse verschicken, diese aber an Name-Server von Google (8.8.4.4 und 8.8.8.8) geschickt werden.
Hast Du die Clients so konfiguriert, dass diese hostname an den DHCP-Server senden? Ein Beispiel:
hostname name
Sends hostname to the DHCP server so it can be registered in DNS. If hostname is an empty string then
the current system hostname is sent. If hostname is a FQDN (ie, contains a .) then it will be encoded as
such.
hostname_short
Sends the short hostname to the DHCP server instead of the FQDN. This is useful because DHCP servers
will not register the FQDN in their DNS if the domain part does not match theirs.
Also, see the env option above to control how the hostname is set on the host.
|
_DuBu_
(Themenstarter)
Anmeldungsdatum: 14. November 2017
Beiträge: 5
|
lubux schrieb: Hast Du die Clients so konfiguriert, dass diese hostname an den DHCP-Server senden?
Ja, habe ich. In der dnsmasq.leases auf'm Server sieht auch alles gut aus.
|
lubux
Anmeldungsdatum: 21. November 2012
Beiträge: 13938
|
_DuBu_ schrieb: Ja, habe ich.
Welche DHCP-Client-Software verwendest Du?
|
_DuBu_
(Themenstarter)
Anmeldungsdatum: 14. November 2017
Beiträge: 5
|
lubux schrieb: Welche DHCP-Client-Software verwendest Du?
Die im systemd-networkd eingebaute. Ich habe die Vermutung, daß es funktioniert, wenn die Software, die die DNS-Anfrage abschickt, später gestartet wird. Ich kann mir aber nicht erklären warum. Die Antwort vom DHCP-Server muß ja schon eingetroffen sein, da ja die DNS-Anfrage, die fälschlicherweise an Google geschickt wird, die richtige Absenderadresse (die aus der DHCP-Antwort) hat. Warum aber der systemd-resolved nicht auch die richtige Empfängeradresse (den DNS-Server aus der DHCP-Antwort) einträgt ist mir schleierhaft.
|
lubux
Anmeldungsdatum: 21. November 2012
Beiträge: 13938
|
_DuBu_ schrieb: lubux schrieb: Welche DHCP-Client-Software verwendest Du?
Die im systemd-networkd eingebaute.
Dann schau mal nach ob die google-DNS-Server dort nicht per default konfiguriert sind. ... oder hast Du das schon geändert?
|
_DuBu_
(Themenstarter)
Anmeldungsdatum: 14. November 2017
Beiträge: 5
|
lubux schrieb: Dann schau mal nach ob die google-DNS-Server dort nicht per default konfiguriert sind. ... oder hast Du das schon geändert?
Ja, die sind per default konfiguriert. So wie ich den systemd-resolved verstanden habe, werden die aber nur benutzt, wenn keine anderen vorhanden sind.
Mein Verständnis soweit:
- systemd-resolved schreibt in die /run/systemd/resolved/resolv.conf den Nameserver aus der DHCP-Antwort - systemd-resolved liest die /etc/resolve.conf (welche hier nur ein link auf /run/systemd/resolved/resolv.conf ist) um bei einer DNS-Anfrage die anzusprechenden Nameserver zu finden. Wenn dort keine Nameserver eingetragen sind werden die Nameserver aus der Option FallbackDNS aus /etc/systemd/resolved.conf genommen, welche die Google-Adressen sind.
|
_DuBu_
(Themenstarter)
Anmeldungsdatum: 14. November 2017
Beiträge: 5
|
Irgendwie scheint das Übernehmen der Client-IP-Adresse und der DNS-Server-Adresse aus der DHCP-Antwort nicht atomar zu sein und zeitlich sogar so weit auseinander zu liegen, daß der Start meiner Anwendung und damit der Hostname-Lookup zu 99% dazwischen liegt. Die Client-IP-Addresse wird ja korrekt in den Hostname-Lookup übernommen, die IP-Adresse des DNS-Servers aber nicht.
Andersrum, weiß ich aber auch nicht warum dann noch 30 Sek lang versucht wird Google zu fragen um dann plötzlich doch den über DHCP konfigurierten DNS-Server anzusprechen. Vielleicht würde es helfen, wenn ich den Start meiner Anwendung einfach vom Status der Netzwerkverbindung abhängig mache, insbesondere vom Vorhandensein des nameserver-Eintrages in der /etc/resolv.conf. Ich hab nur keine Ahnung, wie man solche dependencies in systemd konfiguriert.
|
lubux
Anmeldungsdatum: 21. November 2012
Beiträge: 13938
|
_DuBu_ schrieb: Ich hab nur keine Ahnung, wie man solche dependencies in systemd konfiguriert.
Z. B. mit einer "service unit" und in hartnäckigen Fällen, auch mit einer "timer unit".
|