在synology上使用shell脚本实现基于dynv6.net的DDNS

发布时间 2023-08-10 19:46:01作者: 伙夫2

一、到dynv6.net注册账号并申请一个Zone。在Zone的Instruction选项卡你可以看到你的Password,这个也就是后面会提到的Token。

 

二、在Synology里通过CLI建立一个空的文件夹,使用VI或者VIM编辑一个.sh文件。其内容如下:

#!/bin/bash
#设置LOG文件的位置和文件名
Log_File="/root/dynv6/log.txt"
#########################################################################
#设置用于查询DNS的域名服务器,建议使用谷歌的8.8.8.8或者8.8.4.4
#DNS_Server="8.8.4.4"
DNS_Server="8.8.8.8"
#########################################################################
#设置你在Dynv6的Token和域名
Token="这里填入你的Token"
Hostname="这里填入你的Zone名"
#########################################################################
#通过第三方服务查询当前设备的出口IP地址
Current_IPv4=$(curl --silent "https://api.ipify.org")
#echo "Current IP is ${Current_IPv4}"
#########################################################################
#通过前述设置的DNS服务器查询你的域名的IP地址
DNS_IPv4=$(nslookup ${Hostname} ${DNS_Server}|grep -E -o "[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}" |grep -v ${DNS_Server})
#echo "Current DNS IP is ${DNS_IPv4}"
#########################################################################
#如果域名查询到的IP与当前出口IP不一致,则执行DNS IP更新操作
if [ "${DNS_IPv4}" != "${Current_IPv4}" ]
then
#通过Dynv6的接口更新DNS IP
    curl --silent "http://dynv6.com/api/update?hostname=${Hostname}&token=${Token}&ipv4=${Current_IPv4}"
#将更新记录写到Log文件中
    echo -e "\033[31m$(date -Iseconds):DNS IP update:${DNS_IPv4}==>${Current_IPv4}\033[0m" >>${Log_File}
#如果不希望过于频繁的读写文件,可以把以下【两行】使用#注释掉
else
    echo -e "\033[34m$(date -Iseconds):\033[0mDNS IP ${DNS_IPv4}=${Current_IPv4} Port IP" >>${Log_File}
fi

三、增加运行权限

chmod +777 file.sh

四、登录synology管理界面增加定期执行项目

bash .../xxx.sh

五、需要注意一点,如果使用Windows平台编辑好文件再上传到Linux,可能会出现编码上的问题导致脚本运行异常。此时可以在VI界面内使用

:set ff=unix

并保存,重新编辑来解决。