GithubHelp home page GithubHelp logo

aliyun-ddns-shell's Introduction

Aliyun-DDNS-shell

轻量化的shell脚本实现阿里云DDNS,不依赖docker。
直接保存在linux主机中,加上crontab定时运行即可。
支持ubuntu、群晖、debain、PVE等等,只要是linux环境基本都支持。

如何使用

  1. 下载aliyunDDNS.sh文件
  2. 修改里面的配置信息:
  • aliddns_name 例如域名是abc.def.com,这个地方就填abc
  • aliddns_domain 例如域名是abc.def.com,这个地方就填def.com
  • aliddns_ak 阿里云的access id
  • aliddns_sk 阿里云的access secret
  • aliddns_type ipv4就填A,ipv6就填AAAA
  • ipv4_url 把url的拷贝到浏览器,试试是否能获取到ipv4地址,保留一个能用的,剩下加#注释掉
  • ipv6_url 把url的拷贝到浏览器,试试是否能获取到ipv6地址,保留一个能用的,剩下加#注释掉
  • cpu 选择CPU平台,目前支持amd64和arm64
  1. 保存文件,并把aliyunDDNS.sh拷贝到主机中,可以用winscp或tftp等,只要拷进去就行
  2. 添加执行权限 chmod +x aliyunDDNS.sh
  3. 执行脚本./aliyunDDNS.sh
  4. 如果运行成功,设置crontab定时运行,3分钟或5分钟跑一次都可以

aliyun-ddns-shell's People

Contributors

yfyhboy avatar

Stargazers

songwen avatar  avatar  avatar Alpha avatar  avatar  avatar

Watchers

 avatar

aliyun-ddns-shell's Issues

这是哪里错了

解压
tar (child): aliyun-cli-linux-latest-amd64.tgz:无法 open: 没有那个文件或目录
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
复制到系统文件夹
cp: 无法获取"aliyun" 的文件状态(stat): 没有那个文件或目录
cli初始化设置
./aliyunDDNS.sh:行46: aliyun: 未找到命令
安装阿里云cli结束
本地IP地址:2409:8a30:2ea1:d6f0:8830:b9ff:fe85:84b1
读取阿里云解析记录:y.xwzjboke.xyz
./aliyunDDNS.sh:行69: /root/aliyun: 没有那个文件或目录
读取到解析记录:
读取到recordid:
未找到有效记录,准备添加记录。。。
添加解析记录:y.xwzjboke.xyz,2409:8a30:2ea1:d6f0:8830:b9ff:fe85:84b1
./aliyunDDNS.sh:行81: aliyun: 未找到命令
返回ID:
添加解析记录失败!
[root@centos Aliyun-DDNS-shell-main]#

linux 运行出错

运行提示以下出错信息,
ERROR: SDK.ServerError
ErrorCode: DomainRecordDuplicate
Recommend: https://next.api.aliyun.com/troubleshoot?q=DomainRecordDuplicate&product=Alidns
RequestId: 7092A468-B84D-5076-A1A0-C2C96D09B156
Message: The DNS record already exists.
RespHeaders: map[Access-Control-Allow-Headers:[X-Requested-With, X-Sequence, _aop_secret, _aop_signature, x-acs-action, x-acs-version, x-acs-date, Content-Type] Access-Control-Allow-Methods:[POST, GET, OPTIONS, PUT, DELETE] Access-Control-Allow-Origin:[*] Access-Control-Max-Age:[172800] Connection:[keep-alive] Content-Length:[251] Content-Type:[application/json;charset=utf-8] Date:[Fri, 09 Sep 2022 01:33:26 GMT] X-Acs-Request-Id:[7092A468-B84D-5076-A1A0-C2C96D09B156] X-Acs-Trace-Id:[d0c4839311a95a06c6345a73b572a57e]]

为了添加泛域名,我得做以下修改

感谢up主!
为了添加泛域名,我得做以下修改

