利用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格式转换:
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】)