用shell写一个ddns
DDNS
假设有这样一种场景,有台服务器的IP每个一段时间会变化,而我们访问这台机器时,就可能因为这台机器的IP发生了变化,导致不能访问,必须到那台机器上,获取到新的IP地址才能进行访问,这十分的痛苦。
DNS可以把IP和domain(域名)进行映射,让我们可以通过域名就可以找到IP,然后对机器进行访问,如此一来,当服务器IP发生变化时,我们只需要把域名的DNS解析换成新的IP,其他设备用域名访问服务器,就感知不到IP发生了变化。可是手动档换DNS解析并不是一个好主意。
DDNS(Dynamic DNS)可以动态解析IP,当检测到IP发生了变化,就会自动换DNS解析,竟有此等技术,方可高枕无忧。
用shell实现一个simple DDNS
DDNS实现方案很多,最简单粗暴的莫过于
- 获取本地
IP - 获取域名
IP - 比较
IP是否相同,如果相同就使用API更新DNS - 定时运行上面步骤
shell方案中所用工具
dig|nslookup等DNS查询工具获取域名IP。ip|ipconfig等命令获取到本机IP。curl发送网络请求,进行更换DNS解析
# 这是ipv6的例子
ipv6_address=$(ip -6 addr show br-lan | awk '/inet6 .*global/{gsub(/\/[0-9]+/, "", $2); print $2}')
ipv6_older=$(dig AAAA baidu.com +short)
if [ "$ipv6_address" != "$ipv6_older" ]; then
echo $ipv6_address
curl -u "xxx"
fi
最后再用crontab -e,添加一个定时任务,完结撒花。