企业项目管理、ORK、研发管理与敏捷开发工具平台

网站首页 > 精选文章 正文

黑群、宝塔、linux的阿里云自动更新ddns IPV6

wudianyun 2025-05-15 21:31:49 精选文章 2 ℃

最近不少人问我、没有IPV4的公网IP、怎么更简单的使用ipv6

像我自己就是移动宽带、不给ipv4的公网IP、所以只能选择ipv6解析到域名

你需要准备的步骤是

第一、查看你的宽带是否带有ipv6、进光猫查看是否获取到ipv6的地址(如果没有的话下面就不用看了)

第二、进入路由器看看是否获取到ipv6

第三、电脑插上网线或者手机连上wifi、查看网络配置下是否获取到ipv6地址(如果是fe80开头则表示是内网地址)

最好的办法是光猫改桥接、路由器拨号、这样所有连上路由器的设备都能获得一个外网的ipv6地址

现在开始我们的ipv6 ddns教程吧

首先我们需要有阿里云的域名、没有的话可以去申请一个

这里不做教程、价格是首次购买几块钱一年

进入阿里云的控制台


如果没有请自行创建、然后记录下这个AccessKey ID 和 AccessKey Secret

aliddnsipv6_ak="输入你的AccessKey ID"

aliddnsipv6_sk="输入你的AccessKey Secret"

aliddnsipv6_name1='域名记录如www'

aliddnsipv6_domain='主域名不带记录值如toutiao.com'

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

把上面引用的内容保存成文档如:aliddns.sh

然后修改内容、记得保留双引号和单引号

aliddnsipv6_ak="输入你的AccessKey ID"

aliddnsipv6_sk="输入你的AccessKey Secret"

aliddnsipv6_name1='域名记录如www'

aliddnsipv6_domain='主域名不带记录值如toutiao.com'

ipv6s=`ip addr show eth0 | grep "inet6.*global"

这里的eth0是网口名称、也就是你获取ipv6的网卡名

把eth0修改成你的网卡名

可以使用ifconfig来获取

如下面图片、引用的是网上的图片、ipv4内网地址、ipv6地址、前面eth0就是网卡名

黑群教程、把sh上传到黑群、右击属性复制位置



然后控制桌面》任务计划》新增》用户定义的脚本




输入刚才的位置、然后确定即可

下面是宝塔面板教程


输入我们刚才修改的sh脚本内容即可、linux的话请自行搜索如果自动运行sh脚本

Tags:

最近发表
标签列表