DDNS

DDNS 环境变量配置文档

概述

DDNS 支持通过环境变量进行配置,环境变量的优先级为:命令行参数 > 配置文件 > 环境变量

所有环境变量都以 DDNS_ 为前缀,后跟参数名(推荐全大写),对象和属性分隔符用_分割。

export DDNS_XXX=”xxx” 命令作用于当前主机 docker run -e DDNS_XXX=”xxx” 命令作用于容器内

环境变量完整参数列表

环境变量 参数格式 描述 示例
DDNS_CONFIG 文件路径,支持逗号或分号分隔多个路径 指定配置文件路径,支持多个配置文件 DDNS_CONFIG="config.json"DDNS_CONFIG="cloudflare.json,dnspod.json"
DDNS_DNS 51dnsalidnsaliesacallbackcloudflaredebugdnscomdnspod_comdnspodedgeonehehuaweidnsnoiptencentcloud DNS 服务商 DDNS_DNS=cloudflare
DDNS_ID 依 DNS 服务商而定 API 账号 或 ID DDNS_ID="user@example.com"
DDNS_TOKEN 依 DNS 服务商而定 API 授权令牌或 Secret DDNS_TOKEN="abcdef123456"
DDNS_ENDPOINT URL(http 或 https 协议) 自定义 API 地址 DDNS_ENDPOINT=https://api.dns.cn
DDNS_IPV4 域名,数组或逗号分隔字符串 IPv4 域名列表 DDNS_IPV4='["t.com","4.t.com"]'
DDNS_IPV6 域名,数组或逗号分隔字符串 IPv6 域名列表 DDNS_IPV6=t.com,6.t.com
DDNS_INDEX4 数字、default、public、url:、regex:、cmd:、shell:,可为数组 IPv4 获取方式 DDNS_INDEX4="[0,'regex:192.168.*']"
DDNS_INDEX6 数字、default、public、url:、regex:、cmd:、shell:,可为数组 IPv6 获取方式 DDNS_INDEX6=public
DDNS_TTL 整数(单位:秒),依服务商而定 设置 DNS TTL DDNS_TTL=600
DDNS_LINE 依服务商而定,如:电信、移动 DNS 解析线路 DDNS_LINE=电信
DDNS_PROXY http://host:port 或 DIRECT,支持多代理数组或分号分隔 HTTP 代理设置 DDNS_PROXY="http://127.0.0.1:1080;DIRECT"
DDNS_CACHE true、false 或文件路径 启用缓存或指定缓存文件路径 DDNS_CACHE="/tmp/cache"
DDNS_SSL true、false、auto 或文件路径 设置 SSL 验证方式或指定证书路径 DDNS_SSL=false
DDNS_SSL=/path/ca.crt
DDNS_LOG_LEVEL DEBUG、INFO、WARNING、ERROR、CRITICAL 设置日志等级 DDNS_LOG_LEVEL="DEBUG"
DDNS_LOG_FILE 文件路径 设置日志输出文件(默认输出到终端) DDNS_LOG_FILE="/tmp/ddns.log"
DDNS_LOG_FORMAT Python logging 格式模板 设置日志格式 DDNS_LOG_FORMAT="%(message)s"
DDNS_LOG_DATEFMT 日期时间格式字符串 设置日志时间格式 DDNS_LOG_DATEFMT="%m-%d %H:%M"

注意: 数组确认字符串引号,可打印出来查看

基础配置参数

配置文件路径

DDNS_CONFIG

DNS 服务商

DDNS_DNS

DDNS_ENDPOINT

域名配置

IPv4 域名列表

DDNS_IPV4

IP 获取方式

IPv4 获取方式

DDNS_INDEX4

网络配置

代理设置

DDNS_PROXY

系统配置

缓存设置

DDNS_CACHE

SSL证书验证

DDNS_SSL

日志配置

DDNS_LOG_LEVEL

DDNS_LOG_FILE

DDNS_LOG_FORMAT

DDNS_LOG_DATEFMT

使用示例

Docker 环境变量示例

