為解決DDNS更新慢的問題,直接通過cloudflare的API來更新AAAA記錄
將下面代碼保存成cloudflare_ipv6_update.ps1
$config = @{} $config.zone_id = "11111111" #填寫CF域名編號 $config.auth_email = "www@firadio.com" #填寫CF賬號 $config.auth_key = "11111111" #填寫CF密鑰 $config.delay = 10 [System.Net.ServicePointManager]::SecurityProtocol=[System.Net.SecurityProtocolType]::Tls12 $dot=@{} $dot.linemax = 120 $dot.current = 0 Function PrintDot(){ $char = "." $dot.current++ if ($dot.current -eq 1) { $text = ([String](Get-Date -Format 'yyyy-MM-dd HH:mm:ss')) + " " Write-Host -NoNewline $text } if ($dot.current -ge $dot.linemax) { $dot.current = 0 Write-Host $char } else { Write-Host -NoNewline $char } } Function PrintError($text) { Write-Host Write-Host -NoNewline ([String](Get-Date -Format 'yyyy-MM-dd HH:mm:ss')) $text } while (1) { $Uri = "http://ipv6.lookup.test-ipv6.com/ip/" $ret = (Invoke-WebRequest -Uri $Uri) if ($ret.StatusCode -ne 200) { PrintError "IP獲取失敗,延遲 $($config.delay) 秒" Start-Sleep -Seconds $config.delay continue } $lookup_ipv6 = ConvertFrom-Json $ret.Content $parttern="^([a-f0-9]{1,4}(:[a-f0-9]{1,4}){7}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){0,7}::[a-f0-9]{0,4}(:[a-f0-9]{1,4}){0,7})$" if ($lookup_ipv6.ip -inotmatch $parttern) { PrintError "獲取的IP格式錯誤,延遲 $($config.delay) 秒" $lookup_ipv6 Start-Sleep -Seconds $config.delay continue } $Uri = "https://api.cloudflare.com/client/v4/zones/" + $config.zone_id + "/dns_records?type=AAAA" $Headers = @{} $Headers."Content-Type" = "application/json" $Headers."X-Auth-Email" = $config.auth_email $Headers."X-Auth-Key" = $config.auth_key $ret = (Invoke-WebRequest -Uri $Uri -Headers $Headers) if ($ret.StatusCode -ne 200) { PrintError "域名記錄獲取失敗,延遲 $($config.delay) 秒" Start-Sleep -Seconds $config.delay continue } $dns_record_1 = ConvertFrom-Json $ret.Content $ret = @{} if ($dns_record_1.result.content -eq $lookup_ipv6.ip) { PrintDot Start-Sleep -Seconds $config.delay continue } $Uri = "https://api.cloudflare.com/client/v4/zones/" + $config.zone_id + "/dns_records/" + $dns_record_1.result.id $Json = @{} $Json.type = $dns_record_1.result.type $Json.name = $dns_record_1.result.name $Json.content = $lookup_ipv6.ip $Json.proxied = [Bool]1 $Body = ConvertTo-Json $Json $Body $ret = (Invoke-WebRequest -Method Put -Uri $Uri -Headers $Headers -Body $Body) Start-Sleep -Seconds $config.delay }