一般公司本地网络基本都是动态的公网IP,IP不定时的改变,偶尔在本地搭建测试环境或做其他操作就很麻烦,拉专线的话一般公司也舍不得
,所以这边通过脚本自动定时修改指定域名解析到最新获取到的本地IP
注意事项:
#功能:获取本地动态公网IP ,调用阿里云域名接口,直接修改域名绑定的ip地址 ,后期可结合nginx代理
#注意:二级域名需先创建
#该脚本支持python2,pyhon3
#如果二级域名已经存在了对应的IP地址,执行时会报错,定时执行脚本时可忽略
#报错信息:aliyunsdkcore.acs_exception.exceptions.ServerException: HTTP Status: 400 Error: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
没啥大的问题,这边就不做截图,有兴趣的话可以尝试下,个人觉得还是比较实用的
