Dynamisches DNS ist sehr hilfreich, um auf Ihr lokales Netzwerk zugreifen zu können, wenn Sie nicht zu Hause sind. Dieser Artikel zeigt, wie Sie Ihre porkbun.com DNS-Einträge verwalten und mit Hilfe von Home Assistant mit Ihrem lokalen Netzwerk synchronisieren können.
Es ist eine fantastische Idee, zu Hause eigene Cloud-Dienste einzurichten, die digitale Freiheit zu nutzen und die volle Kontrolle über die eigenen Daten zu haben. Aber um Ihre Cloud, Ihre Passwörter, Ihr Smarthome oder Ihre Automatisierungen verwalten zu können, muss Ihr kleiner Server in Form eines Raspberry Pi, Odroid oder eines ähnlichen Geräts von der Außenwelt aus erreichbar sein.
Wahrscheinlich aktualisiert Ihr Internetprovider Ihren DHCP-Lease einmal pro Tag und weist Ihrem Netzwerk eine neue IP-Adresse zu. Um ohne Rätselraten auf Ihr Netzwerk zugreifen zu können, ist es empfehlenswert, eine eigene Domain oder Subdomain zu haben, die auf diese Netzwerkadresse verweist. Ich zeige Ihnen, wie Sie die DNS-Einträge Ihrer bei porkbun.com registrierten Domain über Home Assistant und die Porkbun API aktualisieren können, und Ihre aktuelle IP zuzuordnen.
Natürlich gibt es viele Möglichkeiten, DNS-Einträge zu aktualisieren (ddclient, benutzerdefinierte Skripte, ...), aber ich habe mich für Home Assistant entschieden, weil ich die Änderungen leicht mit der Home Assistant-App oder sogar mit dem Telegram-Messenger verfolgen und überwachen kann. In diesem Artikel gehe ich davon aus, dass Sie bereits einen Home Assistant Dienst eingerichtet haben. Los geht's!
Porkbun API Vorbereitungen
Die porkbun API ist die einzige Möglichkeit, Ihre DNS-Einträge dynamisch zu aktualisieren, aber um sie nutzen zu können, müssen Sie diese aktivieren.
Um schließlich mit der API kommunizieren zu können, müssen Sie einen API-Schlüssel generieren. Zu Demonstrationszwecken habe ich die Seite API access besucht und ein API Schlüsselpaar mit dem API Key Title "test “ erstellt.
Bitte notieren Sie sich daher sowohl den API Key als auch den Secret Key. Sie werden im Anschluss nicht mehr angezeigt.
Das war's auch schon. Jetzt sind wir bereit für die Interaktion mit der API.
Mit der Porkbun API v3 einen Subdomain DNS Record aufsetzen
Zu Testzwecken erstellen wir eine test.YOUR_DOMAIN-Subdomain, die wir später mit unserer aktuellen IP-Adresse aktualisieren werden. Es gibt mehrere Möglichkeiten, dies zu erreichen: Entweder über die Weboberfläche und das Hinzufügen eines entsprechenden A-Eintrags oder über die API. Letzteres werde ich nun demonstrieren.
Die Porkbun API v3 Dokumentation hilft dabei, die passenden API Endpoints
und die zugehörigen Parameter zu finden, um erfolgreich Requests an die API verschicken zu können.
Erstellen Sie einen neuen A Record für eine Subdomain, indem Sie das folgende Curl-Skript über die Befehlszeile ausführen:
curl --header "Content-Type: application/json" \
--request POST \
--data '{
"apikey" : "<YOUR_API_KEY>",
"secretapikey" : "<YOUR_SECRET_KEY>",
"name" : "test",
"type" : "A",
"content" : "127.0.0.1",
"ttl" : "600"
}' \
https://porkbun.com/api/json/v3/dns/create/<YOUR_DOMAIN>
Vergessen Sie nicht, die API-Schlüssel und die Domain durch Ihre eigenen Daten zu ersetzen. In diesem Beispiel habe ich den DNS-Eintrag mit einer Loopback-Adresse (127.0.0.1) als Dummy ausgefüllt. Diese wird später durch Ihre Netzwerk-IP-Adresse ersetzt. Die Antwort auf die Anfrage sollte wie folgt aussehen:
{"status":"SUCCESS","id":NEW_PORKBUN_DNS_ID}
Um den neu erstellten Eintrag zu überprüfen, führen Sie entweder ein weiteres Curl-Skript aus, um die erforderlichen Informationen zu erhalten, oder sehen Sie mit Hilfe des Domain Management nach, ob ein Eintrag korrekt gesetzt wurde.
curl --header "Content-Type: application/json" \
--request POST \
--data '{
"apikey" : "<YOUR_API_KEY>",
"secretapikey" : "<YOUR_SECRET_KEY>"
}' https://porkbun.com/api/json/v3/dns/retrieve/<YOUR_DOMAIN>
Die Server-Antwort liegt im json-Array Format vor und sollte einen Eintrag mit einer NEW_PORKBUN_DNS_ID als Integer enthalten, die der ID der Server-Antwort der vorherigen Anfrage entspricht.
{"status":"SUCCESS","records":
[{
"id":"NEW_PORKBUN_DNS_ID",
"name":"test.YOUR_DOMAIN",
"type":"A",
"content":"127.0.0.1",
"ttl":"600",
"prio":"0",
"notes":null
}]
}
Großartig, wir haben nun einen DNS A Record für eine Subdomain mit Hilfe der Porkbun API v3 eingerichtet. Weiter so!
Einrichten der Home Assistant Sensoren
Wenn Sie einen Fritzbox-Router besitzen und verwenden - und ich gehe davon aus, dass Sie Home Assstant bereits in Ihrer lokalen Umgebung eingesetzt haben - erledigt eine Kombination aus Home Assistant REST-Befehlen und den AVM FRITZ!Box Tools die benötigten Aufgaben einwandfrei.
Option 1: Erhalten Sie Ihre IP-Änderungen über die AVM FRITZ!Box Tools
Um POST Anfragen stellen zu können, können wir die AVM FRITZ!Box Tools verwenden, um die externe IP unseres Netzwerks zu erhalten. Glücklicherweise verfügt das Plugin über eine Entität für diesen Zweck. Um die Entitäts-ID zu erhalten, navigieren Sie zu Einstellungen / Geräte & Dienste / Entitäten und suchen Sie nach 'external'.
Ihre Sensor ID ist sensor.fritz_box_7590_external_ip
.
Option 2: Erhalten Sie Ihre IP-Änderungen mit Hilfe eines RESTful Sensor
Wenn Sie keine Fritzbox besitzen, können Sie einen eigenen Sensor einrichten, der in einem bestimmten Intervall auf IP-Änderungen prüft. RESTful Sensoren sind besonders hilfreich, wenn Sie Operationen periodisch und ohne Auslöser ausführen müssen. Stellen Sie sich diese Sensoren als Prozessdämonen vor, die im Hintergrund laufen.
Wir werden einen RESTful Sensor einrichten, der alle 5 Minuten auf IP-Änderungen prüft und öffentliche Adressdienste nutzt, die von ipify.org bereitgestellt werden - eine Open-Source-API ohne Anfragebegrenzung. Vielen Dank, ipify.org, für diesen Service!
sensor:
- platform: rest
resource: "https://api.ipify.org/"
name: "ip_get"
scan_interval: 300
Fügen Sie den Codeschnipsel in Ihre configuration.yaml
ein und starten Sie Ihre Home Assistant-Software vollständig neu. Ein partieller Neustart reicht leider nicht aus.
Ihre Sensor ID ist sensor.ip_get
.
Erstellen des RESTful-Befehls für Home Assistant
Der Statuswert der Sensor ID ist der Wert, mit dem wir die Porkbun API füttern werden. Danach bereiten wir den REST-Befehl vor, um den entsprechenden DNS-Eintrag aktualisieren zu können. Wie Sie bereits wissen, wird Home Assistant über seine configuration.yaml
konfiguriert. Fügen Sie den folgenden Ausschnitt ein, und vergessen Sie nicht, die Variablen durch Ihre Daten zu ersetzen:
rest_command:
porkbun_update:
url: "https://porkbun.com/api/json/v3/dns/edit/<YOUR_DOMAIN>/<NEW_PORKBUN_DNS_ID>"
method: POST
# use either `sensor.fritz_box_7590_external_ip` or `sensor.ip_get` in your payload
payload: '{"apikey":"<YOUR_API_KEY>", "secretapikey":"<YOUR_SECRET_KEY>", "type":"A", "name":"test", "content":"{{ states("sensor.fritz_box_7590_external_ip") }}"}'
headers:
Content-Type: application/json
Bereitstellen der Home Assistant Automatisierung
Im nächsten Schritt werden wir eine Home Assistant Automatisierung aufbauen, die die Sensor-Entität auf Zustandsänderungen überprüft und bei Änderungen Updates an die porkbun API v3 sendet. Auf diese Weise senden wir nur dann Anfragen, wenn es notwendig ist.
Um die Automatisierung einzubinden, gehen Sie zu Settings / Automations & scenes, und initialisieren Sie eine neue Automatisierung, indem Sie auf die Schaltfläche CREATE AUTOMATION klicken. Wir fügen einen Entity-Status-Trigger hinzu, der die externe IPv4 überwacht und die POST-Anfrage an porkbun sendet, wenn der angegebene Status gültig ist. Manchmal kommt es vor, dass der Status von Home Assistant aufgrund von vorübergehenden Verbindungsengpässen irrtümlich eine negative Rückmeldung ausgibt. Das passiert zwar selten, aber ich habe es schon erlebt. Die Lösung besteht darin, eine bedingte Anweisung hinzuzufügen, bevor eine Anfrage gesendet wird.
Durch Klicken auf das Drei-Punkte-Menü und Edit in YAML können wir die YAML-Konfiguration der Automatisierung direkt einfügen.
# use either `sensor.fritz_box_7590_external_ip`
# or `sensor.ip_get` in your payload
alias: porkbun_update_your_domain
trigger:
- platform: state
entity_id:
- sensor.fritz_box_7590_external_ip
condition:
- alias: ip is valid
not:
- condition: state
entity_id: sensor.fritz_box_7590_external_ip
state: unavailable
- condition: state
entity_id: sensor.fritz_box_7590_external_ip
state: unknown
action:
- service: rest_command.porkbun_update
mode: single
Der Wechsel zwischen dem visuellen Editor und der YAML-Ansicht gibt uns große Flexibilität beim Testen und Ausführen von Teilen der Automatisierung. Sie können die Bedingung testen oder einfach die POST-Anfrage direkt senden.
Mein Fritzbox-Router ist so konfiguriert, dass er zwischen 6 und 7 Uhr morgens einen neuen Lease erstellt und die Automatisierung dann automatisch ausgeführt wird. Ein geschickter Schachzug!
Tipps an Experten: Wenn Sie einen Telegram Bot konfiguriert haben, können Sie sogar eine Benachrichtigung an den gewünschten Kanal senden. Ich empfehle dies - vor allem bei der Einführung und dem Testen neuer Automatisierungen - um sofort über Änderungen oder Fehlverhalten informiert zu sein.
# use either `sensor.fritz_box_7590_external_ip` or `sensor.ip_get` in your payload
action:
- service: rest_command.porkbun_update
- service: telegram_bot.send_message
data:
message: DNS update {{states('sensor.fritz_box_7590_external_ip')}} via hassio
Es ist an der Zeit, die Automatisierung zu testen. Drücken Sie die große Schaltfläche -> Run, oder warten Sie einfach, bis Ihr Provider Ihnen eine neue IP-Adresse zur Verfügung stellt.
Glückwunsch! Ihr Home Assistant verwaltet jetzt Ihre DNS-Anforderungen. Wunderbar!