cloudflare_dyndns
Это старая версия документа!
Проверка API-токена
curl.exe "https://api.cloudflare.com/client/v4/user/tokens/permission_groups" --request GET --header "Authorization: Bearer FyqTNMl5JiZf1q77v275VgtQpo2Uh4fqdnYisugL9wSReadZ/Q8YAM6jIK7rvLYO+xOTb85Bf3E="
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:\Users\shs\Documents\" powershell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -File "cloudflare_dyndns.ps1"
homeip_add_task.ps1
homeip_add_task.ps1
$TaskName = "Update Home IP Every 15 Minutes"
$ScriptPath = "C:\Users\shs\Documents\cloudflare_dyndns.vbs" # Укажите полный путь к вашему скрипту
$LogPath = "c:\temp\cloudflare_dyndns-log.txt" # Путь для лог-файла
# Создание действия с параметрами для скрытого выполнения
$Action = New-ScheduledTaskAction `
-Execute "wscript.exe" `
-Argument "$ScriptPath"
# Создание триггера (каждые 15 минут)
$Trigger = New-ScheduledTaskTrigger `
-Once `
-At (Get-Date) `
-RepetitionInterval (New-TimeSpan -Minutes 15)
# Настройки задачи - ВАЖНО: добавляем скрытое выполнение
$Settings = New-ScheduledTaskSettingsSet `
-AllowStartIfOnBatteries `
-DontStopIfGoingOnBatteries `
-StartWhenAvailable `
-RestartCount 3 `
-RestartInterval (New-TimeSpan -Minutes 1) `
-Hidden # Это ключевой параметр!
# Регистрация задачи
Register-ScheduledTask `
-TaskName $TaskName `
-Action $Action `
-Trigger $Trigger `
-Settings $Settings `
-RunLevel Highest `
-Description "Автоматическое обновление домашнего IP-адреса Cloudflare DDNS"
Write-Host "Задача `"$TaskName`" успешно создана!" -ForegroundColor Green
cloudflare_dyndns.1759337802.txt.gz · Последнее изменение: (внешнее изменение)
