在synology上使用shell脚本实现基于dynv6的免费DDNS
一、到dynv6注册账号并申请一个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
并保存,重新编辑来解决。