阿里云 腾讯云 设置DDNS(动态域名解析)

news/2024/11/30 2:41:17/

阿里云 腾讯云 设置DDNS(动态域名解析)

搭建内网服务器时,因为运营商分配的公网ip地址是动态的。在一段时间后或者重启路光猫后,会导致公网ip变化,此时阿里云设置DNS将失效。因此需要进行动态域名解析。

阿里云没有像花生壳一样的内置到路由器的动态域名解析服务。所以,我们没办法在路由器段进行动态域名解析设置。但是,阿里云提供了DNS的API,各个语言的API都有,因此我们可以在服务器端来实现这个动态域名解析服务。

下面讲一下我实现的整个过程,我是通过go语言完成的。如下。

1. 设置DNS域名解析服务

进入阿里云的DNS服务页面,设置域名解析。这个页面,相当于是手动操作,来实现域名解析设置。这里我们根据阿里云的教程来添加解析记录。这里我设置不是真实的服务器外网IP,真实的是211,这里我设置的212,以便后面测试DDNS是否生效。

在这里插入图片描述

2. 下载SDK

然后我们打开阿里云的帮助文档,找到API文档。文档里面有详细的说明和SDK下载链接,找到对应的go链接下载,并安装到系统。因为里面没有go语言的SDK,不过还是让我找到了,他的教程估计是很久没有更新了。
go语言SDK,在下面的界面可以找到。

在这里插入图片描述

我是通过proxychains go get github.com/aliyun/alibaba-cloud-sdk-go进行安装的。

因为我们已经添加过解析记录了,所以这里要完成的代码仅仅是修改解析记录。如果是没有添加解析记录,也可以通过go语言的API来完成解析记录的添加。我最开始是测试的添加解析记录API,直接复制代码,然后运行就行了。

这里需要accessKeyIdaccesssKeySecret。这个可以通过点击右上角的头像进行获取。

在这里插入图片描述

然后recordID通过这个链接进行获取。这个教程比较老了,现在阿里云将这个参数进行更新了,不过方法还是一样的,在updateRrValue.json这个http请求的某个参数里面能找到RecordID。

找到修改解析记录的教程。这里点击调试按钮,右边的API调用窗口就能出来,可以进行生成代码和调试。

在这里插入图片描述
在这里插入图片描述
生成的代码复制到我们的工程,然后在代码里面填入accessKeyIdaccesssKeySecret,编译运行,只要没有报错,仅仅是一行返回。并在设置域名解析能看到我们的新增的解析记录,说明整个环境搭建成功了。

3. 设置DDNS

有了上面的这段代码,实现DDNS就很简单了。只需要拿到我们服务器端的公网IP,对阿里云的DNS解析解析记录进行修改就可以了。最后,写成一个服务,定时获取wanip,如果变化了,就对我们DNS解析记录进行修改即可。
这里贴出我的代码。代码里面没有域名参数项,我猜测是通过RecordID来和我们的解析记录进行对应的,这样队能对应到我们解析记录的域名了。

ppackage mainimport ("bytes""fmt""os/exec""strings""time""github.com/aliyun/alibaba-cloud-sdk-go/services/alidns"log "github.com/sirupsen/logrus"
)/* 在这里添加自己的访问秘钥 */
var accessKeyId string = ""
var accessSecret string = ""
var recordId string = ""func main() {go SetDDNSService()for {time.Sleep(time.Duration(60) * time.Second)}
}func SetDDNSService() {var WanIP stringvar RecordIP string = GetAliRecordIP() // 服务器启动时,从阿里云获取一次for {WanIP = GetWanIPStr()log.Info("Get WAN IP: ", WanIP)if WanIP != "" && WanIP != RecordIP {log.Info("Wan IP changed. Will change the record IP.")err := SetDDNS(WanIP)if err == nil {RecordIP = WanIP}} else {//log.Info("Wan IP hold.")}time.Sleep(time.Duration(60) * time.Second)}
}func SetDDNS(wanIP string) (err error) {client, err := alidns.NewClientWithAccessKey("cn-hangzhou", accessKeyId, accessSecret)request := alidns.CreateUpdateDomainRecordRequest()request.Scheme = "https"request.RecordId = recordIdrequest.RR = "@"request.Type = "A"request.Value = wanIP //GetWanIPStr() //"118.123.37.212"request.Lang = "en"request.UserClientIp = wanIP // "118.123.37.211"request.TTL = "600"request.Priority = "1"request.Line = "default"response, err := client.UpdateDomainRecord(request)if err != nil {fmt.Print(err.Error(), response)return err}fmt.Printf("response is %#v\n", response)return nil
}func GetAliRecordIP() (recordIP string) {client, err := alidns.NewClientWithAccessKey("cn-hangzhou", accessKeyId, accessSecret)request := alidns.CreateDescribeDomainRecordInfoRequest()request.Scheme = "https"request.RecordId = recordIdrequest.Lang = "en"request.UserClientIp = "118.123.37.211"response, err := client.DescribeDomainRecordInfo(request)if err != nil {fmt.Print(err.Error())return ""}log.Info("Record IP: ", response.Value)return response.Value
}func GetWanIPStr() (wanip string) {cmd := exec.Command("wsl", "curl", "ident.me")cmd.Stdin = strings.NewReader("some input")var out bytes.Buffercmd.Stdout = &outerr := cmd.Run()if err != nil {log.Error("error: ", err)return ""}//fmt.Printf("in all caps: %q\n", out.String())wanip = out.String()if wanip != "" {//log.Info("Get WAN IP ok: ", wanip)} else {log.Warn("Get WAN IP failed")}return wanip
}

