ddns 4.0.2__tar.gz → 4.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of ddns might be problematic. Click here for more details.
- ddns-4.1.0/PKG-INFO +327 -0
- ddns-4.1.0/README.md +283 -0
- ddns-4.1.0/ddns/__builtins__.pyi +6 -0
- ddns-4.1.0/ddns/__init__.py +12 -0
- ddns-4.1.0/ddns/__main__.py +151 -0
- ddns-4.1.0/ddns/cache.py +183 -0
- ddns-4.1.0/ddns/ip.py +145 -0
- ddns-4.1.0/ddns/provider/__init__.py +79 -0
- ddns-4.1.0/ddns/provider/_base.py +526 -0
- ddns-4.1.0/ddns/provider/_signature.py +113 -0
- ddns-4.1.0/ddns/provider/alidns.py +152 -0
- ddns-4.1.0/ddns/provider/aliesa.py +130 -0
- ddns-4.1.0/ddns/provider/callback.py +79 -0
- ddns-4.1.0/ddns/provider/cloudflare.py +99 -0
- ddns-4.1.0/ddns/provider/debug.py +19 -0
- ddns-4.1.0/ddns/provider/dnscom.py +103 -0
- ddns-4.1.0/ddns/provider/dnspod.py +114 -0
- ddns-4.1.0/ddns/provider/dnspod_com.py +18 -0
- ddns-4.1.0/ddns/provider/edgeone.py +83 -0
- ddns-4.1.0/ddns/provider/he.py +46 -0
- ddns-4.1.0/ddns/provider/huaweidns.py +143 -0
- ddns-4.1.0/ddns/provider/namesilo.py +159 -0
- ddns-4.1.0/ddns/provider/noip.py +101 -0
- ddns-4.1.0/ddns/provider/tencentcloud.py +194 -0
- ddns-4.1.0/ddns/util/comment.py +88 -0
- ddns-4.1.0/ddns/util/fileio.py +113 -0
- ddns-4.1.0/ddns/util/http.py +322 -0
- ddns-4.1.0/ddns/util/try_run.py +37 -0
- ddns-4.1.0/ddns.egg-info/PKG-INFO +327 -0
- ddns-4.1.0/ddns.egg-info/SOURCES.txt +77 -0
- ddns-4.1.0/ddns.egg-info/requires.txt +13 -0
- ddns-4.1.0/pyproject.toml +180 -0
- ddns-4.1.0/tests/test_cache.py +672 -0
- ddns-4.1.0/tests/test_config_cli.py +543 -0
- ddns-4.1.0/tests/test_config_cli_task.py +471 -0
- ddns-4.1.0/tests/test_config_config.py +390 -0
- ddns-4.1.0/tests/test_config_env.py +265 -0
- ddns-4.1.0/tests/test_config_file.py +758 -0
- ddns-4.1.0/tests/test_config_file_remote.py +393 -0
- ddns-4.1.0/tests/test_config_init.py +449 -0
- ddns-4.1.0/tests/test_config_init_multi.py +294 -0
- ddns-4.1.0/tests/test_config_schema_v4_1.py +265 -0
- ddns-4.1.0/tests/test_ip.py +239 -0
- ddns-4.1.0/tests/test_provider__signature.py +359 -0
- ddns-4.1.0/tests/test_provider_alidns.py +517 -0
- ddns-4.1.0/tests/test_provider_aliesa.py +510 -0
- ddns-4.1.0/tests/test_provider_base.py +226 -0
- ddns-4.1.0/tests/test_provider_base_simple.py +248 -0
- ddns-4.1.0/tests/test_provider_callback.py +454 -0
- ddns-4.1.0/tests/test_provider_cloudflare.py +550 -0
- ddns-4.1.0/tests/test_provider_debug.py +219 -0
- ddns-4.1.0/tests/test_provider_dnscom.py +414 -0
- ddns-4.1.0/tests/test_provider_dnspod.py +539 -0
- ddns-4.1.0/tests/test_provider_dnspod_com.py +74 -0
- ddns-4.1.0/tests/test_provider_edgeone.py +507 -0
- ddns-4.1.0/tests/test_provider_he.py +370 -0
- ddns-4.1.0/tests/test_provider_huaweidns.py +485 -0
- ddns-4.1.0/tests/test_provider_namesilo.py +312 -0
- ddns-4.1.0/tests/test_provider_noip.py +389 -0
- ddns-4.1.0/tests/test_provider_proxy_list.py +154 -0
- ddns-4.1.0/tests/test_provider_tencentcloud.py +539 -0
- ddns-4.1.0/tests/test_scheduler_base.py +225 -0
- ddns-4.1.0/tests/test_scheduler_cron.py +444 -0
- ddns-4.1.0/tests/test_scheduler_init.py +306 -0
- ddns-4.1.0/tests/test_scheduler_launchd.py +453 -0
- ddns-4.1.0/tests/test_scheduler_schtasks.py +330 -0
- ddns-4.1.0/tests/test_scheduler_systemd.py +368 -0
- ddns-4.1.0/tests/test_util_comment.py +249 -0
- ddns-4.1.0/tests/test_util_fileio.py +404 -0
- ddns-4.1.0/tests/test_util_http.py +515 -0
- ddns-4.1.0/tests/test_util_http_proxy_list.py +228 -0
- ddns-4.1.0/tests/test_util_http_retry.py +461 -0
- ddns-4.0.2/PKG-INFO +0 -326
- ddns-4.0.2/README.md +0 -286
- ddns-4.0.2/ddns/__init__.py +0 -19
- ddns-4.0.2/ddns/__main__.py +0 -187
- ddns-4.0.2/ddns/provider/alidns.py +0 -183
- ddns-4.0.2/ddns/provider/callback.py +0 -117
- ddns-4.0.2/ddns/provider/cloudflare.py +0 -163
- ddns-4.0.2/ddns/provider/dnscom.py +0 -180
- ddns-4.0.2/ddns/provider/dnspod.py +0 -186
- ddns-4.0.2/ddns/provider/dnspod_com.py +0 -15
- ddns-4.0.2/ddns/provider/he.py +0 -83
- ddns-4.0.2/ddns/provider/huaweidns.py +0 -265
- ddns-4.0.2/ddns/util/__init__.py +0 -0
- ddns-4.0.2/ddns/util/cache.py +0 -139
- ddns-4.0.2/ddns/util/config.py +0 -317
- ddns-4.0.2/ddns/util/ip.py +0 -96
- ddns-4.0.2/ddns.egg-info/PKG-INFO +0 -326
- ddns-4.0.2/ddns.egg-info/SOURCES.txt +0 -25
- ddns-4.0.2/ddns.egg-info/requires.txt +0 -4
- ddns-4.0.2/pyproject.toml +0 -114
- {ddns-4.0.2 → ddns-4.1.0}/LICENSE +0 -0
- {ddns-4.0.2/ddns/provider → ddns-4.1.0/ddns/util}/__init__.py +0 -0
- {ddns-4.0.2 → ddns-4.1.0}/ddns.egg-info/dependency_links.txt +0 -0
- {ddns-4.0.2 → ddns-4.1.0}/ddns.egg-info/entry_points.txt +0 -0
- {ddns-4.0.2 → ddns-4.1.0}/ddns.egg-info/top_level.txt +0 -0
- {ddns-4.0.2 → ddns-4.1.0}/setup.cfg +0 -0
ddns-4.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: ddns
|
|
3
|
+
Version: 4.1.0
|
|
4
|
+
Summary: Dynamic DNS client for multiple providers, supporting IPv4 and IPv6.
|
|
5
|
+
Author-email: NewFuture <python@newfuture.cc>
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://ddns.newfuture.cc
|
|
8
|
+
Project-URL: Documentation, https://ddns.newfuture.cc
|
|
9
|
+
Project-URL: Repository, https://github.com/NewFuture/DDNS
|
|
10
|
+
Project-URL: Bug Tracker, https://github.com/NewFuture/DDNS/issues
|
|
11
|
+
Project-URL: Source, https://github.com/NewFuture/DDNS
|
|
12
|
+
Keywords: ddns,ipv6,ipv4,dns,dnspod,alidns,cloudflare
|
|
13
|
+
Platform: any
|
|
14
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
15
|
+
Classifier: Intended Audience :: Developers
|
|
16
|
+
Classifier: Intended Audience :: End Users/Desktop
|
|
17
|
+
Classifier: Intended Audience :: Information Technology
|
|
18
|
+
Classifier: Intended Audience :: System Administrators
|
|
19
|
+
Classifier: Topic :: Internet
|
|
20
|
+
Classifier: Topic :: Internet :: Name Service (DNS)
|
|
21
|
+
Classifier: Topic :: System :: Networking
|
|
22
|
+
Classifier: Topic :: Software Development
|
|
23
|
+
Classifier: Programming Language :: Python :: 2.7
|
|
24
|
+
Classifier: Programming Language :: Python :: 3
|
|
25
|
+
Classifier: Programming Language :: Python :: 3.6
|
|
26
|
+
Classifier: Programming Language :: Python :: 3.7
|
|
27
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
28
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
29
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
30
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
31
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
32
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
33
|
+
Requires-Python: >=2.7
|
|
34
|
+
Description-Content-Type: text/markdown
|
|
35
|
+
License-File: LICENSE
|
|
36
|
+
Provides-Extra: dev
|
|
37
|
+
Requires-Dist: ruff; extra == "dev"
|
|
38
|
+
Requires-Dist: mock; python_version < "3.3" and extra == "dev"
|
|
39
|
+
Provides-Extra: pytest
|
|
40
|
+
Requires-Dist: pytest>=6.0; extra == "pytest"
|
|
41
|
+
Requires-Dist: pytest-cov; extra == "pytest"
|
|
42
|
+
Requires-Dist: mock; python_version < "3.3" and extra == "pytest"
|
|
43
|
+
Dynamic: license-file
|
|
44
|
+
|
|
45
|
+
# [<img src="https://ddns.newfuture.cc/doc/img/ddns.svg" width="32px" height="32px"/>](https://ddns.newfuture.cc) DDNS
|
|
46
|
+
|
|
47
|
+
> 自动更新 DNS 解析到本机 IP 地址,支持 IPv4/IPv6,内网/公网 IP,自动创建 DNS 记录
|
|
48
|
+
|
|
49
|
+
[](https://github.com/NewFuture/DDNS)
|
|
50
|
+
[](https://github.com/NewFuture/DDNS/actions/workflows/build.yml)
|
|
51
|
+
[](https://github.com/NewFuture/DDNS/actions/workflows/publish.yml)
|
|
52
|
+
[](https://github.com/NewFuture/DDNS/releases/latest)
|
|
53
|
+
[](https://pypi.org/project/ddns/)
|
|
54
|
+
[](https://pypi.org/project/ddns/)
|
|
55
|
+
[](https://hub.docker.com/r/newfuture/ddns)
|
|
56
|
+
[](https://hub.docker.com/r/newfuture/ddns)
|
|
57
|
+
|
|
58
|
+
## 主要特性
|
|
59
|
+
|
|
60
|
+
### 🚀 多平台支持
|
|
61
|
+
|
|
62
|
+
- **Docker**: 推荐方式,支持 `amd64`、`arm64`、`arm/v7` 等多架构 ([使用文档](doc/docker.md))
|
|
63
|
+
- **二进制文件**: 单文件运行,支持 Windows/Linux/macOS ([下载地址](https://github.com/NewFuture/DDNS/releases/latest))
|
|
64
|
+
- **pip 安装**: `pip install ddns`
|
|
65
|
+
- **源码运行**: 无依赖,仅需 Python 环境
|
|
66
|
+
|
|
67
|
+
### ⚙️ 灵活配置
|
|
68
|
+
|
|
69
|
+
- **命令行参数**: `ddns --dns=dnspod --id=xxx --token=xxx` ([配置文档](doc/config/cli.md))
|
|
70
|
+
- **JSON 配置文件**: 支持多域名、多服务商配置,支持远程URL配置 ([配置文档](doc/config/json.md))
|
|
71
|
+
- **环境变量**: Docker 友好的配置方式 ([配置文档](doc/config/env.md))
|
|
72
|
+
|
|
73
|
+
### 🌍 DNS 服务商支持
|
|
74
|
+
|
|
75
|
+
支持 15+ 主流 DNS 服务商,包括:
|
|
76
|
+
|
|
77
|
+
- **国内**: [阿里DNS](doc/providers/alidns.md) ⚡、[阿里云ESA](doc/providers/aliesa.md) ⚡、[DNSPOD](doc/providers/dnspod.md)、[腾讯云DNS](doc/providers/tencentcloud.md) ⚡、[腾讯云EdgeOne](doc/providers/edgeone.md) ⚡、[华为云DNS](doc/providers/huaweidns.md) ⚡、[DNS.COM](doc/providers/51dns.md)
|
|
78
|
+
- **国际**: [Cloudflare](doc/providers/cloudflare.md)、[DNSPOD国际版](doc/providers/dnspod_com.md)、[HE.net](doc/providers/he.md)、[NameSilo](doc/providers/namesilo.md)、[No-IP](doc/providers/noip.md)
|
|
79
|
+
- **自定义**: [回调 API](doc/providers/callback.md)、[调试模式](doc/providers/debug.md)
|
|
80
|
+
|
|
81
|
+
> ⚡ 表示支持 HMAC-SHA256 企业级安全认证 | [查看所有服务商](doc/providers/)
|
|
82
|
+
|
|
83
|
+
### 🔧 高级功能
|
|
84
|
+
|
|
85
|
+
- 多域名和多级域名解析
|
|
86
|
+
- IPv4/IPv6 双栈支持
|
|
87
|
+
- 自动创建 DNS 记录
|
|
88
|
+
- 内网/公网 IP 自动检测
|
|
89
|
+
- HTTP 代理和多代理切换
|
|
90
|
+
- 本地缓存减少 API 调用
|
|
91
|
+
- [定时任务](doc/config/cli.md#task-management-定时任务管理)和日志管理
|
|
92
|
+
|
|
93
|
+
## 使用
|
|
94
|
+
|
|
95
|
+
### ① 安装
|
|
96
|
+
|
|
97
|
+
根据需要选择一种方式:`一键脚本`、`二进制`版、`pip`版、`源码`运行,或者 `Docker`。
|
|
98
|
+
|
|
99
|
+
推荐 Docker 版,兼容性最佳,体积小,性能优化。
|
|
100
|
+
|
|
101
|
+
- #### Docker(推荐)
|
|
102
|
+
|
|
103
|
+
详细说明和高级用法请查看 [Docker 使用文档](https://ddns.newfuture.cc/doc/docker.html)
|
|
104
|
+
|
|
105
|
+
<details>
|
|
106
|
+
<summary markdown="span">支持命令行,配置文件,和环境变量传参</summary>
|
|
107
|
+
|
|
108
|
+
- 命令行cli
|
|
109
|
+
|
|
110
|
+
```sh
|
|
111
|
+
docker run newfuture/ddns -h
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
- 使用配置文件(docker 工作目录 `/ddns/`,默认配置位置 `/ddns/config.json`):
|
|
115
|
+
|
|
116
|
+
```sh
|
|
117
|
+
docker run -d -v /host/config/:/ddns/ --network host newfuture/ddns
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
- 使用环境变量:
|
|
121
|
+
|
|
122
|
+
```sh
|
|
123
|
+
docker run -d \
|
|
124
|
+
-e DDNS_DNS=dnspod \
|
|
125
|
+
-e DDNS_ID=12345 \
|
|
126
|
+
-e DDNS_TOKEN=mytokenkey \
|
|
127
|
+
-e DDNS_IPV4=ddns.newfuture.cc \
|
|
128
|
+
--network host \
|
|
129
|
+
newfuture/ddns
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
</details>
|
|
133
|
+
|
|
134
|
+
- #### 二进制版(单文件,无需 python)
|
|
135
|
+
|
|
136
|
+
前往[release下载对应版本](https://github.com/NewFuture/DDNS/releases/latest)
|
|
137
|
+
|
|
138
|
+
也可使用一键安装脚本自动下载并安装对应平台的二进制:
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
curl -#fSL https://ddns.newfuture.cc/install.sh | sh
|
|
142
|
+
```
|
|
143
|
+
提示:安装到系统目录(如 /usr/local/bin)可能需要 root 或 sudo 权限;若权限不足,可改为 `sudo sh` 运行。
|
|
144
|
+
|
|
145
|
+
详细说明请查看 [一键安装文档](doc/install.md)
|
|
146
|
+
|
|
147
|
+
- #### pip 安装(需要 pip 或 easy_install)
|
|
148
|
+
|
|
149
|
+
1. 安装 ddns: `pip install ddns` 或 `easy_install ddns`
|
|
150
|
+
2. 运行: `ddns -h` 或者 `python -m ddns`
|
|
151
|
+
|
|
152
|
+
- #### 源码运行(无任何依赖,需 python 环境)
|
|
153
|
+
|
|
154
|
+
1. clone 或者 [下载此仓库](https://github.com/NewFuture/DDNS/archive/master.zip) 并解压
|
|
155
|
+
2. 运行 `python -m ddns`
|
|
156
|
+
|
|
157
|
+
### ② 快速配置
|
|
158
|
+
|
|
159
|
+
1. 申请 api `token`,填写到对应的 `id` 和 `token` 字段:
|
|
160
|
+
|
|
161
|
+
- **DNSPOD(中国版)**: [创建 token](https://support.dnspod.cn/Kb/showarticle/tsid/227/) | [详细配置文档](doc/providers/dnspod.md)
|
|
162
|
+
- **阿里云 DNS**: [申请 accesskey](https://help.aliyun.com/document_detail/87745.htm) | [详细配置文档](doc/providers/alidns.md)
|
|
163
|
+
- **阿里云边缘安全加速(ESA)**: [申请 accesskey](https://help.aliyun.com/document_detail/87745.htm) | [详细配置文档](doc/providers/aliesa.md)
|
|
164
|
+
- **51DNS(dns.com)**: [API Key/Secret](https://www.dns.com/member/apiSet) | [详细配置文档](doc/providers/51dns.md)
|
|
165
|
+
- **DNSPOD(国际版)**: [获取 token](https://www.dnspod.com/docs/info.html#get-the-user-token) | [详细配置文档](doc/providers/dnspod_com.md)
|
|
166
|
+
- **CloudFlare**: [API Key](https://support.cloudflare.com/hc/en-us/articles/200167836-Where-do-I-find-my-Cloudflare-API-key-)(除了 `email + API KEY`,也可使用 `Token`,**需要list Zone 权限**) | [详细配置文档](doc/providers/cloudflare.md)
|
|
167
|
+
- **HE.net**: [DDNS 文档](https://dns.he.net/docs.html)(仅需将设置的密码填入 `token` 字段,`id` 字段可留空) | [详细配置文档](doc/providers/he.md)
|
|
168
|
+
- **华为云 DNS**: [APIKEY 申请](https://console.huaweicloud.com/iam/)(点左边访问密钥,然后点新增访问密钥) | [详细配置文档](doc/providers/huaweidns.md)
|
|
169
|
+
- **NameSilo**: [API Key](https://www.namesilo.com/account/api-manager)(API Manager 中获取 API Key) | [详细配置文档](doc/providers/namesilo.md)
|
|
170
|
+
- **腾讯云 DNS**: [API Secret](https://console.cloud.tencent.com/cam/capi) | [详细配置文档](doc/providers/tencentcloud.md)
|
|
171
|
+
- **腾讯云 EdgeOne**: [API Secret](https://console.cloud.tencent.com/cam/capi) | [详细配置文档](doc/providers/edgeone.md)
|
|
172
|
+
- **No-IP**: [用户名和密码](https://www.noip.com/)(使用 No-IP 账户的用户名和密码) | [详细配置文档](doc/providers/noip.md)
|
|
173
|
+
- **自定义回调**: 参数填写方式请查看下方的自定义回调配置说明
|
|
174
|
+
|
|
175
|
+
2. 修改配置文件,`ipv4` 和 `ipv6` 字段,为待更新的域名,详细参照配置说明
|
|
176
|
+
|
|
177
|
+
## 详细配置
|
|
178
|
+
|
|
179
|
+
所有字段可通过三种方式进行配置,优先级为:**命令行参数 > JSON配置文件 > 环境变量**
|
|
180
|
+
|
|
181
|
+
1. [命令行参数](doc/config/cli.md) `ddns --key=value`(`ddns -h` 查看详情),优先级最高
|
|
182
|
+
2. [JSON 配置文件](doc/config/json.md)(值为 null 认为是有效值,会覆盖环境变量的设置,如果没有对应的 key 则会尝试使用环境变量)
|
|
183
|
+
3. [环境变量](doc/config/env.md) DDNS_ 前缀加上 key (`${ddns_id}` 或 `${DDNS_ID}`,`${DDNS_LOG_LEVEL}`)
|
|
184
|
+
|
|
185
|
+
### 配置优先级和字段覆盖关系
|
|
186
|
+
|
|
187
|
+
如果同一个配置项在多个地方设置,将按照以下优先级规则生效:
|
|
188
|
+
|
|
189
|
+
- **命令行参数**:优先级最高,会覆盖其他所有设置
|
|
190
|
+
- **JSON配置文件**:介于命令行和环境变量之间,会覆盖环境变量中的设置
|
|
191
|
+
- **环境变量**:优先级最低,当其他方式未设置时使用
|
|
192
|
+
|
|
193
|
+
**高级用法**:
|
|
194
|
+
|
|
195
|
+
- JSON配置中明确设为`null`的值会覆盖环境变量设置
|
|
196
|
+
- `debug`参数只在命令行中有效,JSON配置文件中的同名设置无效
|
|
197
|
+
- 多值参数(如`ipv4`、`ipv6`等)在命令行中使用方式为重复使用参数,如`--ipv4 domain1 --ipv4 domain2`
|
|
198
|
+
|
|
199
|
+
各配置方式的详细说明请查看对应文档:[命令行](doc/config/cli.md)、[JSON配置](doc/config/json.md)、[环境变量](doc/config/env.md)、[服务商配置](doc/providers/)
|
|
200
|
+
|
|
201
|
+
> 📖 **环境变量详细配置**: 查看 [环境变量配置文档](doc/config/env.md) 了解所有环境变量的详细用法和示例
|
|
202
|
+
|
|
203
|
+
<details open>
|
|
204
|
+
<summary markdown="span">config.json 配置文件</summary>
|
|
205
|
+
|
|
206
|
+
- 首次运行会自动生成一个模板配置文件
|
|
207
|
+
- 可以使用 `-c` 使用指定的配置文件(默认读取当前目录的 config.json)
|
|
208
|
+
- 推荐使用 vscode 等支持 JsonSchema 的编辑器编辑配置文件
|
|
209
|
+
- 查看 [JSON配置文件详细文档](doc/config/json.md) 了解完整的配置选项和示例
|
|
210
|
+
|
|
211
|
+
```bash
|
|
212
|
+
ddns -c path/to/config.json
|
|
213
|
+
# 或者python运行
|
|
214
|
+
python -m ddns -c /path/to/config.json
|
|
215
|
+
# 远程配置文件
|
|
216
|
+
ddns -c https://ddns.newfuture.cc/tests/config/debug.json
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
#### 配置参数表
|
|
220
|
+
|
|
221
|
+
| key | type | required | default | description | tips |
|
|
222
|
+
| :----: | :----------------: | :------: | :---------: | :----------------: | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
223
|
+
| id | string | √ | 无 | api 访问 ID | Cloudflare 为邮箱(使用 Token 时留空)<br>HE.net 可留空<br>华为云为 Access Key ID (AK) |
|
|
224
|
+
| token | string | √ | 无 | api 授权 token | 部分平台叫 secret key,**反馈粘贴时删除** |
|
|
225
|
+
| dns | string | No | `"dnspod"` | dns 服务商 | 阿里 DNS 为 `alidns`,阿里ESA为 `aliesa`,Cloudflare 为 `cloudflare`,dns.com 为 `dnscom`,DNSPOD 国内为 `dnspod`,DNSPOD 国际为 `dnspod_com`,HE.net 为 `he`,华为云为 `huaweidns`,NameSilo 为 `namesilo`,腾讯云为 `tencentcloud`,腾讯云EdgeOne为 `edgeone`,No-IP 为 `noip`,自定义回调为 `callback`。部分服务商有[详细配置文档](doc/providers/) |
|
|
226
|
+
| ipv4 | array | No | `[]` | ipv4 域名列表 | 为 `[]` 时,不会获取和更新 IPv4 地址 |
|
|
227
|
+
| ipv6 | array | No | `[]` | ipv6 域名列表 | 为 `[]` 时,不会获取和更新 IPv6 地址 |
|
|
228
|
+
| index4 | string\|int\|array | No | `"default"` | ipv4 获取方式 | 可设置 `网卡`、`内网`、`公网`、`正则` 等方式 |
|
|
229
|
+
| index6 | string\|int\|array | No | `"default"` | ipv6 获取方式 | 可设置 `网卡`、`内网`、`公网`、`正则` 等方式 |
|
|
230
|
+
| ttl | number | No | `null` | DNS 解析 TTL 时间 | 不设置采用 DNS 默认策略 |
|
|
231
|
+
| proxy | string\|array | No | 无 | HTTP 代理格式:`http://host:port` | 多代理逐个尝试直到成功,`DIRECT` 为直连 |
|
|
232
|
+
| ssl | string\|boolean | No | `"auto"` | SSL证书验证方式 | `true`(强制验证)、`false`(禁用验证)、`"auto"`(自动降级)或自定义CA证书文件路径 |
|
|
233
|
+
| debug | bool | No | `false` | 是否开启调试 | 调试模式,仅命令行参数`--debug`有效 |
|
|
234
|
+
| cache | string\|bool | No | `true` | 是否缓存记录 | 正常情况打开避免频繁更新,默认位置为临时目录下 `ddns.cache`,也可以指定一个具体路径 |
|
|
235
|
+
| log | object | No | `null` | 日志配置(可选) | 日志配置对象,支持`level`、`file`、`format`、`datefmt`参数 |
|
|
236
|
+
|
|
237
|
+
#### index4 和 index6 参数说明
|
|
238
|
+
|
|
239
|
+
- 数字(`0`,`1`,`2`,`3`等):第 i 个网卡 ip
|
|
240
|
+
- 字符串 `"default"`(或者无此项):系统访问外网默认 IP
|
|
241
|
+
- 字符串 `"public"`:使用公网 ip(使用公网 API 查询,url 的简化模式)
|
|
242
|
+
- 字符串 `"url:xxx"`:打开 URL `xxx`(如:`"url:http://ip.sb"`),从返回的数据提取 IP 地址
|
|
243
|
+
- 字符串 `"regex:xxx"` 正则表达(如 `"regex:192.*"`):提取 `ifconfig`/`ipconfig` 中与之匹配的首个 IP 地址,**注意 json 转义**(`\`要写成`\\`)
|
|
244
|
+
- `"192.*"` 表示 192 开头的所有 ip(注意 `regex:` 不可省略)
|
|
245
|
+
- 如果想匹配 `10.00.xxxx` 应该写成 `"regex:10\\.00\\..*"`(`"\\"` json 转义成 `\`)
|
|
246
|
+
- 字符串 `"cmd:xxxx"`:执行命令 `xxxx` 的 stdout 输出结果作为目标 IP
|
|
247
|
+
- 字符串 `"shell:xxx"`:使用系统 shell 运行 `xxx`,并把结果 stdout 作为目标 IP
|
|
248
|
+
- `false`:强制禁止更新 ipv4 或 ipv6 的 DNS 解析
|
|
249
|
+
- 列表:依次执行列表中的 index 规则,并将最先获得的结果作为目标 IP
|
|
250
|
+
- 例如 `["public", "regex:172\\..*"]` 将先查询公网 API,未获取到 IP 后再从本地寻找 172 开头的 IP
|
|
251
|
+
|
|
252
|
+
#### 自定义回调配置说明
|
|
253
|
+
|
|
254
|
+
- `id` 字段填写回调地址,以 HTTP 或 HTTPS 开头,推荐采用 HTTPS 方式的回调 API,支持变量替换功能。
|
|
255
|
+
- `token` 字段为 POST 请求参数(JSON对象或JSON字符串),本字段为空或不存在则使用 GET 方式发起回调。当 JSON 的参数值包含下表所示的常量字符串时,会自动替换为实际内容。
|
|
256
|
+
|
|
257
|
+
详细配置指南请查看:[Callback Provider 配置文档](doc/providers/callback.md)
|
|
258
|
+
|
|
259
|
+
| 常量名称 | 常量内容 | 说明 |
|
|
260
|
+
| ---------------- | ------------------------ | -------- |
|
|
261
|
+
| `__DOMAIN__` | DDNS 域名 | |
|
|
262
|
+
| `__IP__` | 获取的对应类型的 IP 地址 | |
|
|
263
|
+
| `__RECORDTYPE__` | DDNS 记录类型 | |
|
|
264
|
+
| `__TTL__` | DDNS TTL | |
|
|
265
|
+
| `__TIMESTAMP__` | 请求发起时间戳 | 包含小数 |
|
|
266
|
+
|
|
267
|
+
#### 配置示例
|
|
268
|
+
|
|
269
|
+
```json
|
|
270
|
+
{
|
|
271
|
+
"$schema": "https://ddns.newfuture.cc/schema/v4.0.json",
|
|
272
|
+
"id": "12345",
|
|
273
|
+
"token": "mytokenkey",
|
|
274
|
+
"dns": "dnspod 或 dnspod_com 或 alidns 或 aliesa 或 dnscom 或 cloudflare 或 he 或 huaweidns 或 namesilo 或 tencentcloud 或 noip 或 callback",
|
|
275
|
+
"ipv4": ["ddns.newfuture.cc", "ipv4.ddns.newfuture.cc"],
|
|
276
|
+
"ipv6": ["ddns.newfuture.cc", "ipv6.ddns.newfuture.cc"],
|
|
277
|
+
"index4": 0,
|
|
278
|
+
"index6": "public",
|
|
279
|
+
"ttl": 600,
|
|
280
|
+
"proxy": ["http://127.0.0.1:1080", "DIRECT"],
|
|
281
|
+
"log": {
|
|
282
|
+
"level": "DEBUG",
|
|
283
|
+
"file": "dns.log",
|
|
284
|
+
"datefmt": "%Y-%m-%dT%H:%M:%S"
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
</details>
|
|
290
|
+
|
|
291
|
+
## 定时任务
|
|
292
|
+
|
|
293
|
+
<details>
|
|
294
|
+
<summary markdown="span">使用内置的 task 命令设置定时任务(默认每 5 分钟检查一次 IP,自动更新)</summary>
|
|
295
|
+
|
|
296
|
+
DDNS 提供内置的 `task` 子命令来管理定时任务,支持跨平台自动化部署:
|
|
297
|
+
|
|
298
|
+
### 高级管理
|
|
299
|
+
|
|
300
|
+
```bash
|
|
301
|
+
# 安装并指定更新间隔(分钟)
|
|
302
|
+
ddns task --install 10 -c /etc/config/ddns.json
|
|
303
|
+
|
|
304
|
+
# 启用/禁用任务
|
|
305
|
+
ddns task --enable
|
|
306
|
+
ddns task --disable
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
详细配置指南请参考:[命令行参数文档](https://ddns.newfuture.cc/doc/config/cli.md#task-management-定时任务管理)
|
|
310
|
+
|
|
311
|
+
### Docker
|
|
312
|
+
|
|
313
|
+
Docker 镜像在无额外参数的情况下,已默认启用每 5 分钟执行一次的定时任务
|
|
314
|
+
|
|
315
|
+
</details>
|
|
316
|
+
|
|
317
|
+
<details>
|
|
318
|
+
<summary markdown="span">问题排查反馈</summary>
|
|
319
|
+
|
|
320
|
+
1. 先确认排查是否是系统/网络环境问题
|
|
321
|
+
2. 在 [issues](https://github.com/NewFuture/DDNS/issues) 中搜索是否有类似问题
|
|
322
|
+
3. 前两者均无法解决或者确定是 bug,[在此新建 issue](https://github.com/NewFuture/DDNS/issues/new)
|
|
323
|
+
- [ ] 开启 `--debug`
|
|
324
|
+
- [ ] 附上这些内容 **运行版本和方式**、**系统环境**、**出错日志**、**去掉 id/token** 的配置文件
|
|
325
|
+
- [ ] 源码运行注明使用的 python 环境
|
|
326
|
+
|
|
327
|
+
</details>
|
ddns-4.1.0/README.md
ADDED
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
# [<img src="https://ddns.newfuture.cc/doc/img/ddns.svg" width="32px" height="32px"/>](https://ddns.newfuture.cc) DDNS
|
|
2
|
+
|
|
3
|
+
> 自动更新 DNS 解析到本机 IP 地址,支持 IPv4/IPv6,内网/公网 IP,自动创建 DNS 记录
|
|
4
|
+
|
|
5
|
+
[](https://github.com/NewFuture/DDNS)
|
|
6
|
+
[](https://github.com/NewFuture/DDNS/actions/workflows/build.yml)
|
|
7
|
+
[](https://github.com/NewFuture/DDNS/actions/workflows/publish.yml)
|
|
8
|
+
[](https://github.com/NewFuture/DDNS/releases/latest)
|
|
9
|
+
[](https://pypi.org/project/ddns/)
|
|
10
|
+
[](https://pypi.org/project/ddns/)
|
|
11
|
+
[](https://hub.docker.com/r/newfuture/ddns)
|
|
12
|
+
[](https://hub.docker.com/r/newfuture/ddns)
|
|
13
|
+
|
|
14
|
+
## 主要特性
|
|
15
|
+
|
|
16
|
+
### 🚀 多平台支持
|
|
17
|
+
|
|
18
|
+
- **Docker**: 推荐方式,支持 `amd64`、`arm64`、`arm/v7` 等多架构 ([使用文档](doc/docker.md))
|
|
19
|
+
- **二进制文件**: 单文件运行,支持 Windows/Linux/macOS ([下载地址](https://github.com/NewFuture/DDNS/releases/latest))
|
|
20
|
+
- **pip 安装**: `pip install ddns`
|
|
21
|
+
- **源码运行**: 无依赖,仅需 Python 环境
|
|
22
|
+
|
|
23
|
+
### ⚙️ 灵活配置
|
|
24
|
+
|
|
25
|
+
- **命令行参数**: `ddns --dns=dnspod --id=xxx --token=xxx` ([配置文档](doc/config/cli.md))
|
|
26
|
+
- **JSON 配置文件**: 支持多域名、多服务商配置,支持远程URL配置 ([配置文档](doc/config/json.md))
|
|
27
|
+
- **环境变量**: Docker 友好的配置方式 ([配置文档](doc/config/env.md))
|
|
28
|
+
|
|
29
|
+
### 🌍 DNS 服务商支持
|
|
30
|
+
|
|
31
|
+
支持 15+ 主流 DNS 服务商,包括:
|
|
32
|
+
|
|
33
|
+
- **国内**: [阿里DNS](doc/providers/alidns.md) ⚡、[阿里云ESA](doc/providers/aliesa.md) ⚡、[DNSPOD](doc/providers/dnspod.md)、[腾讯云DNS](doc/providers/tencentcloud.md) ⚡、[腾讯云EdgeOne](doc/providers/edgeone.md) ⚡、[华为云DNS](doc/providers/huaweidns.md) ⚡、[DNS.COM](doc/providers/51dns.md)
|
|
34
|
+
- **国际**: [Cloudflare](doc/providers/cloudflare.md)、[DNSPOD国际版](doc/providers/dnspod_com.md)、[HE.net](doc/providers/he.md)、[NameSilo](doc/providers/namesilo.md)、[No-IP](doc/providers/noip.md)
|
|
35
|
+
- **自定义**: [回调 API](doc/providers/callback.md)、[调试模式](doc/providers/debug.md)
|
|
36
|
+
|
|
37
|
+
> ⚡ 表示支持 HMAC-SHA256 企业级安全认证 | [查看所有服务商](doc/providers/)
|
|
38
|
+
|
|
39
|
+
### 🔧 高级功能
|
|
40
|
+
|
|
41
|
+
- 多域名和多级域名解析
|
|
42
|
+
- IPv4/IPv6 双栈支持
|
|
43
|
+
- 自动创建 DNS 记录
|
|
44
|
+
- 内网/公网 IP 自动检测
|
|
45
|
+
- HTTP 代理和多代理切换
|
|
46
|
+
- 本地缓存减少 API 调用
|
|
47
|
+
- [定时任务](doc/config/cli.md#task-management-定时任务管理)和日志管理
|
|
48
|
+
|
|
49
|
+
## 使用
|
|
50
|
+
|
|
51
|
+
### ① 安装
|
|
52
|
+
|
|
53
|
+
根据需要选择一种方式:`一键脚本`、`二进制`版、`pip`版、`源码`运行,或者 `Docker`。
|
|
54
|
+
|
|
55
|
+
推荐 Docker 版,兼容性最佳,体积小,性能优化。
|
|
56
|
+
|
|
57
|
+
- #### Docker(推荐)
|
|
58
|
+
|
|
59
|
+
详细说明和高级用法请查看 [Docker 使用文档](https://ddns.newfuture.cc/doc/docker.html)
|
|
60
|
+
|
|
61
|
+
<details>
|
|
62
|
+
<summary markdown="span">支持命令行,配置文件,和环境变量传参</summary>
|
|
63
|
+
|
|
64
|
+
- 命令行cli
|
|
65
|
+
|
|
66
|
+
```sh
|
|
67
|
+
docker run newfuture/ddns -h
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
- 使用配置文件(docker 工作目录 `/ddns/`,默认配置位置 `/ddns/config.json`):
|
|
71
|
+
|
|
72
|
+
```sh
|
|
73
|
+
docker run -d -v /host/config/:/ddns/ --network host newfuture/ddns
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
- 使用环境变量:
|
|
77
|
+
|
|
78
|
+
```sh
|
|
79
|
+
docker run -d \
|
|
80
|
+
-e DDNS_DNS=dnspod \
|
|
81
|
+
-e DDNS_ID=12345 \
|
|
82
|
+
-e DDNS_TOKEN=mytokenkey \
|
|
83
|
+
-e DDNS_IPV4=ddns.newfuture.cc \
|
|
84
|
+
--network host \
|
|
85
|
+
newfuture/ddns
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
</details>
|
|
89
|
+
|
|
90
|
+
- #### 二进制版(单文件,无需 python)
|
|
91
|
+
|
|
92
|
+
前往[release下载对应版本](https://github.com/NewFuture/DDNS/releases/latest)
|
|
93
|
+
|
|
94
|
+
也可使用一键安装脚本自动下载并安装对应平台的二进制:
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
curl -#fSL https://ddns.newfuture.cc/install.sh | sh
|
|
98
|
+
```
|
|
99
|
+
提示:安装到系统目录(如 /usr/local/bin)可能需要 root 或 sudo 权限;若权限不足,可改为 `sudo sh` 运行。
|
|
100
|
+
|
|
101
|
+
详细说明请查看 [一键安装文档](doc/install.md)
|
|
102
|
+
|
|
103
|
+
- #### pip 安装(需要 pip 或 easy_install)
|
|
104
|
+
|
|
105
|
+
1. 安装 ddns: `pip install ddns` 或 `easy_install ddns`
|
|
106
|
+
2. 运行: `ddns -h` 或者 `python -m ddns`
|
|
107
|
+
|
|
108
|
+
- #### 源码运行(无任何依赖,需 python 环境)
|
|
109
|
+
|
|
110
|
+
1. clone 或者 [下载此仓库](https://github.com/NewFuture/DDNS/archive/master.zip) 并解压
|
|
111
|
+
2. 运行 `python -m ddns`
|
|
112
|
+
|
|
113
|
+
### ② 快速配置
|
|
114
|
+
|
|
115
|
+
1. 申请 api `token`,填写到对应的 `id` 和 `token` 字段:
|
|
116
|
+
|
|
117
|
+
- **DNSPOD(中国版)**: [创建 token](https://support.dnspod.cn/Kb/showarticle/tsid/227/) | [详细配置文档](doc/providers/dnspod.md)
|
|
118
|
+
- **阿里云 DNS**: [申请 accesskey](https://help.aliyun.com/document_detail/87745.htm) | [详细配置文档](doc/providers/alidns.md)
|
|
119
|
+
- **阿里云边缘安全加速(ESA)**: [申请 accesskey](https://help.aliyun.com/document_detail/87745.htm) | [详细配置文档](doc/providers/aliesa.md)
|
|
120
|
+
- **51DNS(dns.com)**: [API Key/Secret](https://www.dns.com/member/apiSet) | [详细配置文档](doc/providers/51dns.md)
|
|
121
|
+
- **DNSPOD(国际版)**: [获取 token](https://www.dnspod.com/docs/info.html#get-the-user-token) | [详细配置文档](doc/providers/dnspod_com.md)
|
|
122
|
+
- **CloudFlare**: [API Key](https://support.cloudflare.com/hc/en-us/articles/200167836-Where-do-I-find-my-Cloudflare-API-key-)(除了 `email + API KEY`,也可使用 `Token`,**需要list Zone 权限**) | [详细配置文档](doc/providers/cloudflare.md)
|
|
123
|
+
- **HE.net**: [DDNS 文档](https://dns.he.net/docs.html)(仅需将设置的密码填入 `token` 字段,`id` 字段可留空) | [详细配置文档](doc/providers/he.md)
|
|
124
|
+
- **华为云 DNS**: [APIKEY 申请](https://console.huaweicloud.com/iam/)(点左边访问密钥,然后点新增访问密钥) | [详细配置文档](doc/providers/huaweidns.md)
|
|
125
|
+
- **NameSilo**: [API Key](https://www.namesilo.com/account/api-manager)(API Manager 中获取 API Key) | [详细配置文档](doc/providers/namesilo.md)
|
|
126
|
+
- **腾讯云 DNS**: [API Secret](https://console.cloud.tencent.com/cam/capi) | [详细配置文档](doc/providers/tencentcloud.md)
|
|
127
|
+
- **腾讯云 EdgeOne**: [API Secret](https://console.cloud.tencent.com/cam/capi) | [详细配置文档](doc/providers/edgeone.md)
|
|
128
|
+
- **No-IP**: [用户名和密码](https://www.noip.com/)(使用 No-IP 账户的用户名和密码) | [详细配置文档](doc/providers/noip.md)
|
|
129
|
+
- **自定义回调**: 参数填写方式请查看下方的自定义回调配置说明
|
|
130
|
+
|
|
131
|
+
2. 修改配置文件,`ipv4` 和 `ipv6` 字段,为待更新的域名,详细参照配置说明
|
|
132
|
+
|
|
133
|
+
## 详细配置
|
|
134
|
+
|
|
135
|
+
所有字段可通过三种方式进行配置,优先级为:**命令行参数 > JSON配置文件 > 环境变量**
|
|
136
|
+
|
|
137
|
+
1. [命令行参数](doc/config/cli.md) `ddns --key=value`(`ddns -h` 查看详情),优先级最高
|
|
138
|
+
2. [JSON 配置文件](doc/config/json.md)(值为 null 认为是有效值,会覆盖环境变量的设置,如果没有对应的 key 则会尝试使用环境变量)
|
|
139
|
+
3. [环境变量](doc/config/env.md) DDNS_ 前缀加上 key (`${ddns_id}` 或 `${DDNS_ID}`,`${DDNS_LOG_LEVEL}`)
|
|
140
|
+
|
|
141
|
+
### 配置优先级和字段覆盖关系
|
|
142
|
+
|
|
143
|
+
如果同一个配置项在多个地方设置,将按照以下优先级规则生效:
|
|
144
|
+
|
|
145
|
+
- **命令行参数**:优先级最高,会覆盖其他所有设置
|
|
146
|
+
- **JSON配置文件**:介于命令行和环境变量之间,会覆盖环境变量中的设置
|
|
147
|
+
- **环境变量**:优先级最低,当其他方式未设置时使用
|
|
148
|
+
|
|
149
|
+
**高级用法**:
|
|
150
|
+
|
|
151
|
+
- JSON配置中明确设为`null`的值会覆盖环境变量设置
|
|
152
|
+
- `debug`参数只在命令行中有效,JSON配置文件中的同名设置无效
|
|
153
|
+
- 多值参数(如`ipv4`、`ipv6`等)在命令行中使用方式为重复使用参数,如`--ipv4 domain1 --ipv4 domain2`
|
|
154
|
+
|
|
155
|
+
各配置方式的详细说明请查看对应文档:[命令行](doc/config/cli.md)、[JSON配置](doc/config/json.md)、[环境变量](doc/config/env.md)、[服务商配置](doc/providers/)
|
|
156
|
+
|
|
157
|
+
> 📖 **环境变量详细配置**: 查看 [环境变量配置文档](doc/config/env.md) 了解所有环境变量的详细用法和示例
|
|
158
|
+
|
|
159
|
+
<details open>
|
|
160
|
+
<summary markdown="span">config.json 配置文件</summary>
|
|
161
|
+
|
|
162
|
+
- 首次运行会自动生成一个模板配置文件
|
|
163
|
+
- 可以使用 `-c` 使用指定的配置文件(默认读取当前目录的 config.json)
|
|
164
|
+
- 推荐使用 vscode 等支持 JsonSchema 的编辑器编辑配置文件
|
|
165
|
+
- 查看 [JSON配置文件详细文档](doc/config/json.md) 了解完整的配置选项和示例
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
ddns -c path/to/config.json
|
|
169
|
+
# 或者python运行
|
|
170
|
+
python -m ddns -c /path/to/config.json
|
|
171
|
+
# 远程配置文件
|
|
172
|
+
ddns -c https://ddns.newfuture.cc/tests/config/debug.json
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
#### 配置参数表
|
|
176
|
+
|
|
177
|
+
| key | type | required | default | description | tips |
|
|
178
|
+
| :----: | :----------------: | :------: | :---------: | :----------------: | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
179
|
+
| id | string | √ | 无 | api 访问 ID | Cloudflare 为邮箱(使用 Token 时留空)<br>HE.net 可留空<br>华为云为 Access Key ID (AK) |
|
|
180
|
+
| token | string | √ | 无 | api 授权 token | 部分平台叫 secret key,**反馈粘贴时删除** |
|
|
181
|
+
| dns | string | No | `"dnspod"` | dns 服务商 | 阿里 DNS 为 `alidns`,阿里ESA为 `aliesa`,Cloudflare 为 `cloudflare`,dns.com 为 `dnscom`,DNSPOD 国内为 `dnspod`,DNSPOD 国际为 `dnspod_com`,HE.net 为 `he`,华为云为 `huaweidns`,NameSilo 为 `namesilo`,腾讯云为 `tencentcloud`,腾讯云EdgeOne为 `edgeone`,No-IP 为 `noip`,自定义回调为 `callback`。部分服务商有[详细配置文档](doc/providers/) |
|
|
182
|
+
| ipv4 | array | No | `[]` | ipv4 域名列表 | 为 `[]` 时,不会获取和更新 IPv4 地址 |
|
|
183
|
+
| ipv6 | array | No | `[]` | ipv6 域名列表 | 为 `[]` 时,不会获取和更新 IPv6 地址 |
|
|
184
|
+
| index4 | string\|int\|array | No | `"default"` | ipv4 获取方式 | 可设置 `网卡`、`内网`、`公网`、`正则` 等方式 |
|
|
185
|
+
| index6 | string\|int\|array | No | `"default"` | ipv6 获取方式 | 可设置 `网卡`、`内网`、`公网`、`正则` 等方式 |
|
|
186
|
+
| ttl | number | No | `null` | DNS 解析 TTL 时间 | 不设置采用 DNS 默认策略 |
|
|
187
|
+
| proxy | string\|array | No | 无 | HTTP 代理格式:`http://host:port` | 多代理逐个尝试直到成功,`DIRECT` 为直连 |
|
|
188
|
+
| ssl | string\|boolean | No | `"auto"` | SSL证书验证方式 | `true`(强制验证)、`false`(禁用验证)、`"auto"`(自动降级)或自定义CA证书文件路径 |
|
|
189
|
+
| debug | bool | No | `false` | 是否开启调试 | 调试模式,仅命令行参数`--debug`有效 |
|
|
190
|
+
| cache | string\|bool | No | `true` | 是否缓存记录 | 正常情况打开避免频繁更新,默认位置为临时目录下 `ddns.cache`,也可以指定一个具体路径 |
|
|
191
|
+
| log | object | No | `null` | 日志配置(可选) | 日志配置对象,支持`level`、`file`、`format`、`datefmt`参数 |
|
|
192
|
+
|
|
193
|
+
#### index4 和 index6 参数说明
|
|
194
|
+
|
|
195
|
+
- 数字(`0`,`1`,`2`,`3`等):第 i 个网卡 ip
|
|
196
|
+
- 字符串 `"default"`(或者无此项):系统访问外网默认 IP
|
|
197
|
+
- 字符串 `"public"`:使用公网 ip(使用公网 API 查询,url 的简化模式)
|
|
198
|
+
- 字符串 `"url:xxx"`:打开 URL `xxx`(如:`"url:http://ip.sb"`),从返回的数据提取 IP 地址
|
|
199
|
+
- 字符串 `"regex:xxx"` 正则表达(如 `"regex:192.*"`):提取 `ifconfig`/`ipconfig` 中与之匹配的首个 IP 地址,**注意 json 转义**(`\`要写成`\\`)
|
|
200
|
+
- `"192.*"` 表示 192 开头的所有 ip(注意 `regex:` 不可省略)
|
|
201
|
+
- 如果想匹配 `10.00.xxxx` 应该写成 `"regex:10\\.00\\..*"`(`"\\"` json 转义成 `\`)
|
|
202
|
+
- 字符串 `"cmd:xxxx"`:执行命令 `xxxx` 的 stdout 输出结果作为目标 IP
|
|
203
|
+
- 字符串 `"shell:xxx"`:使用系统 shell 运行 `xxx`,并把结果 stdout 作为目标 IP
|
|
204
|
+
- `false`:强制禁止更新 ipv4 或 ipv6 的 DNS 解析
|
|
205
|
+
- 列表:依次执行列表中的 index 规则,并将最先获得的结果作为目标 IP
|
|
206
|
+
- 例如 `["public", "regex:172\\..*"]` 将先查询公网 API,未获取到 IP 后再从本地寻找 172 开头的 IP
|
|
207
|
+
|
|
208
|
+
#### 自定义回调配置说明
|
|
209
|
+
|
|
210
|
+
- `id` 字段填写回调地址,以 HTTP 或 HTTPS 开头,推荐采用 HTTPS 方式的回调 API,支持变量替换功能。
|
|
211
|
+
- `token` 字段为 POST 请求参数(JSON对象或JSON字符串),本字段为空或不存在则使用 GET 方式发起回调。当 JSON 的参数值包含下表所示的常量字符串时,会自动替换为实际内容。
|
|
212
|
+
|
|
213
|
+
详细配置指南请查看:[Callback Provider 配置文档](doc/providers/callback.md)
|
|
214
|
+
|
|
215
|
+
| 常量名称 | 常量内容 | 说明 |
|
|
216
|
+
| ---------------- | ------------------------ | -------- |
|
|
217
|
+
| `__DOMAIN__` | DDNS 域名 | |
|
|
218
|
+
| `__IP__` | 获取的对应类型的 IP 地址 | |
|
|
219
|
+
| `__RECORDTYPE__` | DDNS 记录类型 | |
|
|
220
|
+
| `__TTL__` | DDNS TTL | |
|
|
221
|
+
| `__TIMESTAMP__` | 请求发起时间戳 | 包含小数 |
|
|
222
|
+
|
|
223
|
+
#### 配置示例
|
|
224
|
+
|
|
225
|
+
```json
|
|
226
|
+
{
|
|
227
|
+
"$schema": "https://ddns.newfuture.cc/schema/v4.0.json",
|
|
228
|
+
"id": "12345",
|
|
229
|
+
"token": "mytokenkey",
|
|
230
|
+
"dns": "dnspod 或 dnspod_com 或 alidns 或 aliesa 或 dnscom 或 cloudflare 或 he 或 huaweidns 或 namesilo 或 tencentcloud 或 noip 或 callback",
|
|
231
|
+
"ipv4": ["ddns.newfuture.cc", "ipv4.ddns.newfuture.cc"],
|
|
232
|
+
"ipv6": ["ddns.newfuture.cc", "ipv6.ddns.newfuture.cc"],
|
|
233
|
+
"index4": 0,
|
|
234
|
+
"index6": "public",
|
|
235
|
+
"ttl": 600,
|
|
236
|
+
"proxy": ["http://127.0.0.1:1080", "DIRECT"],
|
|
237
|
+
"log": {
|
|
238
|
+
"level": "DEBUG",
|
|
239
|
+
"file": "dns.log",
|
|
240
|
+
"datefmt": "%Y-%m-%dT%H:%M:%S"
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
</details>
|
|
246
|
+
|
|
247
|
+
## 定时任务
|
|
248
|
+
|
|
249
|
+
<details>
|
|
250
|
+
<summary markdown="span">使用内置的 task 命令设置定时任务(默认每 5 分钟检查一次 IP,自动更新)</summary>
|
|
251
|
+
|
|
252
|
+
DDNS 提供内置的 `task` 子命令来管理定时任务,支持跨平台自动化部署:
|
|
253
|
+
|
|
254
|
+
### 高级管理
|
|
255
|
+
|
|
256
|
+
```bash
|
|
257
|
+
# 安装并指定更新间隔(分钟)
|
|
258
|
+
ddns task --install 10 -c /etc/config/ddns.json
|
|
259
|
+
|
|
260
|
+
# 启用/禁用任务
|
|
261
|
+
ddns task --enable
|
|
262
|
+
ddns task --disable
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
详细配置指南请参考:[命令行参数文档](https://ddns.newfuture.cc/doc/config/cli.md#task-management-定时任务管理)
|
|
266
|
+
|
|
267
|
+
### Docker
|
|
268
|
+
|
|
269
|
+
Docker 镜像在无额外参数的情况下,已默认启用每 5 分钟执行一次的定时任务
|
|
270
|
+
|
|
271
|
+
</details>
|
|
272
|
+
|
|
273
|
+
<details>
|
|
274
|
+
<summary markdown="span">问题排查反馈</summary>
|
|
275
|
+
|
|
276
|
+
1. 先确认排查是否是系统/网络环境问题
|
|
277
|
+
2. 在 [issues](https://github.com/NewFuture/DDNS/issues) 中搜索是否有类似问题
|
|
278
|
+
3. 前两者均无法解决或者确定是 bug,[在此新建 issue](https://github.com/NewFuture/DDNS/issues/new)
|
|
279
|
+
- [ ] 开启 `--debug`
|
|
280
|
+
- [ ] 附上这些内容 **运行版本和方式**、**系统环境**、**出错日志**、**去掉 id/token** 的配置文件
|
|
281
|
+
- [ ] 源码运行注明使用的 python 环境
|
|
282
|
+
|
|
283
|
+
</details>
|