0分享至
用扫码二维码
分享至好友和朋友圈
出这篇教程的原因是家里ADSL用了十几年的IPV4公网IP被电信回收了,现在家里的ADSL拨号上网只给了个100.x.x.x段的内网地址和IPV6地址,之前都是直接通过公网IP+动态DNS+路由器端口映射去实现远程访问家里的各种服务器。稳定运行了这么多年,突然直接服务全部无法访问,检查才知道公网IP变成了私网,电信投诉,工信部投诉都说不能开通公网IP功能,电信的工程师说可以通过IPV6去实现访问内网服务器。
电信ADSL私网地址
因为IPV6的地址特别难记,所以之前对IPV6一直都不感冒。但现在没办法了,只能硬着头皮升级到IPV6了。
电信分配的IPV6地址
很多人家里虽然有NAS和一些其他服务器,也包括自己的电脑,需要外部访问时,喜欢用一些诸如TEAMVIEWER,ANYDESK这些远控软件,还有frp,花生壳这类内网穿透工具,配置麻烦不说,重点是这些都是基于第三方服务器的数据转发实现的,家里的千兆网这时候却派不上任何用场,所以我从来没有用这些,一直都很鄙视诸如内网穿透这种东西,之前都是IPV4公网直连,可以直接在线远程看高清视频那种,所以今天教大家配置IPV6来实现直连服务
IPV6是什么我这里也不多介绍了,包括他的优缺点,头条里介绍有一大堆。我们直接进入正题,以配置群辉NAS的IPV6+动态DNS实现全球直连访问为例。
我们一步一步来,先配置查看路由器的IPV6(默认应该都是配置好的,正常情况下可以不管路由器)我这里以iKuai的软路由为例,查看路由器的IPV6地址,其它路由如何配置,请自行搜索或留言给我。
重点是配置NAS的IPV6地址,先登录群辉NAS的后台(我用的是黑裙DSM6.2.3版,其它版本应该差不多)打开控制面板-网络-网络界面,找到如下图所示,编辑局域网,找到IPV6选项卡,如果是禁用,将其改为自动,让其自动从路由器获取IPV6地址,如果
群辉网络配置界面
群辉IPV6配置界面
如果能获取到IPV6地址,就证明路由器的IPV6的DHCP服务工作正常,这时候你的群辉NAS就拥有了全球唯一的IPV6地址了。通过这个地址,无需路由器再做其它诸如端口映射,upnp啥的设置就可以从外网直接访问了。
我们通过浏览器测试下 http://[240e:3a1:ecd:26c2::5bf]:5000 (注意,这里的IPV6地址需要用中括号[]括起来,以表示这是IPV6地址,而非域名)
通过IPV6访问群辉
现在我们可以通过IPV6地址在任何支持IPV6的公网网络的环境下,直接访问家里的群辉服务器了。但这个地址这么长,还有可能随时会变,记住是不可能的了,这时候我们就需要借助DDNS的IPV6动态解析功能了。我们可以直接去阿里云注册一个属于自己的专属域名,.com,.cn,.net等自己喜欢的域名。作者为了表示对IPV6的厌恶,就注册了个noipv6.com的域名,专门用来做家里服务器的IPV6动态解析域名。(怎么注册?去问阿里云官方)
注册好后,登录阿里云的控制台,找到域名服务,找到自己注册的域名,管理域名解析
域名解析
添加AAA记录
添加一条AAA类型记录,名字可以写自己的NAS名字,以告诉自己这是一条指向NAS的IPV6地址,地址先填:ff03:0:0:0:0:0:0:c1 然后保存记录,以后添加新设备的解析都是这样操作。
然后点自己的头像,找到Accesskey管理界面,创建一个ACCESSKEY并记录到本地文件内,以供后续使用
ACCESSKEY管理
创建ACCESSKEY
记录好着两个值
回到群辉,我们开始配置群辉的DDNS脚本,打开控制面板,找到计划任务界面
计划任务
以ROOT权限运行脚本,脚本名字自己取
定时执行,我这里设置的每5分钟更新一次
然后输入脚本
配置如上图,脚本如下:其中aliddnsipv6_ak就是之前记录的AccessKey ID,aliddnsipv6_sk是Secret,aliddnsipv6_name1为要解析的主机名(之前阿里后台添加的AAA记录名称),aliddnsipv6_domain为你注册的域名
#!/bin/shaliddnsipv6_ak="xxxxxxx"aliddnsipv6_sk="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"aliddnsipv6_name1=dsmaliddnsipv6_domain=noipv6.comaliddnsipv6_ttl="600"if [ "$aliddnsipv6_name1" = "@" ]thenaliddnsipv6_name=$aliddnsipv6_domainelsealiddnsipv6_name=$aliddnsipv6_name1.$aliddnsipv6_domainfinow=`date`die () {echo $1ipv6s=`ip addr show eth0 | grep "inet6" | awk {print $2} | awk -F"/" {print $1}` || die "$ipv6"for ipv6 in $ipv6sdo#ipv6 = $ipv6breakdoneecho $ipv6current_ipv6=`nslookup -query=AAAA $aliddnsipv6_name 2>&1`#echo $current_ipv6current_ipv6=`echo "$current_ipv6" | grep Address:| tail -n1 | awk {print $NF}`echo $current_ipv6if [ "$?" -eq "0" ]thencurrent_ipv6=`echo "$current_ipv6" | grep Address:| tail -n1 | awk {print $NF}`echo $current_ipv6if [ "$ipv6" = "$current_ipv6" ]thenecho "skipping"fi# fix when A record removed by manual dns is always update errorelseunset aliddnsipv6_record_idfitimestamp=`date -u "+%Y-%m-%dT%H%%3A%M%%3A%SZ"`urlencode() {# urlencodeout=""while read -n1 cdocase $c in[a-zA-Z0-9._-]) out="$out$c" ;;*) out="$out`printf %%%02X "$c"`" ;;esacdoneecho -n $outenc() {echo -n "$1" | urlencodesend_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 "?$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 recordif [ "$aliddnsipv6_record_id" = "" ]thenaliddnsipv6_record_id=`query_recordid | get_recordid`#echo ----------------- $aliddnsipv6_record_idfiif [ "$aliddnsipv6_record_id" = "" ]thenaliddnsipv6_record_id=`add_record | get_recordid`echo "added record $aliddnsipv6_record_id"elseupdate_record $aliddnsipv6_record_idecho "updated record $aliddnsipv6_record_id"fi
保存,运行,去阿里云域名解析页面检查下新的IPV6地址有没有更新上去吧~
本地PING 一下你的IPV6地址,看看解析是否生效,生效了就可以直接通过域名访问你的群辉NAS了。
通过域名直接访问群辉
通过域名直接访问MSTSC远程桌面服务
熬夜写的教程,制作可能不是很详细,也可能存在错误,若有说错的地方,还望指正。
如果有不懂的地方,欢迎留言,我会一一解答的。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.
/阅读下一篇/ 返回网易首页 下载网易新闻客户端