570
文章
·
28728
阅读
570
文章
·
28728
阅读

有24人阅读过 使用群晖计划任务更新DNSPOD的ddns记录
发布于2024/11/14 更新于2024/11/14
[ 教程仅保证更新时有效,请自行测试。]

可以使用DNSPOD的api进行定时更新DDNS的IP记录,代码如下:

#!/bin/bash

# DNSPod 信息
DP_Id="xxxxxx"
DP_Key="ae44b2216ea261e0efdxxxx94e0a216b"
DOMAIN="giraff.fun"          # 主域名

# 记录
SUB_DOMAIN="*"               # 子域名
RECORD_TYPE="A"              # 记录类型
RECORD_LINE="默认"           # 线路类型

API_TOKEN="${DP_Id},${DP_Key}"  # DNSPod API Token
# 自动获取本机的公网 IPv4 地址
NEW_IP=$(curl -s4 ifconfig.me)

# 确认 NEW_IP 已成功获取
if [ -z "$NEW_IP" ]; then
  echo "无法获取本机公网 IPv4,请检查网络连接。"
  exit 1
fi

echo "本机公网 IPv4 为: $NEW_IP"

# 获取解析记录列表
response=$(curl -s -X POST https://dnsapi.cn/Record.List \
  -d "login_token=${API_TOKEN}" \
  -d "format=json" \
  -d "domain=${DOMAIN}" \
  -d "sub_domain=${SUB_DOMAIN}")

# 使用 jq 解析获取的 Record ID
RECORD_ID=$(echo "$response" | jq -r '.records[0].id')

if [ -z "$RECORD_ID" ] || [ "$RECORD_ID" == "null" ]; then
  echo "记录不存在,创建新解析记录..."

  # 调用 Record.Create API 创建新解析记录
  create_response=$(curl -s -X POST https://dnsapi.cn/Record.Create \
    -d "login_token=${API_TOKEN}" \
    -d "format=json" \
    -d "domain=${DOMAIN}" \
    -d "sub_domain=${SUB_DOMAIN}" \
    -d "record_type=${RECORD_TYPE}" \
    -d "record_line=${RECORD_LINE}" \
    -d "value=${NEW_IP}")

  # 解析创建响应
  create_status_code=$(echo "$create_response" | jq -r '.status.code')
  create_status_message=$(echo "$create_response" | jq -r '.status.message')

  # 判断是否创建成功
  if [ "$create_status_code" == "1" ]; then
    echo "DNS 记录创建成功: $create_status_message"
  else
    echo "DNS 记录创建失败: $create_status_message"
  fi
else
  echo "记录已存在,更新解析记录..."

  # 发送 POST 请求更新 DNS 记录
  update_response=$(curl -s -X POST https://dnsapi.cn/Record.Modify \
    -d "login_token=${API_TOKEN}" \
    -d "format=json" \
    -d "domain=${DOMAIN}" \
    -d "record_id=${RECORD_ID}" \
    -d "sub_domain=${SUB_DOMAIN}" \
    -d "record_type=${RECORD_TYPE}" \
    -d "record_line=${RECORD_LINE}" \
    -d "value=${NEW_IP}")

  # 解析响应
  update_status_code=$(echo "$update_response" | jq -r '.status.code')
  update_status_message=$(echo "$update_response" | jq -r '.status.message')

  # 判断是否更新成功
  if [ "$update_status_code" == "1" ]; then
    echo "DNS 记录更新成功: $update_status_message"
  else
    echo "DNS 记录更新失败: $update_status_message"
  fi
fi


文章对你有帮助吗?
  • 一般[0]
  • 很赞[0]
  • 没用[0]
  • 垃圾[0]
  • 无语[0]
扫一扫,手机浏览手机访问本站