使用阿里雲DNS實現自己的DDNS服務

2021-10-08 21:11:02 字數 2866 閱讀 9401

最近家裡牽了寬頻(之前家裡沒網,因為窮,作為一名嵌入式程式設計師,這是得有多慘),換了乙個華為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

阿里:中國科學技術大學:

pip install --index-url aliyun-python-sdk-core

pip install --index-url aliyun-python-sdk-alidns

接下來是主要部分**:

g_alidns_wait_get_cnt = 0

g_ipv6_ser_addr =

g_ipv6_dev_addr =

g_ip6_*** = 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_*** = -1

for inx_ser_ip6 in g_ipv6_ser_addr:

if inx_ser_ip6['value'] == inx_dev_ip6:

g_ip6_*** = 1

break

# set_aliyun_dns(g_doname, g_rr, g_ntype, inx_dev_ip6, client)

if g_ip6_*** != 1:

g_ip6_ali_reload = 1

set_aliyun_dns(g_doname, g_rr, g_ntype, inx_dev_ip6, client)

for inx_ser_ip6 in g_ipv6_ser_addr:

g_ip6_*** = 1

for inx_dev_ip6 in g_ipv6_dev_addr:

if inx_ser_ip6['value'] == inx_dev_ip6:

g_ip6_*** = 0

break

if g_ip6_*** == 1:

g_ip6_ali_reload = 1

del_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 = 0

g_ip6_ali_reload = 0

print(g_ipv6_dev_addr)

整體邏輯為開機執行會獲取一次雲端的dns配置,然後獲取本地的ipv6公網位址,與之比對,然後增加或刪除阿里雲端的dns解析配置,再更新同步配置,每隔5秒監測一次。

從此再家中搭建伺服器不在受ipv4的限制,也不花錢,nice!

群暉NAS 阿里雲DNS解析實現高效DDNS

配置主要分為兩塊 1 開放阿里云云解析api介面 能讓nas通過該介面修改你的a記錄 2 配置nas上面的客戶端進行公網ip同步。配置該ddns的所需要的東西 1 路由器撥號有公網ip 獲取10 100 192.168 172.16 23開頭的位址都是不可以的,因為這些都被運營商用做私網位址 2 有...

阿里雲 DNS 新增雲上線路的智慧型解析功能

線路豐富 流量排程精準的阿里雲dns智慧型解析功能,就能夠幫助雲上使用者實現就近接入。同時,智慧型解析還適用於以下場景 全球業務智慧型訪問場景 企業如果是開展全球業務,一般為了實現全球使用者都能獲得較好的訪問質量,通常會在中國和海外分別部署應用服務,通過智慧型解析的配置,企業可以實現將使用者訪問分別...

阿里雲上搭建私網DNS的幾種方案

slb的udp session的超時時間一定要小於ddh的udp session的超時時間。這是因為避免ddh的udp session的超時時間先與slb的超時時間,導致slb的後端vm連線中斷,從而導致客戶訪問斷連。slb下掛載的ddh的vm數量和ecs vm數量相同且權重相同,策略是加權輪詢,保...