免费直接好用的DDNS方案

发布于 2024-10-28  911 次阅读


AI摘要:

正在生成中……


一直以来,我都在使用3322公云的DDNS服务,但由于一些特殊原因,3322的服务暂时不可用。在此期间,我转而使用Fortigate的DDNS服务。然而,由于Fortigate的DDNS域名“Fortiddns.com”注册在境外,NS服务也在境外,解析时经常遇到返回0.0.0.0或污染的问题。那么,有没有更直接、比DDNS-GO还简单的DDNS方案呢?当然有!我们可以使用阿里云CLI配合定时任务脚本,直接更新云解析DNS的值。

阿里云CLI(Alibaba Cloud Command Line Interface)是一个基于阿里云开放API的通用命令行工具。通过它,你可以在命令行界面中与阿里云产品进行交互,执行各种管理和操作任务。无论你是开发者、运维工程师,还是云计算爱好者,阿里云CLI都能为你提供极大的便利。

你可以在阿里云官方文档中阅读详细的安装指南,也可以在GitHub上下载适合自己设备的版本。

安装完成后,你需要配置阿里云CLI以便与阿里云账户进行交互。使用以下命令进行配置:

aliyun configure

按照提示输入你的阿里云AccessKey ID和AccessKey Secret以及默认的区域和输出格式,详细配置教程官网文档已给出,这里不再赘述。

请注意,需要授予AliyunDNSFullAccess权限才能正常更改DNS解析值

请先登录您域名NS服务所在的阿里云账号,创建一个如ddns.example.com的主机记录,记录值可以随意填写,然后访问如下链接:

https://next.api.aliyun.com/api/Alidns/2015-01-09/DescribeDomainRecords?params={"DomainName":"您的二级域名","RRKeyWord":"您的主机记录,不包含二级域名,如ddns"}&tab=DEBUG

此时您应看到“RecordId",请先记录下这个值,以后会用到。

接下来,我们将编写一份Bash脚本,用于利用阿里云CLi命令更新记录值:

#!/bin/bash

# 提示开始获取IP地址
# 无需必须使用此接口,任意IP获取接口均可。
echo "正在从 https://api.gymxbl.com/ip/get 获取IP地址..." 

# 获取IP地址
# 如果要使用IPV6地址,请将-4 改为-6
response=$(curl -s -4 https://api.gymxbl.com/ip/get/) 
# 我们需要jq这个工具处理json数据,请先安装它!
IP=$(echo $response | jq -r '.cip')

# 提示获取到的IP地址
echo "获取到的IP地址是: $IP"

# 提示开始更新阿里云DNS记录
echo "正在更新阿里云DNS记录..."

# 更新阿里云DNS记录
update_response=$(aliyun alidns UpdateDomainRecord --region cn-hangzhou --RecordId 您的解析记录ID --RR 您的主机记录,不包含二级域名,如ddns --Ty>
# 检查更新结果
if echo "$update_response" | grep -q "The DNS record already exists"; then
    echo "IP未更改!"
elif echo "$update_response" | grep -q "ERROR"; then
    echo "更新失败!错误信息:$update_response"
else
    echo "阿里云DNS记录更新完成!(200 OK)"
fi

在此脚本中,我们使用了jq工具处理API返回的包含IP的json数据,所以我们需要安装它:

  1. 使用 apt-get(适用于Debian/Ubuntu)sudo apt-get update sudo apt-get install jq
  2. 使用 yum(适用于CentOS/RHEL)sudo yum install epel-release sudo yum install jq
  3. 使用 dnf(适用于Fedora)sudo dnf install jq
  4. 使用 zypper(适用于openSUSE)sudo zypper install jq

现在,使用您登陆Aliyun CLi的Linux用户,执行该脚本(如ddns.sh)

sh ddns.sh

不出意外,该脚本将会把获取到的IP地址更新推送到阿里云,生效时间取决于解析记录的TTL时间。如免费版和个人版最低为600秒,那么我们可以每600秒检查更新一次:

在登陆Aliyun CLi的Linux用户的shell中,输入crontab -e 添加一行新的定时任务(新手不建议使用Vim):

*/10 * * * * /home/user/sh/ddns.sh > /dev/null

保存并退出 crontab 文件后,系统将每10分钟自动运行一次 ddns.sh 脚本,并更新DNS解析记录。这意味着您无需手动执行脚本,系统会定期检查并更新您的IP地址,确保DNS记录始终保持最新状态。

由于我们使用的是A记录而非CNAME记录,这种方式减少了中间商出问题导致服务不可用的风险。A记录直接将域名解析到IP地址,而CNAME记录则是将一个域名指向另一个域名,增加了中间环节。使用A记录可以提高解析的稳定性和可靠性,确保您的服务在网络环境中更加稳定。

此外,定时任务的设置使得整个过程自动化,减少了人为干预的可能性。这对于需要频繁更新IP地址的用户来说,极大地简化了操作流程,提高了工作效率。

通过这种方式,您可以确保您的动态IP地址始终与DNS记录保持一致,无论网络环境如何变化,都能保证服务的正常运行。这种方法不仅简单直接,而且非常高效,是解决DDNS问题的理想方案之一。

版权声明:转载时请以超链接形式标明文章原始出处和作者信息,来源孤影墨香
本文链接: https://www.iloli.xin/4263.html
访问时间:2025-02-12 04:16:56


正因为知道可以在空中翱翔,才会畏惧展翅的那一刻而忘却疾风 努力学习ing