『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 134|回复: 0

[基础教程] 如何在HA系统上实现ipv6的ddns脚本(DNSpod)

[复制链接]

1

主题

4

帖子

51

积分

注册会员

Rank: 2

积分
51
金钱
47
HASS币
0
发表于 2024-11-11 00:03:37 | 显示全部楼层 |阅读模式
一,前言
      由于我的ha是直接下载官网的虚拟机ovf文件导入的esxi平台部署,家里的ipv6是直接桥接到虚拟机的,通过路由器自带的ddns没办法针对虚拟机的ipv6做4A记录的更新,于是就想自己写一个脚本定期更新。
二,操作步骤
      登录DNSpod网站,添加一个4A记录

   账号管理-API秘钥-创建token(保存好ID和token)


    使用SSH工具登录HA系统
    cd /config           #进入到配置文件目录下
    sudo nano ddns.sh    #创建并编辑脚本文件
    复制如下代码(DNSpod可以直接使用,其它域名商的话 步骤也基本一致,稍微调整下API调用地址和参数即可即可):
===============================================================

#!/bin/bash

# 配置部分
API_TOKEN="ID,Token"  # 直接使用API Token
DOMAIN="xxx.com"         # 替换为你的域名
SUB_DOMAIN="xx"            # 设置子域名,比如我的子域名是上图所示的ha
RECORD_TYPE="AAAA"         # DNS记录类型(AAAA记录为IPv6)

# 日志文件路径
LOG_FILE="/config/ddns.log"

# 获取当前网卡的IPv6地址
CURRENT_IP=$(curl -s https://ipv6.icanhazip.com)

# 如果无法获取公网IP,记录错误并退出
if [ -z "$CURRENT_IP" ]; then
    echo "无法获取当前IPv6地址,请检查网络。" | tee -a $LOG_FILE
    exit 1
fi

# 获取当前DNSPod记录的IP
RECORD_INFO=$(curl -s -X POST https://dnsapi.cn/Record.List -d "login_token=$API_TOKEN&format=json&domain=$DOMAIN&sub_domain=$SUB_DOMAIN")

RECORD_ID=$(echo $RECORD_INFO | jq -r ".records[0].id")
RECORD_IP=$(echo $RECORD_INFO | jq -r ".records[0].value")

# 如果获取不到记录ID,输出错误并退出
if [ -z "$RECORD_ID" ]; then
    echo "无法从DNSPod获取记录ID,请检查API或域名设置。" | tee -a $LOG_FILE
    exit 1
fi

# 检查当前IP和DNSPod记录的IP是否相同
if [ "$CURRENT_IP" == "$RECORD_IP" ]; then
    echo "$(date): IP 未改变,无需更新。当前IP:$CURRENT_IP" | tee -a $LOG_FILE
    exit 0
fi

# 更新DNS记录
UPDATE_RESULT=$(curl -s -X POST https://dnsapi.cn/Record.Modify -d "login_token=$API_TOKEN&format=json&domain=$DOMAIN&sub_domain=$SUB_DOMAIN&record_id=$RECORD_ID&record_type=$RECORD_TYPE&value=$CURRENT_IP&record_line_id=0")

# 检查更新结果
if [ "$(echo $UPDATE_RESULT | jq -r '.status.code')" == "1" ]; then
    echo "$(date): DNSPod记录已更新为新IP:$CURRENT_IP" | tee -a $LOG_FILE
else
    echo "$(date): DNSPod更新失败:$(echo $UPDATE_RESULT | jq -r '.status.message')" | tee -a $LOG_FILE
fi

===================================================================================================
输入后,按Ctrl+x 退出保存

sudo chmod 777 ddns.sh         #给脚本文件添加权限
sudo nano configuration.yaml        #进入配置脚本文件
输入如下命令:
======================

shell_command:
  update_ddns: '/config/ddns.sh'
=====================
输入后,按Ctrl+x 退出保存

sudo nano automations.yaml       #进入到自动化配置脚本

输入一下命令:
======================================

- alias: Update DDNS
  description: 每两小时更新一次DDNS
  trigger:
    - platform: time_pattern
      hours: "/2"  # 每两小时触发一次
  action:
    - service: shell_command.update_ddns
======================================

输入后,按Ctrl+x 退出保存
最后 reboot           #重启下系统

到此处ddns.sh已经实现每2小时周期性执行了,执行日志可以通过查看ddns.log文件 具体命令:cat /config/ddns.log

可能有小伙伴问为啥不用crontab,因为没有cron。。而且官网下载的这个虚拟机用的s6轻量级的进程管理,折腾起来有点麻烦,后面看了下HA自带的自动化脚本也可以就改了方案



评分

参与人数 1金钱 +12 收起 理由
隔壁的王叔叔 + 12 高手,这是高手!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-22 18:33 , Processed in 0.152648 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表