|
一,前言
由于我的ha是直接下载官网的虚拟机ovf文件导入的esxi平台部署,家里的ipv6是直接桥接到虚拟机的,通过路由器自带的ddns没办法针对虚拟机的ipv6做4A记录的更新,于是就想自己写一个脚本定期更新。
二,操作步骤
登录DNSpod网站,添加一个4A记录
账号管理-API秘钥-创建token(保存好ID和token)
使用SSH工具登录HA系统
cd /config #进入到配置文件目录下
sudo nano ddns.sh #创建并编辑脚本文件
复制如下代码(DNSpod可以直接使用,其它域名商的话 步骤也基本一致,稍微调整下API调用地址和参数即可即可):
===============================================================
#!/bin/bash
# 配置部分
API_TOKEN="ID,Token" # 直接使用API Token
DOMAIN="xxx.com" # 替换为你的域名
SUB_DOMAIN="xx" # 设置子域名,比如我的子域名是上图所示的ha
RECORD_TYPE="AAAA" # DNS记录类型(AAAA记录为IPv6)
# 日志文件路径
LOG_FILE="/config/ddns.log"
# 获取当前网卡的IPv6地址
CURRENT_IP=$(curl -s https://ipv6.icanhazip.com)
# 如果无法获取公网IP,记录错误并退出
if [ -z "$CURRENT_IP" ]; then
echo "无法获取当前IPv6地址,请检查网络。" | tee -a $LOG_FILE
exit 1
fi
# 获取当前DNSPod记录的IP
RECORD_INFO=$(curl -s -X POST https://dnsapi.cn/Record.List -d "login_token=$API_TOKEN&format=json&domain=$DOMAIN&sub_domain=$SUB_DOMAIN")
RECORD_ID=$(echo $RECORD_INFO | jq -r ".records[0].id")
RECORD_IP=$(echo $RECORD_INFO | jq -r ".records[0].value")
# 如果获取不到记录ID,输出错误并退出
if [ -z "$RECORD_ID" ]; then
echo "无法从DNSPod获取记录ID,请检查API或域名设置。" | tee -a $LOG_FILE
exit 1
fi
# 检查当前IP和DNSPod记录的IP是否相同
if [ "$CURRENT_IP" == "$RECORD_IP" ]; then
echo "$(date): IP 未改变,无需更新。当前IP:$CURRENT_IP" | tee -a $LOG_FILE
exit 0
fi
# 更新DNS记录
UPDATE_RESULT=$(curl -s -X POST https://dnsapi.cn/Record.Modify -d "login_token=$API_TOKEN&format=json&domain=$DOMAIN&sub_domain=$SUB_DOMAIN&record_id=$RECORD_ID&record_type=$RECORD_TYPE&value=$CURRENT_IP&record_line_id=0")
# 检查更新结果
if [ "$(echo $UPDATE_RESULT | jq -r '.status.code')" == "1" ]; then
echo "$(date): DNSPod记录已更新为新IP:$CURRENT_IP" | tee -a $LOG_FILE
else
echo "$(date): DNSPod更新失败:$(echo $UPDATE_RESULT | jq -r '.status.message')" | tee -a $LOG_FILE
fi
===================================================================================================
输入后,按Ctrl+x 退出保存
sudo chmod 777 ddns.sh #给脚本文件添加权限
sudo nano configuration.yaml #进入配置脚本文件
输入如下命令:
======================
shell_command:
update_ddns: '/config/ddns.sh'
=====================
输入后,按Ctrl+x 退出保存
sudo nano automations.yaml #进入到自动化配置脚本
输入一下命令:
======================================
- alias: Update DDNS
description: 每两小时更新一次DDNS
trigger:
- platform: time_pattern
hours: "/2" # 每两小时触发一次
action:
- service: shell_command.update_ddns
======================================
输入后,按Ctrl+x 退出保存
最后 reboot #重启下系统
到此处ddns.sh已经实现每2小时周期性执行了,执行日志可以通过查看ddns.log文件 具体命令:cat /config/ddns.log
可能有小伙伴问为啥不用crontab,因为没有cron。。而且官网下载的这个虚拟机用的s6轻量级的进程管理,折腾起来有点麻烦,后面看了下HA自带的自动化脚本也可以就改了方案
|
评分
-
查看全部评分
|