运行结果:

在这里插入图片描述

上面圈出来的一行,即是官方生成的这段代码运行成功后的反馈。只要没有报错,并且有这行代码,设置域名解析上能查看到我们解析记录已经修改成功了,118.123.37.212变成了118.123.37.211说明我们的工作完成了。

在这里插入图片描述

4. 腾讯服务器域名解析

将上面的程序跑在腾讯云服务器上,即可将阿里云的域名解析为腾讯云服务器对应的IP地址。
和阿里域名解析一样,找到API文档,DNSPod相关的内容,也是有SDK和API的使用说明及在线调试,路径为:文档中心 > API 中心 > DNSPod > 记录相关接口 > 修改记录
https://cloud.tencent.com/document/api/1427/56157
在这里插入图片描述
修改解析类型可以支持IPV6地址的解析。
可以直接使用DDNS-GO,里面继承了各个域名服务商的解析服务: https://github.com/jeessy2/ddns-go


http://www.ppmy.cn/news/579233.html

相关文章

大闹天宫游戏 大闹天宫游戏机详解说明

大闹天宫游戏 大闹天宫游戏机详解说明 大闹天宫游戏机 目录 游戏简介游戏特点游戏功能 展开 游戏简介游戏特点游戏功能 展开 挣码编辑本段游戏简介 大闹天宫游戏机[1]是一款新的最大支持10000炮的捕鱼游戏机。3D高清画面,五大绚丽场景。 产品类型&#xff1…

囧囧西游之大闹天宫java_《囧囧西游之大闹天宫》攻略(1)

1-10层: 2层 开始,跟牛哥(是个最后让人无语的人物)空话了一下,出牢狱,上3层。 3层 跟嫦娥对话,拿到火眼金睛(可查仇敌,按5键可以察看仇敌对自己伤害状况。)一起往上,把钥匙和血扫光,…

h5游戏搭建教程php,H5游戏幻梦西游:笑闹天宫搭建教程及演示

利用韩国甲骨文作为前后端,腾讯轻量香港反代前后端加速。 演示站 环境要求 linux 1g内存以上 php5.6 mysql5.5 php7中gm工具无法创建数据表 mysql5.6以上服务端因为使用明文密码无法启动 我的环境:甲骨文自带Ubuntu18.04+宝塔PHP5.6、MySQL5.5、nginx 游戏下载 teambition直链…

父子齐上阵,一起“闹天宫”

在即将结束的2022中国美术学院毕业展上,有这样一幅巨大的、在宫阙中、云层上的作品引来众多观众不由自主驻足观看。 画面正中央刚刚诞生的猴王被边缘的神祗环绕,这幅长3.75米,宽2.5米的巨幅画作,很轻易就将停留在它跟前的人拉进了…

猜数字游戏详解

今天咱们来一起做一个游戏,可以算上是一个中小型的项目了,大概120多行代码,哈哈哈。来一起加油吧! 当我们面对一个不小的项目的时候,我们先不要着急着手于项目的制作,我们要先学会在脑海中对项目的整体进行…

大闹天宫授权解密

1.先打开,BuildLicenseCode.exe 2.点击生成。 3.将上面生成出来的序列码复制到源码里。 本博客声明: 本博客是一个纯技术交流博客,写出来的文章是帮大家解决一些问题,或让大家有个参考和思路。 博主不会以博客的名义去向任何人售…

第 351 场LeetCode周赛

A 美丽下标对的数目 模拟 class Solution { public:int countBeautifulPairs(vector<int> &nums) {int n nums.size();int res 0;for (int i 0; i < n; i)for (int j i 1; j < n; j)if (gcd(to_string(nums[i])[0] - 0, to_string(nums[j]).back() - 0) …

如何修改植物大战僵尸的关卡和金币

目录 首先找到植物大战僵尸的用户存档文件然后使用二进制编辑器打开用户存档文件最后通过修改数据从而修改植物大战僵尸的关卡和金币 首先找到植物大战僵尸的用户存档文件 根据你的操作系统而定 Windows XP位于游戏目录的userdata文件夹内 Windows Vista/ Windows 7默认位于隐…