自己写一个动态域名DDNS

众所周知

DDNS(Dynamic Domain Name Server)是动态域名服务的缩写。 DDNS是将用户的动态IP地址映射到一个固定的域名解析服务上,用户每次连接网络的时候客户端程序就会通过信息传递把该主机的动态IP地址传送给位于服务商主机上的服务器程序,服务器程序负责提供DNS服务并实现动态域名解析。

目前,我对DDNS的需求是

  • 工作需求

购买了采用拨号上网的服务器,也就是说服务器的ip地址会随机变化的。 这种服务器现在应该很少人使用了吧,它通过云服务器提供的特定地址(含域名或ip)以及端口映射到内网的一台服务器上,可以通过远程桌面或者ssh的方式连接到主机,进行拨号上网后从而获得另一个公网ip对外提供服务。 也就是说每次拨号ip都会变化(实际使用当中服务商还会自动变更ip?) 当ip变化后,就不能对外提供服务了,客户端还是找之前的ip通讯。

所以这个时候,我们对外服务的话就要引入域名了,将域名解析指向目标服务器的ip

而这个ip是会不断变化的。

  • 生活需求

家里的宽带实际上是有公网ip的,树莓派可以架设web等各种服务。 但面临情况和上面的一样,每次路由器拨号后ip就变了

极路由有一个动态域名的插件,启用后我们可以设置一个域名,然后再用自己的域名CNAME到这个域名就可以啦 ~(≧▽≦)/~

说白了DDNS的功能就是动态的更新你域名的解析值吧!

这样理解的话,我也可以自己写一个啊!(又是shell ~ )

DO IT

  • 接口

首先我们依赖的还是cloudflare强大的API.需要用到两个接口:查询和更新 其次是查询ip的接口 很多啦 我自己用的这个 https://api.lvmoo.com/ip/

  • 逻辑

通过设定一个dns_records(不设定就用linux主机名了),然后查询对应的解析值

调用接口查询本机ip

判断这两个值是否一致,不一致的话通过接口更新dns_records

大概就是这样了

  • 依赖

shell脚本,依赖有以下几个(有的机器默认不带或者包管理器安装不到呀)

jq

这是一个shell处理json文件的工具,用来处理api响应的json.

可以在下载页面获取安装方法,包管理器以及二进制文件都有的。

dig

这个不做解释吧,系统不带又不想安装的用ping 代替吧

  • 脚本

放github了,戳来看看吧

点击刷新🚌