docker run -d \
  -e DDNS_DNS=dnspod \
  -e DDNS_ID=12345 \
  -e DDNS_TOKEN=your_token_here \
  -e DDNS_IPV4=example.com \
  -e DDNS_IPV6='["ipv6.example.com","example.com"]' \
  -e DDNS_INDEX4=["public", 0] \
  -e DDNS_INDEX6=public \
  -e DDNS_TTL=600 \
  -e DDNS_LOG_LEVEL=INFO \
  -e DDNS_LOG_FORMAT="%(asctime)s %(levelname)s [%(module)s]: %(message)s" \
  -e DDNS_LOG_DATEFMT="%Y-%m-%dT%H:%M:%S" \
  --network host \
  newfuture/ddns

复杂配置示例

#!/bin/bash
# 阿里云 DNS 高级配置
export DDNS_DNS="alidns"
export DDNS_ID="your_access_key_id"
export DDNS_TOKEN="your_access_key_secret"

# 多域名配置
export DDNS_IPV4='["ddns.example.com", "home.example.com", "server.example.com"]'
export DDNS_IPV6='["ipv6.example.com"]'

# 多种 IP 获取方式
export DDNS_INDEX4='["public", "regex:192\\.168\\.1\\..*", "cmd:curl -s ipv4.icanhazip.com"]'
export DDNS_INDEX6="public"

# 代理和缓存配置
export DDNS_PROXY='["http://proxy.example.com:8080", "DIRECT"]'
export DDNS_CACHE="/home/user/.ddns_cache"

# 日志配置
export DDNS_LOG_LEVEL="DEBUG"
export DDNS_LOG_FILE="/var/log/ddns.log"
export DDNS_LOG_FORMAT="%(asctime)s %(levelname)s [%(filename)s:%(lineno)d]: %(message)s"
export DDNS_LOG_DATEFMT="%Y-%m-%d %H:%M:%S"

# TTL 设置
export DDNS_TTL="300"

# 运行
ddns

注意事项

  1. 数组参数格式: index4, index6, ipv4, ipv6, proxy 等数组参数支持两种格式:
    • JSON 数组格式:'["item1", "item2"]'(推荐)
    • 逗号分隔格式:"item1,item2"
  2. 特殊前缀规则: 对于 index4index6 参数:
    • 当值包含 regex:cmd:shell: 前缀时,整个字符串将作为单一配置项,不会按分隔符分割
    • 例如:"regex:192\\.168\\..*,10\\..*" 会被视为一个完整的正则表达式,而不是两个配置项
    • 这是因为这些前缀的值内部可能包含逗号或分号,分割会破坏配置的完整性
  3. 配置优先级和字段覆盖关系:

    DDNS工具中的配置优先级顺序为:命令行参数 > JSON配置文件 > 环境变量

    • 命令行参数: 优先级最高,会覆盖JSON配置文件和环境变量中的相同设置
    • JSON配置文件: 优先级中等,会覆盖环境变量中的设置,但会被命令行参数覆盖
    • 环境变量: 优先级最低,当命令行参数和JSON配置文件中都没有相应设置时使用

    举例说明:

    # 环境变量设置
    export DDNS_TTL="600"
       
    # JSON配置文件内容
    {
      "ttl": 300
    }
       
    # 命令行参数
    ddns --ttl 900
    

    在上述例子中:

    • 最终生效的是命令行参数值:ttl=900
    • 如果不提供命令行参数,则使用JSON配置文件值:ttl=300
    • 如果JSON配置和命令行参数都不提供,则使用环境变量值:ttl=600

    另外,JSON配置文件中明确设置为null的值会覆盖环境变量设置,相当于未设置该值。

  4. 大小写兼容: 环境变量名支持大写、小写或混合大小写

  5. 安全提醒:
    • 请妥善保管 DDNS_TOKEN 等敏感信息
    • 在脚本中使用时避免明文存储
    • 考虑使用 .env 文件或密钥管理系统
  6. 调试建议: 出现问题时,可设置 DDNS_LOG_LEVEL=DEBUG 获取详细日志信息