Один из способов синхронизировать ваш «динамический IP-адрес» с вашим DNS-сервером - использовать такие службы, как Dyn или NoIP, которые предоставляют свои собственные доменные имена / доменные имена для покупки.
Однако если у вас есть собственное доменное имя, которое вы хотели бы использовать, вы можете использовать службы DNS от NameSilo (http://www.namesilo.com) в качестве вашего DNS-провайдера и скрипт Windows PowerShill ниже вместе с запланированным задача для репликации службы Dyn/NoIP.
Предполагая, что вы используете Windows, вот простой сценарий, который вы можете "запланировать" с помощью Task Scheduler для запуска при запуске / входе в систему, а затем перезапускать каждые 6 часов (таким образом, максимальное время простоя из-за изменения IP-адреса составляет 6 часов).
Сохраните приведенный ниже скрипт в файл с именем 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"
}
Затем сохраните скрипт ниже в файле с именем UpdateDDNSIPv4.bat
.
PowerShell -ExecutionPolicy Bypass .\NameSiloDDNS.ps1 <NameSilo_API_Key> somedomain.com
PowerShell -ExecutionPolicy Bypass .\NameSiloDDNS.ps1 <NameSilo_API_Key> somedomain.com subdomain
Храните оба файла в одном каталоге. UpdateDDNSIPv4.bat
- это пакетный файл, который должен вызываться планировщиком задач в вашей повторяющейся задаче.
Пару вещей, на которые стоит обратить внимание, вам нужно будет войти в свою учетную запись NameSilo и в разделе «Менеджер API» -> «Сгенерировать ключ API», который необходимо ввести в приведенном выше пакетном сценарии для замены <NameSilo_API_Key>
.
Этот сценарий можно использовать для обновления записей DNS A
для основного домена (например, somedomain.com
), а также для ваших поддоменов (например, subdomain
). Вы можете создать одну строку для каждого домена / субдомена, который вы хотите обновить.
Этот сценарий автоматически найдет ваш «общедоступный IP-адрес», а затем обновит ваши DNS-записи NameSilo.
Вы можете найти BASH-эквивалент этого скрипта здесь: https://github.com/pztop/namesilo_ddns
Эквивалент скрипта на Python также можно найти по адресу:https://github.com/rbenji/DynamicDNS-for-NameSilo.
Этот сценарий был взят и настроен с http://www.forkrobotics.com/2014/10/dynamic-dns-with-namesilo-and-powershell/
Надеюсь это поможет