čtvrtek 15. února 2018

Jak Raspberry PI s dynamickou IP adresou přiřadit doménové jméno

Ať je důvodem to, že se někteří členové domácnosti nekamarádí s IP adresami a jejich zjišťováním z ARP tabulek, obyčená pohodlnost, nebo něco úplně jiného, hodí se mít Raspberry PI nebo jiné zařízení (třebaže umístěné v privátní síti) dostupné prostřednictvím doménového jména.

Použít se dá třeba DuckDNS, což je zdarma dostupná dynamická DNS služba, která vybranému doménovému jménu prostřednictvím jednoduchého API přiřazuje IP adresy.

Po přihlášení do DuckDNS si zvolíme doménové jméno, které bude přístupné jako JMENO.duckdns.org a získáme API token.

Návod na DuckDNS webu vybízí k aktualizaci IP adresy z cronu, ale na operačních systémech používajících Systemd (např. Raspbian a jeho klony) existuje elegantnější řešení, které prostřednictvím Systemd zajistí update IP adresy pokaždé, když se zařízení připojí do sítě.

Vytvoříme Systemd unit v souboru /etc/systemd/system/duckdns.service například příkazem systemctl edit --full --force duckdns.service:

[Service]
Type=oneshot
ExecStart=/bin/bash -c "curl --silent https://www.duckdns.org/update?domains=JMENO\\&token=TOKEN\\&verbose=true\\&ip=$(hostname -I)"
RemainAfterExit=yes

[Unit]
Wants=network-online.target
After=network-online.target

[Install]
WantedBy=multi-user.target

Funkčnost ověříme pomocí:
systemctl restart duckdns && systemctl status duckdns
Pokud výstup obsahuje OK, je vše v pořádku, KO značí problém.

Povolíme spouštění:
systemctl enable duckdns

Na závěr zajistíme spouštění network-online.target po té, co je k dispozici síť, podle správce připojení.
Raspbian a spol:
systemctl enable connman-wait-for-network.service
Ubuntu a spol:
systemctl enable NetworkManager-wait-online.service
Jinak:
systemctl enable systemd-networkd-wait-online.service

Pokud náhodou nepoužijeme k editaci unitu systemctl edit, je nutné změny aplikovat pomocí příkazu systemctl daemon-reload

Pro umocnění efektu můžeme ještě DNS záznam z vlastní domény JMENO.example.com nasměrovat jako CNAME na JMENO.duckdns.org.