700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 使用阿里云DNS实现自己的DDNS服务

使用阿里云DNS实现自己的DDNS服务

时间:2018-10-25 18:59:23

相关推荐

使用阿里云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

由于这个在国外,速度很慢,因此可以采用国内的点下载,比如:

阿里:/pypi/simple

中国科学技术大学:https://pypi.mirrors./simple

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

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

接下来是主要部分代码:

G_alidns_wait_get_cnt = 0G_ipv6_ser_addr = []G_ipv6_dev_addr = []G_ip6_flg = 0G_ip6_ali_reload = 0G_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!

完整的程序下载:

/download/qq_18604707/12688723

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。