Code Monkey home page Code Monkey logo

aliddnsbash's Introduction

AliDDNSBash

介绍

如果使用了阿里云(万网)的域名解析服务的话,那么就可以通过它提供的API,使用HTTP访问动态修改解析地址,以实现DDNS的功能。阿里云也提供了一些语言的SDK,但是并没有Shell版本的。

所以只能自力更生,写了一个Shell脚本来访问API。

注意:此脚本只实现了调用修改域名解析记录获取解析记录列表的API的功能,并没有完整实现整个SDK。但是因为脚本已经实现了API的签名机制,所以很容易实现其他API的调用。

本脚本在OpenWRT中测试通过。(也就是在这种场合会连个Python都跑不了,而一定要使用Shell…)

参考:阿里云解析API文档

功能

  • 能在 OpenWRT 上原生的 ash 中执行。
  • 仅在当前IP地址和域名解析设置不同时,发起更新请求。(本机当前IP地址通过3322.org提供的API 进行查询,域名的解析设置通过API:DescribeDomainRecordInfo 查询。)
  • 还没在脚本中分析API执行的结果,只是单纯打印出来。

使用方法

  1. 安装依赖

首先需要一个shell(目标是支持所有符合 POSIX 标准的 shell,在 ashbash 上测试通过)。

然后安装curlopenssl-util。这些软件包在OpenWRT下可直接使用 opkg 命令安装。

  1. 修改脚本的setting代码段,其中DomainRecordId不清楚的话暂时不用修改,DNSServer修改为你在万网上使用的DNS服务器。如:
AccessKeyId="MyID"
AccessKeySec="MySecret"
DomainRecordId="00000"
DomainRR="www"
DomainName="example.com"
DomainType="A"
DNSServer="dns9.hichina.com"
  1. 如果不清楚DomainRecordId的话,修改main函数,在里面调用describe_record,如:
	main()
	{
		describe_record
		#update_record
	}

然后执行这个脚本。如果没问题的话,就能获取到域名的所有解析记录的列表了:

{"PageNumber":1,"TotalCount":1,"PageSize":1,"RequestId":"0000","DomainRecords":
  {"Record":[{"RR":"www","Status":"ENABLE","Value":"8.8.8.8",
  "RecordId":"21332133","Type":"A","DomainName":"example.com",
  "Locked":false,"Line":"default","TTL":"600"},]}
  }HttpCode:200

上面的结果中,RecordId为21332133。得到结果后再修改DomainRecordId为正确的值。

  1. 修改main函数:
	main()
	{
		#describe_record
		update_record
	}

执行脚本即可。脚本会在本机IP地址和当前域名解析设置不同的时候调用API更新设置。

aliddnsbash's People

Contributors

echo094 avatar h46incon avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

aliddnsbash's Issues

Signature Does Not Match....

{"Recommend":"https://error-center.aliyun.com/status/search?Keyword=SignatureDoesNotMatch&source=PopGw","Message":"Specified signature is not matched with our calculation. server string to sign is:GET&%2F&AccessKeyId%.........%26Action%3DDescribeDomainRecords%26DomainName%3Dsaxsss.com%26Format%3DJSON%26SignatureMethod%3DHMAC-SHA1%26SignatureNonce%3D0a20241b9f5dbs706e7f933551c2140b%26SignatureVersion%3D1.0%26Timestamp%3D2018-05-31T05%253A47%253A56Z%26Version%3D2015-01-09","RequestId":"A80921C7-58E2-4AAD-9D7E-F3D8C10CD931","HostId":"alidns.aliyuncs.com","Code":"SignatureDoesNotMatch"}HttpCode:400

万由网盘

APT 没有openssl-util 只有OPENSSL,也没有dig 你的这个脚本可以用吗?dig 可以用什么其他的代替吗?

脚本执行成功,就是没有正确同步

image

CentOS Linux release 7.7.1908
正确是本机ip
IP : 218.91.27.8
错误的(用来测试是否同步的ip)218.91.27.99
请问:
我是企业版本dns,我先在alidns控制台添加此条目,TTL=1分钟,为何我在计算机上执行了一下,TTL反而变成了10分钟,另外连带了我其他正常使用的A记录TTL也变成了10分钟?

因配置错误导致的的 SignatureDoesNotMatch

main函数中, 若每次只执行describe/update中的一种, 没有问题。 但若将main函数改为 如下形式, 将会报

SignatureDoesNotMatch

错误

main()                
{                                     
        describe_record                     
        update_record             
}

树莓派上运行卡死

在树莓派上运行这个脚本后运行到rand_num后 就不在继续运行了
fierywing@raspi4:~/aliddns$ sh ali_ddns.sh

time_stamp: 2021-02-01T19:31:00Z
rand_num: 8b2e338a224708b4b7970ce098ddc5d2
到这之后就卡死不动了

OpenSSL 1.1.0版本获取随机数命令变化

你好,我在OpenSSL1.1.0版本上运行脚本时报错,发现是脚本第27行
rand_num=$(openssl rand 16 -hex)
这句的返回结果为"Extra arguments given. rand: Use -help for summary."
将其修改为rand_num=$(openssl rand -hex 16),也就是调换了下参数顺序后则可以继续正常运行。

修改脚本退出值

现在脚本的退出值除了成功修改以外一直为1,建议改为0。如果让它以service形式运行的话,退出值为1会导致service永远是失败状态。

没有返回 RecordId

{"PageNumber":1,"TotalCount":0,"PageSize":20,"RequestId":"8BC9DE56-CE15-435A-AB15-609D5842478B","DomainRecords":{"Record":[]}}HttpCode:200

在群晖6.2.1系统中不可以更新域名

在群晖6.2.1系统中可以查询域名,但是在更新域名时报SignatureDoesNotMatch。

经排查,发现群晖6.2.1自带的sort命令(version: 8.24)在排序时会把RR字段排到RecordId之后(正常情况下应该是RR排在RecordId之前,第二个R字符比e字符的ASCII码要小)。

解决办法,修改 LC_COLLATE=C 为 LC_ALL=C 。

在群晖6.2.1和Ubuntu 18.04.4中通过。

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.