设为首页
收藏本站
积分充值
切换到宽版
首页
Portal
学院
BBS
商城
导读
Guide
VIP会员
邀请码
广播
Follow
专辑
Collection
产品
帮助中心
登录
注册
隔壁网
»
学院
›
NAS讨论
›
综合讨论
›
Buffalo Nas启用阿里云DDNS实现动态域名解析 ...
返回列表
发布新帖
[巴法络]
Buffalo Nas启用阿里云DDNS实现动态域名解析
微信扫一扫 分享朋友圈
已有
1305589
人穿越成功
4364
2
iFuture
VIP
Lv.3
发表于 2021-1-15 13:46:54
|
查看全部
阅读模式
来吧兄弟,一起玩一起讨论!
您需要
登录
才可以下载或查看,没有账号?
注册
×
阿里云上RAM子账号的配置是通用的,可以参考群晖等一系列教程。
由于buffalo的机器都比较老了,受机能限制,获取公网IP地址可能为空值,导致陷入无限空值的死循环。随提供如下脚本供各位使用。相比网上的各种shell脚本,添加了IP检查功能。
需要替换阿里云AK/SK,以及域名地址等内容。
#!/bin/bash
echo "[$(date "+%G/%m/%d %H:%M:%S")] AliDDNS.sh start..."
function Check_IP() {
IP=$1
VALID_CHECK=$( echo $IP| awk -F. '$1<=255&&$2<=255&&$3<=255&&$4<=255{print "yes"}' )
if echo $IP| grep -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" > /dev/null ; then
if [ ${VALID_CHECK:-no} == "yes" ]; then
echo "[$(date "+%G/%m/%d %H:%M:%S")] IP $IP available."
CheckResult="Pass"
else
echo "[$(date "+%G/%m/%d %H:%M:%S")] IP $IP not available!"
CheckResult="Reject"
fi
else
echo "[$(date "+%G/%m/%d %H:%M:%S")] IP format error!"
CheckResult="Reject"
fi
}
while true
do
# 设置需要DDNS的地址,格式为 AliDDNS_SubDomainName.AliDDNS_DomainName ,
# 例如 AliDDNS_DomainName 为 example.com, AliDDNS_SubDomainName 为 ddns ,
# 连接起来就是 ddns.example.com
#
# 设置需要DDNS的域名 <DomainName>
AliDDNS_DomainName="abc.cn"
# 设置需要DDNS的子域名 <SubDomainName>
AliDDNS_SubDomainName="abc"
# 设置域名记录的TTL (生存周期)
# 免费版产品最低为600(10分钟)~86400(1天), 付费版(企业版)包括以上范围, 还可以按照购买产品配置设置为:
# 600(10分钟)、120(2分钟)、60(1分钟)、10(10秒)、5(5秒)、1(1秒),
# 请按照自己的产品配置和DDNS解析速度需求妥善配置TTL值, 免费版设置低于600的TTL将会报错。
AliDDNS_TTL="600"
# 设置阿里云的AccessKeyId/AccessKeySecret,
# 设置阿里云的Access Key
AliDDNS_AK="LTAI4GD3zJDMZYMtVFYS"
# 设置阿里云的Secret Key
AliDDNS_SK="8p2D9fA1fxKYnVuhmdoMy8YFL"
# 设置获取本机IP需要执行的命令 (用于nslookup命令获取DDNS域名的当前IP)
AliDDNS_LocalIP="curl -s whatismyip.akamai.com"
# 设置解析使用的DNS服务器 (推荐使用 223.5.5.5/223.6.6.6 , 毕竟都是阿里家的东西)
AliDDNS_DomainServerIP="223.5.5.5"
# 获取本机公网IP
AliDDNS_LocalIP=`$AliDDNS_LocalIP 2>&1` || die "$AliDDNS_LocalIP"
# 获取DDNS域名当前解析记录IP
AliDDNS_DomainIP=`nslookup $AliDDNS_SubDomainName.$AliDDNS_DomainName $AliDDNS_DomainServerIP 2>&1`
# 判断上一条命令的执行是否成功
if [ "$?" -eq "0" ]
then
AliDDNS_DomainIP=`echo "$AliDDNS_DomainIP" | grep 'Address:' | tail -n1 | awk '{print $NF}'`
# 检查本机IP是否合规,如果合规则将本机IP与域名获取IP进行对比
Check_IP $AliDDNS_LocalIP
if [ "$CheckResult" = "Pass" ]
then
if [ "$AliDDNS_LocalIP" = "$AliDDNS_DomainIP" ]
then
echo "[$(date "+%G/%m/%d %H:%M:%S")] Local IP ($AliDDNS_LocalIP) is the same with Domain IP ($AliDDNS_DomainIP)"
echo "[$(date "+%G/%m/%d %H:%M:%S")] No change modified ..., AliDDNS.sh will take 5 minute break."
sleep 300
continue
fi
fi
fi
# 如果IP发生变动,开始进行修改
# 生成时间戳
timestamp=`date -u "+%Y-%m-%dT%H%%3A%M%%3A%SZ"`
# URL加密函数
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
}
# URL加密命令
enc() {
echo -n "$1" | urlencode
}
# 发送请求函数
send_request() {
local args="AccessKeyId=$AliDDNS_AK&Action=$1&Format=json&$2&Version=2015-01-09"
local hash=$(echo -n "GET&%2F&$(enc "$args")" | openssl dgst -sha1 -hmac "$AliDDNS_SK&" -binary | openssl base64)
/opt/bin/curl -s "http://alidns.aliyuncs.com/?$args&Signature=$(enc "$hash")"
}
# 获取记录值 (RecordID)
get_recordid() {
grep -Eo '"RecordId":"[0-9]+"' | cut -d':' -f2 | tr -d '"'
}
# 请求记录值 (RecordID)
query_recordid() {
send_request "DescribeSubDomainRecords" "SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&SubDomain=$AliDDNS_SubDomainName.$AliDDNS_DomainName&Timestamp=$timestamp"
}
# 更新记录值 (RecordID)
update_record() {
send_request "UpdateDomainRecord" "RR=$AliDDNS_SubDomainName&RecordId=$1&SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&TTL=$AliDDNS_TTL&Timestamp=$timestamp&Type=A&Value=$AliDDNS_LocalIP"
}
# 添加记录值 (RecordID)
add_record() {
send_request "AddDomainRecord&DomainName=$AliDDNS_DomainName" "RR=$AliDDNS_SubDomainName&SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&TTL=$AliDDNS_TTL&Timestamp=$timestamp&Type=A&Value=$AliDDNS_LocalIP"
}
# 判断RecordIP是否为空
if [ "$AliDDNS_RecordID" = "" ]
then
AliDDNS_RecordID=`query_recordid | get_recordid`
fi
if [ "$AliDDNS_RecordID" = "" ]
then
AliDDNS_RecordID=`add_record | get_recordid`
echo -e "[$(date "+%G/%m/%d %H:%M:%S")] Added RecordID : $AliDDNS_RecordID \n"
else
update_record $AliDDNS_RecordID
echo -e "[$(date "+%G/%m/%d %H:%M:%S")] Updated RecordID : $AliDDNS_RecordID \n"
fi
# 输出最终结果
if [ "$AliDDNS_RecordID" = "" ]; then
# 输出失败结果 (因为没有获取到RecordID)
echo "[$(date "+%G/%m/%d %H:%M:%S")] DDNS Update Failed !"
else
# 输出成功结果
echo "[$(date "+%G/%m/%d %H:%M:%S")] DDNS Update Success, New IP is : $AliDDNS_LocalIP"
fi
sleep 30
done
复制代码
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
电梯直达
评论
2
long_sz
Lv.4
发表于 2021-1-16 23:58:19
|
查看全部
虽然用不上,还是点赞楼主
回复
点赞
使用道具
举报
jethroso
Lv.3
发表于 2021-2-12 19:26:08
|
查看全部
不错不错,顶一个!
回复
点赞
使用道具
举报
返回列表
发布新帖
回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
iFuture
Lv.3 发热37.1℃
贡献
0
丝瓜
376
精华
0
+ 关注
发消息
图文热点
PVE 添加和卸载虚拟磁盘
0 人气
#VIP课程
PVE 修改开机启动设备
0 人气
#VIP课程
傻瓜教程——群晖7.2微信订阅推送系统信息
13308 人气
#黑白群晖
9月21更新DSM7.2.2AME完美解码!解决Survei
23330 人气
#黑白群晖
推荐话题
1
【2024年9月1日更新】黑群晖DSM7.21/DSM7.22的引导文件
404968 阅读
wjq_xp
2
DIY NAS之我的群辉计划--已成功 提供教程与软件--更新4.2-3202
399438 阅读
WolfX700
3
最新最齐Intel 1037U低功耗ITX主板大全,不断更新中(含特色点评)
298666 阅读
t39best
4
最新最齐四个或以上3.5寸硬盘位的ITX NAS机箱大全,不断更新中
230474 阅读
t39best
5
群晖DIY-NAS官方序列号修改小发现
298538 阅读
snyzf
最新发布
PVE 修改开机启动设备
PVE 添加和卸载虚拟磁盘
hdatoms关了吗?还是改了地址?
2025年3月14日签到记录贴
2025年3月13日签到记录贴
2025年3月12日签到记录贴
求馒头一枚
2025年3月11日签到记录贴
浏览过的版块
每日签到
闲情茶馆
新开微信群,想加的同学点击链接查看。
[点击链接查看加入方法]
关于我们
关于我们
加入我们
新闻动态
联系我们
服务支持
官方商城
成功案例
常见问题
售后服务
投诉/建议联系
support@gebi1.cn
未经授权禁止转载,复制和建立镜像,
如有违反,追究法律责任
关注公众号
添加微信客服
Copyright © 2001-2025
隔壁网
版权所有
All Rights Reserved.
粤ICP备14056481号-1
关灯
在本版发帖
扫一扫添加微信客服
返回顶部
快速回复
返回顶部
返回列表