公司没有自己的固定公网IP地址,之前采用花生壳DDNS解析进行域名访问。但是花生壳DDNS需要花钱,免费版的使用效果并不是很好,导致DDNS解析老是失败,而且域名不是很好记。后来再阿里云上购买了域名,因为没有固定公网IP,所以每次IP变化就得更改解析记录,非常不现实。后来在阿里云上找到了解决方法,思路就是使用阿里云上的API,使用脚本运行在内网服务器上,每当检测到自己公网IP变化,就调用阿里云API,修改自己域名解析到最新的公网地址上。这样就可以实现动态域名解析
1. 阿里云配置
登陆进入阿里云控制台,配置域名解析
需要调用API,或OSS存储,则需要申请阿里云Acesskeys
按照提示,创建子用户
按步骤创建好子用户,我们需要授权给子用户。
按照以下方式进行授权
然后进入子账户,创建Accesskey,创建好后,记得保存AK信息,不然进入控股台后无法查看AccessKeysecret
2内网服务器配置
2.1 AliDDNS脚本
这个脚本是在阿里云社区里面找到的,整体不用太多修改,直接拿来用即可,非常完善
#!/bin/bash
# 更新日志
# Update 20180914 :
# [Fix] 再次修复: CPU 100%占用问题
# 这次找到了AliDDNS卡100%死循环的原因,并且加了一个小的检测机制,理论上应该不会再出现
# CPU卡100%的问题了(如果有问题请私信脚本作者,谢谢!)
BuildTime="20180914"
# 专家模式开关
# 注意: 只有当你了解整个AliDDNS工作流程,并且有一定的动手能力,希望对AliDDNS脚本的更多参数进行
# 深度定制时,你可以打开这个开关,会提供更多可以设置的选项,但如果你不懂、超级小白,请不要
# 打开这个开关!因打开专家模式后配置失误发生的问题,作者不负任何责任!
# 如需打开专家模式,请将脚本文件中的 Switch_AliDDNS_ExpertMode 变量值设置为1,即可打开
# 专家模式,如需关闭,请将此值设置为0!
Switch_AliDDNS_ExpertMode="0"
echo " "
echo `date`
# ===================================================================================
#
# 下面的代码均为程序的核心代码,请不要触动任何地方的代码,直接运行脚本即可使用!
#
# ===================================================================================
# Shell环境初始化
# 字体颜色定义
Font_Black="\033[30m"
Font_Red="\033[31m"
Font_Green="\033[32m"
Font_Yellow="\033[33m"
Font_Blue="\033[34m"
Font_Purple="\033[35m"
Font_SkyBlue="\033[36m"
Font_White="\033[37m"
Font_Suffix="\033[0m"
# 消息提示定义
Msg_Info="${Font_Blue}[Info] ${Font_Suffix}"
Msg_Warning="${Font_Yellow}[Warning] ${Font_Suffix}"
Msg_Error="${Font_Red}[Error] ${Font_Suffix}"
Msg_Success="${Font_Green}[Success] ${Font_Suffix}"
Msg_Fail="${Font_Red}[Failed] ${Font_Suffix}"
# Shell变量开关初始化
Switch_env_is_root="0"
Switch_env_curl_exist="0"
Switch_env_openssl_exist="0"
Switch_env_nslookup_exist="0"
Switch_env_sudo_exist="0"
Switch_env_system_release="none"
# AliDDNS组件-变量初始化
AliDDNS_DomainName=""
AliDDNS_SubDomainName=""
AliDDNS_TTL=""
AliDDNS_AK=""
AliDDNS_SK=""
AliDDNS_LocalIP=""
AliDDNS_DomainServerIP=""
# ServerChan组件-变量初始化
Switch_ServerChan_Enable="0"
ServerChan_SCKEY=""
ServerChan_Text=""
ServerChan_Content=""
# Shell脚本信息显示
#echo -e "${Font_Green}
#=========================================================
# AliDDNS 工具 (阿里云云解析修改工具)
#
# Build: ${BuildTime}
# 支持平台: CentOS/Debian/Ubuntu
# 作者: iLemonrain (原作者: kyriosli/koolshare-aliddns)
# Blog: https://blog.ilemonrain.com
# E-mail: ilemonrain@ilemonrain.com
#========================================================
#${Font_suffix}"
# 检查Root权限,并配置开关
function_Check_Root(){
if [ "`id -u`" != "0" ]; then
Switch_env_is_root="0"
else
Switch_env_is_root="1"
fi
}
function_Check_Enviroment(){
if [ -f "/usr/bin/curl" ]; then
Switch_env_curl_exist="1"
else
Switch_env_curl_exist="0"
fi
if [ -f "/usr/bin/openssl" ]; then
Switch_env_openssl_exist="1"
else
Switch_env_openssl_exist="0"
fi
if [ -f "/usr/bin/nslookup" ]; then
Switch_env_nslookup_exist="1"
else
Switch_env_nslookup_exist="0"
fi
if [ -f "/usr/bin/sudo" ]; then
Switch_env_sudo_exist="1"
else
Switch_env_sudo_exist="0"
fi
if [ -f "/etc/redhat-release" ]; then
Switch_env_system_release="centos"
elif [ -f "/etc/lsb-release" ]; then
Switch_env_system_release="ubuntu"
elif [ -f "/etc/debian_version" ]; then
Switch_env_system_release="debian"
else
Switch_env_system_release="unknown"
fi
}
function_Install_Enviroment(){
if [ "${Switch_env_curl_exist}" = "0" ] || [ "${Switch_env_openssl_exist}" = "0" ] || [ "${Switch_env_nslookup_exist}" = "0" ]; then
echo -e "${Msg_Warning}未检查到必需组件或者组件不完整,正在尝试安装……"
if [ "${Switch_env_is_root}" = "1" ]; then
if [ "${Switch_env_system_release}" = "centos" ]; then
echo -e "${Msg_Info}检测到系统分支:CentOS"
echo -e "${Msg_Info}正在安装必需组件……"
yum install curl bind-utils openssl -y
elif [ "${Switch_env_system_release}" = "ubuntu" ]; then
echo -e "${Msg_Info}检测到系统分支:Ubuntu"
echo -e "${Msg_Info}正在安装必需组件……"
apt-get install curl dnsutils op