本地动态公网IP动态域名解析-阿里云域名
一般公司本地网络基本都是动态的公网IP,IP不定时的改变,偶尔在本地搭建测试环境或做其他操作就很麻烦,拉专线的话一般公司也舍不得
一般公司本地网络基本都是动态的公网IP,IP不定时的改变,偶尔在本地搭建测试环境或做其他操作就很麻烦,拉专线的话一般公司也舍不得
,所以这边通过脚本自动定时修改指定域名解析到最新获取到的本地IP
注意事项:
功能:获取本地动态公网IP ,调用阿里云域名接口,直接修改域名绑定的ip地址 ,后期可结合nginx代理
注意:二级域名需先创建
该脚本支持python2,pyhon3
如果二级域名已经存在了对应的IP地址,执行时会报错,定时执行脚本时可忽略
报错信息:aliyunsdkcore.acs_exception.exceptions.ServerException: HTTP Status: 400Error:DomainRecordDuplicate The DNS record already exists. RequestID:9BF44B92-5CE3-4CE7-A947-3BFDEA42E785
环境:
python 2/3 一般linux都自带了
赋脚本:ddns.py
创建的 AccessKey 阿里云个人中心->accesskeys ID="XX个人账户的XX" Secret="XX个人账户的XX" 默认 --不修改 RegionId="cn-hangzhou" 你的域名 DomainName="域名如a.com" 你想解析的二级域名,是一个列表,可以写多个 HostNameList = [test,hello, world] HostNameList = [test] 默认 Types = "A" clt = client.AcsClient(ID,Secret,RegionId) print (clt) 动态获取当前公司对外的公网 IP def GetLocalIP(): IPInfo = urllib.urlopen("http://www.trackip.net/").read() IP = re.findall(r"ip:(.*?),", IPInfo)[0] return IP bak1 url=http://members.3322.org/dyndns/getip url = http://www.trackip.net/ r = requests.get(url) print (r) txt = r.text IP = txt[txt.find(title)+6:txt.find(/title)-1] return IP 更新域名 IP def EditDomainRecord(HostName, RecordId, Types, IP): UpdateDomainRecord = UpdateDomainRecordRequest.UpdateDomainRecordRequest() UpdateDomainRecord.set_accept_format(json) UpdateDomainRecord.set_RecordId(RecordId) UpdateDomainRecord.set_RR(HostName) UpdateDomainRecord.set_Type(Types) UpdateDomainRecord.set_TTL(600) UpdateDomainRecord.set_Value(IP) UpdateDomainRecordJson = json.loads(clt.do_action_with_exception(UpdateDomainRecord)) print UpdateDomainRecordJson 获取域名信息 def GetAllDomainRecords(DomainName, Types, IP): DomainRecords = DescribeDomainRecordsRequest.DescribeDomainRecordsRequest() DomainRecords.set_accept_format(json) DomainRecords.set_DomainName(DomainName) DomainRecordsJson = json.loads(clt.do_action_with_exception(DomainRecords)) print DomainRecordsJson[DomainRecords][Record] for HostName in HostNameList: for x in DomainRecordsJson[DomainRecords][Record]: RR = x[RR] Type = x[Type] if RR == HostName and Type == Types: RecordId = x[RecordId] print RecordId EditDomainRecord(HostName, RecordId, Types, IP) IP = GetLocalIP() print (IP) GetAllDomainRecords(DomainName, Types, IP)
执行下脚本
python ddns.py
设置定时执行
每5分钟执行一次
*/5 * * * * /usr/bin/python ddns.py
没啥大的问题,这边就不做截图,有兴趣的话可以尝试下,个人觉得还是比较实用的