利用api更新域名解析ip+端口转发【1】

利用api更新域名解析ip+端口转发

  一看标题就知道有两个需求啦~~~如果大家看完这文章还是很懵逼的话,没关系,因为我有录视频,还有无比详细的word文档!只要不是智力有缺陷的,绝对绝对能看懂滴。(当时搞这玩意的时候,老板叫我录视频,据说是为了教他的朋友,所以我不仅要让有开发基础的老板看懂,还要让外行人也能明白;反正交差之后他们没用反馈没看懂的,哈哈哈~~)

 

一、需求一及问题解决

需求一:api更新域名解析:

  话说有个网站:https://www.cheapnat.com/,老板在上面买了两台FQ机器用来给我们查资料的,如下图(老实说,能FQ查阅资料我觉得是公司一个非常非常好的福利,很多歪果仁帮助我解决N多问题)。然后有另外一个网站:name.com,上面是配置域名解析的。

  【i】cheapnat.com:

   【ii】name.com:

 

主机大家顺着来看,看成是这样(不然后面不好说)

a.ljy.xyz    4xxx.142

b.ljy.xyz    210.6.179.203

 

整个流程及需求如下:

就是name.com 能探测 cheapnat.com 上公网ip变了,自动更新相应的域名解析。

 

问题解决:

  利用网站:name.com的api文档实现域名解析自动更新

  具体如下:

  申请api的文档的首页文档:https://www.name.com/zh-cn/support/articles/360007597874-Signing-up-for-API-access

  大致意思是,叫你创建一个api 的 token,然后按部就班进行一系列操作。。。

  具体修改dns解析的api文档:https://www.name.com/api-docs     (这个就很重要啦,必须得学懂,不然没法继续下去)

找到左边菜单栏“UpdateRecord” ,看到是通过curl去更新dns解析的,传过去的参数需要 id 这个参数,所以问题解决首先要获取id的值,然后再curl拼接请求修改数据。

  1、获取更新记录的请求参数id

如何获得这个id?

第一步:先申请api,获得api token,网页上叫这个玩意是令牌,而且我们需要的是生产的令牌,而不是测试的令牌(这个有点坑爹)

第二步:获取id

参考文档:https://www.name.com/api-docs/DNS#ListRecords

请求示例是这样的:GET /v4/domains/{domainName}/records。我这里curl获取id是这样的(注意:domainName填的是根域名):

curl -u 'namecom的用户登录名:上面截图的生产令牌' 'https://api.name.com/v4/domains/ljy.xyz/records'

请求之后返回信息就会有id这列了。然后用在线json格式转换:

http://www.bejson.com/#

 

 

 

2、手动拼接请求,尝试修改数据

参考文档:https://www.name.com/api-docs/DNS#UpdateRecord

 

先手动测试是否能修改name.com网站上的dns解析,假设我要修改b.ljy.xyz的dns记录(也就是下面host的值为“b”):

curl -u 'namecom的用户登录名:上面截图的生产令牌' 'https://api.name.com/v4/domains/ljy.xyz/records/1873892959' -X PUT --data '{"host":"b","fqdn":"ljy.xyz","type":"A","answer":"1.1.1.1","ttl":300}'

发现name.com上dns解析改了:

 

3、脚本自动拼接请求,定时修改dns解析

所以思路就是,把curl上,answer传过去的参数写成一个变量,就可以修改dns记录了!!!

curl -u 'namecom的用户登录名:上面截图的生产令牌' 'https://api.name.com/v4/domains/ljy.xyz/records/1873892959' -X PUT --data '{"host":"b","fqdn":"ljy.xyz","type":"A","answer":"'$myip'","ttl":300}'

我们判断的依据是:cheapnat.com 上ip更新了,才修改name.com上的dns记录,所以需要跟以前旧的ip进行对比,相同就不更新了,这个要在cheapnat的机器上写脚本,因为要获取本机公网ip(就是两台FQ的机器啦,可以登录的)

回到这个图:

写入到脚本,定时检测FQ服务器ip是否更新

是 ——》name.com 更新dns解析

否 ——》直接退出定时任务脚本,

 

1 myip=$(curl -s "ifconfig.me")  #获取当前公网ip
2 oldip=$(cat myip)     #拿到上一次执行脚本时,写入到文件上的旧出口:ip
3 
4 if [[ $oldip == $myip ]];then   #如果跟旧ip相同,则退出整个定时脚本
5     echo 'the same ip'
6     exit 0
7 fi

 

否则更新域名解析(我这里举例是修改host为b的记录):

curl -u 'namecom的用户登录名:上面截图的生产令牌' 'https://api.name.com/v4/domains/ljy.xyz/records/1873892959' -X PUT --data '{"host":"b","fqdn":"ljy.xyz","type":"A","answer":"'$myip'","ttl":300}'

1
echo $myip > myip #重新写回到文件,充当下次脚本执行的旧ip

 

二、需求二及问题解决(博客太长了,请看:利用api更新域名解析ip+端口转发【2】)

posted @ 2021-02-06 22:04  windysai  阅读(1027)  评论(0编辑  收藏  举报