'''
[root@nuc nginx]# cat ~/bin/aliyunDDNS.sh
#!/bin/sh
PATH=$PATH:/usr/local/bin
####设置自己的阿里云DDNS信息
aliddns_name="*" #子域名, 例如abc.def.com, 这里填abc
aliddns_type="A" #A是IPV4, AAAA是IPV6
#################################

####获取本机IPV4的网址
####手动测试选择一个
#ipv4_url="http://v4.ipv6-test.com/api/myip.php"
ipv4_url="http://ipv4.icanhazip.com"
#################################

####获取本机IPV6的网址
####手动测试选择一个
#ipv6_url="http://v6.ip.zxinc.org/getip"
#ipv6_url="http://v6.ipv6-test.com/api/myip.php"
ipv6_url="http://ipv6.icanhazip.com"
#ipv6_url="http://v4v6.ipv6-test.com/api/myip.php"
#################################

####CPU类型,目前仅支持arm64和amd64
#cpu="arm64"
cpu="amd64"
#################################

#####################################
####以下内容非必要不要修改###########
#####################################

####若未安装阿里云cli,则安装阿里云cli
echo $PATH
cg=$(aliyun version 2>&1)
cg=${cg:0:1}
if [[ ! "$cg" -gt 0 ]] 2>/dev/null; then
echo 下载阿里cli
wget https://aliyuncli.alicdn.com/aliyun-cli-linux-latest-$cpu.tgz
echo 解压
tar xzvf aliyun-cli-linux-latest-amd64.tgz
echo 复制到系统文件夹
cp aliyun /usr/local/bin
echo cli初始化设置
aliyun configure set
--profile akProfile
--mode AK
--region cn-hangzhou
--access-key-id $aliddns_ak
--access-key-secret $aliddns_sk
echo 安装阿里云cli结束
fi

####获取本地ip地址
if [ "$aliddns_type" == "AAAA" ]; then
ip=wget -q -O - $ipv6_url
elif [ "$aliddns_type" == "A" ]; then
ip=wget -q -O - $ipv4_url
else
echo 解析类型设置错误,退出。。。
exit 1
fi
echo "本地IP地址:$ip"

####读取阿里云解析记录
echo "读取阿里云解析记录:$aliddns_name.$aliddns_domain"
#server_ip=/root/aliyun alidns DescribeDomainRecords --DomainName $aliddns_domain --RRKeyWord $aliddns_name --Type AAAA | grep -E "Value" | cut -d '"' -f4
#text=aliyun alidns DescribeDomainRecords --DomainName $aliddns_domain --RRKeyWord $aliddns_name --Type $aliddns_type
cmd="aliyun alidns DescribeDomainRecords --DomainName $aliddns_domain --RRKeyWord $aliddns_name --Type $aliddns_type"
text=bash -c "$cmd"
echo $text
server_ip=echo $text | grep -Eo '"Value": "[0123456789abcdef:.]+"' | cut -d'"' -f4
recordid=echo $text | grep -Eo '"RecordId": "[0-9]+"' | cut -d':' -f2 | tr -d '"'
echo "读取到解析记录:$server_ip"
echo "读取到recordid:$recordid"

####根据阿里云解析记录的结果处理事件
if [ "$server_ip" = "" ]; then
#添加解析记录
echo "未找到有效记录,准备添加记录。。。"
echo "添加解析记录:$aliddns_name.$aliddns_domain,$ip"

server_ip=aliyun alidns AddDomainRecord --DomainName $aliddns_domain --RR $aliddns_name --Type $aliddns_type --Value $ip | grep -Eo '"RecordId": "[0-9]+"' | cut -d':' -f2 | tr -d '"'

cmd="aliyun alidns AddDomainRecord --DomainName $aliddns_domain --RR $aliddns_name --Type $aliddns_type --Value $ip"
bash -c "$cmd"
server_ip=bash -c "$cmd" | grep -Eo '"RecordId": "[0-9]+"' | cut -d':' -f2 | tr -d '"'
echo "返回ID:$server_ip"
if [ "$server_ip" = "" ]; then
echo "添加解析记录失败!"
exit 2
else
echo "添加解析记录成功!"
exit 0
fi
else
if [ "$server_ip" != "$ip" ]; then
#升级解析记录
echo "DNS服务器读取IP与本地IP不匹配,准备修改解析记录。。。"
echo "修改解析记录:$aliddns_name.$aliddns_domain,$ip"

aliyun alidns UpdateDomainRecord --RR $aliddns_name --RecordId $recordid --Type $aliddns_type --Value $ip

cmd="aliyun alidns UpdateDomainRecord --RR $aliddns_name --RecordId $recordid --Type $aliddns_type --Value $ip"
bash -c "$cmd"
echo "修改完成,尝试再次读取校验。。。"
sleep 10
server_ip=aliyun alidns DescribeDomainRecords --DomainName $aliddns_domain --RRKeyWord $aliddns_name --Type $aliddns_type | grep -E "Value" | cut -d '"' -f4
echo "读取完成,读取IP为:$server_ip"

	if [ "$server_ip" == "$ip" ]; then
		echo "修改解析记录成功!"
		exit 0
	else
		echo "修改解析记录失败!"
		exit 3
	fi
else
	#无需修改解析记录
	echo "DNS服务器读取IP与本地IP匹配,无需上传IP。。。"
	exit 0
fi

fi
'''

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.