Unzuverlässige DNS Auflösung für Heimserver

Rexaris

Lt. Junior Grade
Registriert
Mai 2020
Beiträge
275
Hallo Zusammen,

ich habe aktuell ein Problem mit der DNS-Auflösung für meinen Heimserver.
Details dazu später, zuerst meine Konfiguration:

Hardware:
  • PC mit Debian 11 bullseye als Heimserver
  • Via LAN-Kabel an Router (Fritz!Box 7362 SL) angeschlossen
DNS-Relevante Informationen:
  • Pi-Hole auf dem Heimserver:
    • Router greift auf Pi-Hole zu
    • Router weist Geräte im Netzerk an das Pi-Hole als DNS-Server zu nutzen
    • Pi-Hole funktioniert für alle Geräte im Netzwerk
  • Dyn-DNS-Anbieter:
    • https://dynv6.com/
    • Dyn-DNS-URL: <username>.v6.rocks
    • eigentliche URL wird mittels CNAME zugeordnet. (Fehler tritt auch mit <username>.v6.rocks auf, also ohne CNAME)
Fehlerbeschreibung:
Der Fehler ist mir aufgefallen weil ich seit einigen Tagen meinen Geräten nicht mehr auf die Nextcloud-Instanz gekommen bin. Also habe ich versucht den Fehler einzugrenzen:
  1. Zugriff über lokale IP funktioniert (Verbindung zum Server funktioniert also und Nextcloud läuft auch)
  2. Im Pi-Hole nachgeschaut: <username>.v6.rocks liefert einen NXDOMAIN error.
  3. Auf dynv6.com nachgesehen ob korrekte IP Adresse hinterlegt ist (verglichen mit www.wieistmeineip.de)
    1. IPv4 ist OK
    2. IPv6 ein unterschied, aber via ddclient wird ohnehin nur IPv4 aktualisiert
  4. mittels nslookup geprüft was mir die DNS-Server liefern:
    • "nslookup <username>.v6.rocks 8.8.8.8" (also beim Google-DNS angefragt, was sich hinter meiner URL verbirgt)
      • 1. Antwort:
        ** server can't find <username>.v6.rocks: NXDOMAIN
        => aha Fehler gefunden!? mein DYNDNS-Anbieter ist Schuld?
      • Wiederholung der Anfrage: 2. Antwort:
        Non-authoritative answer:Name: <username>.v6.rocks
        Address: <korrekte IP-Adresse>
        ** server can't find <username>.v6.rocks: NXDOMAIN
        => Hä? also es geht, aber irgendwie doch nicht?
      • Wiederholung der Anfrage: 2. Antwort:
        Non-authoritative answer:Name: <username>.v6.rocks
        Address: <korrekte IP-Adresse>
        Name: <username>.v6.rocks
        Address: <bei dynv6 hinterlegte IPv6>
        => Also geht manchmal nur IPv4, manchmal beides, manchmal keins? Was ist da los?
    • Wiederholung der Abfrage mit Googles DNS: die 3 Antworten wechseln sich zufällig ab
    • Wiederholung der Abfragen mit OpenDNS (208.67.220.220) zufällige Abwechslung mit alles OK und NXDOMAIN auf beiden IPs
    • Wiederholung der Abfragen mit Googles DNS und www.computerbase.de => ich bekomme immer die korrekte IP
So was mach ich nun? Kurz nachdem ich mein PiHole neustarte funktioniert es manchmal kurz (wahrscheinlich je nachdem welche Anwort er auf die Upstream-DNS-Anfrage bekommt).

Kann es sein, dass mein DYN-DNS-Anbieter im Sekundentakt den DNS-Servern neue und ggf. falsche Informationen liefert?
Habt ihr noch andere Ideen das Problem anzugehen?
 
Ich kann dir zwar nicht mit deinem DynDNS Anbieter helfen, aber hast du mal über den FritzBox / AVM eigenen Dienst MyFritz nachgedacht? Oder gibt es den bei deiner Box nicht?

Ich nutze ihn von Beginn an und konnte bisher keine Probleme feststellen. Der Dienst funktioniert seit Jahren zuverlässig.
 
auf Debian 11 bullseye sind auch die ports für PiHole frei?

oder einfach einen anderen anbieter testen
 
Teste es auf jeden Fall auch mit externen DNS Checkern. Immer bedenken: Auch wenn die TTL bei dyndns Diensten kurz ist, kommen trotzdem die meisten Antworten aus irgendwelchen Caches unterwegs. Vor allem, wenn du vom gleichen PC aus aufrufst.

Dann: Wenn du aus deinem Heimnetz die Aufrufe machst, könnte da irgendwo ein DNS Rebind Schutz zuschlagen. Das auf jeden Fall auch prüfen.
 
riversource schrieb:
Teste es auf jeden Fall auch mit externen DNS Checkern.
Ich habe mal auf www.whatsmydns.net und dnschecker.org getestet. Auch hier bekomme ich sich ändernde Ergebnisse bei jedem A
Donnidonis schrieb:
hast du mal über den FritzBox / AVM eigenen Dienst MyFritz nachgedacht?
Ich habe mir das gerade mal angeschaut. Lande bei Aufruf der URL aber immer auf der Fritzbox und nicht auf dem Server, obwohl die Port-Weiterleitungen auf den Server zeigen. Liegt das vielleicht an IPv6 und ich muss in der Port-Weiterleitung die "IPv6 Interface-ID" auf die IPv6-Adresse der Fritzbox einstellen?
CNAME wäre dann auch noch ein weiteres Thema.
StefanArbe schrieb:
sind auch die ports für PiHole frei?
Das PiHole ist doch nur lokal aktiv. Da sollten alle Ports frei sein. Das Pi-Hole funktioniert ja ansich auch.
StefanArbe schrieb:
einen anderen anbieter testen
Das werde ich mal tun. Kannst du einen empfehlen?
 
