群晖设置公网ipv6方式域名解析访问

1.环境说明

上网:电信光猫+tplink路由器(电信送的)
群晖:DSM 7.1.1-42962 Update 2
域名服务商:腾讯云

2.光猫设置

2.1 获取光猫超级用户密码

拨打电信10000号

2.2 修改光猫为桥接模式

3.路由器设置

3.1 路由器拨号上网

用管理员身份登录 TP-LINK 路由器(一般登录页面地址是 http://192.168.1.1);
进入:路由设置->上网设置,上网方式选择“宽带拨号上网”,填好之前记录的宽带账号和密码,点击“连接”按钮
请添加图片描述

3.2 开启路由器IPv6支持

点击“IPv6"设置——按下图选择”功能“及”wan口连接类型“——勾选”复用IPv4拨号链路“——点击”链接“——若设置正确,黑框部分会显示相关信息。
请添加图片描述
备注:并非所有路由器都支持IPv6,若路由器不支持,则需要更换支持的路由器。

4.群晖IPv6设置

4.1 查看群晖IPv6地址

“控制面板”——“网络”——“网络界面”——选中“局域网1(已联机)”,点击“编辑”——“IPv6”——确认下:是否“自动”获取。
请添加图片描述
请添加图片描述

4.2 测试连通性

打开cmd窗口,ping群晖的IPv6地址
比如群晖界面查看到的地址格式是:240e:aaa:eee:1111::1000/128
ping的时候“/128”去掉,直接ping:240e:aaa:eee:1111::1000
请添加图片描述
到这一步,可以实现以下功能:
1、内网范围内,IPv6地址访问群晖;
2、内网范围内,手机端"DS File“、“DS video”等软件,通过IPv6方式登录
请添加图片描述

5.腾讯云域名解析

5.1 申请域名

申请步骤略

5.2 创建API密钥

登录:腾讯云-密钥控制台
记录下ID和Token信息。
请添加图片描述

5.3 域名解析

登录到:腾讯云-域名控制台,点击“添加记录”
请添加图片描述
记录类型选择“AAAA”,这个格式指向一个IPv6地址:

请添加图片描述
请添加图片描述

扫描二维码关注公众号,回复: 16773190 查看本文章

1.主机记录可以自定义:假设申请的域名为abc123.xyz,这边加上www,那么解析的地址就是:www.abc123.xyz
2.录入群晖NAS的IPv6地址。

![请添加图片描述](https://img-blog.csdnimg.cn/1968509fab884d338101500545b2f8a5.png
点击红框内的“开始解析”
请添加图片描述
此时,我们应该就可以直接通过访问域名的方式,来访问我们的NAS了。

6 群晖DDNS设置-无需设置

“控制面板”——“外部访问”——“DDNS”——点击“新增”
请添加图片描述
特别说明:ipv6方式不需要在群晖中设置此项,从上图可以看到,群晖中DDNS界面的外部地址只有IPv4地址,没有IPv6的选项。所以此处的设置对ipv6访问无用。

7 通过脚本定时将NAS的IPV6地址同步至腾讯云DNS

此处内容参考了博主“FlySkyIce”的文章:“利用shell脚本,实现腾讯云DNSPod进行DDNS动态域名解析ipv6地址”,在此深表感谢!
文章地址:https://blog.csdn.net/weixin_43978546/article/details/113222378

脚本全文如下:

#!/usr/bin/bash    
dnspod_ddnsipv6_id="API_KEY_ID" #【API_id】将引号内容修改为获取的API的ID
dnspod_ddnsipv6_token="API_KEY_TOKEN" #【API_token】将引号内容修改为获取的API的token
dnspod_ddnsipv6_ttl="600" # 【ttl时间】解析记录在 DNS 服务器缓存的生存时间,默认600(s/秒)
dnspod_ddnsipv6_domain='替换自己所购买的域名' #【已注册域名】引号里改成自己注册的域名
dnspod_ddnsipv6_subdomain='替换为想要的名字' #【二级域名】将引号内容修改为自己想要的名字,需要符合域名规范,附常用的规范
local_net="eth0" # 【网络适配器】 默认为eth0,如果你的公网ipv6地址不在eth0上,需要修改为对应的网络适配器
# 常用的规范【二级域名】
# 【www】 常见主机记录,将域名解析为 www.test.com
# 【@】   直接解析主域名 test.com
# 【*】   泛解析,匹配其他所有域名 *.test.com

# 举例
# 在腾讯云注册域名,登陆DNSPOD,在【我的账号】的【账号中心】中,有【密钥管理】
# 点击创建密钥即可创建一个API
# 如果你在腾讯云注册域名叫【test.com】
# 那么【dnspod_ddnsipv6_domain】后面就填【test.com】
# 然后根据常用的规范/自己想要的名字在【dnspod_ddnsipv6_subdomain】填入自己需要的名字
# 现假设为【file】,那么在【dnspod_ddnsipv6_subdomain】填入:"file",你的访问地址为【file.test.com】
if [ "$dnspod_ddnsipv6_record" = "@" ]
then
  dnspod_ddnsipv6_name=$dnspod_ddnsipv6_domain
else
  dnspod_ddnsipv6_name=$dnspod_ddnsipv6_subdomain.$dnspod_ddnsipv6_domain
fi

die () {
    
    
    echo "Error: unable to find [public IPv6 address], please use the 'ip addr' command or query the network panel of the system to check the network card, and fill in the name of the network card with the IPv6 address in the 'local_net' position in the command file." >&2
    echo "IP地址提取错误: 在指定的网络适配器上[$local_net]找不到<公网IPv6地址>(不是fe80开头),请使用'ip addr'命令或在系统的网络面板查询有公网IP的网络适配器,然后在脚本的[local_net]中用填写网络适配器的名称。" >&2
    exit
}

ipv6_list=`ip addr show $local_net | grep "inet6.*global" | awk '{print $2}' | awk -F"/" '{print $1}'` || die

for ipv6 in ${ipv6_list[@]}
do
    if [[ "$ipv6" =~ ^fe80.* ]]
    then
        continue
    else
        echo select IP: $ipv6 >&1
        break
    fi
done

if [ "$ipv6" == "" ] || [[ "$ipv6" =~ ^fe80.* ]]
then
    die
fi

dns_server_info=`nslookup -query=AAAA $dnspod_ddnsipv6_name 2>&1`

dns_server_ipv6=`echo "$dns_server_info" | grep 'address ' | awk '{print $NF}'`
if [ "$dns_server_ipv6" = "" ]
then
    dns_server_ipv6=`echo "$dns_server_info" | grep 'Address: ' | awk '{print $NF}'`
fi
    
if [ "$?" -eq "0" ]
then
    echo "DNS server IP: $dns_server_ipv6" >&1

    if [ "$ipv6" = "$dns_server_ipv6" ]
    then
        echo "The address is the same as the DNS server." >&1
    fi
    unset dnspod_ddnsipv6_record_id
else
    dnspod_ddnsipv6_record_id="1"   
fi

send_request() {
    
    
    local type="$1"
    local data="login_token=$dnspod_ddnsipv6_id,$dnspod_ddnsipv6_token&domain=$dnspod_ddnsipv6_domain&sub_domain=$dnspod_ddnsipv6_subdomain$2"
    return_info=`curl -X POST "https://dnsapi.cn/$type" -d "$data" 2> /dev/null`
}

query_recordid() {
    
    
    send_request "Record.List" ""
}

update_record() {
    
    
    send_request "Record.Modify" "&record_type=AAAA&record_line=默认&ttl=$dnspod_ddnsipv6_ttl&value=$ipv6&record_id=$dnspod_ddnsipv6_record_id"
}

add_record() {
    
    
    send_request "Record.Create" "&record_type=AAAA&record_line=默认&ttl=$dnspod_ddnsipv6_ttl&value=$ipv6"
}

if [ "$dnspod_ddnsipv6_record_id" = "" ]
then
    echo "seem exists, try update." >&1
    query_recordid
    code=`echo $return_info  | awk -F \"code\":\" '{print $2}' | awk -F \",\"message\" '{print $1}'`
    echo "return code $code" >&1
    if [ "$code" = "1" ]
    then
        dnspod_ddnsipv6_record_id=`echo $return_info | awk -F \"records\":.{
     
     \"id\":\" '{print $2}' | awk -F \",\"ttl\" '{print $1}'`
        update_record
        echo "update sucessful" >&1
    else
        echo "error code return, domain not exists, try add." >&1
        add_record
        echo "add sucessful." >&1
    fi
else
    echo "domain not exists, try add."
    add_record
    echo "add sucessful" >&1
fi

7.1 脚本使用方法

根据自身实际情况,修改脚本第2-7行,文件命名为dnspod.sh,然后通过群晖"File Station"上传脚本至/volume2/homes/admin目录下,或者其他目录。
通过ssh工具,ssh到群晖后台系统下,并进入到脚本所在目录,执行如下命令:

sed -i 's/\r//g' dnspod.sh
bash dnspod.sh

执行结果:
请添加图片描述
查看脚本有没有执行报错。
如果没有报错,脚本会立即将当前的ipv6地址,同步至腾讯云域名解析界面的“记录值”里面。
如果“记录值”没有修改,或者新增加了一条记录,说明脚本设置错误,返回修改。
请添加图片描述
验证脚本:可以手工修改腾讯云网页上的“记录值”,此处的IPv6地址,然后重新运行一下dnspod.sh脚本,确认此处地址是否变更正确。

定时执行脚本

群晖——控制面板——任务计划——点击“新增”——计划的任务——用户定义的脚本
在弹窗中点击“计划”——设置一下脚本执行的频次
点击“任务设置”——用户定义的脚本,复制进如下命令:

bash /volume2/homes/admin/dnspod.sh

本文结束。

猜你喜欢

转载自blog.csdn.net/m0_37862262/article/details/128194439