1. 服务器/VPS/主机用户Telegram电报群: https://t.me/openos
    黑群晖 Synology Telegram电报群: https://t.me/nasfan
    排除公告

黑群晖 DDNS-GO 支持DSM 7.0+ 非常好用

本帖由 zzddagdca2022-02-08 发布。版面名称:群晖 Synology DSM

  1. zzddagdca

    zzddagdca Active Member

    注册:
    2021-04-23
    帖子:
    258
    如题,之前我一直用脚本计划任务来动态解析到阿里云域名,这个方法也没啥毛病稳定简单不需要安装任何东西上传一个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 域名等等就很简单了。
     
    已获得 eggman 的点赞。
  2. cn2000

    cn2000 New Member

    注册:
    2021-07-10
    帖子:
    18
    在我群晖上第二个ipv6地址才是真实地址,小白向你请教了:
    1.请问上述脚本中如何选择解析群晖中第二个ipv6地址,现时的是直接解析默认第一个的。
    2.DDNS-GO中要选择第二个ipv6地址要求填写的匹配正则表达式如何填。
     
  3. zzddagdca

    zzddagdca Active Member

    注册:
    2021-04-23
    帖子:
    258
    你进系统设置-网络设置-里面找到ipv6的设置项目,然后点击关闭 ipv6
    然后重启一下,重启后在打开,你的网卡就识别成第一个地址了,DDNS-GO也是这样。
     
  4. cn2000

    cn2000 New Member

    注册:
    2021-07-10
    帖子:
    18
    谢谢你的指教。