一个实时检测IP变化并更新DNS状态的工具,适用于在NameSilo购买的域名,如果你的域名是在其他商家购买的,修改为商家的api就行。GitHub项目地址:
我使用的语言是Java,其实用脚本写更方便,shell、powershell、python都可以
2021-12-16 更新:此项目已用python3重构,可放心食用
一、背景
目前运营商给家庭宽带的IP都是动态的,庆幸的是虽然IP地址不固定,但分配到家庭路由器的却是一个实实在在的公网IP,所以我们只需使用路由器NAT映射即可在公网访问家庭的设备。我们路由器映射22端口就能远程家里的linux,映射445+3389端口就能用win10自带远程桌面远程家里的windows。如下图
为解决公网IP的变动,可以购买一个域名,使用DDNS(Dynamic Domain Name Server,动态域名服务)将域名解析到宽带的IP。这样就可以在家搭建各种服务并通过访问固定的域名来访问,而无需租用昂贵的公网服务器
想实现这个目的,你需要购买一个域名,且有一台一直运行的电脑来运行此DDNS程序
1.1 域名商推荐
域名商除了给我们一个域名,还负责给我们提供DNS解析,绑定域名到对应IP
我这里推荐NameSilo,第一个原因是他不需要备案,而阿里云、腾讯云等国内域名商是要走备案程序的,比较麻烦,博主前几年备案记得是需要在收到阿里云寄给我的幕布后,拍手持身份证照片,然后才能备案,域名过期后还要注销备案,不然别人拿你域名去干坏事...
二是他有api开放,能通过api来更新域名状态
三是他虽是国外域名商,但是可以通过微信支付,无需境外银行卡
二、简介
本程序通过访问 https://202020.ip138.com/ 获取家庭宽带的公网IP地址,通过 https://www.namesilo.com/api/ 来查询和更新DNS状态。如下图
三、配置
为了运行这个程序,你需要安装Java,推荐jdk8。首次运行之前你需要配置_conf.txt文件,填写你从NameSilo获取的api key,以及你的域名。还有一项可选的配置——程序去检查IP是否变动的频率。
四、运行
Windows :直接双击bat文件
Linux :chmod +x DDNS && ./DDNS start
五、在开机时自动启动
Windows :将vbs文件加入策略组
Linux :注册为服务,以CentOS7为例,首先vi DDNS
在其中配置好java环境变量以及当前脚本文件、jar包所在目录,接着拷贝文件并注册服务,接着:
chmod +x DDNS
cp DDNS /etc/init.d/DDNS
chkconfig --add /etc/init.d/DDNS
# 查看服务是否注册成功
chkconfig --list
# reboot即可重启,检验是否自启成功
# 服务操作
service DDNS status # 查看状态
service DDNS start # 启动
service DDNS stop # 停止
service DDNS restart # 重启
六、其他DDNS方案推荐
都是用到了curl发送请求,把响应保存到文件中 ,再用脚本处理字符串。单个文件就能解决,不过脚本语言特别是Windows的batch语法不是很友好,一般做运维的可能比较熟悉脚本语言。
Windows :https://www.v2ex.com/t/274392
Linux :https://github.com/pztop/namesilo_ddns
还有一个Windows powershell脚本实现的
https://www.ctrol.cn/post/freesource/domain-host/05-25-cartev-4719.html