8000 GitHub - NewFuture/DDNS: 🌐自动更新域名解析到本机IP(支持dnspod,阿里DNS,CloudFlare,华为云,DNSCOM...)
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

NewFuture/DDNS

Repository files navigation

自动更新 DNS 解析 到本机 IP 地址,支持 IPv4 和 IPv6,本地(内网)IP 和公网 IP。 代理模式,支持自动创建 DNS 记录。

Github Release PyPI Docker Image Version Build Status Publish


Features

使用

① 安装

根据需要选择一种方式:二进制版、pip版、源码运行,或者 Docker

推荐 Docker 版,兼容性最佳,体积小,性能优化。

  • pip 安装(需要 pip 或 easy_install)

    1. 安装 ddns: pip install ddnseasy_install ddns
    2. 运行: ddns
  • 二进制版(单文件,无需 python)

  • 源码运行(无任何依赖,需 python 环境)

    1. clone 或者 下载此仓库 并解压
    2. 运行 ./run.py(windows 双击 run.bat 或者运行 python run.py
  • Docker(需要安装 Docker)

    • 使用环境变量:

      docker run -d \
        -e DDNS_DNS=dnspod \
        -e DDNS_ID=12345 \
        -e DDNS_TOKEN=mytokenkey \
        -e DDNS_IPV4=ddns.newfuture.cc \
        -e DDNS_IPV6=ddns.newfuture.cc \
        --network host \
        newfuture/ddns
    • 使用配置文件(docker 工作目录 /ddns/,默认配置位置 /ddns/config.json):

      docker run -d \
        -v /local/config/path/:/ddns/ \
        --network host \
        newfuture/ddns

② 快速配置

  1. 申请 api token,填写到对应的 idtoken 字段:

  2. 修改配置文件,ipv4ipv6 字段,为待更新的域名,详细参照配置说明

详细配置

所有字段可通过三种方式进行配置,优先级为:命令行参数 > JSON配置文件 > 环境变量

  1. 命令行参数 ddns --key=valueddns -h 查看详情),优先级最高
  2. JSON 配置文件(值为 null 认为是有效值,会覆盖环境变量的设置,如果没有对应的 key 则会尝试使用环境变量)
  3. 环境变量 DDNS_ 前缀加上 key 全大写或者全小写,点转下划线(${ddns_id}${DDNS_ID}${DDNS_LOG_LEVEL}

配置优先级和字段覆盖关系

如果同一个配置项在多个地方设置,将按照以下优先级规则生效:

  • 命令行参数:优先级最高,会覆盖其他所有设置
  • JSON配置文件:介于命令行和环境变量之间,会覆盖环境变量中的设置
  • 环境变量:优先级最低,当其他方式未设置时使用

特殊情况

  • JSON配置中明确设为null的值会覆盖环境变量设置
  • debug参数只在命令行中有效,JSON配置文件中的同名设置无效
  • 多值参数(如ipv4ipv6等)在命令行中使用方式为重复使用参数,如--ipv4 domain1 --ipv4 domain2

各配置方式的详细说明请查看对应文档:命令行JSON配置环境变量

📖 环境变量详细配置: 查看 环境变量配置文档 了解所有环境变量的详细用法和示例

config.json 配置文件
  • 首次运行会自动生成一个模板配置文件
  • 可以使用 -c 使用指定的配置文件(默认读取当前目录的 config.json)
  • 推荐使用 vscode 等支持 JsonSchema 的编辑器编辑配置文件
  • 查看 JSON配置文件详细文档 了解完整的配置选项和示例
ddns -c path/to/config.json
# 或者源码运行
python run.py -c /path/to/config.json

配置参数表

key type required default description tips
id string api 访问 ID Cloudflare 为邮箱(使用 Token 时留空)
HE.net 可留空
华为云为 Access Key ID (AK)
token string api 授权 token 部分平台叫 secret key,反馈粘贴时删除
dns string No "dnspod" dns 服务商 阿里 DNS 为 alidns,Cloudflare 为 cloudflare,dns.com 为 dnscom,DNSPOD 国内为 dnspod,DNSPOD 国际为 dnspod_com,HE.net 为 he,华为云为 huaweidns,自定义回调为 callback
ipv4 array No [] ipv4 域名列表 [] 时,不会获取和更新 IPv4 地址
ipv6 array No [] ipv6 域名列表 [] 时,不会获取和更新 IPv6 地址
index4 string|int|array No "default" ipv4 获取方式 可设置 网卡内网公网正则 等方式
index6 string|int|array No "default" ipv6 获取方式 可设置 网卡内网公网正则 等方式
ttl number No null DNS 解析 TTL 时间 不设置采用 DNS 默认策略
proxy string|array No http 代理 ; 分割 多代理逐个尝试直到成功,DIRECT 为直连
debug bool No false 是否开启调试 等同于设置 log.level=DEBUG,仅命令行参数--debug有效
cache string|bool No true 是否缓存记录 正常情况打开避免频繁更新,默认位置为临时目录下 ddns.cache,也可以指定一个具体路径
log object No null 日志配置(可选) 日志配置对象,支持levelfileformatdatefmt参数

index4 和 index6 参数说明

  • 数字(0123等):第 i 个网卡 ip
  • 字符串 "default"(或者无此项):系统访问外网默认 IP
  • 字符串 "public":使用公网 ip(使用公网 API 查询,url 的简化模式)
  • 字符串 "url:xxx":打开 URL xxx(如:"url:http://ip.sb"),从返回的数据提取 IP 地址
  • 字符串 "regex:xxx" 正则表达(如 "regex:192.*"):提取 ifconfig/ipconfig 中与之匹配的首个 IP 地址,注意 json 转义\要写成\\
    • "192.*" 表示 192 开头的所有 ip(注意 regex: 不可省略)
    • 如果想匹配 10.00.xxxx 应该写成 "regex:10\\.00\\..*""\\" json 转义成 \
  • 字符串 "cmd:xxxx":执行命令 xxxx 的 stdout 输出结果作为目标 IP
  • 字符串 "shell:xxx":使用系统 shell 运行 xxx,并把结果 stdout 作为目标 IP
  • false:强制禁止更新 ipv4 或 ipv6 的 DNS 解析
  • 列表:依次执行列表中的 index 规则,并将最先获得的结果作为目标 IP
    • 例如 ["public", "regex:172\\..*"] 将先查询公网 API,未获取到 IP 后再从本地寻找 172 开头的 IP

自定义回调配置说明

  • id 字段填写回调地址,以 HTTP 或 HTTPS 开头,推荐采用 HTTPS 方式的回调 API ,当 token 字段非空且 URL 参数包含下表所示的常量字符串时,会自动替换为实际内容。
  • token 字段为 POST 参数,本字段为空或不存在则使用 GET 方式发起回调,回调参数采用 JSON 格式编码,当 JSON 的首层参数值包含下表所示的常量字符串时,会自动替换为实际内容。
常量名称 常量内容 说明
__DOMAIN__ DDNS 域名
__RECORDTYPE__ DDNS 记录类型
__TTL__ DDNS TTL
__TIMESTAMP__ 请求发起时间戳 包含小数
__IP__ 获取的对应类型的 IP 地址

配置示例

{
  "$schema": "https://ddns.newfuture.cc/schema/v4.0.json",
  "id": "12345",
  "token": "mytokenkey",
  "dns": "dnspod 或 dnspod_com 或 alidns 或 dnscom 或 cloudflare 或 he 或 huaweidns 或 callback",
  "ipv4": ["ddns.newfuture.cc", "ipv4.ddns.newfuture.cc"],
  "ipv6": ["ddns.newfuture.cc", "ipv6.ddns.newfuture.cc"],
  "index4": 0,
  "index6": "public",
  "ttl": 600,
  "proxy": "127.0.0.1:1080;DIRECT",
  "log": {
    "level": "DEBUG",
    "file": "dns.log",
    "format": "%(asctime)s %(levelname)s [%(module)s]: %(message)s",
    "datefmt": "%Y-%m-%dT%H:%M:%S"
  }
}

定时任务

可以通过脚本设置定时任务(默认每 5 分钟检查一次 IP,自动更新)

Windows

  • [推荐] 以系统身份运行,右键“以管理员身份运行”task.bat(或者在管理员命令行中运行)
  • 以当前用户身份运行定时任务,双击或运行 task.bat(执行时会闪黑框)

Linux

  • 使用 init.d 和 crontab:

    sudo ./task.sh
  • 使用 systemd:

    安装:
    sudo ./systemd.sh install
    卸载:
    sudo ./systemd.sh uninstall

    该脚本安装的文件符合 Filesystem Hierarchy Standard (FHS): 可执行文件所在目录为 /usr/share/DDNS 配置文件所在目录为 /etc/DDNS

Docker

Docker 镜像在无额外参数的情况下,已默认启用每 5 分钟执行一次的定时任务

FAQ

Windows Server [SSL: CERTIFICATE_VERIFY_FAILED]

Windows Server 默认安全策略会禁止任何未添加的信任 SSL 证书,可手动添加一下对应的证书 #56

使用系统自带的 IE 浏览器访问一次对应的 API 即可

问题排查反馈
  1. 先确认排查是否是系统/网络环境问题
  2. issues 中搜索是否有类似问题
  3. 前两者均无法解决或者确定是 bug,在此新建 issue
    • 开启 debug 配置
    • 附上这些内容 运行版本和方式系统环境出错日志去掉 id/token 的配置文件
    • 源码运行注明使用的 python 环境
0