aliddns ipv6_linux系统下配置阿里DDNS(IPv6)

aliddns ipv6_linux系统下配置阿里DDNS(IPv6)IPv6日渐完善,家里的宽带和手机也都分配了ipv6全球单播地址,手机分到了/64,宽带更是分到了/56。测试了一下运营商内外的连通性也都还可以,基本能跑满带宽,IPv6终于可以用起来了,个个都是公网,不用再渴求ipv4和搞内网穿透了。适用此教程适用于基于linux的各种系统,ubuntu、centos、openwrt、群晖等等,本文只介绍IPv6,不涉及IPv4。代码aliddnsipv6_a…

大家好,又见面了,我是你们的朋友全栈君。

IPv6日渐完善,家里的宽带和手机也都分配了ipv6全球单播地址,手机分到了/64,宽带更是分到了/56。测试了一下运营商内外的连通性也都还可以,基本能跑满带宽,IPv6终于可以用起来了,个个都是公网,不用再渴求ipv4和搞内网穿透了。

适用

此教程适用于基于linux的各种系统,ubuntu、centos、openwrt、群晖 等等,本文只介绍IPv6,不涉及IPv4。

代码aliddnsipv6_ak=”阿里AccessKey ID”

aliddnsipv6_sk=”阿里Access Key Secret”

aliddnsipv6_name1=’二级域名前缀,比如使用nas.rousongs.com,此处填写nas’

aliddnsipv6_domain=’主域名,此处填写rousongs.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

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=”阿里Access Key Secret”

aliddnsipv6_name1=’二级域名前缀,比如使用nas.rousongs.com,此处填写nas’

aliddnsipv6_domain=’主域名’

第19行左右ipv6s=ip addr show eth0`,eth0为网卡名称,修改成对应网卡名称。

然后将此文件放于任意位置,在当前目录输入./aliddns.sh运行即可。

计划任务群晖,群晖在设置–计划任务里设置即可。

OpenWrt等linux都可以使用crontab执行计划任务,参考https://www.rousongs.com/1262.html

拓展

至于如何实现IPv4,有空再写。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/131150.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • CentOS镜像下载「建议收藏」

    CentOS镜像下载「建议收藏」CentOS6系统安装1、首先打开网易开源镜像站:http://mirrors.163.com/当然,大家也可以使用阿里开源镜像站:http://mirrors.aliyun.com/2、点击进入centos目录。3、因为我们选择安装centos6.5版本系统,所以点击进入6.5/目录4、我们打开里面的readme文件,找到下载地址:http://vault.cento…

    2022年6月9日
  • webservice发送短信本地部署可以但是服务器部署发送短信息中文乱码

    webservice发送短信本地部署可以但是服务器部署发送短信息中文乱码

    2020年11月9日
  • 几种常见的距离计算公式

    几种常见的距离计算公式在学习分类、聚类、预测、推荐算法的过程中常常会遇到比较两个或多个对象的相似性,而相似性的度量可以通过计算距离来实现。我们常用的距离计算公式是欧几里得距离公式,但是有时候这种计算方式会存在一些缺陷,那么就需要另外的计算方法去加以补充,本文将介绍几种在机器学习中常用的计算距离。在做很多研究问题时常常需要估算不同样本之间的相似性度量(SimilarityMeasurement),这时通常采用的方法就…

    2022年6月19日
  • Windows下更换pip源为清华源

    Windows下更换pip源为清华源打开appdata文件夹,在资源管理器的地址栏输入%appdata%后回车:新建一个pip文件夹,在pip文件夹里面新建一个配置文件pip.ini:在配置文件中输入如下内容后保存即可:[global]timeout=6000index-url=https://pypi.tuna.tsinghua.edu.cn/simpletrusted-host=pypi.tuna.tsin

    2022年6月1日
  • PHP 数组使用之道

    PHP 数组使用之道

    2021年10月26日
  • RePlugin集成AndroidAutoSize

    RePlugin集成AndroidAutoSize一、屏幕适配你可能会问“都2021年了还折腾屏幕适配?直接用dp单位适配不好吗?”,确实,如果公司的UI设计师、产品经理以及老板,能明白为什么一套UI在不同设备上显现出来的一些差异并不是bug时,开发者直接用dp单位配合一些布局技巧来进行适配是可以的,但是,实现多数情况下并不是如此美好,他们更希望看到的是UI在不同屏幕上,仅仅只是缩放的区别,为了满足这种要求,应用第三方屏幕适配方案就非常有必要了。根据在网上查到的比较好的原生屏幕适配方案有两种:smallestWidth

    2022年6月6日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号