自动更新 DNS 解析工具:DDNS

如果你需要自动将域名解析到本机的 IP 地址,支持 IPv4 和 IPv6,并且希望能够在内网和公网 IP 之间切换,那么你可以考虑使用 DDNS 这个工具。DDNS 具有许多强大的功能,包括代理模式和自动创建域名记录,同时支持多个域名和多级域名解析。

项目概述

DDNS 是一个自动更新 DNS 解析的工具,它可以帮助你将域名解析到你的本机 IP 地址。无论是内网 IP 还是公网 IP,IPv4 还是 IPv6,DDNS 都能轻松应对。此外,DDNS 还支持代理模式,多个域名的管理,自动创建新记录等多种功能。

主要特性

DDNS 具有以下主要特性:

1. 兼容和跨平台

  • 可以以可执行文件的形式使用,无需安装 Python 环境。
  • 跨平台支持,可以在 Windows、Linux 和 macOS 上运行。
  • 支持 Python 2 和 Python 3。
  • 可以通过 pip 安装。
  • 提供 Docker 镜像支持。

2. 域名支持

  • 支持多个域名解析。
  • 支持多级域名解析。
  • 可以自动创建新的域名记录。

3. IP 类型

  • 支持内网 IPv4 和 IPv6。
  • 支持公网 IPv4 和 IPv6,并且支持自定义 API。
  • 支持自定义命令和正则表达式选取。

4. 网络代理

  • 支持 HTTP 代理。
  • 可以配置多个代理并自动切换。

5. 服务商支持

  • 支持多个 DNS 服务提供商,包括 DNSPOD、阿里 DNS、DNS.COM、CloudFlare、HE.net 和华为云。

6. 其他功能

  • 可以设置定时任务,定期更新 DNS 解析。
  • 支持 TTL 配置。
  • 可以使用本地文件缓存,减少 API 请求次数。
  • 当 IP 地址发生变化时,可以触发自定义回调 API。

如何使用

安装

你可以根据需要选择以下一种方式来安装 DDNS:

  • 使用 pip 安装(需要 pip 或 easy_install):
pip install ddns
  • 使用二进制版(单文件,无需 Python 环境),根据你的操作系统选择下载:

  • 使用源码运行(需要 Python 环境):

    1. 克隆或下载此仓库并解压。
    2. 运行 ./run.py(在 Windows 上双击 run.bat 或运行 python run.py)。
  • 使用 Docker(需要安装 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 run -d \
      -v /path/to/config.json:/config.json \
      --network host \
      newfuture/ddns

快速配置

  1. 申请 API Token 并将其填写到对应的 idtoken 字段中。具体的申请步骤取决于你选择的 DNS 服务提供商。以下是一些常见的 DNS 服务商的申请链接:

  2. 修改配置文件,设置 ipv4ipv6 字段,将待更新的域名添加到列表中。具体的配置方式可以参考配置说明。

详细配置

DDNS 支持多种配置方式,包括命令行参数、JSON 配置文件和环境变量。以下是配置参数的详细说明:

  • id(必须):API 访问 ID,根据你的 DNS 服务提供商申请获得。
  • token(必须):API 授权 token,根据你的 DNS 服务提供商申请获得。注意:不要将此字段泄露。
  • dns:DNS 服务商的名称,可选值包括 "dnspod"、`

"dnspod_com""alidns""dnscom""cloudflare""he""huaweidns""callback"`。

  • ipv4:IPv4 域名列表,可以添加多个域名。
  • ipv6:IPv6 域名列表,可以添加多个域名。
  • index4:IPv4 获取方式,可选值包括 "0""1""2""3""default""public""url:xxx""regex:xxx""cmd:xxx""shell:xxx"
  • index6:IPv6 获取方式,可选值包括 "0""1""2""3""default""public""url:xxx""regex:xxx""cmd:xxx""shell:xxx"
  • ttl:DNS 解析 TTL 时间,可以设置为一个数字,不设置则采用 DNS 默认策略。
  • proxy:HTTP 代理地址,可以配置多个代理,使用分号 ; 分隔。例如,"127.0.0.1:1080;DIRECT"
  • debug:是否开启调试模式,可以设置为 truefalse
  • cache:是否启用本地文件缓存,可以设置为 truefalse,默认为 true。你也可以指定一个具体的缓存文件位置。

index4 和 index6 参数说明

  • 数字(0123 等):表示第 i 个网卡的 IP 地址。
  • 字符串 "default"(或者无此项):表示系统访问外网的默认 IP。
  • 字符串 "public":表示使用公网 IP(使用公网 API 查询,URL 的简化模式)。
  • 字符串 "url:xxx":打开 URL xxx(例如,"url:http://ip.sb"),从返回的数据中提取 IP 地址。
  • 字符串 "regex:xxx":使用正则表达式提取 IP 地址(例如,"regex:192.*")。
  • 字符串 "cmd:xxx":执行命令 xxx 并将其标准输出作为目标 IP。
  • 字符串 "shell:xxx":在系统 shell 中运行命令 xxx 并将其标准输出作为目标 IP。
  • false:强制禁止更新 IPv4 或 IPv6 的 DNS 解析。
  • 列表:按顺序执行列表中的 index 规则,并将首次获得的结果作为目标 IP。

自定义回调配置说明

如果你需要在 IP 地址发生变化时触发自定义回调 API,可以配置以下参数:

  • 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/v2.8.json",
  "id": "12345",
  "token": "mytokenkey",
  "dns": "dnspod",
  "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",
  "debug": false
}

定时任务

你可以通过脚本设置定时任务,使 DDNS 定期检查 IP 并自动更新。默认情况下,DDNS 每隔 5 分钟执行一次定时任务。以下是不同操作系统下的设置方式:

Windows

  • 推荐以系统管理员身份运行 task.bat(右键点击并选择“以管理员身份运行”)。
  • 以当前用户身份运行定时任务,双击或运行 task.bat(请注意,运行时可能会弹出黑色命令行窗口)。

Linux

  • 使用 init.dcrontab

    sudo ./task.sh
  • 使用 systemd

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

    该脚本安装的文件符合 Filesystem Hierarchy Standard (FHS) 标准,可执行文件位于 /usr/share/DDNS 目录下,配置文件位于 /etc/DDNS 目录下。

Docker

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

常见问题

Windows Server [SSL: CERTIFICATE_VERIFY_FAILED]

如果在 Windows Server 上遇到此错误,请注意 Windows Server 默认的安全策略会禁止信任未添加的 SSL 证书。你可以使用系统自带的 Internet Explorer 浏览器访问一次对应的 API 地址以解决此问题:

问题排查和反馈

如果遇到问题,可以按照以下步骤进行排查和反馈:

  1. 首先,确认问题是否由系统或网络环境引起。
  2. GitHub Issues 中搜索是否有类似的问题。
  3. 如果无法解决或者确定是 bug,请新建一个 Issue 并提供以下信息:

    • 版本和运行方式。
    • 操作系统环境。
    • 出错日志(去掉 idtoken 的配置文件内容)。
    • 如果是源码运行,请提供使用的 Python 环境信息。

以上就是 DDNS 的详细配置和使用说明,希望能够帮助你顺利使用该工具管理 DNS 解析。如果你有更多问题或需要进一步的帮助,请随时联系开发者或在 GitHub 上提出问题。祝你使用愉快!

声明:本站所有文章,如无特殊说明或标注,均为本站(王大神)原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
开源

ChatGPT:一个开源的桌面聊天应用

2023-9-10 15:05:26

开源

发掘 Linux 上的创意:2023 年最佳视频编辑软件

2023-9-13 1:04:33

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索