Skip to content
 
 

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

阿里云DNS自动更新脚本使用文档

功能概述

本脚本用于自动检测本机公网IP并更新阿里云DNS记录,支持多域名多主机记录批量更新。

脚本主要功能

  • 自动检测本机公网IP
  • 支持配置文件和命令行参数两种方式指定域名和主机记录
  • 阿里云CLI工具自动检测和安装
  • 阿里云凭证配置引导
  • DNS记录自动更新
  • 详细的日志记录功能

目录结构

/opt/audodns/
├── autodns.sh       # 主脚本文件
├── autodns.conf.example  # 配置文件示例
└── README.md        # 本说明文档

配置方法

1. 配置阿里云凭证

首次运行脚本时,会自动检查阿里云CLI工具并提示配置凭证:

aliyun configure set \
  --profile AkProfile \
  --mode AK \
  --access-key-id <yourAccessKeyID> \
  --access-key-secret <yourAccessKeySecret> \
  --region "cn-hangzhou"

配置完成后,凭证文件会保存在 /root/.aliyun/config.json

2. 配置域名和主机记录

有两种方式可以配置域名和主机记录:

方式一:通过配置文件

复制配置文件示例并编辑:

cp /opt/audodns/autodns.conf.example /etc/autodns.conf
vi /etc/autodns.conf

在配置文件中添加域名和主机记录:

# 配置单个域名
DOMAIN="example.com"

# 配置域名和主机记录
HOST_RECORDS="example.com:www,mail"

方式二:通过命令行参数

直接在命令行中指定域名和主机记录:

# 指定单个域名
/opt/audodns/autodns.sh -d example.com

# 指定多个域名
/opt/audodns/autodns.sh -d example.com -d test.org

# 指定域名和主机记录
/opt/audodns/autodns.sh -r example.com:www,mail

以服务形式运行

创建Systemd服务文件

创建一个Systemd服务文件来管理脚本运行:

vi /etc/systemd/system/autodns.service

添加以下内容:

[Unit]
Description=阿里云DNS自动更新服务
After=network.target

[Service]
Type=oneshot
ExecStart=/bin/bash /opt/audodns/autodns.sh
# 如果需要指定配置参数,可以这样写
# ExecStart=/bin/bash /opt/audodns/autodns.sh -r example.com:www,mail
WorkingDirectory=/opt/audodns
User=root

[Install]
WantedBy=multi-user.target

创建定时器文件

为了定期执行脚本,创建一个Systemd定时器文件:

vi /etc/systemd/system/autodns.timer

添加以下内容(每30分钟执行一次):

[Unit]
Description=定期执行阿里云DNS自动更新脚本

[Timer]
# 每30分钟执行一次
OnCalendar=*:0/30
Persistent=true

[Install]
WantedBy=timers.target

启用和启动服务

# 启用并启动定时器
systemctl daemon-reload
systemctl enable autodns.timer
systemctl start autodns.timer

# 查看定时器状态
systemctl list-timers autodns.timer

# 手动触发一次执行
systemctl start autodns.service

减少阿里云API请求频率的建议

  1. 调整检查间隔

    • 不要过于频繁地执行脚本,建议30分钟或更长时间执行一次
    • 修改autodns.timer文件中的OnCalendar参数来调整执行频率
  2. 添加IP变化检测

    • 在脚本中添加逻辑,只在公网IP发生变化时才调用阿里云API
    • 下面是一个简单的IP变化检测函数示例,可以添加到脚本中:
    # 检查IP是否变化
    check_ip_changed() {
        local current_ip="$1"
        local ip_cache_file="/opt/audodns/last_ip.txt"
        
        # 如果缓存文件不存在,认为IP发生了变化
        if [ ! -f "$ip_cache_file" ]; then
            echo "$current_ip" > "$ip_cache_file"
            return 0
        fi
        
        # 读取上次的IP
        local last_ip="$(cat "$ip_cache_file")"
        
        # 比较IP是否发生变化
        if [ "$current_ip" != "$last_ip" ]; then
            echo "$current_ip" > "$ip_cache_file"
            return 0
        fi
        
        # IP没有变化
        return 1
    }

    然后在main函数中添加调用:

    # 获取当前公网IP
    local public_ip=$(get_public_ip)
    if [ -z "$public_ip" ]; then
        log "ERROR" "无法获取公网IP,退出程序"
        exit 1
    fi
    
    # 检查IP是否变化,没有变化则退出
    if ! check_ip_changed "$public_ip"; then
        log "INFO" "公网IP未发生变化,无需更新DNS记录"
        exit 0
    fi
  3. 增加重试机制

    • 脚本已经包含重试机制,避免因临时网络问题导致频繁重试

将脚本编译为二进制文件

使用shc工具可以将Shell脚本编译为二进制文件,提高安全性和执行效率。

安装shc

# Ubuntu/Debian
apt update && apt install -y shc

# CentOS/RHEL
yum install -y shc

# 或者从源码编译安装
wget https://github.com/neurobin/shc/archive/refs/tags/4.0.3.tar.gz
tar -xzf 4.0.3.tar.gz
cd shc-4.0.3
make && make install

编译脚本

# 编译脚本为二进制
shc -f /opt/audodns/autodns.sh -o /opt/audodns/autodns

# 设置执行权限
chmod +x /opt/audodns/autodns

# 测试二进制文件
/opt/audodns/autodns --help

编译后的二进制文件autodns可以直接替代原脚本使用。

命令行参数说明

阿里云DNS自动更新脚本
功能:自动检测本机公网IP并更新阿里云DNS记录
用法:autodns.sh [选项]
选项:
  -h, --help          显示帮助信息
  -d, --domain DOMAIN 设置主域名,可多次使用
  -r, --record RECORD 设置域名和主机记录,格式为:域名:主机名1,主机名2
  -l, --log FILE      设置日志文件路径
  --debug             启用调试模式

日志说明

默认日志文件位于/var/log/autodns.log,可以通过-l选项指定自定义日志路径。

日志格式:YYYY-MM-DD_HH:MM:SS [日志级别] 日志信息

常见问题解决

  1. 阿里云CLI工具不存在

    • 脚本会自动尝试安装阿里云CLI工具,如安装失败,请手动安装
    • 安装命令:/bin/bash -c "$(curl -fsSL https://aliyuncli.alicdn.com/install.sh)"
  2. 凭证文件不存在

    • 请按照提示配置阿里云凭证:aliyun configure
  3. DNS记录更新失败

    • 检查阿里云凭证是否正确
    • 确认域名在阿里云DNS控制台中存在且可管理
    • 检查网络连接是否正常

脚本定期维护

  1. 定期检查日志文件,确保脚本正常运行
  2. 根据实际需求调整执行频率
  3. 当更换阿里云账号时,需要重新配置凭证

示例命令汇总

# 基本用法
/opt/audodns/autodns.sh -r example.com:www,mail

# 指定日志文件
/opt/audodns/autodns.sh -r example.com:www -l /var/log/mydns.log

# 启用调试模式
/opt/audodns/autodns.sh -r example.com:www --debug

# 查看帮助信息
/opt/audodns/autodns.sh --help

# 编译为二进制
shc -f /opt/audodns/autodns.sh -o /opt/audodns/autodns

# 启用定时器服务
systemctl enable autodns.timer
systemctl start autodns.timer

# 查看定时器状态
systemctl list-timers autodns.timer

# 手动执行一次
systemctl start autodns.service

About

自动更新aliyun域名解析

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages