Jednym ze sposobów na zsynchronizowanie „dynamicznego adresu IP” z DNS jest skorzystanie z usługi takiej jak Dyn lub NoIP, która udostępnia ich własne nazwy domenowe / nazwy domenowe do zakupu.
Jeśli jednak masz własną niestandardową nazwę domeny, której chcesz używać, możesz korzystać z usług DNS firmy NameSilo ( http://www.namesilo.com ) jako dostawcy DNS i poniżej skryptu Windows PowerShell wraz z zaplanowanym zadanie replikacji usługi Dyn / NoIP.
Zakładając, że korzystasz z systemu Windows, oto prosty skrypt, który możesz „zaplanować” za pomocą Harmonogramu zadań, aby uruchamiał się na StartUp / Logon, a następnie uruchamiał się co 6 godzin (w ten sposób maksymalny czas przestoju spowodowany zmianą adresu IP wynosi 6 godzin).
Zapisz poniższy skrypt w pliku o nazwie NameSiloDDNS.ps1
# NameSilo API Dynamic DNS
#Variables
param([string]$APIkey=$(throw "APIKey is required"), [string]$domain=$(throw "Domain is required"), [string]$record)
###Code - Do not edit below this line
# Gather data about the DNS entries in the domain
$listdomains = Invoke-RestMethod -Uri "https://www.namesilo.com/apibatch/dnsListRecords?version=1&type=xml&key=$APIkey&domain=$domain"
$CurrentIP = $listdomains.namesilo.request.ip
if ($record) {
$RecordIP = ($listdomains.namesilo.reply.resource_record|where {$_.host -eq "$record.$domain" -and $_.type -eq "A"}).value
$RecordID = ($listdomains.namesilo.reply.resource_record|where {$_.host -eq "$record.$domain" -and $_.type -eq "A"}).record_id
} else {
$RecordIP = ($listdomains.namesilo.reply.resource_record|where {$_.host -eq "$domain" -and $_.type -eq "A"}).value
$RecordID = ($listdomains.namesilo.reply.resource_record|where {$_.host -eq "$domain" -and $_.type -eq "A"}).record_id
}
$listdomains.namesilo.reply
#Write-Host "CurrentIP $CurrentIP, RecordIP $RecordIP, RecordID $RecordID"
# If the current IP address is not the same as the one in the record it updates it
Write-Host "https://www.namesilo.com/apibatch/dnsUpdateRecord?version=1&type=xml&key=$APIkey&domain=$domain&rrid=$RecordID&rrhost=$record&rrvalue=$CurrentIP&rrttl=3600"
if ($CurrentIP -ne $RecordIP){
if ($record) {
Write-Host "Updating $record.$domain with IP $CurrentIP"
} else {
Write-Host "Updating $domain with IP $CurrentIP"
}
$update = Invoke-RestMethod -Uri "https://www.namesilo.com/apibatch/dnsUpdateRecord?version=1&type=xml&key=$APIkey&domain=$domain&rrid=$RecordID&rrhost=$record&rrvalue=$CurrentIP&rrttl=3600"
$update.namesilo.reply
} else {
Write-Host "No need to update $record.$domain, IP $CurrentIP upto date"
}
Następnie zapisz poniższy skrypt w pliku o nazwie UpdateDDNSIPv4.bat
.
PowerShell -ExecutionPolicy Bypass .\NameSiloDDNS.ps1 <NameSilo_API_Key> somedomain.com
PowerShell -ExecutionPolicy Bypass .\NameSiloDDNS.ps1 <NameSilo_API_Key> somedomain.com subdomain
Trzymaj oba pliki w tym samym katalogu. UpdateDDNSIPv4.bat
jest plikiem wsadowym, który powinien być wywoływany przez Harmonogram zadań w powtarzającym się zadaniu.
Kilka rzeczy, na które należy zwrócić uwagę, musisz zalogować się do swojego konta NameSilo i w API Manager -> Wygeneruj klucz API, który musisz wprowadzić w powyższym skrypcie wsadowym, aby go zastąpić <NameSilo_API_Key>
. Tego skryptu można użyć do aktualizacji A
rekordów DNS dla głównej domeny (np. somedomain.com
), A także dla subdomen (np subdomain
.). Możesz utworzyć jeden wiersz dla każdej domeny / subdomeny, którą chcesz zaktualizować.
Ten skrypt automatycznie znajdzie „Publiczny adres IP”, a następnie zaktualizuje twoje rekordy NameSilo DNS A.
Możesz znaleźć BASH równoważnik tego skryptu tutaj: https://github.com/pztop/namesilo_ddns
Odpowiednik skryptu w języku Python można również znaleźć na stronie :
https://github.com/rbenji/DynamicDNS-for-NameSilo
Ten skrypt został pobrany i dostosowany z http://www.forkrobotics.com/2014/10/dynamic-dns-w--amesamesilo-and-powershell/
Mam nadzieję że to pomoże