黑群晖 NAS 瞎折腾 篇二:再用的两款DDNS解析小程序
创作立场声明:自己用着还不错的,就是单纯的分享出来,有的是借鉴其他大佬。
在用的DDNS解析服务有两个,一个超级简单(不管是X86还是ARM都可以用),一个最全(四个解析服务商,IPV4和IPV6都支持,只能X86使用,需要docker)。
用DDNS解析服务的前提(这里用阿里云域名解析,其他的域名也可以):
1.阿里云域名,在网页阿里云官网设置(申请域名,申请ACCESS KEY, 域名解析),请百度或者看其他人的文章,其他域名基本一样。
2.有公网IPV4或者有IPV6(移动肯定是IPV6)。具体查是不是IPV4和IPV6,可以问度娘。
3.还得有NAS。(黑群晖,群晖,威联通,铁威马,unraid,freenas,u-nas,OMV等都行)
一、最简单的一个DDNS解析部署(只适合阿里云,还是IPV4,不过这个X86和ARM都可以使用)。
1、进去群晖,点开控制面板,然后看又上角,不是基本模式字样了 点击一下高级模式。
2、找到系统下面的任务计划,点开任务计划。
3、点击新增,选择 计划的任务,里面的 用户自定义的脚本。
4、常规:任务名字随便改,其他的就默认就好。
5、计划:只需要更改运行频率就可以(选多长时间运行一次,自己选择,我选的是10分钟),其他默认就行。
#!/bin/sh
aliddns_name="你的域名前缀"
aliddns_domain="你的域名"
aliddns_ak="你的AccessKeyId"
aliddns_sk="你的AccessKeySecret"
aliddns_curl="curl -s whatismyip.akamai.com"
aliddns_dns="8.8.8.8"
aliddns_ttl="600"
ip=`$aliddns_curl 2>&1`
current_ip=`nslookup $aliddns_name.$aliddns_domain $aliddns_dns 2>&1`
if [ "$?" -eq "0" ]
then
current_ip=`echo "$current_ip" | grep 'Address 1' | tail -n1 | awk '{print $NF}'`
if [ "$ip" = "$current_ip" ]
then
exit 0
fi
fi
timestamp=`date -u "+%Y-%m-%dT%H%%3A%M%%3A%SZ"`
urlencode() {
# urlencode <string>
out=""
while read -n1 c
do
case $c in
[a-zA-Z0-9._-]) out="$out$c" ;;
*) out="$out`printf '%%%02X' "'$c"`" ;;
esac
done
echo -n $out
}
enc() {
echo -n "$1" | urlencode
}
send_request() {
local args="AccessKeyId=$aliddns_ak&Action=$1&Format=json&$2&Version=2015-01-09"
local hash=$(echo -n "GET&%2F&$(enc "$args")" | openssl dgst -sha1 -hmac "$aliddns_sk&" -binary | openssl base64)
curl -s "http://alidns.aliyuncs.com/?$args&Signature=$(enc "$hash")"
}
get_recordid() {
grep -Eo '"RecordId":"[0-9]+"' | cut -d':' -f2 | tr -d '"'
}
query_recordid() {
send_request "DescribeSubDomainRecords" "SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&SubDomain=$aliddns_name.$aliddns_domain&Timestamp=$timestamp"
}
update_record() {
send_request "UpdateDomainRecord" "RR=$aliddns_name&RecordId=$1&SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&TTL=$aliddns_ttl&Timestamp=$timestamp&Type=A&Value=$ip"
}
add_record() {
send_request "AddDomainRecord&DomainName=$aliddns_domain" "RR=$aliddns_name&SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&TTL=$aliddns_ttl&Timestamp=$timestamp&Type=A&Value=$ip"
}
if [ "$aliddns_record_id" = "" ]
then
aliddns_record_id=`query_recordid | get_recordid`
fi
if [ "$aliddns_record_id" = "" ]
then
aliddns_record_id=`add_record | get_recordid`
echo "added record $aliddns_record_id"
else
update_record $aliddns_record_id
echo "updated record $aliddns_record_id"
fi
6、任务设置:直接把上面的代码复制进去用户自定的脚本(更改里面 双引号里面【你的什么什么】 就行,一共改四个引号里面的)。
7、选择刚刚弄好的任务,手动运行一下,就把IP地址解析到域名了(不放心了,可以去域名后台看下解析成功了没)。
二、最全的一个DDNS解析部署,带操作界面(docker运行,X86使用)。
1、点开DOCKER容器,点开注册表,搜索ddns-go,双击下载就可以。
2、点开映像,双击刚刚下载的映像。
3、容器名字随便改(自己好分辨的名称就行),然后点开高级设置,别急着点下一步。
4、点开端口设置,容器端口不要改,本地端口改一个自己能记住的(不要和其他端口冲突)。
5、点开高级设置,自动重新启动打对勾,创建快捷方式(http://nas的IP:刚刚设置的本地端口号),然后下一步下一步知道创建好容器,最后点开桌面快捷方式。
6、①DNS服务商(你自己申请的是哪个域名就选择哪个),然后把申请的ACCESS KEY 填到下面就行。
②IPV4和IPV6只能选一个,另一个不用的一定不要启动,获取IP方式默认就好,然后把域名填入Domains里面就行。
③其他配置:要是需要外网访问这个页面了,最好设置一个用户名和密码。
7、进docker里,双击DDNS-GO这个容器,然后点开日志,出现更新域名成功,就是解析好了。可以愉快的域名访问自己的个人服务器了。
总结
用了好几年的黑群晖,这是两款稳定好用的IP自动更新解析的小程序了,其他的也用很多,但是最后只剩这俩了,希望对其他小伙伴有所帮助。
本人已经开始支持正版了 ,群晖220J(备份黑群晖用),威联通453bmini(备份黑群晖,跑其他程序)。