找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888广告投放联系QQ68610888
glinet
查看: 1583|回复: 7

梅林固件cloudflare DDNS自动同步IP脚本

[复制链接]
发表于 2025-10-14 18:27 | 显示全部楼层 |阅读模式
本帖最后由 jc579 于 2025-11-27 23:12 编辑

由于华硕新版固件路由器自带的DDNS:asuscomm.com用不了了。现在改为同步到自己的域名,一个脚本就搞定了。

操作步骤:
1、ssh连接路由器,创建同步脚本 /jffs/scripts/services-start /jffs/scripts/ddns_cf.sh
2、给脚本添加可执行权限:chmod +x /jffs/scripts/services-start /jffs/scripts/ddns_cf.sh

脚本说明:
/jffs/scripts/services-start
该脚本默认每30分钟执行一次,可自行修改执行时间
  1. #!/bin/sh
  2. cru a ddns_cf "*/30 * * * * /jffs/scripts/ddns_cf.sh"
复制代码

/jffs/scripts/ddns_cf.sh:
1、api_token:访问cloudflare页面https://dash.cloudflare.com/profile/api-tokens,没有就点创建令牌(注意不是下面的Global API Key,是上面的API 令牌)
2、zone_name:填写自己的域名,如:banana.com
3、record_name:填写自己的域名的DNS 记录,如:apple.banana.com
  1. #!/bin/sh
  2. # Cloudflare DDNS 更新脚本
  3. # 支持动态公网 IPv4,自动缓存

  4. api_token="XXX"
  5. zone_name="XXX.xyz"
  6. record_name="XXX.XXX.xyz"
  7. cache_file="/jffs/scripts/ddns_cache.txt"

  8. log() {
  9.     logger -t "DDNS" "$*"
  10. }

  11. # -------- 获取公网 IPv4 --------
  12. get_ipv4() {
  13.     # 本地接口优先
  14.     ip=$(nvram get wan0_ipaddr 2>/dev/null)
  15.     case "$ip" in
  16.         10.*|172.1[6-9].*|172.2[0-9].*|172.3[0-1].*|192.168.*|100.64.*) ip="";;
  17.     esac

  18.     # 如果本地未获取,则轮询外部 API
  19.     if [ -z "$ip" ]; then
  20.         for url in https://v4.ipip.net https://api-ipv4.ip.sb/ip http://ipv4.icanhazip.com; do
  21.             ip=$(curl -fs --max-time 5 "$url" 2>/dev/null | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}')
  22.             if [ -n "$ip" ]; then
  23.                 break
  24.             fi
  25.         done
  26.     fi

  27.     echo "$ip"
  28. }

  29. current_ip=$(get_ipv4)
  30. if [ -z "$current_ip" ]; then
  31.     log "无法获取公网IP"
  32.     exit 1
  33. fi
  34. log "当前公网IP: $current_ip"

  35. # -------- 读取缓存 --------
  36. if [ -f "$cache_file" ]; then
  37.     . "$cache_file"
  38. fi

  39. if [ "$current_ip" = "$cached_ip" ]; then
  40.     log "IP 未变化 ($current_ip),跳过更新"
  41.     exit 0
  42. fi

  43. # -------- 获取 zone_id 和 record_id --------
  44. get_ids() {
  45.     zone_id=$(curl -fs -X GET "https://api.cloudflare.com/client/v4/zones?name=$zone_name" \
  46.         -H "Authorization: Bearer $api_token" \
  47.         -H "Content-Type: application/json" \
  48.         | jq -r '.result[0].id')

  49.     if [ -z "$zone_id" ] || [ "$zone_id" = "null" ]; then
  50.         return 1
  51.     fi

  52.     record_id=$(curl -fs -X GET "https://api.cloudflare.com/client/v4/zones/$zone_id/dns_records?name=$record_name" \
  53.         -H "Authorization: Bearer $api_token" \
  54.         -H "Content-Type: application/json" \
  55.         | jq -r '.result[0].id')

  56.     if [ -z "$record_id" ] || [ "$record_id" = "null" ]; then
  57.         return 1
  58.     fi
  59. }

  60. # -------- 首次运行或缓存无效 --------
  61. if [ -z "$zone_id" ] || [ -z "$record_id" ]; then
  62.     log "首次运行或缓存无效,获取 Cloudflare zone/record ID..."
  63.     if ! get_ids; then
  64.         log "获取 zone/record ID 失败"
  65.         exit 1
  66.     fi
  67. fi

  68. # -------- 更新 DNS --------
  69. update_dns() {
  70.     response=$(curl -fs -X PUT "https://api.cloudflare.com/client/v4/zones/$zone_id/dns_records/$record_id" \
  71.         -H "Authorization: Bearer $api_token" \
  72.         -H "Content-Type: application/json" \
  73.         --data "{"type":"A","name":"$record_name","content":"$current_ip","ttl":1,"proxied":false}")

  74.     success=$(echo "$response" | jq -r '.success')
  75.     if [ "$success" = "true" ]; then
  76.         return 0
  77.     else
  78.         return 1
  79.     fi
  80. }

  81. if update_dns; then
  82.     log "DDNS 更新成功: $record_name -> $current_ip"
  83. else
  84.     log "更新失败,请检查 API Token 或域名配置"
  85.     exit 1
  86. fi

  87. # -------- 更新缓存 --------
  88. cat > "$cache_file" <<EOF
  89. cached_ip=$current_ip
  90. zone_id=$zone_id
  91. record_id=$record_id
  92. EOF
  93. log "缓存已更新"
