更新 DNS 解析记录脚本
项目地址
更新 DNS 解析记录
用于更新 DNS 解析记录的 Shell 脚本,支持 Cloudflare 和 DNSPod,尽可能减少凭据的需要。
支持平台
DNSPod
DNSPod 需要获取 ID 和 Key。
Cloudflare
Cloudflare 只需要获取一个 Token 即可,确保 Token 具有相应区域的 DNS 编辑权限。
安装 jq
Shell 脚本适用于绝大多数 Linux 发行版,只需要确保拥有 jq 即可。
Debian/Ubuntu
sudo apt update && sudo apt install jq
CentOS/RHEL
sudo yum install epel-release && sudo yum install jq
OpenWrt
opkg update && opkg install jq
dnspod_update_dns.sh
#!/bin/bash
# 先决条件
# 1.获取id与key
# 获取id与key文档:https://docs.dnspod.cn/account/dnspod-token/
# 2.安装jq
# Debian/Ubuntu:sudo apt update && sudo apt install jq
# CentOS/RHEL:sudo yum install epel-release && sudo yum install jq
# OpenWrt:opkg update && opkg install jq
# 检查参数
if [ "$#" -ne 4 ]; then
echo "使用方法: $0 <域名> <子域名> <记录类型> <新值>"
echo "示例: $0 388488.xyz hello A 2.2.2.2"
exit 1
fi
# 配置API Token信息
DP_Id="40xxxx"
DP_Key="7xxx101fa77xxxxxxxxxxxxxxxx"
# 从参数获取域名信息
DOMAIN="$1"
SUB_DOMAIN="$2"
RECORD_TYPE="$3"
NEW_VALUE="$4"
# 组合Token ID和Token Key
API_TOKEN="${DP_Id},${DP_Key}"
# API地址
API_LIST_URL="https://dnsapi.cn/Record.List"
API_CREATE_URL="https://dnsapi.cn/Record.Create"
API_MODIFY_URL="https://dnsapi.cn/Record.Modify"
# 获取记录ID
response=$(curl -s -X POST $API_LIST_URL \
-d "login_token=${API_TOKEN}" \
-d "format=json" \
-d "domain=${DOMAIN}" \
-d "sub_domain=${SUB_DOMAIN}")
RECORD_ID=$(echo $response | jq -r ".records[] | select(.type == \"$RECORD_TYPE\") | .id")
# 如果记录不存在则创建新的记录
if [ -z "$RECORD_ID" ] || [ "$RECORD_ID" == "null" ]; then
echo "DNS 记录不存在,创建新的记录..."
response=$(curl -s -X POST $API_CREATE_URL \
-d "login_token=${API_TOKEN}" \
-d "format=json" \
-d "domain=${DOMAIN}" \
-d "sub_domain=${SUB_DOMAIN}" \
-d "record_type=${RECORD_TYPE}" \
-d "record_line=默认" \
-d "value=${NEW_VALUE}")
else
echo "DNS 记录存在,更新记录..."
response=$(curl -s -X POST $API_MODIFY_URL \
-d "login_token=${API_TOKEN}" \
-d "format=json" \
-d "domain=${DOMAIN}" \
-d "sub_domain=${SUB_DOMAIN}" \
-d "record_id=${RECORD_ID}" \
-d "record_type=${RECORD_TYPE}" \
-d "record_line=默认" \
-d "value=${NEW_VALUE}")
fi
# 检查操作是否成功
if echo "$response" | grep -q "\"code\":\"1\""; then
echo "DNS 记录操作成功。"
else
echo "DNS 记录操作失败。"
echo "响应: $response"
fi
cloudflare_update_dns.sh
#!/bin/bash
# 先决条件
# 1.获取token
# 获取token文档:https://blog.cloudflare.com/zh-cn/api-tokens-general-availability-zh-cn
# 2.安装jq
# Debian/Ubuntu:sudo apt update && sudo apt install jq
# CentOS/RHEL:sudo yum install epel-release && sudo yum install jq
# OpenWrt:opkg update && opkg install jq
# 检查参数
if [ "$#" -ne 4 ]; then
echo "使用方法: $0 <域名> <子域名> <记录类型> <新值>"
echo "示例: $0 388488.xyz hello A 2.2.2.2"
exit 1
fi
# 配置token
CF_API_TOKEN="vMS0Jxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
DOMAIN=$1
SUBDOMAIN=$2
RECORD_TYPE=$3
NEW_VALUE=$4
# 获取 Zone ID
zone_response=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones?name=$DOMAIN" \
-H "Authorization: Bearer $CF_API_TOKEN" \
-H "Content-Type: application/json")
ZONE_ID=$(echo $zone_response | jq -r '.result[0].id')
if [ -z "$ZONE_ID" ]; then
echo "获取域名 Zone ID 失败: $DOMAIN,请检查你的token区域权限"
exit 1
fi
# 获取 DNS 记录 ID
record_response=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records?name=$SUBDOMAIN.$DOMAIN" \
-H "Authorization: Bearer $CF_API_TOKEN" \
-H "Content-Type: application/json")
RECORD_ID=$(echo $record_response | jq -r '.result[0].id')
# 如果记录不存在则创建新的记录
if [ -z "$RECORD_ID" ] || [ "$RECORD_ID" == "null" ]; then
echo "DNS 记录不存在,创建新的记录..."
response=$(curl -s -X POST "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records" \
-H "Authorization: Bearer $CF_API_TOKEN" \
-H "Content-Type: application/json" \
--data '{
"type": "'"$RECORD_TYPE"'",
"name": "'"$SUBDOMAIN.$DOMAIN"'",
"content": "'"$NEW_VALUE"'",
"ttl": 600,
"proxied": false
}')
else
echo "DNS 记录存在,更新记录..."
response=$(curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID" \
-H "Authorization: Bearer $CF_API_TOKEN" \
-H "Content-Type: application/json" \
--data '{
"type": "'"$RECORD_TYPE"'",
"name": "'"$SUBDOMAIN.$DOMAIN"'",
"content": "'"$NEW_VALUE"'",
"ttl": 600,
"proxied": false
}')
fi
# 检查操作是否成功
if echo "$response" | grep -q '"success":true'; then
echo "DNS 记录操作成功。"
else
echo "DNS 记录操作失败。"
echo "响应: $response"
fi
本文链接:
/archives/cEPs1PFY
版权声明:
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自
薪萤-博客!
喜欢就支持一下吧
打赏
微信
支付宝