使用阿里云DNS实现自己的DDNS服务
最近家里牽了寬帶(之前家里沒網,因為窮,作為一名嵌入式程序員,這是得有多慘),換了一個華為AX3Pro路由器,開啟橋接模式,發現家中的PC和手機均有IPv6的地址,而且用IPv6Test測試,屬于公網的IPv6地址。于是乎,家中有了公網。立馬把之前的破電腦裝上Ubuntu16.04系統(為什么不裝Ubuntu20.04,這個也是嵌入式程序猿的痛),在聯想到自己有阿里云DNS和域名,就自己用Python寫了一個簡單的DDNS服務,來實現自己電腦的IP與域名進行綁定。先來看一下效果:
?在自己電腦上搭建的寶塔面板,跑了一個網站,還有一個FTP服務器,寶塔面板和FTP服務器都沒問題,網站目前還存在一些問題,改了nginx端口后無法訪問,用默認80端口只能在家里訪問,目前還無界,又知道的小伙伴可以指教一下。
在外網使用SSH連接家中的破電腦:
?
?從上面可以看到,運行了4個DDNS的python程序,因為兩個域名,四個前綴。到目前為止,使用IPv6可以實現大多情況下的需求了,滿足內網訪問和控制等。
?
接下來就是Python代碼了,使用的是阿里云SDK開發,因此需要在電腦上安裝阿里的SDK,如果需要實現開機自啟,比如在:rc.local中實現,務必在root用戶環境中也要安裝阿里的SDK,這里我當時找了兩個小時的原因才找到,不然無法實現開機自啟。
安裝阿里的SDK:
pip install aliyun-python-sdk-core
pip install aliyun-python-sdk-alidns
由于這個在國外,速度很慢,因此可以采用國內的點下載,比如:
阿里:https://mirrors.aliyun.com/pypi/simple
中國科學技術大學:https://pypi.mirrors.ustc.edu.cn/simple
pip install --index-url https://pypi.douban.com/simple aliyun-python-sdk-core
pip install --index-url https://pypi.douban.com/simple aliyun-python-sdk-alidns
?
接下來是主要部分代碼:
G_alidns_wait_get_cnt = 0 G_ipv6_ser_addr = [] G_ipv6_dev_addr = [] G_ip6_flg = 0 G_ip6_ali_reload = 0 G_doname = "自己的域名" G_ntype = "AAAA:IPv6 A:IPv4" G_RR = "域名前綴" client = AcsClient('AccessKey Secret', '操作', 'cn-hangzhou') dns_info_str=get_dns_info(G_doname, client) G_ipv6_ser_addr = get_aliyun_ipv6_enable_info(dns_info_str, G_RR) print(G_ipv6_ser_addr, 'len=', len(G_ipv6_ser_addr))G_ipv6_dev_addr=get_all_devipv6_ginfo() print(G_ipv6_dev_addr)while True:G_ipv6_dev_addr = get_all_devipv6_ginfo()for inx_dev_ip6 in G_ipv6_dev_addr:G_ip6_flg = -1for inx_ser_ip6 in G_ipv6_ser_addr:if inx_ser_ip6['Value'] == inx_dev_ip6:G_ip6_flg = 1break# set_aliyun_dns(G_doname, G_RR, G_ntype, inx_dev_ip6, client)if G_ip6_flg != 1:G_ip6_ali_reload = 1set_aliyun_dns(G_doname, G_RR, G_ntype, inx_dev_ip6, client)for inx_ser_ip6 in G_ipv6_ser_addr:G_ip6_flg = 1for inx_dev_ip6 in G_ipv6_dev_addr:if inx_ser_ip6['Value'] == inx_dev_ip6:G_ip6_flg = 0breakif G_ip6_flg == 1:G_ip6_ali_reload = 1del_aliyun_domain(inx_ser_ip6['RecordId'], client)time.sleep(5)G_alidns_wait_get_cnt += 1# if G_alidns_wait_get_cnt >= 20 or G_ip6_ali_reload == 1:if G_ip6_ali_reload == 1:dns_info_str=get_dns_info(G_doname, client)G_ipv6_ser_addr = get_aliyun_ipv6_enable_info(dns_info_str, G_RR)print('sync ser dns',G_ipv6_ser_addr)G_alidns_wait_get_cnt = 0G_ip6_ali_reload = 0print(G_ipv6_dev_addr)?整體邏輯為開機運行會獲取一次云端的DNS配置,然后獲取本地的IPv6公網地址,與之比對,然后增加或刪除阿里云端的DNS解析配置,再更新同步配置,每隔5秒監測一次。
從此再家中搭建服務器不在受IPv4的限制,也不花錢,nice!
完整的程序下載:
https://download.csdn.net/download/qq_18604707/12688723
總結
以上是生活随笔為你收集整理的使用阿里云DNS实现自己的DDNS服务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: caj转换word转换器怎么操作?
- 下一篇: css label 居中布局_label