Dynamic DNS mit AWS Route 53
Bis vor kurzem habe ich dyn.com als Lösung für meine dynamische DNS Domäne genutzt. Leider ist dyn.com für eine Domäne zu teuer geworden seit Oracle Dyn übernommen hat. Ich wollte jedoch nicht einfach den Anbieter wechseln, lieber wäre mir eine "eigene" Lösung gewesen, um unabhängig zu sein von den Launen eines Dienstleisters.
Per Zufall bin ich dann über diese Blog Artikel gestossen:
- https://medium.com/@avishayil/dynamic-dns-using-aws-route-53-60a2331a58a4
- https://willwarren.com/2014/07/03/roll-dynamic-dns-service-using-amazon-route53/
In diesen Artikeln wird erklärt, wie AWS Route 53 als kostengünstige dynamische DNS Lösung eingesetzt werden kann. Ich habe dies ausprobiert und es ist relativ einfach umzusetzen, wenn man sich mit AWS (cli) und AWS Route 53 schon auskennt.
Ich habe eine veränderte Version der Scripts aus dem Original-Artikel erstellt:
Anpassen müsst ihr folgende Variablen:
ZONEID
=> Eure AWS Route 53 Zonen ID hier eintragenRECORDSET
=> Domäne bzw. Record eingeben, z.B.:example.com
oderwww.example.com
TTL
=> Gewünschte TTL: https://de.wikipedia.org/wiki/Time_to_LiveTYPE
=> Record type angeben: https://en.wikipedia.org/wiki/List_of_DNS_record_types
Ihr könnt natürlich alles andere auch anpassen im Script, ich will nur noch auf folgende Variablen aufmerksam machen:
aws_profile
=> Hier könnt ihr das AWS Profil angeben, falls ihr mehrer nutzt: https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.htmlaws_binary_path
=> Pfad zu eurem AWS cli. Je nach Installation unterschiedlich. Bei Nutzung mit cron teilweise nötig um diePATH
Variable richtig zu setzen.IPFILE
=> Pfad/Dateiname in welcher die IPv4 des letzten Laufs gespeichert wird.COMMENT
=> Kommentar welcher beim aktualisieren des DNS-Eintrages bei AWS Route 53 gespeichert wird.
Ein weiterer interessanter Abschnitt im Script ist das herausfinden der externen IPv4-Adresse:
Es gibt viele Möglichkeiten die externe IPv4-Adresse zu bestimmen, wichtig jedoch ist, dass dies zuverlässig funktioniert und sich nicht über die Zeit ändert. Im Kommentar sind einige Beispiele und ein Link zu einem Thread der sich diesem Thema widmet. Eine alternative zu dig
wäre auch mit curl
die IPv4 zu bestimmen, z.B. mit: curl https://ipinfo.io/ip
Script ausführen
Wenn ihr das Script das erste mal ausführt und noch keine IPv4 im IPFILE
gespeichert ist, wird versucht der AWS Route 53 DNS-Eintrag zu aktualisieren. Um die Aktualisierung der DNS-Eintrages zu forcieren, müsst ihr also nur das IPFILE
löschen.
Zugriffskontrolle DNS Zone
Es ist zusätzlich ratsam einen Benutzer mit programmgesteuertem Zugriff (programmatic access user) zu erstellen und diesen im AWS-cli Profil einzurichten.
- https://docs.aws.amazon.com/de_de/IAM/latest/UserGuide/id_users_create.html#id_users_create_cliwpsapi
- https://docs.aws.amazon.com/de_de/cli/latest/userguide/cli-chap-configure.html
Dem Benutzer mit programmgesteuertem Zugriff sollte noch eine AWS IAM Policy, die nur Änderungen von Einträgen in einer angegebene Zone erlaubt, angefügt werden:
Crontab einrichten
Schlussendlich könnt ihr noch einen Cronjob einrichten um die Ausführung des Scripts zu automatisieren: