最近经常需要通过 VPN 连接到家里的网络,但由于 IP 地址的动态变化,每次都手工查 IP 再连接太麻烦了,所以用到了域名动态解析。
用 Python 写了个最小实现,记录下:
一,首先,得有个域名,并将它托管在 cloudflare.com 管理,DDNS 有个二级域名就可以了。在 cloudflare 的管理面板中获取该域名的 API 访问令牌,拿到对应的 DNS zone id 和 Token,过程很简单这里就略过了。
二,其次,在家中服务器上写个 Python 脚本,代码不过百行,逻辑也简单:
- 用 DNS zone id 和 Token 访问,拿到指定域名的 DNS record id
- 根据 DNS record id ,读取 DNS 记录里的 IP 地址
- 获取当前家用网络的公网 IP 地址
- 对比这两个 IP 地址,如果不同,就更新 DNS record 设置。
完整代码我放在 Github 上了,有需自取:
https://github.com/limingx/ddns_cloudflare
三,最后,设置一个定时任务即可。例如:
*/30 * * * * /usr/bin/python3 ddns.py
//每30分钟检查一次。
完成之后,连接 VPN 时只需指定域名即可,不必再操心 IP 变化的事了。