PowerShell: domena w OVH i zmiana rekordu strefy DNS z użyciem DynHost

Oprator OVH oferuje usługę „dynamicznego DNS” tzw DynHost dla swoich klientów których domeny są zarządzane przez tego operatora. Dzięki tej funkcji możemy automatycznie aktualizować adres IP przypisany do domeny lub subdomeny używając prostego API. Funkcja ta jest niezwykle istotna i przydatne, gdy nasz dostawca internetowy przydziela zmienne adresy IP a nasze usługi są ściłe od adresu IP zależne. W jaki sposób aktualizować rekord A domeny z użyciem PowerShell? Jak używać DynDNS w OVH z PowerShell? Jak zmienić rekord DynDNS z użyciem skryptu PowerShell?

Zaczynamy od początku, logujemy się do panelu ovh, wchodzimy do strefy DNS naszej domeny i sprawdzamy jak wygląda jej stan – rekord A jest nie aktualny nasze IP uległo zmianie. Do tej pory musieliśmy ręcznie zmieniać tą wartość – co było dość uciążliwe i łączyło się czesto z niedostepnością usługi – usuwamy rekord A

następnie przechodzimy na zakładkę DynHost i klikamy Manage access

klikamy Create a username aby utworzyć użytkownika API

wprowadzamy nazwe użytkownika myip (suffiks użytkownika mamy utworzony przez OVH), w naszym wypadku chcemy aby zarządzać całą domeną (w tym ewentualnymi subdomenami) wprowadzamy więc * w polu sub-domain na sam koniec wprowadzamy i potwierdzamy hasło.
UWAGA: hasło które tutaj wprowadzamy nie powinno mieć znaków / @ ? = \ „ z tego względu, że będzie one potem wykorzystywane jako fragment adresu URL a takie znaki będą powodować problemy:

Po potwierdzeniu na liście pojawi się nowo utworzone konto – wracamy do poprzedniej strony ( <– Back to previous page)

z głównej zakładki DynHost klikamy Add a DynHost record

wprowadzamy wartość rekordu A (czyli nasz aktualny adres IP) i potwierdzamy:

pojawi się stosowny wpis:

W strefie DNS domeny będzie miał on wartość A o TTL (Time To Live) równym 60 (czyli 60sekund. UWAGA w OVH każdy rekord A lub AAAA z TTL trwającym 60 sekund jest traktowany jako DynHost.

Mamy aktualny rekord A dla naszej domeny – nasza usługa w tej domenie odpowiada poprawnie po wywołaniu jej z użyciem adresu demomojejfirmy.pl

Mija pewien okres czasu i nasz dostawca postanowił zminić nam adres IP – do tej pory musieliśmy ręcznie aktualizować rekord A, w tej chwili DynHost pozwoli nam to wykonać z użyciem API i rządania web, nie będziemy musieli logować się do panelu OVH:

Jak to zrobić – dokumentacja mówi o rządaniu w postaci:

https://dns.eu.ovhapis.com/nic/update?system=dyndns&hostname=$HOSTNAME&myip=$IP

z użyciem parametrów:

$HOSTNAMEdomena lub subdomena, której dotyczy modyfikacja rekordu
$IPnowy docelowy adres IP (IPv4/IPv6)

W naszym przypadku całość adresu dla rządania będzie miała postać:

https://dns.eu.ovhapis.com/nic/update?system=dyndns&hostname=demomojejfirmy.pl&myip=186.74.22.53

gdzie 186.74.22.53 to nowy adres IP

Sprawdzamy i po wklejeniu takiego adresu do przeglądarki otrzymamy prośbe o zalogowanie się poświadczeniami które utworzyliśmy wcześniej w panelu ovh:

adres IP jest inny niż obecny wpis w DNS otrzymujemy więc odpwiedź z DynHost, o treści good 186.74.22.53

Sprawdzamy działanie naszej usługi z użyciem domeny – działa! Dla formalności sprawdźmy jak to wygląda od strony panelu OVH:

rekord został podmieniony! I super, i fajnie ale gdzie ta automatyzacja – przecież musieliśmy podać login i hasło (inny niż do panelu), wklejić je do przeglądarki. W tym momencie przychodzi czas na skrypt PowerShell, którego założenia są dość proste:

  • pobieramy obecne IP jakie dał nam operator
  • wysylamy polecnie do DynHost z użyciem naszych poświadczeń dla tej usługi

Zaczynamy od uzyskania obecnego adresu IP użyjemy do tego usługi ipinfo.io należy pamiętać, że przedstawia ona adres jakim prezenutujemy się od strony operatora internetowego. Dlatego pamiętajcie o tym aby skrypt uruchamiać na serwerze który świadczy uslugę powiązaną z naszą domeną.

UWAGA: skrypt ma wpisane na stałe poświadczenia dla DynHost – co może stanowić pewien problem dla „bezpiecznika” – przypominam jednak, że znamy sprawdzony posób jak to zmiebnić.

Skrypt poniżej (znajdziecie go również w naszym repozytorium github)

#OVH DynHost update with PowerShell by sprawdzone.it

#PowerSHell script to get actual IP and update DNS record on domain handled by ovh.com. It uses the DynHost API

#get my actual IP address from ipinfo.io
$ip = (Invoke-RestMethod http://ipinfo.io/json).ip

#my domain in OVH
$domain = "demomojejfirmy.pl"

#my user and password for DynHost
$username = "demomojejfirmy.pl-myip"
$password = "NieZbytTrudneHasloMam"

#create objects - webclient and credentials
$webclient = New-Object system.Net.WebClient;
$credsCache = new-object System.Net.CredentialCache
$creds = new-object System.Net.NetworkCredential($username, $password)

#login to api using objects
$credsCache.Add("https://${username}:${password}@www.ovh.com/nic/update?myip=${ip}&hostname=${domain}&system=dyndns", "Basic", $creds)
$webclient.Credentials = $credsCache
$url="https://${username}:${password}@www.ovh.com/nic/update?myip=${ip}&hostname=${domain}&system=dyndns"
write-host $url
$webclient.downloadString($url)

w efekcie wykonania skryptu pojawi się odpowiedź good i adres IP (tak samo jak miało to miejsce wcześniej z poziomu przeglądarki internetowej)

UWAGA: api sprawdza czy adres uległ zmianie w stosunku do obecnego rekordu DNS – jeżeli nie uległ zmianie zwracana jest wartość nochg i adres IP

W ten właśnie sposób zautomatyzowaliśmy aktualizacje rekordu DNS a nasz nowy adres IP u operatora OVH – wystarczy już tylko ustawić harmonogram zadań z naszym skryptem i niech sprawdza adres IP co 15 minut a w razie jego zmiany ordazu zmienia rekord DNS.


Jeżeli mój wpis Ci się spodobał, pomógł w pracy? Chcesz mnie wspierać? Postaw kawę! To dzięki waszemu wsparciu nie ma reklam! Poniżej kod QR do płatności który jest jednocześnie linkiem do PayPal.

Obrazek posiada pusty atrybut alt; plik o nazwie Kod-QR.png