

威联通设置阿里云动态域名解析进行外网 IPV6 访问家中 NAS
source link: https://65.chat/toss/72.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

一、路由器 IPV6 设置
- 可见我另一篇博客 《设置 openwrt 软路由,通过 ipv6 外网访问家中电脑 nas 等设备系列教程》,这里就不多讲了,各家运营商也不同。如图所示完成威联通 IPV6 配置。
- 在网络与虚交换机中打开设定

- 在设定中打开 IPV6,如图设置,DNS 自动获取就好了。

- 在网络与虚交换机中打开信息,如图 IPV6 就获取到了。

二、安装 aliyun-ddns
- 进入 container station,使用 docker 安装 aliyun-ddns,实现 IPV6 动态地址解析。

- 进入阿里云控制台,点击头像,进入 AccessKey 管理,创建 AccessKey。 记录好 AccessKey ID 和 AccessKey Secret。

- 进入 aliyun-ddns 设置,点击高级设置,并将网络选择为:Host,并按照如图所示配置环境变量。



- 环境变量值参考
环境变量名称 | 注释 | 默认值 |
---|---|---|
AKID | 阿里云的 Access Key ID。获取阿里云 AccessToken | access key id |
AKSCT | 阿里云的 Access Key Secret。 | access key secret |
DOMAIN | 需要更新的域名,可以用 “,” 隔开。<br/> 可以指定线路,用 “:” 分隔线路和域名 (线路名说明)。<br/> 例如:“baidu.com,telecom:dianxin.baidu.com”。 | my.domain.com |
REDO | 更新间隔,单位秒。建议大于等于 TTL/2。 | 300 |
TTL | 服务器缓存解析记录的时长,单位秒,普通用户最小为 600。 | 600 |
TIMEZONE | 输出日志时的时区,单位小时。 | 8 |
TYPE | 需要更改的记录类型,可以用 “,” 隔开,只能是 “A”、“AAAA” 或 “A,AAAA”。 | A,AAAA |
CNIPV4 | 检查 IPv4 地址时,仅使用中国服务器。 | false |
WEBHOOK | WEBHOOK 推送地址。 | 无 |
CHECKLOCAL | 是否检查本地网卡 IP。此选项将禁用在线 API 的 IP 检查。<br/> 网络模式必须设置为 host。<br/>(Windows 版 docker 无法读取本机 IP) | false |
IPV4NETS | 本地网卡的 IPv4 网段。格式示例:“192.168.1.0/24”。多个网段用 “,” 隔开。 | 无 |
IPV6NETS | 本地网卡的 IPv6 网段。格式示例:“240e::/16”。多个网段用 “,” 隔开。 | 无 |
- 我们打开创建的项目发现已经能正常获取到动态的公网 IPV6 地址。

- 以上方式是在 Docker 安装 sanjusss/aliyun-ddns,强烈推荐这个,是我用过的最好的,既能解析 ipv4,也能解析 ipv6,感谢 sanjusss。
另外一种方式则更为直接:脚本运行
aliddnsipv6_ak="你的Access Key ID" #双引号也别删除
aliddnsipv6_sk="Access Key Secret "
aliddnsipv6_name1='www' #直接填@好像不行
aliddnsipv6_domain='xxxooo.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 <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
- 在桌面新建 txt 文件,复制上面代码保存,上传至 NAS 对应目录改名为 aliddns.sh 并保存。
将 aliddns.sh 复制到 nas 的任意文件夹,我是复制到 /homes/admin 下,用 notepad++ 自行修改
然后 ssh 进去 nas,修改 etcconfigcrontab,添加一行
*/10 * * * * /share/CACHEDEV1_DATA/homes/admin/aliddns.sh
意思是每 10 分钟执行一次,注意改为你自己的文件路径,然后保存。
crontab /etc/config/crontab && /etc/init.d/crond.sh restart
通过域名 https://nas.65.chat:1234 即可访问,如果觉端口麻烦,可做反向代理直接通过域名访问。
Recommend
-
8
16 March 2021Necro再次升级,使用Tor+动态域名DGA 双杀Windows&Linux 版权声明:本文为Netlab原创,依据 CC BY-SA 4.0 许可证进行授权,转载请附上出处链接及本声明。 自从我们1月份公开
-
7
群晖利用DNSPod实现DDNS动态域名解析 (解析LAN、WAN或IPV6地址) 本文最后更新于2021年01月16日, 已超过113天没有更新。 如果文章内容或图片资源...
-
6
使用C语言获取DNS nameserver并进行域名解析 #include <netinet/in.h> #include <arpa/nameser.h> #include <resolv.h> int main() { res_init(); int i = 0; for (i = 0;i< _res.nscount;i++) /* _res.nscount为...
-
28
本文将详解如何使用梅林固件路由器来实现DDNS动态域名解析.梅林固件路由器软件中心里有aliddns和DDnspod两款DDNS软件,分别是阿里云和腾讯云的DDNS服务.两款软件的功能基本相同,可以根据域名所在的服务商来选择用哪一款.如果你的域名不是这两家服务商购...
-
7
OpenWRT 实现 Cloudflare 动态域名 dynamic DNS Posted 2021-01-05 | stdout 首先得有公网 IP (废话),然后你得 OpenWRT 路由器桥接直拨。 这个方法的核心是通过 ifstatus wan | jsonfilter -e '@["ipv4-address"][0].ad...
-
8
码云域名被阿里云停止解析,如果是你维护的域名该怎么办? 中国的互联网不能这么胡来,真要是胡来我们该怎么办? 今天下午咖啡君发现码云网站无法访问,随后看到开源中...
-
8
Node.js 实现阿里云域名的动态解析家用宽带申请公网 IP 往往是动态的公网 IP ,会经常变动,只能借助域名和 DDNS 使服务器可以随时被访问。 使用 Node.js 做 DDNS 也很简单,借助阿里云的 OpenAPI Explorer...
-
9
域名解析怎么弄(域名的几种解析设置方法)
-
14
pfSense使用ddns-go,实现阿里云、腾讯云动态域名解析 精选 原创 鐵血男兒 2022-10-1...
-
4
本文讲解ROS借助阿里...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK