admin管理员组文章数量:1566681
文章目录
- 动态公网IP配置DDNS
- 申请域名API访问密钥
- 编写Java代码,定时更新域名IP
- DDNS程序打包上传服务器,配置为开机自启动
- 开源代码的使用说明
动态公网IP配置DDNS
家里有台老旧的笔记本电脑闲置着,功耗很低,闲着也是闲着,将它改造了一番,加了内存条、硬盘,重装了个CentOS7系统,用来跑跑docker,挂NAS还是挺不错的。以前给家里电信宽带申请了动态的公网IP,给域名配置个DDNS,让其映射到这个笔记本服务器上,就可以通过外网访问。
DDNS程序使用Java编写,项目已经开源,地址在文章末尾。
申请域名API访问密钥
以腾讯云为例,在DNSpod中创建访问token,等会写代码时要用到。需要注意的是,使用的腾讯云/阿里云的账号要具备访问域名的权限。
编写Java代码,定时更新域名IP
具体步骤为:
1.通过token调用接口,查询域名的IP
2.获取当前主机的最新公网IP,并判断和域名的IP是否一致
3.如果不一致,说明当前主机所在的公网IP已发生变化,通过token调用接口更新域名的IP
4.每隔3分钟执行1次上述步骤
省略1、2步骤的代码,下面只贴出修改域名IP部分的代码,项目已开源,地址在文章末尾。
public class DDNSTask {
public static void TencentDDNSTask() {
try {
//3.不一致,执行修改
Map<String,String> params2=new HashMap<String, String>();
params2.put("domain",DOMAIN);
params2.put("record_id",record.getString("id"));
params2.put("record_line_id",record.getString("line_id"));
params2.put("login_token",DNSPOD_TOKEN_ID+","+DNSPOD_TOKEN);//接口需要tokenID+token组合发送
params2.put("value",ip);
String resJson = HttpUtil.post("https://dnsapi/Record.Ddns", null, params2, "utf-8");
//如果请求失败,打印失败信息
JSONObject jsonObject = JSONObject.parseObject(resJson);
JSONObject statusRes2 = JSONObject.parseObject(jsonObject.getString("status"));
if(!statusRes2.getString("code").equals("1")){
LogUtil.writeErrorLog(statusRes2.getString("message"));
return;
}
LogUtil.writeInfoLog("已修改为最新IP:"+ip);
}catch (Exception e){
LogUtil.writeErrorLog(e.getMessage());
}
}
}
DDNS程序打包上传服务器,配置为开机自启动
执行maven打包,将jar包上传到服务器,然后直接运行,并配置成开机自启动。
然后在DNSpod中查看当前域名的操作日志,可以看到,IP更新已经在定时执行了
开源代码的使用说明
gitee地址
整个项目只引入了json解析的依赖,HTTP请求、日志打印的工具类都是楼主自己写的。非常轻量级,项目打包后 jar 文件只有600KB,运行占用内存也只有70MB左右。
目前项目中只支持腾讯云的DDNS解析,后续会增加阿里云、华为云的解析代码。使用起来也十分方便,下载项目后只需要把配置文件中的域名和token改成自己的,就可以打包运行了。
1.项目下载到本地,找到配置文件 src / main / resources / application.properties,将token-id、token、域名改成自己的,然后就可以使用maven打包了
2.打包完成后在/target目录下会生成两个jar,请使用jar-with-dependencies这个jar包,将其上传到服务器运行就可以了,建议配置成开机自启动。
3.如果想修改定时执行周期,只需要把main方法中的线程休眠时间改一下就可以。代码非常简单。
贴出我这台吃灰多年的笔记本电脑
版权声明:本文标题:家用动态IP配置DDNS 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/xitong/1727173819a1100485.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论