设置互联网ipv6访问宽带家庭电脑、简单五步设置群晖NAS绑定自有域名利用ipv6实现互联网网访问

我家的电信宽带升级成了千兆ipv6,用了路由器后,家里的好几台电脑和手机都分配到了以240e开头的公网ipv6。我觉得要把ipv6充分利用起来,所以想起了远程控制家里的电脑,想自己打造智慧家庭,所以把一台用蜗牛星际改装的黑群晖设置成外网能够访问,所以参考了大神们的代码后,自己写出了阿里云域名ipv6自动解析的linux代码,在文章后面,我要写出参考的文章及我遇到的坑,以供参考。(此代码可以运用于linux任何家庭电脑或家庭虚拟机的动态域名解析,以后有机会写个windows下的)

1.注册阿里云账号。
        2.注册一个域名。
如果域名不在阿里云解析托管,需要先转过去,具体方法是联系域名提供商修改域名的DNS服务器,修改方式参考这里:

参考:https://help.aliyun.com/knowledge_detail/39844.html
然后去控制台找到云解析,将域名添加进去;

 3.到阿里云控制中心找到access key和secret并保存下来(强烈建议遵循阿里云安全最佳实践的说明 ,使用RAM子用户的AccessKey);

参考:https://help.aliyun.com/document_detail/28647.html
4.到群晖控制中心找到任务计划新增一个计划。
新增->计划的任务->用户自定义脚本

设置10分钟定时

复制以下内容,根据自己的情况修改中文部分并添加到任务设置自定义脚本

 

#!/bin/sh
aliddns_name=”你的域名前缀”
aliddns_domain=”你的域名”
aliddns_ak=”你的AccessKeyId”
aliddns_sk=”你的AccessKeySecret”

# 获取本地ipv6并与以前保存的ipv6比较
# 获取本地ipv6,我这边有三个ipv6,一个是240e开头的互联网能互相访问的,
# 一个是240e开头的临时网址,但互联网不能访问,却能访问互联网。
# 一个是fe80开头的本地ipv6,应该舍弃
# 得筛选出那个互联网能够互访的ipv6
ip=$(/sbin/ifconfig eth0 | grep 'inet6 addr' | sed 's/^.*addr://g' ) 

# 获取本地保存的已经解析过的ipv6
oldip=$(cat /root/ip.txt 2>&1)
echo $oldip
if [ -n "$oldip" ]
    then
	result=$(echo $ip | grep "$oldip")
	if [ -n "$result" ]
        then
		echo 跟以前保存的一样,没必要解析,退出。
        exit 0
    fi
fi 


# 在ip.sb网站上查到一个本地ipv6,我发现,都是临时ipv6
# 不知道再有什么选择能互访的ipv6的办法?
localip=$(curl -6 ip.sb)
# 将本机三个ipv6保存进数组
OLD_IFS="$IFS"
IFS="/"
array=($ip)
IFS=$OLD_IFS
# 取掉临时的和fe80开头的ipv6,留下能互访问的ipv6
for var in ${array[@]}
	do
	result=$(echo $var | grep "fe80")
	echo var是$var
	if [[ "$result" != "" ]]
	then
		echo 是内网ipv6退出
		continue
	fi
	if [[ $var = $localip ]]
	then
		echo 是不能互访的ipv6返回
		continue
	fi
	length=${#var}
	ipv6num=16
	if [[ $length -gt $ipv6num ]];
	then
		echo 是可以互访的ipv6,退出选择
		ip=$var
		break
	else
		echo 长度太小
		continue
	fi 
done
ip=`echo $ip`
echo $ip ###正确ip
echo "数组元素个数为: ${#array[*]}"
echo $ip >/root/ip.txt ##把ip替换到文件中


# 安装阿里云cli
cg=$(aliyun version 2>&1)
cg=${cg:0:1}
if ! [[ "$cg" -gt 0 ]] 2>/dev/null
    then
		# 下载阿里cli
		wget https://aliyuncli.alicdn.com/aliyun-cli-linux-latest-amd64.tgz
		# 解压
		tar xzvf aliyun-cli-linux-latest-amd64.tgz
		# 复制到系统文件夹
		cp aliyun /usr/local/bin
		# cli初始化设置
		aliyun configure set \
	  --profile akProfile \
	  --mode AK \
	  --region cn-hangzhou \
	  --access-key-id $aliddns_ak \
	  --access-key-secret $aliddns_sk
fi
# 得到解析id
get_recordid() {
    grep -Eo '"RecordId": "[0-9]+"' | cut -d':' -f2 | tr -d '"'
}
# 向阿里云域名cli获取解析id
query_recordid() {
    aliddns_record_id=`aliyun alidns  DescribeDomainRecords --DomainName $aliddns_domain --RRKeyWord $aliddns_name --Type AAAA`
	echo -n $aliddns_record_id
	}
# 修改解析
update_record() {
    aliyun alidns UpdateDomainRecord --RR $aliddns_name --RecordId $1 --Type AAAA --Value $ip
}
# 添加解析
add_record() {
    aliyun alidns AddDomainRecord --DomainName $aliddns_domain --RR $aliddns_name --Type AAAA --Value $ip
}
if [ "$aliddns_record_id" = "" ]
then
    aliddns_record_id=`query_recordid | get_recordid`
	echo $aliddns_record_id
fi
if [ "$aliddns_record_id" = "" ]
then
    aliddns_record_id=`add_record | get_recordid`
    echo "added record $aliddns_record_id"
else
    update_record $aliddns_record_id
    echo "updated record $aliddns_record_id"
fi

参考的文章:https://blog.csdn.net/weixin_43858126/article/details/86529782

遇到的坑:

1、这个代码是ipv4下的代码,我在改造的时候,里面的阿里云签名代码一直出错,所以我就下载了阿里云cli,用阿里云cli来解析域名,代码量变少了,设置也成功了。

2、原来代码中的get_recordid()少打了一个空格,得不到recordid,我改过来了。

3、在阿里云设置获取access key和secret时,我把RAM子用户的权限没有设置,设置后就成功了。

阿里云cli参考:https://help.aliyun.com/product/29991.html

阿里云解析参考:https://help.aliyun.com/product/29697.html

我的联系方式:QQ:306805680 微信:shuizhongyue-_

我的黑群晖网址:http://nas.cpsj.pub:5000/ 为了节省电,没有经常开,且ipv4不能访问,只能用ipv6。

 

你可能感兴趣的:(linux,远程控制)