复制代码



只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
发表于 2025-10-15 08:45 | 显示全部楼层
CFDDNS 设置以后无法提交保存  插件假死现象 求注册方案

点评

你说的是插件市场里面的插件吗,这个是纯后台脚本的形式,只用手动设置自己的token和域名相关信息就可以自动执行了,不存在卡死  详情 回复 发表于 2025-10-15 19:04
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-10-15 19:04 | 显示全部楼层
KKF1 发表于 2025-10-15 08:45
CFDDNS 设置以后无法提交保存  插件假死现象 求注册方案

你说的是插件市场里面的插件吗,这个是纯后台脚本的形式,只用手动设置自己的token和域名相关信息就可以自动执行了,不存在卡死

点评

#!/bin/sh cru a ddns_cf "*/30 * * * * /jffs/scripts/DDNS_cloudflare.sh" 这个代码需要改 *****部分么?  详情 回复 发表于 2025-10-15 21:53
那先试试你这个脚本,CFDDSN小插件先不管他了  详情 回复 发表于 2025-10-15 21:15
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复 支持 反对

使用道具 举报

发表于 2025-10-15 21:15 | 显示全部楼层
jc579 发表于 2025-10-15 19:04
你说的是插件市场里面的插件吗,这个是纯后台脚本的形式,只用手动设置自己的token和域名相关信息就可以 ...

那先试试你这个脚本,CFDDSN小插件先不管他了
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复 支持 反对

使用道具 举报

发表于 2025-10-15 21:53 | 显示全部楼层
jc579 发表于 2025-10-15 19:04
你说的是插件市场里面的插件吗,这个是纯后台脚本的形式,只用手动设置自己的token和域名相关信息就可以 ...

#!/bin/sh
cru a ddns_cf "*/30 * * * * /jffs/scripts/DDNS_cloudflare.sh"
这个代码需要改 *****部分么?

点评

不需要,这是个cron表达式,*号代表任意,第二位是分钟,/30表示每30分钟  详情 回复 发表于 2025-10-15 23:00
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复 支持 反对

使用道具 举报

发表于 2025-10-15 22:02 | 显示全部楼层
改完了 还是没有CF cloudflare

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

点评

你得问这个插件的作者吧,我用的原版梅林,都没装这个插件  详情 回复 发表于 2025-10-15 23:03
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-10-15 23:00 | 显示全部楼层
本帖最后由 jc579 于 2025-10-15 23:02 编辑
KKF1 发表于 2025-10-15 21:53
#!/bin/sh
cru a ddns_cf "*/30 * * * * /jffs/scripts/DDNS_cloudflare.sh"
这个代码需要改 *****部分么 ...

不需要,这是个cron表达式,*号代表任意,*/30表示每30分钟
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-10-15 23:03 | 显示全部楼层
KKF1 发表于 2025-10-15 22:02
改完了 还是没有CF cloudflare

你得问这个插件的作者吧,我用的原版梅林,都没装这个插件
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

欢迎大家光临恩山无线论坛上一条 /1 下一条

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2025-12-5 12:39

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com

快速回复 返回顶部 返回列表