前段時(shí)間應(yīng)公司需求,需要將內(nèi)網(wǎng)的服務(wù)映射到公網(wǎng)。由于公司使用的是類似家庭寬帶的線路,沒(méi)有固定的公網(wǎng) IP 地址,所以決定使用域名來(lái)完成。

當(dāng)時(shí)有幾種方案:

1、花生殼:但是目前需要亂七八糟的認(rèn)證備案,舍棄!

2" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

18143453325 在線咨詢 在線咨詢
18143453325 在線咨詢
所在位置: 首頁(yè) > 營(yíng)銷資訊 > 建站知識(shí) > 沒(méi)固定公網(wǎng) IP 的公司內(nèi)網(wǎng)實(shí)現(xiàn)動(dòng)態(tài)域名解析( 阿里云萬(wàn)網(wǎng)解析 )

沒(méi)固定公網(wǎng) IP 的公司內(nèi)網(wǎng)實(shí)現(xiàn)動(dòng)態(tài)域名解析( 阿里云萬(wàn)網(wǎng)解析 )

時(shí)間:2023-02-07 05:16:01 | 來(lái)源:建站知識(shí)

時(shí)間:2023-02-07 05:16:01 來(lái)源:建站知識(shí)

情景說(shuō)明

前段時(shí)間應(yīng)公司需求,需要將內(nèi)網(wǎng)的服務(wù)映射到公網(wǎng)。由于公司使用的是類似家庭寬帶的線路,沒(méi)有固定的公網(wǎng) IP 地址,所以決定使用域名來(lái)完成。

當(dāng)時(shí)有幾種方案:

1、花生殼:但是目前需要亂七八糟的認(rèn)證備案,舍棄!

2、NAT123:花里胡哨的,感覺(jué)像垃圾軟件,也舍棄!

3、holer:GITHUB 上面的一個(gè)項(xiàng)目,但是我們只能安裝 Client 端,Server 端在別人手里,不安全,舍棄!

...

還有其它的亂七八糟的很多,但是都覺(jué)得要么是 C/S 架構(gòu),麻煩。要么就是使用別人的,定制要么收費(fèi),要么不安全,也都放棄了,最后決定參考網(wǎng)上的 Python 調(diào)用阿里云 API 通過(guò) Linux 定時(shí)任務(wù)來(lái)更新解析!

網(wǎng)絡(luò)拓?fù)?br>
簡(jiǎn)單的網(wǎng)絡(luò)拓?fù)淙缦聢D:




說(shuō)明:

1、電信 ASDL 撥號(hào),會(huì)有一個(gè)會(huì)變化的公網(wǎng) IP 地址,我們的域名就是要解析到最新的該 IP 地址上面

2、公司內(nèi)網(wǎng)是一個(gè)路由器接交換機(jī)的方式,路由器比較 Low,H3C 的,簡(jiǎn)單的進(jìn)行一個(gè)端口轉(zhuǎn)發(fā)到指定的服務(wù)器 192.168.1.100

3、192.168.1.100 上面安裝 Nginx,做反向代理,同時(shí)也作為統(tǒng)一的管理入口,方便管理,同時(shí)也做定時(shí)更新 DNS 解析的任務(wù)

準(zhǔn)備工作

首先,我們需要去阿里云創(chuàng)建一個(gè) Accesskey ,這個(gè)東西將作為我們登錄阿里云更新解析的用戶,具體創(chuàng)建方法可以參考百度,創(chuàng)建完成后記得保留好生成的 Key 和 Secret:







注意:創(chuàng)建的 AccessKey 用戶一定要記得授權(quán) DNS 管理 的權(quán)限,否則無(wú)法更新!

其次,我們需要有一個(gè)已經(jīng)備案完成的域名,如 http://abc.com!

最后,有一臺(tái)內(nèi)網(wǎng)的 Linux 機(jī)器,個(gè)人推薦 CentOS,幾年運(yùn)維下來(lái),幾乎用的都是這個(gè),不為別的,就為了比較好管理。

服務(wù)配置

【1】CentOS 服務(wù)器安裝 Python: 默認(rèn)情況下,CentOS 是擁有 Python 的,一般都是 2.6 或者 2.7,但是不一定有 pip,我們需要安裝 pip,這里采用的 epel 源:

yum -y install epel-release yum -y install python-pip


【2】安裝依賴的阿里云 Python 包:前者是阿里云需要的包,后者是模擬請(qǐng)求需要的包

pip install aliyun-python-sdk-alidns pip install requests


【3】編輯更新腳本 ddns_update.py,內(nèi)容如下:

備注:腳本參考網(wǎng)上的老哥的分享,然后自己做了一些修改

注意:這里解析有一個(gè)前提條件,就是你需要修改的那條解析規(guī)則必須已經(jīng)存在,該腳本不能新增,只能修改舊的

# coding:utf-8from aliyunsdkcore import clientfrom aliyunsdkalidns.request.v20150109 import DescribeDomainsRequest, DescribeDomainRecordsRequest, / UpdateDomainRecordRequestimport json, urllib, re####################################################################################### 個(gè)人配置區(qū)域###################################################################################### 創(chuàng)建的 AccessKeyID = "xxxxx"Secret = "xxxxx"# 默認(rèn)RegionId = "cn-hangzhou"# 你的域名DomainName = "abc.com"# 你想解析的二級(jí)域名,是一個(gè)列表,可以寫多個(gè)HostNameList = ['test', 'hello', 'world']# 默認(rèn)Types = "A"clt = client.AcsClient(ID, Secret, RegionId)def GetLocalIP(): """ 動(dòng)態(tài)獲取當(dāng)前公司對(duì)外的公網(wǎng) IP :return: """ IPInfo = urllib.urlopen("http://2018.ip138.com/ic.asp").read() IP = re.findall(r"ip:'(.*?)',", IPInfo)[0] return IPdef EditDomainRecord(HostName, RecordId, Types, IP): """ 更新域名 IP :param HostName: :param RecordId: :param Types: :param IP: :return: """ 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)IP = GetLocalIP()EditDomainRecord(DomainName, RegionId, Types, IP)GetAllDomainRecords(DomainName, Types, IP)【4】添加定時(shí)任務(wù): 每?jī)尚r(shí)更新一次

# 添加定時(shí)任務(wù)echo "* */2 * * * /usr/bin/python /scripts/ddns_update.py" >> /var/spool/cron/root【5】配置完成,此時(shí)你可以手動(dòng)執(zhí)行檢驗(yàn)該腳本是否能夠正常的修改域名解析!至于后面的 Nginx 反向代理,網(wǎng)上的方法很多,這里就不一一綴訴!

關(guān)鍵詞:實(shí)現(xiàn),固定,動(dòng)態(tài)

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點(diǎn)擊下載Chrome瀏覽器
關(guān)閉