Rexaris schrieb:
Lande bei Aufruf der URL aber immer auf der Fritzbox und nicht auf dem Server
Du kannst den Remote Zugriff deaktivieren. Also dass die Oberfläche nicht erreichbar ist. Die würde ich auch von außen nicht erreichbar machen.
vielleicht stören die sich dann mit den Ports. Du kannst ja testweise einfach mal einen zufälligen Port nutzen und sehen ob es dann geht.
 
Donnidonis schrieb:
Du kannst den Remote Zugriff deaktivieren
Dann funktioniert die URL nur wenn sie nicht aus dem lokalen Netz aufgerufen wird.
Den Eintrag "IPv6 Interface-ID" hatte ich auf den Wert hinter der URL angepasst.

Nachtrag:
Hab nochmal im Browser nachgeschaut. Es wird die IPv6-Adresse verwendet. Demnach funktioniert die Port-Weiterleitung nur wenn die Fritzbox selbst nicht antwortet.
 
Meines bescheidenen Wissens über IPv6 musst du den Server und nicht die fritzbox als Ziel eingeben, respektive wahrscheinlich die IPv6 des DNS Server.
Und … du solltest den DNS der pihole nehmen.
Wie geschrieben, habe damit wenig Erfahrung und lerne gerne
 
Rexaris schrieb:
Habt ihr noch andere Ideen das Problem anzugehen?
Welchen Internet-Anbieter hast Du?

Ich würde erstmal für den Anfang die IP-Adressen statisch bei Deinem Dynamic-DNS-Anbieter über dessen Web-Oberfläche eintragen, also alle Dynamic-DNS-Clients überall ausschalten. Wenn sich jetzt noch die IP-Adressen ändern, dann hast Du irgendwo einen Dynamic-DNS-Client, den Du vergessen hast.

Danach dann den Client auf der FRITZ!Box einrichten …
Rexaris schrieb:
IPv6 ein unterschied, aber via ddclient wird ohnehin nur IPv4 aktualisiert
Mein Tipp: Dann lass IPv6 erstmal weg. Wenn IPv4 klappt, dann an IPv6 machen.
 
  • Gefällt mir
Reaktionen: Raijin
Vielen Dank für Eure Unterstützung.
Nachdem ich auch gesehen habe, dass der Comunitiy-Bereich von dynv6 nicht mehr aktiv ist und auch kein Login möglich ist, bin ich davon ausgegangen, dass ein Problem des DynDNS-Anbieters vorliegt und habe den Anbieter gewechselt.
Ich bin jetzt bei ddnss.de gelandet und der Serverzugriff läuft wieder stabil.
IPv4 und IPv6 funktioniert gleich beides auf Anhieb.
Ansonsten ist
norKoeri schrieb:
Wenn IPv4 klappt, dann an IPv6 machen.
definitiv ein guter Tipp.


Weil es grad in aller Munde ist dachte ich mir ich teste mal aus, ob Chat-GPT in der Lage ist mir ein Script zu schreiben, welches das Update der IP-Adressen übernimmt.
Auf Anhieb hat er mir ein funktionierendes Python-Script ausgespuckt:
Anfrage:
Schreibe mir ein Python script, welches eine URL mit folgender Struktur generiert: https://www.ddnss.de/upd.php?user=<username>&pwd=<pass>&host=<domain>ip=<ipaddr>&ip6=<ip6addr>
dabei soll <username>, <pass> und <domain> in einer Variablen gespeichert werden.
<ipaddr> soll durch einen Aufruf der Seite dynamicdns.park-your-domain.com/getip ermittel werden, welche einen einen String mit meiner aktuellen IP zurückgibt.
Für <ip6addr> soll die aktuelle IPv6 Adresse durch auslesen der Schnittstelle enp2s0 ermittelt werden.
Anschließend soll die URL via print() ausgegeben werden und auch aufgerufen werden.
Ergebnis:
Python:
import requests
import socket

# Variablen mit Login-Daten für ddnss.de
username = "<username>"
password = "<pass>"
domain = "<domain>"

# Aktuelle IP-Adresse abfragen
ip_response = requests.get("http://dynamicdns.park-your-domain.com/getip")
ip_address = ip_response.text.strip()

# IPv6-Adresse abfragen
s = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM)
s.connect(("2001:4860:4860::8888", 80))
ipv6_address = s.getsockname()[0]

# URL zusammenbauen
url = "https://www.ddnss.de/upd.php?" + \
      "user=" + username + \
      "&pwd=" + password + \
      "&host=" + domain + \
      "&ip=" + ip_address + \
      "&ip6=" + ipv6_address

# URL ausgeben und aufrufen
print("Generierte URL: " + url)
response = requests.get(url)
print("Antwort vom Server: " + response.text)

Fetzt!
Der Code wird dann einfach mittels cronjob regelmäßig ausgeführt. Fertig.
 
Zurück
Oben