如题,之前我一直用脚本计划任务来动态解析到阿里云域名,这个方法也没啥毛病稳定简单不需要安装任何东西上传一个ssh脚本就可以完成,解析地址也很到位,对于多网卡都能编辑解析(eth0处修改成其他网卡名)。 顺带的分享一下代码: ------------------------------------------------------------------------ aliddnsipv6_ak="你的id" aliddnsipv6_sk="你的password" aliddnsipv6_name1='二级域名前缀' aliddnsipv6_domain='域名' aliddnsipv6_ttl="600" if [ "$aliddnsipv6_name1" = "@" ] then aliddnsipv6_name=$aliddnsipv6_domain else aliddnsipv6_name=$aliddnsipv6_name1.$aliddnsipv6_domain fi now=`date` die () { echo $1 } ipv6s=`ip addr show eth0 | grep "inet6.*global" | awk '{print $2}' | awk -F"/" '{print $1}'` || die "$ipv6" for ipv6 in $ipv6s do #ipv6 = $ipv6 break done echo $ipv6 current_ipv6=`nslookup -query=AAAA $aliddnsipv6_name 2>&1` #echo $current_ipv6 current_ipv6=`echo "$current_ipv6" | grep 'Address: ' | tail -n1 | awk '{print $NF}'` echo $current_ipv6 if [ "$?" -eq "0" ] then current_ipv6=`echo "$current_ipv6" | grep 'Address: ' | tail -n1 | awk '{print $NF}'` echo $current_ipv6 if [ "$ipv6" = "$current_ipv6" ] then echo "skipping" fi # fix when A record removed by manual dns is always update error else unset aliddnsipv6_record_id 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=$aliddnsipv6_ak&Action=$1&Format=json&$2&Version=2015-01-09" local hash=$(echo -n "GET&%2F&$(enc "$args")" | openssl dgst -sha1 -hmac "$aliddnsipv6_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=$aliddnsipv6_name&Timestamp=$timestamp&Type=AAAA" } update_record() { send_request "UpdateDomainRecord" "RR=$aliddnsipv6_name1&RecordId=$1&SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&TTL=$aliddnsipv6_ttl&Timestamp=$timestamp&Type=AAAA&Value=$(enc $ipv6)" } add_record() { send_request "AddDomainRecord&DomainName=$aliddnsipv6_domain" "RR=$aliddnsipv6_name1&SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&TTL=$aliddnsipv6_ttl&Timestamp=$timestamp&Type=AAAA&Value=$(enc $ipv6)" } #add support */%2A and @/%40 record if [ "$aliddnsipv6_record_id" = "" ] then aliddnsipv6_record_id=`query_recordid | get_recordid` #echo '-----------------' $aliddnsipv6_record_id fi if [ "$aliddnsipv6_record_id" = "" ] then aliddnsipv6_record_id=`add_record | get_recordid` echo "added record $aliddnsipv6_record_id" else update_record $aliddnsipv6_record_id echo "updated record $aliddnsipv6_record_id" fi ------------------------------------------------------------------------ 复制保存txt文档,修改后缀名 .ssh 上传到群晖添加计划任务即可动态解析域名。 后来我因为我从华为云购买了域名想解析那上面这个方法肯定就不行了,因为上面这个方法只适用于阿里云,之前我也从docker下载过类似的镜像运行问题都是不能获取ipv6地址那就无法用ipv6解析,这次抱着试试看的心态从docker上下了个DDNS-GO最新版本,发现真是好用,支持的云多,可以解决各大云的动态解析,支持ipv4和ipv6解析,获取方式也很灵活可以通过网卡获取和外网接口获取,安装之后启动就可以使用不需要过多的设置,小白也完全没有压力,所以我开一贴分享给各位新手小白们,让你们的黑裙半洗白后就可以享受全洗白的效果,目前各大网络运营上都支持ipv6,且下发的ipv6地址都是公网ip,ipv6又大大超越ipv4不需要做端口映射不需要路由器过多的设置就可以外网访问(路由器需要开启ipv6防火墙特定端口才能让外网访问内网或者你干脆关闭ipv6的防火墙只用设备自带防火墙保护即可)。 DDNS-GO 安装步骤,先在群晖应用市场里找到docker安装,安装完了后去docker注册表里搜索ddns-go下载,启动的时候注意(划重点):A.设置启动自动重启;B.在网络里设置使用与docker host相同网络(不要用默认的网桥连接不然无法获取地址),这样就能顺利获取到群晖的ipv6地址了,具体配置DDNS-GO只需要通过你的群晖内网ip:9876 (冒号端口9876)访问,填写各大云的AccessKey ID/password 域名等等就很简单了。
在我群晖上第二个ipv6地址才是真实地址,小白向你请教了: 1.请问上述脚本中如何选择解析群晖中第二个ipv6地址,现时的是直接解析默认第一个的。 2.DDNS-GO中要选择第二个ipv6地址要求填写的匹配正则表达式如何填。