公网ip经常变动的解决方法

公网ip经常变动的解决方法

解决公网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 {

@Autowired

private 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

猜你喜欢

新鲜板栗的保存技巧与指南
365提款一周都没到

新鲜板栗的保存技巧与指南

07-11 2869
荒野行动雪天模式脚印多久消失 脚印会持续多长时间
京东商品问答可以删除吗?如何删除给别人的回复?
Running Man 香港播放情況
365bet提款到账时间

Running Man 香港播放情況

07-17 3214
《米塔》小米塔彩蛋触发方法
365bet提款到账时间

《米塔》小米塔彩蛋触发方法

07-14 968
女雷神(GODDESS OF THUNDER)
365彩票官方下载手机

女雷神(GODDESS OF THUNDER)

07-04 109