解决公网ip经常变动

问题

​ 家里申请了电信的公网ip, 但是如果停电或者重新拨号都会导致这个ip变更.很多配置好的应用都需要重新配置ip地址太麻烦了

思考

  • 现成的产品类似花生壳这些内网穿透都要收费或者限速, 我已有公网ip感觉不划算

  • 想到了域名配置dns解析, 应用里面都配置域名代替ip地址.每次ip变了我只需要去改一下域名的dns解析就可以了

    但是还会有问题, 每次都需要手动改一下, 并且还必须得连上家里网才能知道最新的公网ip

  • 查了阿里云/腾讯云/华为云等等dns解析都对外提供了api文档, 思路是写个定时脚本获取到公网ip再与阿里云上的解析记录做比对,

    阿里云解析记录不是当前的公网ip的话, 更新阿里云的解析记录

实现

  • 定时获取当前公网ip去尝试更新

    /*** 修改域名定时任务** @author wangJiaLun* @date 2021-08-11**/
    @Slf4j
    @Component
    public class ModifyDomainNameTask {@Autowiredprivate AliDns aliDns;@Value("${pub-network-address}")private String netWorkAddress;/***  每五分钟获取公网ip去尝试更新域名解析记录*/@Scheduled(cron = "0 0/5 * * * ? ")public void checkDomainNameValue(){String value = HttpUtil.get(netWorkAddress).replace("\n", "");try {aliDns.updateDomainRecord(value);} catch (Exception e) {log.error(e.getMessage());}}
    }
    
  • 尝试更新阿里云解析记录

    /*** 阿里云ddns配置** @author wangJiaLun* @date 2021-08-11**/
    @Slf4j
    @Component
    public class AliDns {@Value("${aliddns.access-key-id}")String ACCESS_KEY_ID ;@Value("${aliddns.access-key-secret}")String ACCESS_KEY_SECRET;@Value("${aliddns.domain-name}")String  DOMAIN_NAME;@Value("${aliddns.end-point}")String END_POINT;/*** 使用AK&SK初始化账号Client* @param accessKeyId* @param accessKeySecret* @return Client* @throws Exception*/com.aliyun.alidns20150109.Client createClient(String accessKeyId, String accessKeySecret) throws Exception {Config config = new Config().setAccessKeyId(accessKeyId)Secret.setAccessKeySecret(accessKeySecret);config.endpoint = END_POINT;return new com.aliyun.alidns20150109.Client(config);}/***  更新解析记录* @param value 当前公网ip*/public  void updateDomainRecord (String value) throws Exception{com.aliyun.alidns20150109.Client client = this.createClient(ACCESS_KEY_ID, ACCESS_KEY_SECRET);DescribeDomainRecordsRequest domainRecordsRequest = new DescribeDomainRecordsRequest();domainRecordsRequest.setDomainName(DOMAIN_NAME);// 解析记录列表DescribeDomainRecordsResponse domainRecordsResponse = client.describeDomainRecords(domainRecordsRequest);for (DescribeDomainRecordsResponseBody.DescribeDomainRecordsResponseBodyDomainRecordsRecord record : domainRecordsResponse.body.domainRecords.record) {UpdateDomainRecordRequest updateDomainRecordRequest = new UpdateDomainRecordRequest();if (record.value.equals(value)) {break;}BeanUtils.copyProperties(record, updateDomainRecordRequest);updateDomainRecordRequest.setValue(value);client.updateDomainRecord(updateDomainRecordRequest);log.info("域名{}的主机记录{}更新为记录值: {}",DOMAIN_NAME, record.RR,value);}}
    }
    

测试

去阿里云平台上面把域名的解析记录随便改了个值, 过几分钟后变成了我当前的公网ip地址

项目地址

https://github.com/wangJiaLun-china/ddns

编译打包后的文件

https://download.csdn.net/download/AL961105114/86923048

公网ip经常变动的解决方法相关推荐

  1. Linux的ip经常变动的解决方法

    第一步:查看ip   通过ip addr命令查询本机IP地址,可以看出是ens33网卡   如果我们不设置固定的ip地址,那么IP地址就会自动变更,所以我们通过编辑配置文件将IP地址写死 第二步: 编 ...

  2. Linux安装RPM包、查看本机ip和端口、手动配置ip、中标麒麟无法显示ip地址的详细解决方法

    文章目录 安装rmp Linux安装RPM包.DEB包后,软件在哪 RPM包安装去向(例:包名=>redis) 查看本机ip 查看所有端口 手动配置ip 中标麒麟无法显示ip地址的详细解决方法 ...

  3. 403 Forbidden You don‘t have permission to access this resource. Apache Server at IP Port 80的解决方法

    ECS下载站Forbidden You don't have permission to access this resource. Apache Server at IP Port 80的解决方法 ...

  4. 终端服务器安全层在协议流中检测到错误,并已取消客户端连接。客户端IP:x.x.x.解决方法

    终端服务器安全层在协议流中检测到错误,并已取消客户端连接.客户端IP:x.x.x.解决方法 事件类型: 错误 事件来源: TermDD 描述: RDP 的 "DATA ENCRYPTION& ...

  5. ip冲突 scan windows_Linux下IP 冲突查看及解决方法

    在linux下查看ip是否冲突的命令: 1.通过arping命令检测. arping 192.168.0.25 Unicast reply from 192.168.0.25 [00:25:e4:6c ...

  6. 【更新】关于VMware虚拟机无法正常获取IP地址问题的解决方法及思路

    目录 一.先从一个示例入手 二.为什么会出现网卡无法正常获取IP地址的情况?这种时候该如何解决呢? 1. 原因 2. 解决方法 2.1. VMware程序出现bug 2.2. VMware的虚拟网络编 ...

  7. Centos7系或中标麒麟ifconfig/ip addr无法显示ip地址的详细解决方法

    1. 先说一下自己的基本情况 我的这个系统是中标麒麟系统,从使用命令上看应该和centos7系列差不多 出现的现象如下所示: 我本机的网络配置文件为ifcfg-ens33(不同的机器可能不同名),修改 ...

  8. 电脑显示IP地址错误怎么办|电脑无法上网提示IP地址错误的解决方法

    电脑无法上网,经过诊断后显示是IP地址错误的原因,如果我们遇到了这样的错误应该怎么办?所以,在下面的内容中,小编要和大家介绍在电脑提示IP地址错误无法上网的具体解决方法. 1.首先确定是否禁用了本地连 ...

  9. 用IIS建立的.net网站通过IP地址不能访问解决方法

    用iis建立一个.net的网站,在iis中绑定了服务器公网ip的80端口和127.0.0.1的80端口,结果用ip地址不能直接访问 用iis建立一个.net的网站,在iis中绑定了服务器公网ip的80 ...

  10. 技术专题:几个子网通过一个公网IP上网的WAYOS设置方法

    最近有发现部分地方电信给用户的都是一个公网IP,然后几个子网,有一些人不清楚这是怎么一回事? 也不知道如何设置?我现在把这个告诉大家! 如:电信给的公网IP:125.92.233.48/255.255 ...

最新文章

  1. centos安装android应用程序,centos7软件安装系列【二十一】安装android打包环境
  2. OpenGL deferred shading延迟渲染的实例
  3. 团队第五次 # scrum meeting
  4. ApacheCN Angular 译文集 20211114 更新
  5. 图像视频信息库改直播服务器,短视频直播系统,开发流程详细解析
  6. 每天一道面试题(2):实现strncpy
  7. C调用Python的崩溃
  8. 初识AvalonDock
  9. 海伦公式——初中数学证明
  10. accurately Buy Diesel watches how you can suitably
  11. 怎么创建一个网站?【建立网站】
  12. 三层交换机与路由器之间的区别
  13. android 打开微信客户端,Android中接入微信客户端心得
  14. BUU刷题记录-[0CTF 2016]piapiapia
  15. java contions_十一届蓝桥模拟赛 元辅音字母 JAVA
  16. 关于深入理解Java线程
  17. 嵌入式(十三):嵌入式系统概念
  18. 奥西tds300服务器维修,奥西Océ TDS300 驱动
  19. HUE下载提示The number of resulting rows was too big to be downloaded
  20. Ugly Numbers问题

热门文章

  1. EIA/TIA 568A 568B 标准
  2. OpenCV实现显著性检测中的谱残差法(Spectral Residual Method)涉及到了傅立叶正反变换
  3. 计算机条件求和函数,在excel中怎样根据多个条件进行求和
  4. 2019年全国/全球马拉松比赛日程
  5. kafka数据丢包原因及解决方案
  6. 公众号申请并发布文章教程
  7. 湘潭大学 计算机学院程诗婕,2019 CCF CCSP分赛区竞赛决出金银铜奖
  8. 16行,使用Python制作简易版QQ自动回复机器人(windows版)
  9. 用excel制作双层饼图_Excel做的双层饼图,太漂亮了
  10. 【2022第十届‘泰迪杯’挑战赛】A题:害虫识别完整版(大致思路。详细过程和代码以及结果csv在压缩包中)