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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • JAVA基础知识之OutputStreamWriter流

    JAVA基础知识之OutputStreamWriter流一、OutputStreamWriter流   API说明:OutputStreamWriter是从字符流到字节流的桥接:使用指定的字符集将写入其中的字符编码为字节。它使用的字符集可以通过名称指定,也可以明确指定,或者可以接受平台的默认字符集。每次调用write()方法都会导致在给定字符上调用编码转换器。生成的字节在写入底层输出流之前在缓冲区中累积。可以指定此缓冲区的大小,但默认情况下,它…

    2022年9月12日
    0
  • 原创小说:城与兽 第一篇章在线阅读_有兽星七十二城的小说

    原创小说:城与兽 第一篇章在线阅读_有兽星七十二城的小说一名身材健壮的男子走在黄昏的海滩上。伴随着夕阳,和阵阵吹拂的海风,男子边双手抱头走边想:“这下完了呀,这是个什么地方呀,我要怎么回家呀,爸妈要怎么办呀。”他无聊的边走边踢着海滩上的石子,时不时往着被夕阳映射得泛红的天空,时不时又看看一望无际的大海,这海平面让它觉得很绝望。踢着踢着,踢到了一颗他踢不动的。“好痛呀。”男子坐在地上揉起了自己的脚。“真是衰到透顶了。衰起来连石子都…

    2022年8月29日
    0
  • Java AbstractMethodError 原因分析

    Java AbstractMethodError 原因分析背景AbstractMethodError异常对于我来说还是比较不常遇见的,最近有幸遇到,并侥幸的解决了,在这里把此种场景剖析一番,进入正题,下面是AbstractMethodError在Java的异常机制中所处的位置:现在明确了AbstractMethodError所具有的特性:1.它是Error的子类,Error类及其子类都是被划分在非检查异常之列的,就是说这些异常不能在编译阶…

    2022年6月2日
    34
  • api接口调用

    api接口调用api接口调用CURL是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP、FTP、TELNET等。最爽的是,PHP也支持CURL库。使用PHP的CURL库可以简单和有效

    2022年7月3日
    18
  • LAMP环境搭建与配置(一)

    LAMP环境搭建与配置(一)LAMP是LinuxApacheMySQLPHP的简写,即把Apache、MySQL以及PHP安装在Linux系统上,组成一个环境来运行PHP的脚本语言,通常是网站。Apache是最常用的web服务软件,而MySQL是比较小型的数据库软件,这两个软件以及PHP都可以安装在一台机器上,也可以分开安装,但Apache和PHP必须安装在同一台机器上,因为PHP是作为Apache的一个模块存在的。…

    2022年5月3日
    43
  • h3c s2000交换机配置命令_华三两台交换机做dhcp

    h3c s2000交换机配置命令_华三两台交换机做dhcp
    一、 组网需求:
    Switch的端口Ethernet1/0/5与DHCP服务器端相连,端口Ethernet1/0/1,Ethernet1/0/2,Ethernet1/0/3分别与DHCPClientA、DHCPClientB、DHCPClientC相连。
    (1)在Switch上开启DHCPSnooping功能。
    (2)设置Switch上端口Ethernet1/0/5为DHCPSnooping信任端口。
    (3)在Switch

    2022年10月15日
    0

发表回复

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

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