对于掌握点IT技巧的人来说,想要实现群晖外网访问是信手拿来的事,但是对于技术小白来说,如果能通过简单的菜单式设置就能达到这个目的我想很多人都会陷入这样的僵局。我非IT人员,但是对于IT有着独特的爱好,也没有系统性的学过,为了实现群晖外网访问也是走了不少歪路,从网上找教程到找到的教程不是要什么命令就是不那么详细,会有种心灰意冷的感觉,今天就把掌握到的群晖通过IPV6公网访问以图文的形式写下来,让一些技术小白少走歪路浪费那么多的时间。
第一步,当然是需要有个公网IP,家里是移动宽带,都是默认开通的,我想全国都一样。具体的设置方法可以参照 我这篇文章网上那点事:超简单傻瓜式开启移动IPV6公网方式
接下来,我们看看群晖到底有获取到这个IPV6地址没有,看下图,进入群晖控制面板的网络选项中,在网络界面里点开你的局域网1或者2,看到有IPV6地址这行后面移动有2409开头字样,结尾以/64结尾的,说明你的IPV6地址已经开通并能正常使用了,有时候这个位置会显示三行,不用管它,第一行2409开头的肯定没错。
2,进入你的阿里云后台控制面板选项,点击头像,在弹出页面点击AccessKey管里
3,按照提示创建AccessKey,并且复制下ID和Key密码
4,用电脑自带的记事本这个功能创建一个文本文件把下面的代码复制进去,并按上面说明更改#号部分内容,就四行,或者下载附件后再更改: https://pan.baidu.com/s/15WmpQgXgnOmevNPwzyi40g?pwd=fvmm 提取码: fvmm 保存时后缀名记得改成SH
aliddnsipv6_ak="#" #换成你阿里去AccessKdy的ID
aliddnsipv6_sk="#" #换成你阿里云AccessKey的密码
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 ovs_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
5,把这个文件上传到群晖的home目录下(原则上是任何一个文件夹都行,最好不是中文文件夹内。如果上传上去后文件类型是TXT的话只需要在这里重新命名后缀为sh它会自动改成SH文件。点属性复制下这个文件在群晖里的路径地址,待会会用到
6,打开群晖控制面板,任务计划里新建任务,常规里任务名称随便写,用户帐户选root,点已启动
7,计划设为第天,运行频率每10分钟,如果上面显示首次运行时间为00:00的话记得最后运行时间改成23:50
8,框内把刚才那个aliyuddns文件的路径复制进去,然后点确定,再点一下运行
9,再进你的阿里云域名这页点解析
10,看看解析记录里有没有一条解析记录,这是刚才在创建任务计划的时候自动生成的,如果有了,那么恭喜,可以通过你刚才设置的二级域名可以正常访问了,记得后面加端口号,群晖默认5000,建议刚才编辑的aliyunddns文件里的二级域名设为www 因为后续创建密码管理器需要用到的SSL证书会有要求,如果不打算装密码管理器那无所谓,如http://www.******:5000
假如到这一步,解析记录里没有,OK,简单,回到刚才你上传到群晖的那个ALIYUDDNS文件,右建用文本编辑器打开,把20行里的ovs_eth0改成eth0 再进入刚才的任务计划那里选择刚才创建的那个任务,点运行,这时候阿里云域名解析记录里就有一条解析记录了,从此,在世界的任何角落,愉快的访问你的群晖吧