ddns 4.0.2__tar.gz → 4.1.0b1__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.0.2 → ddns-4.1.0b1}/PKG-INFO +96 -71
- {ddns-4.0.2 → ddns-4.1.0b1}/README.md +91 -71
- ddns-4.1.0b1/ddns/__builtins__.pyi +5 -0
- {ddns-4.0.2 → ddns-4.1.0b1}/ddns/__init__.py +6 -4
- ddns-4.1.0b1/ddns/__main__.py +193 -0
- ddns-4.1.0b1/ddns/provider/__init__.py +59 -0
- ddns-4.1.0b1/ddns/provider/_base.py +659 -0
- ddns-4.1.0b1/ddns/provider/alidns.py +134 -0
- ddns-4.1.0b1/ddns/provider/callback.py +79 -0
- ddns-4.1.0b1/ddns/provider/cloudflare.py +99 -0
- ddns-4.1.0b1/ddns/provider/debug.py +20 -0
- ddns-4.1.0b1/ddns/provider/dnscom.py +102 -0
- ddns-4.1.0b1/ddns/provider/dnspod.py +117 -0
- ddns-4.1.0b1/ddns/provider/dnspod_com.py +18 -0
- ddns-4.1.0b1/ddns/provider/he.py +46 -0
- ddns-4.1.0b1/ddns/provider/huaweidns.py +142 -0
- ddns-4.1.0b1/ddns/provider/tencentcloud.py +195 -0
- ddns-4.1.0b1/ddns/util/cache.py +152 -0
- {ddns-4.0.2 → ddns-4.1.0b1}/ddns/util/config.py +29 -32
- ddns-4.1.0b1/ddns/util/http.py +277 -0
- {ddns-4.0.2 → ddns-4.1.0b1}/ddns/util/ip.py +20 -17
- {ddns-4.0.2 → ddns-4.1.0b1}/ddns.egg-info/PKG-INFO +96 -71
- ddns-4.1.0b1/ddns.egg-info/SOURCES.txt +46 -0
- ddns-4.1.0b1/ddns.egg-info/requires.txt +14 -0
- {ddns-4.0.2 → ddns-4.1.0b1}/pyproject.toml +86 -23
- ddns-4.1.0b1/tests/test_config_ssl.py +191 -0
- ddns-4.1.0b1/tests/test_hmac_sha256_authorization.py +359 -0
- ddns-4.1.0b1/tests/test_provider_alidns.py +536 -0
- ddns-4.1.0b1/tests/test_provider_base.py +184 -0
- ddns-4.1.0b1/tests/test_provider_callback.py +433 -0
- ddns-4.1.0b1/tests/test_provider_cloudflare.py +556 -0
- ddns-4.1.0b1/tests/test_provider_debug.py +221 -0
- ddns-4.1.0b1/tests/test_provider_dnscom.py +419 -0
- ddns-4.1.0b1/tests/test_provider_dnspod.py +544 -0
- ddns-4.1.0b1/tests/test_provider_dnspod_com.py +74 -0
- ddns-4.1.0b1/tests/test_provider_he.py +370 -0
- ddns-4.1.0b1/tests/test_provider_huaweidns.py +485 -0
- ddns-4.1.0b1/tests/test_provider_simple.py +310 -0
- ddns-4.1.0b1/tests/test_provider_tencentcloud.py +556 -0
- ddns-4.1.0b1/tests/test_util_cache.py +491 -0
- ddns-4.1.0b1/tests/test_util_http.py +597 -0
- 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.egg-info/SOURCES.txt +0 -25
- ddns-4.0.2/ddns.egg-info/requires.txt +0 -4
- {ddns-4.0.2 → ddns-4.1.0b1}/LICENSE +0 -0
- {ddns-4.0.2/ddns/provider → ddns-4.1.0b1/ddns/util}/__init__.py +0 -0
- {ddns-4.0.2 → ddns-4.1.0b1}/ddns.egg-info/dependency_links.txt +0 -0
- {ddns-4.0.2 → ddns-4.1.0b1}/ddns.egg-info/entry_points.txt +0 -0
- {ddns-4.0.2 → ddns-4.1.0b1}/ddns.egg-info/top_level.txt +0 -0
- {ddns-4.0.2 → ddns-4.1.0b1}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ddns
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.1.0b1
|
|
4
4
|
Summary: Dynamic DNS client for multiple providers, supporting IPv4 and IPv6.
|
|
5
5
|
Author-email: NewFuture <python@newfuture.cc>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -36,6 +36,11 @@ License-File: LICENSE
|
|
|
36
36
|
Provides-Extra: dev
|
|
37
37
|
Requires-Dist: black; extra == "dev"
|
|
38
38
|
Requires-Dist: flake8; extra == "dev"
|
|
39
|
+
Requires-Dist: mock; python_version < "3.3" and extra == "dev"
|
|
40
|
+
Provides-Extra: pytest
|
|
41
|
+
Requires-Dist: pytest>=6.0; extra == "pytest"
|
|
42
|
+
Requires-Dist: pytest-cov; extra == "pytest"
|
|
43
|
+
Requires-Dist: mock; python_version < "3.3" and extra == "pytest"
|
|
39
44
|
Dynamic: license-file
|
|
40
45
|
|
|
41
46
|
# [<img src="https://ddns.newfuture.cc/doc/img/ddns.svg" width="32px" height="32px"/>](https://ddns.newfuture.cc) [DDNS](https://github.com/NewFuture/DDNS)
|
|
@@ -62,6 +67,7 @@ Dynamic: license-file
|
|
|
62
67
|
- [命令行参数](https://ddns.newfuture.cc/doc/cli.html)
|
|
63
68
|
- [JSON 配置文件](https://ddns.newfuture.cc/doc/json.html)
|
|
64
69
|
- [环境变量配置](https://ddns.newfuture.cc/doc/env.html)
|
|
70
|
+
- [服务商配置指南](https://ddns.newfuture.cc/doc/providers/)
|
|
65
71
|
|
|
66
72
|
- 域名支持:
|
|
67
73
|
- 多个域名支持
|
|
@@ -76,16 +82,21 @@ Dynamic: license-file
|
|
|
76
82
|
- http 代理支持
|
|
77
83
|
- 多代理自动切换
|
|
78
84
|
- 服务商支持:
|
|
79
|
-
- [DNSPOD](https://www.dnspod.cn/)
|
|
80
|
-
- [阿里 DNS](http://www.alidns.com/)
|
|
85
|
+
- [DNSPOD](https://www.dnspod.cn/) ([配置指南](doc/providers/dnspod.md))
|
|
86
|
+
- [阿里 DNS](http://www.alidns.com/) ([配置指南](doc/providers/alidns.md)) ⚡
|
|
81
87
|
- [DNS.COM](https://www.dns.com/) (@loftor-git)
|
|
82
88
|
- [DNSPOD 国际版](https://www.dnspod.com/)
|
|
83
89
|
- [CloudFlare](https://www.cloudflare.com/) (@tongyifan)
|
|
84
90
|
- [HE.net](https://dns.he.net/) (@NN708) (不支持自动创建记录)
|
|
85
|
-
- [华为云](https://huaweicloud.com/) (@cybmp3)
|
|
91
|
+
- [华为云](https://huaweicloud.com/) (@cybmp3) ⚡
|
|
92
|
+
- [腾讯云](https://cloud.tencent.com/) ([配置指南](doc/providers/tencentcloud.md)) ⚡
|
|
93
|
+
- 自定义回调 API ([配置指南](doc/providers/callback.md))
|
|
94
|
+
|
|
95
|
+
> ⚡ 标记的服务商使用高级 HMAC-SHA256 签名认证,提供企业级安全保障
|
|
86
96
|
- 其他:
|
|
87
97
|
- 可设置定时任务
|
|
88
98
|
- TTL 配置支持
|
|
99
|
+
- DNS 线路(运营商)配置支持(国内服务商)
|
|
89
100
|
- 本地文件缓存(减少 API 请求)
|
|
90
101
|
- 地址变更时触发自定义回调 API(与 DDNS 功能互斥)
|
|
91
102
|
|
|
@@ -97,60 +108,66 @@ Dynamic: license-file
|
|
|
97
108
|
|
|
98
109
|
推荐 Docker 版,兼容性最佳,体积小,性能优化。
|
|
99
110
|
|
|
100
|
-
- ####
|
|
111
|
+
- #### Docker(需要安装 Docker)
|
|
101
112
|
|
|
102
|
-
|
|
103
|
-
2. 运行: `ddns`
|
|
113
|
+
详细说明和高级用法请查看 [Docker 使用文档](https://ddns.newfuture.cc/doc/docker.html)
|
|
104
114
|
|
|
105
|
-
|
|
115
|
+
<details>
|
|
116
|
+
<summary markdown="span">支持命令行,配置文件,和环境变量传参</summary>
|
|
106
117
|
|
|
107
|
-
-
|
|
108
|
-
- Linux(仅 Ubuntu 测试) [ddns](https://github.com/NewFuture/DDNS/releases/latest)
|
|
109
|
-
- Mac OSX [ddns-mac](https://github.com/NewFuture/DDNS/releases/latest)
|
|
118
|
+
- 命令行cli
|
|
110
119
|
|
|
111
|
-
|
|
120
|
+
```sh
|
|
121
|
+
docker run newfuture/ddns -h
|
|
122
|
+
```
|
|
112
123
|
|
|
113
|
-
|
|
114
|
-
2. 运行 ./run.py(windows 双击 `run.bat` 或者运行 `python run.py`)
|
|
124
|
+
- 使用配置文件(docker 工作目录 `/ddns/`,默认配置位置 `/ddns/config.json`):
|
|
115
125
|
|
|
116
|
-
|
|
126
|
+
```sh
|
|
127
|
+
docker run -d -v /host/config/:/ddns/ --network host newfuture/ddns
|
|
128
|
+
```
|
|
117
129
|
|
|
118
130
|
- 使用环境变量:
|
|
119
131
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
```
|
|
132
|
+
```sh
|
|
133
|
+
docker run -d \
|
|
134
|
+
-e DDNS_DNS=dnspod \
|
|
135
|
+
-e DDNS_ID=12345 \
|
|
136
|
+
-e DDNS_TOKEN=mytokenkey \
|
|
137
|
+
-e DDNS_IPV4=ddns.newfuture.cc \
|
|
138
|
+
--network host \
|
|
139
|
+
newfuture/ddns
|
|
140
|
+
```
|
|
130
141
|
|
|
131
|
-
|
|
142
|
+
</details>
|
|
143
|
+
|
|
144
|
+
- #### pip 安装(需要 pip 或 easy_install)
|
|
145
|
+
|
|
146
|
+
1. 安装 ddns: `pip install ddns` 或 `easy_install ddns`
|
|
147
|
+
2. 运行: `ddns -h` 或者 `python -m ddns`
|
|
148
|
+
|
|
149
|
+
- #### 二进制版(单文件,无需 python)
|
|
132
150
|
|
|
133
|
-
|
|
134
|
-
docker run -d \
|
|
135
|
-
-v /local/config/path/:/ddns/ \
|
|
136
|
-
--network host \
|
|
137
|
-
newfuture/ddns
|
|
138
|
-
```
|
|
151
|
+
前往[release下载对应版本](https://github.com/NewFuture/DDNS/releases/latest)
|
|
139
152
|
|
|
140
|
-
|
|
153
|
+
- #### 源码运行(无任何依赖,需 python 环境)
|
|
154
|
+
|
|
155
|
+
1. clone 或者 [下载此仓库](https://github.com/NewFuture/DDNS/archive/master.zip) 并解压
|
|
156
|
+
2. 运行 `python run.py` 或者 `python -m ddns`
|
|
141
157
|
|
|
142
158
|
### ② 快速配置
|
|
143
159
|
|
|
144
160
|
1. 申请 api `token`,填写到对应的 `id` 和 `token` 字段:
|
|
145
161
|
|
|
146
|
-
-
|
|
147
|
-
- [
|
|
148
|
-
-
|
|
149
|
-
-
|
|
150
|
-
-
|
|
151
|
-
-
|
|
152
|
-
- [
|
|
153
|
-
-
|
|
162
|
+
- **DNSPOD(中国版)**: [创建 token](https://support.dnspod.cn/Kb/showarticle/tsid/227/) | [详细配置文档](doc/providers/dnspod.md)
|
|
163
|
+
- **阿里云 DNS**: [申请 accesskey](https://help.aliyun.com/document_detail/87745.htm) | [详细配置文档](doc/providers/alidns.md)
|
|
164
|
+
- **DNS.COM**: [API Key/Secret](https://www.dns.com/member/apiSet)
|
|
165
|
+
- **DNSPOD(国际版)**: [获取 token](https://www.dnspod.com/docs/info.html#get-the-user-token)
|
|
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 权限**)
|
|
167
|
+
- **HE.net**: [DDNS 文档](https://dns.he.net/docs.html)(仅需将设置的密码填入 `token` 字段,`id` 字段可留空)
|
|
168
|
+
- **华为云 DNS**: [APIKEY 申请](https://console.huaweicloud.com/iam/)(点左边访问密钥,然后点新增访问密钥)
|
|
169
|
+
- **腾讯云 DNS**: [详细配置文档](doc/providers/tencentcloud.md)
|
|
170
|
+
- **自定义回调**: 参数填写方式请查看下方的自定义回调配置说明
|
|
154
171
|
|
|
155
172
|
2. 修改配置文件,`ipv4` 和 `ipv6` 字段,为待更新的域名,详细参照配置说明
|
|
156
173
|
|
|
@@ -170,12 +187,13 @@ Dynamic: license-file
|
|
|
170
187
|
- **JSON配置文件**:介于命令行和环境变量之间,会覆盖环境变量中的设置
|
|
171
188
|
- **环境变量**:优先级最低,当其他方式未设置时使用
|
|
172
189
|
|
|
173
|
-
|
|
190
|
+
**高级用法**:
|
|
191
|
+
|
|
174
192
|
- JSON配置中明确设为`null`的值会覆盖环境变量设置
|
|
175
193
|
- `debug`参数只在命令行中有效,JSON配置文件中的同名设置无效
|
|
176
194
|
- 多值参数(如`ipv4`、`ipv6`等)在命令行中使用方式为重复使用参数,如`--ipv4 domain1 --ipv4 domain2`
|
|
177
195
|
|
|
178
|
-
各配置方式的详细说明请查看对应文档:[命令行](doc/cli.md)、[JSON配置](doc/json.md)、[环境变量](doc/env.md)
|
|
196
|
+
各配置方式的详细说明请查看对应文档:[命令行](doc/cli.md)、[JSON配置](doc/json.md)、[环境变量](doc/env.md)、[服务商配置](doc/providers/)
|
|
179
197
|
|
|
180
198
|
> 📖 **环境变量详细配置**: 查看 [环境变量配置文档](doc/env.md) 了解所有环境变量的详细用法和示例
|
|
181
199
|
|
|
@@ -189,26 +207,27 @@ Dynamic: license-file
|
|
|
189
207
|
|
|
190
208
|
```bash
|
|
191
209
|
ddns -c path/to/config.json
|
|
192
|
-
#
|
|
193
|
-
python
|
|
210
|
+
# 或者python运行
|
|
211
|
+
python -m ddns -c /path/to/config.json
|
|
194
212
|
```
|
|
195
213
|
|
|
196
214
|
#### 配置参数表
|
|
197
215
|
|
|
198
|
-
| key
|
|
199
|
-
|
|
|
200
|
-
| id
|
|
201
|
-
|
|
|
202
|
-
| dns
|
|
203
|
-
| ipv4
|
|
204
|
-
| ipv6
|
|
205
|
-
| index4
|
|
206
|
-
| index6
|
|
207
|
-
| ttl
|
|
208
|
-
|
|
|
209
|
-
|
|
|
210
|
-
|
|
|
211
|
-
|
|
|
216
|
+
| key | type | required | default | description | tips |
|
|
217
|
+
| :----: | :----------------: | :------: | :---------: | :----------------: | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
218
|
+
| id | string | √ | 无 | api 访问 ID | Cloudflare 为邮箱(使用 Token 时留空)<br>HE.net 可留空<br>华为云为 Access Key ID (AK) |
|
|
219
|
+
| token | string | √ | 无 | api 授权 token | 部分平台叫 secret key,**反馈粘贴时删除** |
|
|
220
|
+
| dns | string | No | `"dnspod"` | dns 服务商 | 阿里 DNS 为 `alidns`,Cloudflare 为 `cloudflare`,dns.com 为 `dnscom`,DNSPOD 国内为 `dnspod`,DNSPOD 国际为 `dnspod_com`,HE.net 为 `he`,华为云为 `huaweidns`,腾讯云为 `tencentcloud`,自定义回调为 `callback`。部分服务商有[详细配置文档](doc/providers/) |
|
|
221
|
+
| ipv4 | array | No | `[]` | ipv4 域名列表 | 为 `[]` 时,不会获取和更新 IPv4 地址 |
|
|
222
|
+
| ipv6 | array | No | `[]` | ipv6 域名列表 | 为 `[]` 时,不会获取和更新 IPv6 地址 |
|
|
223
|
+
| index4 | string\|int\|array | No | `"default"` | ipv4 获取方式 | 可设置 `网卡`、`内网`、`公网`、`正则` 等方式 |
|
|
224
|
+
| index6 | string\|int\|array | No | `"default"` | ipv6 获取方式 | 可设置 `网卡`、`内网`、`公网`、`正则` 等方式 |
|
|
225
|
+
| ttl | number | No | `null` | DNS 解析 TTL 时间 | 不设置采用 DNS 默认策略 |
|
|
226
|
+
| proxy | string\|array | No | 无 | http 代理 `;` 分割 | 多代理逐个尝试直到成功,`DIRECT` 为直连 |
|
|
227
|
+
| ssl | string\|boolean | No | `"auto"` | SSL证书验证方式 | `true`(强制验证)、`false`(禁用验证)、`"auto"`(自动降级)或自定义CA证书文件路径 |
|
|
228
|
+
| debug | bool | No | `false` | 是否开启调试 | 调试模式,仅命令行参数`--debug`有效 |
|
|
229
|
+
| cache | string\|bool | No | `true` | 是否缓存记录 | 正常情况打开避免频繁更新,默认位置为临时目录下 `ddns.cache`,也可以指定一个具体路径 |
|
|
230
|
+
| log | object | No | `null` | 日志配置(可选) | 日志配置对象,支持`level`、`file`、`format`、`datefmt`参数 |
|
|
212
231
|
|
|
213
232
|
#### index4 和 index6 参数说明
|
|
214
233
|
|
|
@@ -227,16 +246,18 @@ python run.py -c /path/to/config.json
|
|
|
227
246
|
|
|
228
247
|
#### 自定义回调配置说明
|
|
229
248
|
|
|
230
|
-
- `id` 字段填写回调地址,以 HTTP 或 HTTPS 开头,推荐采用 HTTPS 方式的回调 API
|
|
231
|
-
- `token` 字段为 POST
|
|
249
|
+
- `id` 字段填写回调地址,以 HTTP 或 HTTPS 开头,推荐采用 HTTPS 方式的回调 API,支持变量替换功能。
|
|
250
|
+
- `token` 字段为 POST 请求参数(JSON对象或JSON字符串),本字段为空或不存在则使用 GET 方式发起回调。当 JSON 的参数值包含下表所示的常量字符串时,会自动替换为实际内容。
|
|
232
251
|
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
|
236
|
-
|
|
|
237
|
-
| `
|
|
238
|
-
| `__TIMESTAMP__` | 请求发起时间戳 | 包含小数 |
|
|
252
|
+
详细配置指南请查看:[Callback Provider 配置文档](doc/providers/callback.md)
|
|
253
|
+
|
|
254
|
+
| 常量名称 | 常量内容 | 说明 |
|
|
255
|
+
| ---------------- | ------------------------ | -------- |
|
|
256
|
+
| `__DOMAIN__` | DDNS 域名 | |
|
|
239
257
|
| `__IP__` | 获取的对应类型的 IP 地址 | |
|
|
258
|
+
| `__RECORDTYPE__` | DDNS 记录类型 | |
|
|
259
|
+
| `__TTL__` | DDNS TTL | |
|
|
260
|
+
| `__TIMESTAMP__` | 请求发起时间戳 | 包含小数 |
|
|
240
261
|
|
|
241
262
|
#### 配置示例
|
|
242
263
|
|
|
@@ -245,21 +266,21 @@ python run.py -c /path/to/config.json
|
|
|
245
266
|
"$schema": "https://ddns.newfuture.cc/schema/v4.0.json",
|
|
246
267
|
"id": "12345",
|
|
247
268
|
"token": "mytokenkey",
|
|
248
|
-
"dns": "dnspod 或 dnspod_com 或 alidns 或 dnscom 或 cloudflare 或 he 或 huaweidns 或 callback",
|
|
269
|
+
"dns": "dnspod 或 dnspod_com 或 alidns 或 dnscom 或 cloudflare 或 he 或 huaweidns 或 tencentcloud 或 callback",
|
|
249
270
|
"ipv4": ["ddns.newfuture.cc", "ipv4.ddns.newfuture.cc"],
|
|
250
271
|
"ipv6": ["ddns.newfuture.cc", "ipv6.ddns.newfuture.cc"],
|
|
251
272
|
"index4": 0,
|
|
252
273
|
"index6": "public",
|
|
253
274
|
"ttl": 600,
|
|
254
|
-
"proxy": "127.0.0.1:1080
|
|
275
|
+
"proxy": ["127.0.0.1:1080", "DIRECT"],
|
|
255
276
|
"log": {
|
|
256
277
|
"level": "DEBUG",
|
|
257
278
|
"file": "dns.log",
|
|
258
|
-
"format": "%(asctime)s %(levelname)s [%(module)s]: %(message)s",
|
|
259
279
|
"datefmt": "%Y-%m-%dT%H:%M:%S"
|
|
260
280
|
}
|
|
261
281
|
}
|
|
262
282
|
```
|
|
283
|
+
|
|
263
284
|
</details>
|
|
264
285
|
|
|
265
286
|
## 定时任务
|
|
@@ -275,10 +296,13 @@ python run.py -c /path/to/config.json
|
|
|
275
296
|
#### Linux
|
|
276
297
|
|
|
277
298
|
- 使用 init.d 和 crontab:
|
|
299
|
+
|
|
278
300
|
```bash
|
|
279
301
|
sudo ./task.sh
|
|
280
302
|
```
|
|
303
|
+
|
|
281
304
|
- 使用 systemd:
|
|
305
|
+
|
|
282
306
|
```bash
|
|
283
307
|
安装:
|
|
284
308
|
sudo ./systemd.sh install
|
|
@@ -311,6 +335,7 @@ Docker 镜像在无额外参数的情况下,已默认启用每 5 分钟执行
|
|
|
311
335
|
- dnspod.cn 打开: <https://dnsapi.cn>
|
|
312
336
|
- dnspod 国际版: <https://api.dnspod.com>
|
|
313
337
|
- 华为 DNS <https://dns.myhuaweicloud.com>
|
|
338
|
+
|
|
314
339
|
</details>
|
|
315
340
|
|
|
316
341
|
<details>
|
|
@@ -319,7 +344,7 @@ Docker 镜像在无额外参数的情况下,已默认启用每 5 分钟执行
|
|
|
319
344
|
1. 先确认排查是否是系统/网络环境问题
|
|
320
345
|
2. 在 [issues](https://github.com/NewFuture/DDNS/issues) 中搜索是否有类似问题
|
|
321
346
|
3. 前两者均无法解决或者确定是 bug,[在此新建 issue](https://github.com/NewFuture/DDNS/issues/new)
|
|
322
|
-
- [ ] 开启 debug
|
|
347
|
+
- [ ] 开启 `--debug`
|
|
323
348
|
- [ ] 附上这些内容 **运行版本和方式**、**系统环境**、**出错日志**、**去掉 id/token** 的配置文件
|
|
324
349
|
- [ ] 源码运行注明使用的 python 环境
|
|
325
350
|
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
- [命令行参数](https://ddns.newfuture.cc/doc/cli.html)
|
|
23
23
|
- [JSON 配置文件](https://ddns.newfuture.cc/doc/json.html)
|
|
24
24
|
- [环境变量配置](https://ddns.newfuture.cc/doc/env.html)
|
|
25
|
+
- [服务商配置指南](https://ddns.newfuture.cc/doc/providers/)
|
|
25
26
|
|
|
26
27
|
- 域名支持:
|
|
27
28
|
- 多个域名支持
|
|
@@ -36,16 +37,21 @@
|
|
|
36
37
|
- http 代理支持
|
|
37
38
|
- 多代理自动切换
|
|
38
39
|
- 服务商支持:
|
|
39
|
-
- [DNSPOD](https://www.dnspod.cn/)
|
|
40
|
-
- [阿里 DNS](http://www.alidns.com/)
|
|
40
|
+
- [DNSPOD](https://www.dnspod.cn/) ([配置指南](doc/providers/dnspod.md))
|
|
41
|
+
- [阿里 DNS](http://www.alidns.com/) ([配置指南](doc/providers/alidns.md)) ⚡
|
|
41
42
|
- [DNS.COM](https://www.dns.com/) (@loftor-git)
|
|
42
43
|
- [DNSPOD 国际版](https://www.dnspod.com/)
|
|
43
44
|
- [CloudFlare](https://www.cloudflare.com/) (@tongyifan)
|
|
44
45
|
- [HE.net](https://dns.he.net/) (@NN708) (不支持自动创建记录)
|
|
45
|
-
- [华为云](https://huaweicloud.com/) (@cybmp3)
|
|
46
|
+
- [华为云](https://huaweicloud.com/) (@cybmp3) ⚡
|
|
47
|
+
- [腾讯云](https://cloud.tencent.com/) ([配置指南](doc/providers/tencentcloud.md)) ⚡
|
|
48
|
+
- 自定义回调 API ([配置指南](doc/providers/callback.md))
|
|
49
|
+
|
|
50
|
+
> ⚡ 标记的服务商使用高级 HMAC-SHA256 签名认证,提供企业级安全保障
|
|
46
51
|
- 其他:
|
|
47
52
|
- 可设置定时任务
|
|
48
53
|
- TTL 配置支持
|
|
54
|
+
- DNS 线路(运营商)配置支持(国内服务商)
|
|
49
55
|
- 本地文件缓存(减少 API 请求)
|
|
50
56
|
- 地址变更时触发自定义回调 API(与 DDNS 功能互斥)
|
|
51
57
|
|
|
@@ -57,60 +63,66 @@
|
|
|
57
63
|
|
|
58
64
|
推荐 Docker 版,兼容性最佳,体积小,性能优化。
|
|
59
65
|
|
|
60
|
-
- ####
|
|
66
|
+
- #### Docker(需要安装 Docker)
|
|
61
67
|
|
|
62
|
-
|
|
63
|
-
2. 运行: `ddns`
|
|
68
|
+
详细说明和高级用法请查看 [Docker 使用文档](https://ddns.newfuture.cc/doc/docker.html)
|
|
64
69
|
|
|
65
|
-
|
|
70
|
+
<details>
|
|
71
|
+
<summary markdown="span">支持命令行,配置文件,和环境变量传参</summary>
|
|
66
72
|
|
|
67
|
-
-
|
|
68
|
-
- Linux(仅 Ubuntu 测试) [ddns](https://github.com/NewFuture/DDNS/releases/latest)
|
|
69
|
-
- Mac OSX [ddns-mac](https://github.com/NewFuture/DDNS/releases/latest)
|
|
73
|
+
- 命令行cli
|
|
70
74
|
|
|
71
|
-
|
|
75
|
+
```sh
|
|
76
|
+
docker run newfuture/ddns -h
|
|
77
|
+
```
|
|
72
78
|
|
|
73
|
-
|
|
74
|
-
2. 运行 ./run.py(windows 双击 `run.bat` 或者运行 `python run.py`)
|
|
79
|
+
- 使用配置文件(docker 工作目录 `/ddns/`,默认配置位置 `/ddns/config.json`):
|
|
75
80
|
|
|
76
|
-
|
|
81
|
+
```sh
|
|
82
|
+
docker run -d -v /host/config/:/ddns/ --network host newfuture/ddns
|
|
83
|
+
```
|
|
77
84
|
|
|
78
85
|
- 使用环境变量:
|
|
79
86
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
```
|
|
87
|
+
```sh
|
|
88
|
+
docker run -d \
|
|
89
|
+
-e DDNS_DNS=dnspod \
|
|
90
|
+
-e DDNS_ID=12345 \
|
|
91
|
+
-e DDNS_TOKEN=mytokenkey \
|
|
92
|
+
-e DDNS_IPV4=ddns.newfuture.cc \
|
|
93
|
+
--network host \
|
|
94
|
+
newfuture/ddns
|
|
95
|
+
```
|
|
90
96
|
|
|
91
|
-
|
|
97
|
+
</details>
|
|
92
98
|
|
|
93
|
-
|
|
94
|
-
docker run -d \
|
|
95
|
-
-v /local/config/path/:/ddns/ \
|
|
96
|
-
--network host \
|
|
97
|
-
newfuture/ddns
|
|
98
|
-
```
|
|
99
|
+
- #### pip 安装(需要 pip 或 easy_install)
|
|
99
100
|
|
|
100
|
-
|
|
101
|
+
1. 安装 ddns: `pip install ddns` 或 `easy_install ddns`
|
|
102
|
+
2. 运行: `ddns -h` 或者 `python -m ddns`
|
|
103
|
+
|
|
104
|
+
- #### 二进制版(单文件,无需 python)
|
|
105
|
+
|
|
106
|
+
前往[release下载对应版本](https://github.com/NewFuture/DDNS/releases/latest)
|
|
107
|
+
|
|
108
|
+
- #### 源码运行(无任何依赖,需 python 环境)
|
|
109
|
+
|
|
110
|
+
1. clone 或者 [下载此仓库](https://github.com/NewFuture/DDNS/archive/master.zip) 并解压
|
|
111
|
+
2. 运行 `python run.py` 或者 `python -m ddns`
|
|
101
112
|
|
|
102
113
|
### ② 快速配置
|
|
103
114
|
|
|
104
115
|
1. 申请 api `token`,填写到对应的 `id` 和 `token` 字段:
|
|
105
116
|
|
|
106
|
-
-
|
|
107
|
-
- [
|
|
108
|
-
-
|
|
109
|
-
-
|
|
110
|
-
-
|
|
111
|
-
-
|
|
112
|
-
- [
|
|
113
|
-
-
|
|
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
|
+
- **DNS.COM**: [API Key/Secret](https://www.dns.com/member/apiSet)
|
|
120
|
+
- **DNSPOD(国际版)**: [获取 token](https://www.dnspod.com/docs/info.html#get-the-user-token)
|
|
121
|
+
- **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 权限**)
|
|
122
|
+
- **HE.net**: [DDNS 文档](https://dns.he.net/docs.html)(仅需将设置的密码填入 `token` 字段,`id` 字段可留空)
|
|
123
|
+
- **华为云 DNS**: [APIKEY 申请](https://console.huaweicloud.com/iam/)(点左边访问密钥,然后点新增访问密钥)
|
|
124
|
+
- **腾讯云 DNS**: [详细配置文档](doc/providers/tencentcloud.md)
|
|
125
|
+
- **自定义回调**: 参数填写方式请查看下方的自定义回调配置说明
|
|
114
126
|
|
|
115
127
|
2. 修改配置文件,`ipv4` 和 `ipv6` 字段,为待更新的域名,详细参照配置说明
|
|
116
128
|
|
|
@@ -130,12 +142,13 @@
|
|
|
130
142
|
- **JSON配置文件**:介于命令行和环境变量之间,会覆盖环境变量中的设置
|
|
131
143
|
- **环境变量**:优先级最低,当其他方式未设置时使用
|
|
132
144
|
|
|
133
|
-
|
|
145
|
+
**高级用法**:
|
|
146
|
+
|
|
134
147
|
- JSON配置中明确设为`null`的值会覆盖环境变量设置
|
|
135
148
|
- `debug`参数只在命令行中有效,JSON配置文件中的同名设置无效
|
|
136
149
|
- 多值参数(如`ipv4`、`ipv6`等)在命令行中使用方式为重复使用参数,如`--ipv4 domain1 --ipv4 domain2`
|
|
137
150
|
|
|
138
|
-
各配置方式的详细说明请查看对应文档:[命令行](doc/cli.md)、[JSON配置](doc/json.md)、[环境变量](doc/env.md)
|
|
151
|
+
各配置方式的详细说明请查看对应文档:[命令行](doc/cli.md)、[JSON配置](doc/json.md)、[环境变量](doc/env.md)、[服务商配置](doc/providers/)
|
|
139
152
|
|
|
140
153
|
> 📖 **环境变量详细配置**: 查看 [环境变量配置文档](doc/env.md) 了解所有环境变量的详细用法和示例
|
|
141
154
|
|
|
@@ -149,26 +162,27 @@
|
|
|
149
162
|
|
|
150
163
|
```bash
|
|
151
164
|
ddns -c path/to/config.json
|
|
152
|
-
#
|
|
153
|
-
python
|
|
165
|
+
# 或者python运行
|
|
166
|
+
python -m ddns -c /path/to/config.json
|
|
154
167
|
```
|
|
155
168
|
|
|
156
169
|
#### 配置参数表
|
|
157
170
|
|
|
158
|
-
| key
|
|
159
|
-
|
|
|
160
|
-
| id
|
|
161
|
-
|
|
|
162
|
-
| dns
|
|
163
|
-
| ipv4
|
|
164
|
-
| ipv6
|
|
165
|
-
| index4
|
|
166
|
-
| index6
|
|
167
|
-
| ttl
|
|
168
|
-
|
|
|
169
|
-
|
|
|
170
|
-
|
|
|
171
|
-
|
|
|
171
|
+
| key | type | required | default | description | tips |
|
|
172
|
+
| :----: | :----------------: | :------: | :---------: | :----------------: | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
173
|
+
| id | string | √ | 无 | api 访问 ID | Cloudflare 为邮箱(使用 Token 时留空)<br>HE.net 可留空<br>华为云为 Access Key ID (AK) |
|
|
174
|
+
| token | string | √ | 无 | api 授权 token | 部分平台叫 secret key,**反馈粘贴时删除** |
|
|
175
|
+
| dns | string | No | `"dnspod"` | dns 服务商 | 阿里 DNS 为 `alidns`,Cloudflare 为 `cloudflare`,dns.com 为 `dnscom`,DNSPOD 国内为 `dnspod`,DNSPOD 国际为 `dnspod_com`,HE.net 为 `he`,华为云为 `huaweidns`,腾讯云为 `tencentcloud`,自定义回调为 `callback`。部分服务商有[详细配置文档](doc/providers/) |
|
|
176
|
+
| ipv4 | array | No | `[]` | ipv4 域名列表 | 为 `[]` 时,不会获取和更新 IPv4 地址 |
|
|
177
|
+
| ipv6 | array | No | `[]` | ipv6 域名列表 | 为 `[]` 时,不会获取和更新 IPv6 地址 |
|
|
178
|
+
| index4 | string\|int\|array | No | `"default"` | ipv4 获取方式 | 可设置 `网卡`、`内网`、`公网`、`正则` 等方式 |
|
|
179
|
+
| index6 | string\|int\|array | No | `"default"` | ipv6 获取方式 | 可设置 `网卡`、`内网`、`公网`、`正则` 等方式 |
|
|
180
|
+
| ttl | number | No | `null` | DNS 解析 TTL 时间 | 不设置采用 DNS 默认策略 |
|
|
181
|
+
| proxy | string\|array | No | 无 | http 代理 `;` 分割 | 多代理逐个尝试直到成功,`DIRECT` 为直连 |
|
|
182
|
+
| ssl | string\|boolean | No | `"auto"` | SSL证书验证方式 | `true`(强制验证)、`false`(禁用验证)、`"auto"`(自动降级)或自定义CA证书文件路径 |
|
|
183
|
+
| debug | bool | No | `false` | 是否开启调试 | 调试模式,仅命令行参数`--debug`有效 |
|
|
184
|
+
| cache | string\|bool | No | `true` | 是否缓存记录 | 正常情况打开避免频繁更新,默认位置为临时目录下 `ddns.cache`,也可以指定一个具体路径 |
|
|
185
|
+
| log | object | No | `null` | 日志配置(可选) | 日志配置对象,支持`level`、`file`、`format`、`datefmt`参数 |
|
|
172
186
|
|
|
173
187
|
#### index4 和 index6 参数说明
|
|
174
188
|
|
|
@@ -187,16 +201,18 @@ python run.py -c /path/to/config.json
|
|
|
187
201
|
|
|
188
202
|
#### 自定义回调配置说明
|
|
189
203
|
|
|
190
|
-
- `id` 字段填写回调地址,以 HTTP 或 HTTPS 开头,推荐采用 HTTPS 方式的回调 API
|
|
191
|
-
- `token` 字段为 POST
|
|
204
|
+
- `id` 字段填写回调地址,以 HTTP 或 HTTPS 开头,推荐采用 HTTPS 方式的回调 API,支持变量替换功能。
|
|
205
|
+
- `token` 字段为 POST 请求参数(JSON对象或JSON字符串),本字段为空或不存在则使用 GET 方式发起回调。当 JSON 的参数值包含下表所示的常量字符串时,会自动替换为实际内容。
|
|
206
|
+
|
|
207
|
+
详细配置指南请查看:[Callback Provider 配置文档](doc/providers/callback.md)
|
|
192
208
|
|
|
193
|
-
| 常量名称
|
|
194
|
-
| ---------------- |
|
|
195
|
-
| `__DOMAIN__` | DDNS 域名
|
|
196
|
-
| `__RECORDTYPE__` | DDNS 记录类型 | |
|
|
197
|
-
| `__TTL__` | DDNS TTL | |
|
|
198
|
-
| `__TIMESTAMP__` | 请求发起时间戳 | 包含小数 |
|
|
209
|
+
| 常量名称 | 常量内容 | 说明 |
|
|
210
|
+
| ---------------- | ------------------------ | -------- |
|
|
211
|
+
| `__DOMAIN__` | DDNS 域名 | |
|
|
199
212
|
| `__IP__` | 获取的对应类型的 IP 地址 | |
|
|
213
|
+
| `__RECORDTYPE__` | DDNS 记录类型 | |
|
|
214
|
+
| `__TTL__` | DDNS TTL | |
|
|
215
|
+
| `__TIMESTAMP__` | 请求发起时间戳 | 包含小数 |
|
|
200
216
|
|
|
201
217
|
#### 配置示例
|
|
202
218
|
|
|
@@ -205,21 +221,21 @@ python run.py -c /path/to/config.json
|
|
|
205
221
|
"$schema": "https://ddns.newfuture.cc/schema/v4.0.json",
|
|
206
222
|
"id": "12345",
|
|
207
223
|
"token": "mytokenkey",
|
|
208
|
-
"dns": "dnspod 或 dnspod_com 或 alidns 或 dnscom 或 cloudflare 或 he 或 huaweidns 或 callback",
|
|
224
|
+
"dns": "dnspod 或 dnspod_com 或 alidns 或 dnscom 或 cloudflare 或 he 或 huaweidns 或 tencentcloud 或 callback",
|
|
209
225
|
"ipv4": ["ddns.newfuture.cc", "ipv4.ddns.newfuture.cc"],
|
|
210
226
|
"ipv6": ["ddns.newfuture.cc", "ipv6.ddns.newfuture.cc"],
|
|
211
227
|
"index4": 0,
|
|
212
228
|
"index6": "public",
|
|
213
229
|
"ttl": 600,
|
|
214
|
-
"proxy": "127.0.0.1:1080
|
|
230
|
+
"proxy": ["127.0.0.1:1080", "DIRECT"],
|
|
215
231
|
"log": {
|
|
216
232
|
"level": "DEBUG",
|
|
217
233
|
"file": "dns.log",
|
|
218
|
-
"format": "%(asctime)s %(levelname)s [%(module)s]: %(message)s",
|
|
219
234
|
"datefmt": "%Y-%m-%dT%H:%M:%S"
|
|
220
235
|
}
|
|
221
236
|
}
|
|
222
237
|
```
|
|
238
|
+
|
|
223
239
|
</details>
|
|
224
240
|
|
|
225
241
|
## 定时任务
|
|
@@ -235,10 +251,13 @@ python run.py -c /path/to/config.json
|
|
|
235
251
|
#### Linux
|
|
236
252
|
|
|
237
253
|
- 使用 init.d 和 crontab:
|
|
254
|
+
|
|
238
255
|
```bash
|
|
239
256
|
sudo ./task.sh
|
|
240
257
|
```
|
|
258
|
+
|
|
241
259
|
- 使用 systemd:
|
|
260
|
+
|
|
242
261
|
```bash
|
|
243
262
|
安装:
|
|
244
263
|
sudo ./systemd.sh install
|
|
@@ -271,6 +290,7 @@ Docker 镜像在无额外参数的情况下,已默认启用每 5 分钟执行
|
|
|
271
290
|
- dnspod.cn 打开: <https://dnsapi.cn>
|
|
272
291
|
- dnspod 国际版: <https://api.dnspod.com>
|
|
273
292
|
- 华为 DNS <https://dns.myhuaweicloud.com>
|
|
293
|
+
|
|
274
294
|
</details>
|
|
275
295
|
|
|
276
296
|
<details>
|
|
@@ -279,8 +299,8 @@ Docker 镜像在无额外参数的情况下,已默认启用每 5 分钟执行
|
|
|
279
299
|
1. 先确认排查是否是系统/网络环境问题
|
|
280
300
|
2. 在 [issues](https://github.com/NewFuture/DDNS/issues) 中搜索是否有类似问题
|
|
281
301
|
3. 前两者均无法解决或者确定是 bug,[在此新建 issue](https://github.com/NewFuture/DDNS/issues/new)
|
|
282
|
-
- [ ] 开启 debug
|
|
302
|
+
- [ ] 开启 `--debug`
|
|
283
303
|
- [ ] 附上这些内容 **运行版本和方式**、**系统环境**、**出错日志**、**去掉 id/token** 的配置文件
|
|
284
304
|
- [ ] 源码运行注明使用的 python 环境
|
|
285
305
|
|
|
286
|
-
</details>
|
|
306
|
+
</details>
|
|
@@ -6,14 +6,16 @@ ddns Package
|
|
|
6
6
|
__description__ = "automatically update DNS records to my IP [域名自动指向本机IP]"
|
|
7
7
|
|
|
8
8
|
# 编译时,版本会被替换
|
|
9
|
-
__version__ = "4.
|
|
9
|
+
__version__ = "4.1.0b1"
|
|
10
10
|
|
|
11
11
|
# 时间也会被替换掉
|
|
12
|
-
build_date = "2025-
|
|
12
|
+
build_date = "2025-07-03T13:20:03Z"
|
|
13
13
|
|
|
14
14
|
__doc__ = """
|
|
15
15
|
ddns [v{}@{}]
|
|
16
16
|
(i) homepage or docs [文档主页]: https://ddns.newfuture.cc/
|
|
17
17
|
(?) issues or bugs [问题和反馈]: https://github.com/NewFuture/DDNS/issues
|
|
18
|
-
Copyright (c)
|
|
19
|
-
""".format(
|
|
18
|
+
Copyright (c) NewFuture (MIT License)
|
|
19
|
+
""".format(
|
|
20
|
+
__version__, build_date
|
|
21
|
+
)
|