cloudflare_dyndns
Это старая версия документа!
cloudflare_dyndns.ps1
# Cloudflare DynDNS Script for Windows
# Конфигурация
$ZoneID = "ezvpLi0aD6mkQRaDc84SFuKbwp78PxvoAwBmKJwQSXMIktXhswigkjc0BEuvdS0Q"
$ApiToken = "ezvpLi0aD6mh+kdo84IL1gG8u1s+WdJ+q+Jxm8E+rae1RSAuidi8pNi98cgC5SI13y8UGLqW29U="
$RecordName = "JaYRnJAoKlFP/Nk1T9PAbZYYk16j6SrF"
$RecordType = "A"
# Функция для получения внешнего IP
function Get-ExternalIP {
try {
$ip = (Invoke-RestMethod -Uri "http://checkip.amazonaws.com" -TimeoutSec 10).Trim()
return $ip
}
catch {
try {
$ip = (Invoke-RestMethod -Uri "http://api.ipify.org" -TimeoutSec 10).Trim()
return $ip
}
catch {
Write-Error "Не удалось получить внешний IP"
exit 1
}
}
}
# Функция для работы с Cloudflare API
function Update-CloudflareDNS {
param(
[string]$ZoneID,
[string]$ApiToken,
[string]$RecordName,
[string]$RecordType,
[string]$NewIP
)
$headers = @{
"Authorization" = "Bearer $ApiToken"
"Content-Type" = "application/json"
}
# Получаем информацию о текущей записи
$getUrl = "https://api.cloudflare.com/client/v4/zones/$ZoneID/dns_records?type=$RecordType&name=$RecordName"
try {
$response = Invoke-RestMethod -Uri $getUrl -Headers $headers -Method GET
}
catch {
Write-Error "Ошибка при получении данных из Cloudflare: $_"
return $false
}
if ($response.success -and $response.result.Count -gt 0) {
$record = $response.result[0]
$recordID = $record.id
$currentIP = $record.content
Write-Host "Текущий IP в Cloudflare: $currentIP"
Write-Host "Новый внешний IP: $NewIP"
if ($currentIP -eq $NewIP) {
Write-Host "IP не изменился. Обновление не требуется."
return $true
}
# Обновляем запись
$updateUrl = "https://api.cloudflare.com/client/v4/zones/$ZoneID/dns_records/$recordID"
$body = @{
type = $RecordType
name = $RecordName
content = $NewIP
ttl = 120
proxied = $false
} | ConvertTo-Json
try {
$updateResponse = Invoke-RestMethod -Uri $updateUrl -Headers $headers -Method PUT -Body $body
if ($updateResponse.success) {
Write-Host "Запись успешно обновлена в Cloudflare!"
return $true
} else {
Write-Error "Ошибка Cloudflare API: $($updateResponse.errors)"
return $false
}
}
catch {
Write-Error "Ошибка при обновлении записи: $_"
return $false
}
} else {
Write-Error "DNS запись не найдена в Cloudflare"
return $false
}
}
# Основная логика
Write-Host "Проверка обновления DynDNS Cloudflare..."
Write-Host "Запись: $RecordName"
Write-Host "Время: $(Get-Date)"
$externalIP = Get-ExternalIP
Write-Host "Внешний IP определен: $externalIP"
$result = Update-CloudflareDNS -ZoneID $ZoneID -ApiToken $ApiToken -RecordName $RecordName -RecordType $RecordType -NewIP $externalIP
if ($result) {
Write-Host "Скрипт выполнен успешно"
} else {
Write-Host "Скрипт завершился с ошибками"
exit 1
}
cloudflare_dyndns.bat @echo off cd /d "C:\path\to\script\" powershell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -File "cloudflare_dyndns.ps1"
cloudflare_dyndns.1759336778.txt.gz · Последнее изменение: (внешнее изменение)
