如果你需要自动将域名解析到本机的 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 环境),根据你的操作系统选择下载:
- Windows ddns.exe
- Linux ddns(仅经过 Ubuntu 测试)
- macOS ddns-osx
-
使用源码运行(需要 Python 环境):
- 克隆或下载此仓库并解压。
- 运行
./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
快速配置
-
申请 API Token 并将其填写到对应的
id
和token
字段中。具体的申请步骤取决于你选择的 DNS 服务提供商。以下是一些常见的 DNS 服务商的申请链接:- DNSPOD 国内版创建 Token
- 阿里云 AccessKey
- DNS.COM API Key/Secret
- DNSPOD 国际版
- CloudFlare API Key(可以使用邮箱 + API KEY 或 Token)
- HE.net DDNS 文档(只需将设置的密码填入
token
字段,id
字段可留空) - 华为云 APIKEY 申请(选择左侧的访问密钥,然后点击新增访问密钥)
-
修改配置文件,设置
ipv4
和ipv6
字段,将待更新的域名添加到列表中。具体的配置方式可以参考配置说明。
详细配置
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
:是否开启调试模式,可以设置为true
或false
。cache
:是否启用本地文件缓存,可以设置为true
或false
,默认为true
。你也可以指定一个具体的缓存文件位置。
index4 和 index6 参数说明
- 数字(
0
、1
、2
、3
等):表示第 i 个网卡的 IP 地址。 - 字符串
"default"
(或者无此项):表示系统访问外网的默认 IP。 - 字符串
"public"
:表示使用公网 IP(使用公网 API 查询,URL 的简化模式)。 - 字符串
"url:xxx"
:打开 URLxxx
(例如,"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.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 分钟执行一次的定时任务,无需额外参数。
常见问题
Windows Server [SSL: CERTIFICATE_VERIFY_FAILED]
如果在 Windows Server 上遇到此错误,请注意 Windows Server 默认的安全策略会禁止信任未添加的 SSL 证书。你可以使用系统自带的 Internet Explorer 浏览器访问一次对应的 API 地址以解决此问题:
- 阿里云 DNS:打开 https://alidns.aliyuncs.com
- Cloudflare:打开 https://api.cloudflare.com
- DNS.COM:打开 https://www.dns.com
- DNSPOD(国内版):打开 https://dnsapi.cn
- DNSPOD 国际版:打开 https://api.dnspod.com
- 华为 DNS:打开 https://dns.myhuaweicloud.com
问题排查和反馈
如果遇到问题,可以按照以下步骤进行排查和反馈:
- 首先,确认问题是否由系统或网络环境引起。
- 在 GitHub Issues 中搜索是否有类似的问题。
-
如果无法解决或者确定是 bug,请新建一个 Issue 并提供以下信息:
- 版本和运行方式。
- 操作系统环境。
- 出错日志(去掉
id
和token
的配置文件内容)。 - 如果是源码运行,请提供使用的 Python 环境信息。
以上就是 DDNS 的详细配置和使用说明,希望能够帮助你顺利使用该工具管理 DNS 解析。如果你有更多问题或需要进一步的帮助,请随时联系开发者或在 GitHub 上提出问题。祝你使用愉快!