570
文章
·
28687
阅读
570
文章
·
28687
阅读

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

#!/bin/bash

# 自动获取本机的公网 IPv4 地址
NEW_IP=$(curl -s4 ifconfig.me)

# 阿里云信息
DOMAIN="giraff.fun"              # 域名
ACCESS_KEY_ID="your_access_key_id"  # 阿里云 AccessKey ID
ACCESS_KEY_SECRET="your_access_key_secret"  # 阿里云 AccessKey Secret
SUB_DOMAIN="*"                   # 子域名
RECORD_TYPE="A"                  # 记录类型
RECORD_LINE="default"            # 线路类型

# 阿里云 API 请求的基本参数
ENDPOINT="http://dns.aliyuncs.com"
VERSION="2015-01-09"
ACTION="DescribeDomainRecords"

# 获取请求当前时间
TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")

# 构建请求参数
PARAMS="Action=$ACTION&DomainName=$DOMAIN&AccessKeyId=$ACCESS_KEY_ID&Timestamp=$TIMESTAMP&SignatureMethod=HMAC-SHA1&SignatureVersion=1.0&SignatureNonce=$(uuidgen)&Format=JSON"

# 签名计算
SIGNATURE=$(echo -n "GET&%2F&$(echo -n "$PARAMS" | sed 's/&/%26/g')" | openssl dgst -sha1 -hmac "$ACCESS_KEY_SECRET&" -binary | base64)

# 发起请求,查询域名记录
response=$(curl -s -G "$ENDPOINT" --data-urlencode "$PARAMS&Signature=$SIGNATURE")

# 提取记录的 ID
RECORD_ID=$(echo "$response" | jq -r '.DomainRecords.Record[0].RecordId')

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

  # 创建新的解析记录
  ACTION="AddDomainRecord"
  create_response=$(curl -s -G "$ENDPOINT" --data-urlencode "Action=$ACTION&DomainName=$DOMAIN&RR=$SUB_DOMAIN&Type=$RECORD_TYPE&Value=$NEW_IP&AccessKeyId=$ACCESS_KEY_ID&Timestamp=$TIMESTAMP&SignatureMethod=HMAC-SHA1&SignatureVersion=1.0&SignatureNonce=$(uuidgen)&Format=JSON&Signature=$SIGNATURE")

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

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

  # 更新现有的解析记录
  ACTION="UpdateDomainRecord"
  update_response=$(curl -s -G "$ENDPOINT" --data-urlencode "Action=$ACTION&DomainName=$DOMAIN&RecordId=$RECORD_ID&RR=$SUB_DOMAIN&Type=$RECORD_TYPE&Value=$NEW_IP&AccessKeyId=$ACCESS_KEY_ID&Timestamp=$TIMESTAMP&SignatureMethod=HMAC-SHA1&SignatureVersion=1.0&SignatureNonce=$(uuidgen)&Format=JSON&Signature=$SIGNATURE")

  # 解析更新响应
  update_status_code=$(echo "$update_response" | jq -r '.Code')
  update_status_message=$(echo "$update_response" | jq -r '.Message')

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


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