找回密码
 立即注册
查看: 789|回复: 5

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

[复制链接]

1

主题

3

回帖

51

积分

注册会员

积分
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 高手,这是高手!

查看全部评分

回复

使用道具 举报

0

主题

10

回帖

225

积分

中级会员

积分
225
金钱
215
HASS币
0
发表于 2025-1-19 18:11:30 | 显示全部楼层
学习了,试试,谢谢分享
回复

使用道具 举报

2

主题

36

回帖

285

积分

中级会员

积分
285
金钱
247
HASS币
0
发表于 2025-1-19 18:22:54 | 显示全部楼层
我用的cloudflare,需要有自己的域名,然后用的系统的集成
回复

使用道具 举报

0

主题

10

回帖

225

积分

中级会员

积分
225
金钱
215
HASS币
0
发表于 2025-1-23 17:49:18 | 显示全部楼层
本帖最后由 shenql 于 2025-1-23 17:58 编辑

照猫画虎,automations.yaml用下面代码还可以在网页里面编辑更新时间或频率,要方便一些
- id: DDNS6
  alias: UpdateDDNS6
  description: 动态域名解析
  triggers:
  - trigger: time_pattern
    hours: '2'
    minutes: '3'
    seconds: '4'
  conditions: []
  actions:
  - action: shell_command.update_ddns
    data: {}
  mode: single

ddns.PNG



回复

使用道具 举报

0

主题

2

回帖

29

积分

新手上路

积分
29
金钱
27
HASS币
0
发表于 2025-2-7 15:24:14 | 显示全部楼层
补充说明一下:
1. 楼主写的脚本里使用的DNSpod的api token,获得地址为https://console.dnspod.cn/account/token/token
    并不是腾讯云的api token,我今天用腾讯云的secretID 和secretKEY死磕了一天也没跑通。(飞牛的os就可以填这两项,应该是专门搞了傻瓜识别,哭死)
2. HAos安装的运行终端应该是跑在docker环境里的,无法直接运行.sh文件获得ipv6地址,请严格按照楼主的教程操作完成后,再进行测试

3. 膜拜楼主大佬
回复

使用道具 举报

6

主题

114

回帖

952

积分

高级会员

积分
952
金钱
832
HASS币
0
发表于 2025-2-7 22:46:00 来自手机 | 显示全部楼层
以前我也是用脚本。现在用论坛大佬的集成更方便。
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2025-5-5 01:12 , Processed in 1.006871 second(s), 27 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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