8/20/2025
bash 更新ipv6地址上报cf
#!/bin/bash
CF_API_TOKEN="你的token"
CF_ZONE_ID="你的zone id"
CF_RECORD_ID="你的record id"
CF_RECORD_NAME="ipv6.example.com"
LOGFILE="$HOME/ipv6_cf_update.log"
LAST_IP_FILE="$HOME/.last_ipv6"
curl -X GET "https://api.cloudflare.com/client/v4/zones/$CF_ZONE_ID/dns_records" -H "Authorization: Bearer $CF_API_TOKEN" -H "Content-Type: application/json"
while true; do
# 获取当前公网 IPv6
CURRENT_IP=$(curl -6 -s 6.ipw.cn)
if [[ -z "$CURRENT_IP" ]]; then
echo "$(date): 无法获取 IPv6" >> "$LOGFILE"
sleep 300
continue
fi
echo "$CURRENT_IP: IPv6"
LAST_IP=$(cat "$LAST_IP_FILE" 2>/dev/null)
if [[ "$CURRENT_IP" != "$LAST_IP" ]]; then
echo "$(date): IPv6 变化 $LAST_IP -> $CURRENT_IP" >> "$LOGFILE"
# 更新到 Cloudflare
RESPONSE=$(curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$CF_ZONE_ID/dns_records/$CF_RECORD_ID" \
-H "Authorization: Bearer $CF_API_TOKEN" \
-H "Content-Type: application/json" \
--data "{\"type\":\"AAAA\",\"name\":\"$CF_RECORD_NAME\",\"content\":\"$CURRENT_IP\",\"ttl\":120,\"proxied\":false}")
if echo "$RESPONSE" | grep -q "\"success\":true"; then
echo "$(date): Cloudflare 更新成功 $CURRENT_IP" >> "$LOGFILE"
echo "$CURRENT_IP" > "$LAST_IP_FILE"
else
echo "$(date): 更新失败 $RESPONSE" >> "$LOGFILE"
fi
fi
# 每5分钟检查一次
sleep 300
done
--------------------windows--------------------
# ================================
# Cloudflare IPv6 自动更新脚本
# 适用:Windows PowerShell
# ================================
# 配置参数
$CF_API_TOKEN = "_UBmS5tXwFr__VdhWT"
$CF_ZONE_ID = ""
$CF_RECORD_ID = ""
$CF_RECORD_NAME = "mac.cccccc.me"
$LOGFILE = "$env:USERPROFILE\ipv6_cf_update.log"
$LAST_IP_FILE = "$env:USERPROFILE\.last_ipv6"
# 先打印出所有 DNS 记录(调试用,可以注释掉)
#Invoke-RestMethod -Uri "https://api.cloudflare.com/client/v4/zones/$CF_ZONE_ID/dns_records" -Headers @{Authorization="Bearer $CF_API_TOKEN"; "Content-Type"="application/json"} -Method GET
try {
# 获取当前公网 IPv6
$CURRENT_IP = (Invoke-RestMethod -Uri "https://6.ipw.cn" -UseBasicParsing) -replace '[^\w:]+', ''
if ([string]::IsNullOrEmpty($CURRENT_IP)) {
Add-Content -Path $LOGFILE -Value "$(Get-Date): 无法获取 IPv6"
#Start-Sleep -Seconds 300
return
}
if (Test-Path $LAST_IP_FILE) {
$LAST_IP = (Get-Content $LAST_IP_FILE -Raw).Trim("`r`n`t ")
} else {
$LAST_IP = ""
}
Add-Content -Path $LOGFILE -Value "${CURRENT_IP}:${LAST_IP} IPv6"
if ($CURRENT_IP -ne $LAST_IP) {
Add-Content -Path $LOGFILE -Value "$(Get-Date): IPv6 变化 $LAST_IP -> $CURRENT_IP"
# 更新到 Cloudflare
$body = @{
type = "AAAA"
name = $CF_RECORD_NAME
content = $CURRENT_IP
ttl = 120
proxied = $false
} | ConvertTo-Json
$RESPONSE = Invoke-RestMethod -Uri "https://api.cloudflare.com/client/v4/zones/$CF_ZONE_ID/dns_records/$CF_RECORD_ID" `
-Headers @{Authorization="Bearer $CF_API_TOKEN"; "Content-Type"="application/json"} `
-Method PUT -Body $body
if ($RESPONSE.success -eq $true) {
Add-Content -Path $LOGFILE -Value "$(Get-Date): Cloudflare 更新成功 $CURRENT_IP"
Set-Content -Path $LAST_IP_FILE -Value $CURRENT_IP
} else {
Add-Content -Path $LOGFILE -Value "$(Get-Date): 更新失败 $($RESPONSE | ConvertTo-Json -Compress)"
}
}
}
catch {
Add-Content -Path $LOGFILE -Value "$(Get-Date): 脚本错误 $_"
}
想要 开机自启:
打开 Windows 的 任务计划程序 (Task Scheduler)
创建一个新任务,选择
开机时触发动作里填:
powershell.exe -ExecutionPolicy Bypass -File "C:\Users\你的用户名\ipv6_cf_update.ps1"