个人服务器实现阿里云DDNS(动态域名解析)

本文介绍了如何使用阿里云API自动更新域名解析记录,结合公网IP检测,实现实时动态DNS解析。作者分享了从创建AccessKey到编写Python脚本的完整过程,并提供了代码示例,确保当公网IP发生变化时自动更新记录。
摘要由CSDN通过智能技术生成

各位看到了点个赞么!咋都是收藏不点赞的啊!

欢迎查看我的摸爬滚打DDNS之二

摸爬滚打DDNS之一
摸爬滚打DDNS之二
摸爬滚打DDNS之三(完整版)

一、问题由来

最开始只是通过邮件发送最新的公网IP地址,再手动通过阿里云修改解析记录,但是这样很麻烦,也不够帅气。
因此希望通过我的域名服务商阿里云,自带的api解决。

本机环境

Ubuntu 20.04

二、准备工作

1.注册AccessKey

首先登录个人的阿里云账号,我的是RAM账户。各位的可以使用主账户进行使用AccessKey。
点击ACCESSKEY管理
创建你的AccessKey,并记录下来。
点击创建

2.获取域名的RecordId

这里可以通过这位大佬的方法找到RecordId。

三、阿里云API

可以通过访问修改解析记录 点击调试
点击调试
点击下方按钮减少填写内容
减少选项

填写刚刚的RecordId
在这里插入图片描述
下面的根据自己的需求填写。
可以试着在Value随便填写一个ip地址并发起调用,再去看看域名的解析记录是否发生改变,改变则调用成功。

我在测试的时候用的是原版的SDK所以在这里介绍原版内容。
查看API信息
在服务器上下载SDK

在这里插入图片描述


注:再次部署该脚本时,发现阿里云已经更新了SDK。如果使用最新的SDK出现问题,请下载与本脚本同版本的SDK。

注:再次部署该脚本时,发现阿里云已经更新了SDK。如果使用最新的SDK出现问题,请下载与本脚本同版本的SDK。

注:再次部署该脚本时,发现阿里云已经更新了SDK。如果使用最新的SDK出现问题,请下载与本脚本同版本的SDK。

pip install aliyun-python-sdk-alidns==2.6.32





复制代码
复制到自己的环境中,将最开始的获取到的AccessKey,修改到代码中。
尝试运行一下。
修改AccessKey

四、结合获取公网地址

获取公网地址python代码

from urllib.request import urlopen
from json import load
ip = load(urlopen('https://api.ipify.org/?format=json'))['ip']

将上述代码复制进复制的代码。
并将代码中的IP地址替换成变量ip。
在这里插入图片描述
代码下载 动态域名解析.zip

#!/usr/bin/env python
#coding=utf-8
from urllib.request import urlopen
from json import load
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkcore.auth.credentials import AccessKeyCredential
from aliyunsdkcore.auth.credentials import StsTokenCredential
from aliyunsdkalidns.request.v20150109.UpdateDomainRecordRequest import UpdateDomainRecordRequest

ip = load(urlopen('https://api.ipify.org/?format=json'))['ip']

credentials = AccessKeyCredential('你的key-id', '你的key-secret')
# use STS Token
# credentials = StsTokenCredential('<your-access-key-id>', '<your-access-key-secret>', '<your-sts-token>')
client = AcsClient(region_id='cn-hangzhou', credential=credentials)

request = UpdateDomainRecordRequest()
request.set_accept_format('json')

request.set_RecordId("你的域名RecordId")
request.set_RR("@")
request.set_Type("A")
request.set_Value(ip)

response = client.do_action_with_exception(request)
# python2:  print(response)
print(str(response, encoding='utf-8'))

可以结合我的另外一篇文章

#!/bin/bash
# MAYBE CHANGE THESE
ip=$(curl http://pv.sohu.com/cityjson 2>> /dev/null | awk -F '"' '{print $4}')
ip_file="/usr/local/bin/check_ip.txt"
log_file="/usr/local/bin/check_log.txt"
if [ -f $ip_file ]; then
    old_ip=$(cat $ip_file)
    echo $old_ip
    if [ $ip != $old_ip ]
    then
        echo "IP has not changed."
        python3 *.py
        echo "--------yes--------"
        echo "$ip" | s-nail  -s "ip" *****@qq.com
        echo -e "[$(date)] - $ip" >> $log_file
        echo "$ip" > $ip_file
    else
        echo "exlt"
        exit 0
    fi
fi
————————————————
版权声明:本文为CSDN博主「Yanmz_」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_37383852/article/details/119641446

放在同一个目录下
在echo "IP has not changed."下面添加语句
python3 *.py
从而实现自动检测IP变化,更新解析记录,邮件发送服务。

  • 4
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值