如何动态更新 Namesilo 的 DNS 记录

动态更新 DNS 记录

动态更新的目的很简单,作为一个长期使用联通宽带的用户,虽然,联通提供了公网地址,但是,其本质上是一个动态地址,而不是绑定的。如果在外想用 IP 来访问家里的设备,就得用动态 DNS(DDNS)。 很多路由器上都直接集成了 DDNS 功能,不过,基本就是把路由发布时常见的几家服务提供商的接口封装了进去。这几家一般有几个特点:1. 被墙;2. 收费不低;3. 国内服务商,可能有安全问题;4. 公司已经倒闭了。 与其依靠这些不靠谱的服务,不如自己写个脚本来更新。

于是,脚本大法来了。一开始,打算用 Cloudflare,因为这是晚上推荐的方式。后来搜了一下,我的域名提供商 Namesilo 自己就提供 API 来更新 DNS。但是,它返回的是 xml 格式的数据,我不知道怎么用 shell 来解析。

于是,就想到了 golang。因为,这个 DDNS 客户端肯定要部署在路由器一类的设备上,python、java 之类的需要部署环境,c 之类的可能需要一些动态链接库才能跑起来,而且我不知道怎么搞。golang 的无动态链接库的特性就很有优势了。所以就手写了一个叫 und 的工具。

  1. 先在 Namesilo 里创建一个 DNS 记录
  2. 搞一个适合你的平台的 und 的 binary。我这里只提供了 arm64|linux + amd64|三个主流 OS 的 binary,需要额外的平台要自己编译,可以参考 Makefile。
  3. 从 namesile 生成一个 API key,然后照着 und 的用法来启动就好了。大部分可能需要放到后台,所以,nohup 吧。

GitHub 功能体验

GitHub Action

感觉是用来替代混乱的第三方 CI 的。直接为 und 选了 Golang 的选项。默认其实就是在 ubuntu 里执行了一下 go build -v .

Release

之前在发布 TiDB 的时候用过该功能,只是没记得上传/自动生成 binary。因为,TiDB 也不是一个组件能完整跑起来的,所以,单拿一个 binary 意义不大。 这次体验让我觉得,

  1. 要 release 的话,打标签,最好还是用 release 功能直接来打
  2. release 完之后,因为可以编辑,这时候,再 make 生成各自 binary,然后,上传。根据 Makefile 的写法,可以生成 version。这还是一个比较重要的功能。

这两步也挺方便的。

Comments

comments powered by Disqus