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 |
51dns 、alidns 、aliesa 、callback 、cloudflare 、debug 、dnscom 、dnspod_com 、dnspod 、edgeone 、he 、huaweidns 、noip 、tencentcloud |
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" |
注意: 数组确认字符串引号,可打印出来查看
config.json
、~/.ddns/config.json
等)示例:
# 单个配置文件
export DDNS_CONFIG="config.json"
export DDNS_CONFIG="/path/to/ddns.json"
# 多个配置文件径
export DDNS_CONFIG="/etc/ddns/cloudflare.json,./dnspod.json"
dnspod
51dns
, alidns
, aliesa
, callback
, cloudflare
, debug
, dnscom
, dnspod
, dnspod_com
, edgeone
, he
, huaweidns
, noip
, tencentcloud
示例:
export DDNS_DNS="alidns" # 阿里云 DNS
export DDNS_DNS="aliesa" # 阿里云企业版 DNS
export DDNS_DNS="cloudflare" # CloudFlare
export DDNS_DNS="dnspod" # DNSPod 国内版
export DDNS_DNS="dnspod_com" # DNSPod 国际版
export DDNS_DNS="dnscom" # DNS.COM
export DDNS_DNS="51dns" # 51DNS (DNS.COM别名)
export DDNS_DNS="he" # HE.net
export DDNS_DNS="huaweidns" # 华为云 DNS
export DDNS_DNS="noip" # NoIP
export DDNS_DNS="tencentcloud" # 腾讯云 DNS
export DDNS_DNS="edgeone" # 腾讯云 EdgeOne
export DDNS_DNS="callback" # 自定义回调
export DDNS_DNS="debug" # 调试模式
示例:
export DDNS_ENDPOINT="https://api.example.com" # 自定义API端点
export DDNS_ENDPOINT="https://private.dns.com" # 私有部署的DNS API
export DDNS_ENDPOINT="" # 使用默认端点
[]
示例:
# JSON 数组格式(推荐)
export DDNS_IPV4='["example.com", "sub.example.com"]'
# 单个域名
export DDNS_IPV4="example.com"
# 禁用 IPv4 更新
export DDNS_IPV4="[]"
["default"]
(使用系统默认外网IP),
或分号;
分隔的字符串格式regex:
、cmd:
或 shell:
前缀时,不支持分隔符分割,整个字符串作为单一配置项示例:
# 默认方式(系统默认外网 IP)
export DDNS_INDEX4="default"
# 公网 IP
export DDNS_INDEX4="public"
# 指定网卡(第 0 个网卡)
export DDNS_INDEX4="0"
# 自定义 URL 获取
export DDNS_INDEX4="url:http://ip.sb"
# 正则匹配(注意转义)- 不支持分割
export DDNS_INDEX4="regex:192\\.168\\..*"
# 执行命令 - 不支持分割
export DDNS_INDEX4="cmd:curl -s http://ipv4.icanhazip.com"
# Shell 命令 - 不支持分割
export DDNS_INDEX4="shell:ip route get 8.8.8.8 | awk '{print \$7}'"
# 逗号分隔多种方式(仅限无特殊前缀时)
export DDNS_INDEX4="public,default"
# 包含逗号的正则表达式(整体作为单一配置)
export DDNS_INDEX4="regex:192\\.168\\..*,10\\..*"
# 多种方式组合(JSON 数组)
export DDNS_INDEX4='["public", "regex:172\\..*"]'
# 禁用 IPv4 获取
export DDNS_INDEX4="false"
示例:
# 单个代理
export DDNS_PROXY="http://127.0.0.1:1080"
# 多个代理(JSON 数组格式)
export DDNS_PROXY='["http://proxy1:8080", "http://proxy2:8080", "DIRECT"]'
# 分号分隔格式
export DDNS_PROXY="http://proxy1:8080;http://proxy2:8080;DIRECT"
# DIRECT 表示直连
export DDNS_PROXY="DIRECT"
true
示例:
# 启用缓存(默认路径)
export DDNS_CACHE="true"
# 禁用缓存
export DDNS_CACHE="false"
# 自定义缓存文件路径
export DDNS_CACHE="/path/to/ddns.cache"
"auto"
"true"
: 强制验证SSL证书(最安全)"false"
: 禁用SSL证书验证(最不安全)"auto"
: 优先验证,SSL证书错误时自动降级(不安全)示例:
export DDNS_SSL="true" # 强制验证SSL证书
export DDNS_SSL="false" # 禁用SSL验证(不推荐)
export DDNS_SSL="auto" # 自动降级模式
export DDNS_SSL="/etc/ssl/certs/ca-certificates.crt" # 自定义CA证书
INFO
CRITICAL
, FATAL
, ERROR
, WARN
, WARNING
, INFO
, DEBUG
, NOTSET
示例:
export DDNS_LOG_LEVEL="DEBUG" # 调试模式
export DDNS_LOG_LEVEL="INFO" # 信息模式
export DDNS_LOG_LEVEL="ERROR" # 仅错误
示例:
export DDNS_LOG_FILE="/var/log/ddns.log"
export DDNS_LOG_FILE="./ddns.log"
%(asctime)s %(levelname)s [%(module)s]: %(message)s
示例:
# 默认格式(含模块名)
export DDNS_LOG_FORMAT="%(asctime)s %(levelname)s [%(module)s]: %(message)s"
# 包含文件名和行号(debug模式下默认格式)
export DDNS_LOG_FORMAT="%(asctime)s %(levelname)s [%(filename)s:%(lineno)d]: %(message)s"
# 简单格式
export DDNS_LOG_FORMAT="%(levelname)s: %(message)s"
%Y-%m-%dT%H:%M:%S
示例:
# ISO 格式(默认)
export DDNS_LOG_DATEFMT="%Y-%m-%dT%H:%M:%S"
# 简短格式
export DDNS_LOG_DATEFMT="%m-%d %H:%M:%S"
# 标准格式
export DDNS_LOG_DATEFMT="%Y-%m-%d %H:%M:%S"
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
index4
, index6
, ipv4
, ipv6
, proxy
等数组参数支持两种格式:
'["item1", "item2"]'
(推荐)"item1,item2"
index4
和 index6
参数:
regex:
、cmd:
或 shell:
前缀时,整个字符串将作为单一配置项,不会按分隔符分割"regex:192\\.168\\..*,10\\..*"
会被视为一个完整的正则表达式,而不是两个配置项配置优先级和字段覆盖关系:
DDNS工具中的配置优先级顺序为:命令行参数 > JSON配置文件 > 环境变量
举例说明:
# 环境变量设置
export DDNS_TTL="600"
# JSON配置文件内容
{
"ttl": 300
}
# 命令行参数
ddns --ttl 900
在上述例子中:
ttl=900
ttl=300
ttl=600
另外,JSON配置文件中明确设置为null
的值会覆盖环境变量设置,相当于未设置该值。
大小写兼容: 环境变量名支持大写、小写或混合大小写
DDNS_TOKEN
等敏感信息.env
文件或密钥管理系统DDNS_LOG_LEVEL=DEBUG
获取详细日志信息