Vultr Api做DDNS域名脚本

默认分类 DDNS Shell

前言

CHAT GPT真好用,新的官方API客户端也好用

RUST版

学习RUST写的: https://github.com/yi-shiyu/vultr_ddns

shell脚本版

内容

相关代码都有注释解释作用

#!/bin/bash
export PATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin"

########## 需修改内容 #################
# 此处示例域名"abc.xxx.com

# 你的vultr的API KEY
export VULTR_API_KEY='xxxxxxxxxxxxxxxxxxxxxxxx'
# 子域名
domain_head=abc
# 域名
domain_body=xxx.com
# 此脚本缓存文件所在目录
work_dir=/usr/local/ddns/abc.xxx.com
#####################################
[[ ! -d $work_dir ]] && mkdir -p $work_dir 
cd $work_dir
[[ ! -d cache ]] && mkdir cache
[[ ! -f cache/nowIP.txt ]] && touch cache/nowIP.txt
[[ ! -f log.txt ]] && touch log.txt

# 安装API客户端
if [[ ! -f /bin/vultr-cli ]]; then
  wget https://github.com/vultr/vultr-cli/releases/download/v2.21.0/vultr-cli_v2.21.0_linux_amd64.tar.gz
  tar -zxvf vultr-cli_v2.21.0_linux_amd64.tar.gz
  mv vultr-cli /bin/
  chmod +x /bin/vultr-cli
fi

# 使用 curl 获取 IPv4 地址 这个地址我也忘记哪里搞的了,如果将来失败了,自行更换或搭建
ipv4_address=$(curl -s https://ip.42.pl/short)

# 校验是否为有效的 IPv4 地址
if [[ ! $ipv4_address =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
  # echo "获取的内容不是有效的 IPv4 地址:$ipv4_address"
  exit 0
fi

[[ $ipv4_address == $(cat cache/nowIP.txt) ]] && exit 0

vultr-cli dns record list $domain_body >cache/data.txt

# 数据格式如下
# ID       TYPE  NAME        DATA                        PRIORITY     TTL
# 9e-00    MX                mxbiz1.qq.com                            300
# 7e-4a    MX                mxbiz2.qq.com               10           300
# c0-79    A     ht4         127.0.54.150                             300
# 4d-09    NS                ns1.vultr.com               -1           3600
# ed-02    NS                ns2.vultr.com               -1           3600
# cc-17    A     n1.hl       127.0.53.127                             3600
# 3a-30    CAA   n1.hl       0 issue "letsencrypt.org"   -1           3600
# 9d-17    A     n2.hl       127.0.53.136                             3600

# 计算domain_head的条数
domain_head_count=$(awk '{if($3 == "'"$domain_head"'" && $2 == "A") sum += 1} END {print sum}' cache/data.txt)

date "+%Y-%m-%d %H:%M:%S" >>log.txt

if [[ $domain_head_count > 1 ]]; then
  # 大于1条记录,就删除所有记录,新增一条
  awk '{if($3 == "'"$domain_head"'" && $2 == "A") print $1}' cache/data.txt | xargs -I {} vultr-cli dns record delete $domain_body {}
  vultr-cli dns record create --type A --domain $domain_body --name $domain_head --data $ipv4_address --ttl 300
elif [[ $domain_head_count == 1 ]]; then
  # 更新记录
  awk '{if($3 == "'"$domain_head"'" && $2 == "A") print $1}' cache/data.txt | xargs -I {} vultr-cli dns record update $domain_body {} --data $ipv4_address --name $domain_head
else
  # 新增记录
  vultr-cli dns record create --type A --domain $domain_body --name $domain_head --data $ipv4_address --ttl 300
fi

echo $ipv4_address >cache/nowIP.txt

# 本站的解析IP归属服务 准确性较低 主要做日志展示 如果将来G了,不影响功能
curl -s https://evlan.cc/ip/$ipv4_address >>log.txt
echo -e "" >>log.txt

echo "-----------------------" >>log.txt

# 最多500行日志
tail -n 500 log.txt >cache/log.txt
rm -f log.txt && mv cache/log.txt ./

rm -f cache/data.txt

使用方法

此处以脚本示例中的/usr/local/ddns/abc.xxx.com为例子
先搞一个目录,此处和脚本缓存文件放一起,就全放/usr/local/ddns/abc.xxx.com中

mkdir -p /usr/local/ddns/abc.xxx.com
cd /usr/local/ddns/abc.xxx.com

新建一个ddns.sh文件,把上面脚本修改一下API、域名后粘贴到文件中保存,授权文件可执行chmod +x ddns.sh

执行脚本bash ddns.sh,如果正常,就成功了,然后加入定时任务,让他每3分执行一次,在/var/spool/cron/root文件中加入下面这一行,如果没文件就新建

*/3 * * * * /bin/bash /usr/local/ddns/abc.xxx.com/ddns.sh > /dev/null 2>&

新评论

称呼不能为空
邮箱格式不合法
网站格式不合法
内容不能为空