开始切换DDNS实现

开始切换DDNS实现

目前家里的主站点的访问,使用用的TPLINK路由器自带的TPDDNS.CN的动态域名,路由器公网地址更新,会自动更新域名解析。但是这项服务快要停止了。”因业务调整,TPDDNS服务将于2025年6月30日起正式停止*.tpddns.cn的域名解析服务。请您在停服前尽快完成服务迁移。”

官方提供了花生壳等其他几个动态域名的替代方案,不过既然免费的动态域名越来越少,而且还越来越奇怪,还不如切换为自己搞动态DDNS,以前曾写过一个文章,怎么利用华为云的API修改域名解析记录,来实现IPV6的解析,同理我们现在在那个基础上把功能完善下,支持IPV4记录的更新即可。

这次我们在xudongvp.com域名下建一个杭州主站对一个主机域名,专门用来指向家庭网络入口路由器的外网地址。相关脚本更新如下:

#!/usr/bin/sh
#. /etc/profile

# 在运行此脚本之前,请先在华为云DNS管理控制台内添加对应域名的A记录
# 并获取对应的 ZONE_ID 和 RECORDSET_ID

DOMAIN_NAME="xxxxxx.xudongvp.com"
RECORDSET_ID="XXXXXX"

# 一般来说用户名和账户名相同
USERNAME="XXXXXX"
ACCOUNTNAME="XXXXXX"
PASSWORD="XXXXXX"

# 对应解析记录的 ZONE_ID、RECORDSET_ID和PROJECT_ID,其中PROJECT_ID可以在华为云APIexplorer中的云解析服务>recordset管理>showRecordSet中填写id后的调试结果中的请求头X-Project-Id看到
ZONE_ID="XXXXXX"
PROJECT_ID="XXXXXX"


# 从外网API获取ip地址(默认开启1)
REMOTE_RESOLVE=1

# 从网卡获取ip地址(填写网卡名)
# 并请根据实际情况填写sed行数
INTERFACE="enp3s0"

# 更新IP
TARGET_IP=""

# 获取ip地址网址
GETIPURL="https://4.ipw.cn"

# End Point 终端地址 请根据地域选择,默认为北京1
IAM="iam.af-south-1.myhuaweicloud.com"
DNS="dns.cn-east-3.myhuaweicloud.com"

#认证token获取:
TOKEN_X="$(
    curl -L -k -s -D - -X POST \
    "https://$IAM/v3/auth/tokens" \
    -H 'content-type: application/json' \
    -d '{
    "auth": {
        "identity": {
            "methods": ["password"],
            "password": {
                "user": {
                    "name": "'$USERNAME'",
                    "password": "'$PASSWORD'",
                    "domain": {
                        "name": "'$ACCOUNTNAME'"
                    }
                }
            }
        },
        "scope": {
            "domain": {
                "name": "'$ACCOUNTNAME'"
            }
        }
    }
  }' | grep X-Subject-Token 
)"



TOKEN="$(echo $TOKEN_X | awk -F ' ' '{print $2}')"

#echo "TOKEN:${TOKEN}"

#获取本机IP:
if [ -z $TARGET_IP ]; then
    if [ $REMOTE_RESOLVE -eq 1 ]; then
        if [ $INTERFACE ]; then
            TARGET_IP=$(curl -s -4 --interface $INTERFACE $GETIPURL)
	    #echo "TIP-01:${TARGET_IP}"
        else
            TARGET_IP=$(curl -s -4 $GETIPURL)
        fi
    else
        if [ $INTERFACE ]; then
            TARGET_IP=$(ifconfig $INTERFACE | grep 'inet6' | grep global | grep -oE '(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))' | sed -n 1p)
        else
            TARGET_IP=$(ifconfig | grep 'inet6' | grep global | grep -oE '(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))' | sed -n 1p)
        fi
    fi
fi



#判断IP是否一致、是否需要调用API修改:
    echo $(echo "[";date "+%Y-%m-%d %H:%M:%S";echo "] ";echo "修改云解析IP为:"[$TARGET_IP]",API响应内容如下:";
    curl -X PUT -L -k -s \
    "https://$DNS/v2/zones/$ZONE_ID/recordsets/$RECORDSET_ID" \
    -H "Content-Type: application/json" \
    -H "X-Auth-Token: $TOKEN" \
    -d "{\"name\": \"$DOMAIN_NAME\",\"type\": \"A\",\"records\": [\"$TARGET_IP\"],\"ttl\": 30}";)

该脚本就不能在路由器上运行,当前我们是挂载一台内网服务器的宝塔面板上,每两分钟运行一次。如果公网IP变更,则执行API进行更新。

官网、存储、宝塔面板等各种资源入口,开始进行动态域名切换了。逐步都切换到自己的这个DDNS的域名上,自己做自己的DDNS服务商,谁也不依赖,也不需要注册其他账号或者上其他平台上去了。

好像一切变简单了。

存储、宝塔面板用自己的新域名访问了,都看着顺眼多了。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注