Lessons learned: DynDNS selbst bauen

Viele Jahre habe ich einen bekannten kostenfreien DynDNS Service genutzt. Vor einiger Zeit wurde dieser Dienst allerdings kostenpflichtig. Daher beschloss ich nach einer Alternative zu suchen. Da ich aber nichts Passendes gefunden habe, stellte ich mir die Frage, ob ich so ein System nicht selbst bauen könnte.

Es gibt allerdings einige Lösungsmöglichkeiten. Nachdem ich eine Lösung mit Bind implementiert hatte, musste ich mich mit dem Betrieb der Lösung beschäftigen. Daher habe ich mir eine andere Lösung erarbeitet, die in der AWS Cloud gehostet wird, so dass man keinen eigenen Server benötigt.

Die Lösung benötigt eine Route53 DNS-Zone und eine Lambda-Funktion, die auf Wunsch die DNS-Einträge in der Zone abändert. Damit man die Lambda-Funktion auch über HTTP aufrufen kann, gehört auch ein API-Gateway zu der Lösung. Das API-Gateway würde zusätzlich die Möglichkeit bieten die HTTP-API mit einem API-Key abzusichern.

Wer sich die Lösung gerne am angucken will, kann es sich hier bei GitHub angucken. Zu deployen wird neben Node und Python auch ein installiertes CDK und docker benötigt.

Wenn einer von euch Feedback hat, würde ich mich freuen, wenn ihr es mir schicken würdet.

Willst du das mal ausprobieren?

Ich betreibe zur Zeit eine kleine Installation. Um diese nutzen zu können, musst du dich nicht einmal registrieren. Wenn du die Update-URL mit den entsprechenden Parametern aufrufst, wird der DNS-Eintrag erzeugt bzw. aktualisiert.

Damit nur du deinen Eintrag aktualisieren kannst, musst du bei einer Aktualisierung immer den Code angeben, den du beim ersten Aufruf vergeben hast. Solltest du diesen Code verlieren, kann er nicht zurückgesetzt werden!

Die Update-URL

https://dyndns.thackba.de/update?domain=..&code=..&ip4=..&ip6=..

Die Parameter an der URL haben folgende Bedeutung:

domain
Gibt den Namen des DNS-Eintrags an. Entweder kannst du eine einfachen Namen (z.B. meintest) oder den finalen Hostnamen (z.B. meintest.dyndns.thackba.de) angeben. In beiden Fällen werden dann deine IPs unter dem finalen Hostnamen registriert. Der Name muss mindestens 4 Zeichen lang sein.
code
Mit diesem Code stellst du sicher, dass nur du den DNS-Eintrag ändern darfst. Er besteht aus Buchstaben und Zahlen und ist mindestens 16 Zeichen lang. Dieser Parameter ist ein Pflichtparameter.
ip4
Die IPV4 (oder Legacy IP) Adresse, auf die der DNS-Eintrag zeigen soll. Dieser Parameter ist optional, wenn der Parameter ip6 gesetzt ist.
ip6
Die IPV6 Adresse, auf die der DNS-Eintrag zeigen soll. Dieser Parameter ist optional, wenn der Parameter ip4 gesetzt ist.

Noch ein kleiner Hinweis: Das Ganze ist ein Test-System. Daher kann es sein, dass es auch mal nicht funktioniert.