用shell写一个ddns

DDNS

假设有这样一种场景,有台服务器的IP每个一段时间会变化,而我们访问这台机器时,就可能因为这台机器的IP发生了变化,导致不能访问,必须到那台机器上,获取到新的IP地址才能进行访问,这十分的痛苦。

DNS可以把IPdomain(域名)进行映射,让我们可以通过域名就可以找到IP,然后对机器进行访问,如此一来,当服务器IP发生变化时,我们只需要把域名的DNS解析换成新的IP,其他设备用域名访问服务器,就感知不到IP发生了变化。可是手动档换DNS解析并不是一个好主意。

DDNS(Dynamic DNS)可以动态解析IP,当检测到IP发生了变化,就会自动换DNS解析,竟有此等技术,方可高枕无忧。

用shell实现一个simple DDNS

DDNS实现方案很多,最简单粗暴的莫过于

  1. 获取本地IP
  2. 获取域名IP
  3. 比较IP是否相同,如果相同就使用API更新DNS
  4. 定时运行上面步骤

shell方案中所用工具

  • dig|nslookupDNS查询工具获取域名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,添加一个定时任务,完结撒花。