Need help with DDNS?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

NewFuture
2.0K Stars 365 Forks MIT License 323 Commits 24 Opened issues

Description

:triangular_flag_on_post: 自动更新域名解析到本机IP(支持dnspod,阿里DNS,CloudFlare,华为云,DNSCOM...)

Services available

!
?

Need anything else?

Contributors list

# 8,387
C#
wechat
Python
cloudfl...
208 commits
# 89,979
bot-fra...
TeX
C++
Shell
13 commits
# 118,532
Python
python-...
Shell
dnspod
8 commits
# 112,377
Shell
dnspod
cloudfl...
alidns
6 commits
# 33,584
JavaScr...
Python
cloudfl...
alidns
3 commits
# 70,004
Shell
Python
C++
dnspod
3 commits
# 202,640
Python
Shell
dnspod
cloudfl...
2 commits
# 202,998
Python
Shell
dnspod
cloudfl...
2 commits
# 88,329
Jupyter...
Python
dnspod
cloudfl...
1 commit
# 118,332
OCaml
Sass
openvpn
dnspod
1 commit
# 256,419
Python
Shell
dnspod
cloudfl...
1 commit
# 258,989
Python
Shell
dnspod
cloudfl...
1 commit
# 150,698
Markdow...
Python
Shell
dnspod
1 commit
# 258,940
Python
Shell
dnspod
cloudfl...
1 commit
# 258,775
Python
Shell
dnspod
cloudfl...
1 commit
# 259,034
Python
Shell
dnspod
cloudfl...
1 commit

DDNS

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

PyPI Build Status Build Status latest deploy

Build Details
  • Linux Python (2 和 3): Travis build
  • Windows Python3.7: Build Status
  • Windows Python2.7: Build Status
  • Mac OSX Python3.7: Build Status
  • Mac OSX Python2.7: Build Status

Features

  • 兼容和跨平台:
    • [x] 可执行文件(无需 python 环境)
    • [x] 多系统兼容 cross platform
    • [x] python2 和 python3 支持 PyPI - Python Version
    • [x] PIP 安装 PyPI - Wheel
    • [x] Docker 支持(@NN708)
  • 域名支持:
    • [x] 多个域名支持
    • [x] 多级域名解析
    • [x] 自动创建新记录
  • IP 类型:
    • [x] 内网 IPv4 / IPv6
    • [x] 公网 IPv4 / IPv6 (支持自定义 API)
    • [x] 自定义命令(shell)
    • [x] 正则选取支持(@rufengsuixing)
  • 网络代理:
    • [x] http 代理支持
    • [x] 多代理自动切换
  • 服务商支持:
  • 其他:
    • [x] 可设置定时任务
    • [x] TTL 配置支持
    • [x] 本地文件缓存(减少 API 请求)
    • [x] 地址变更时触发自定义回调API(与 DDNS 功能互斥)

使用

① 安装

根据需要选择一种方式:

二进制
版,
pip
版,
源码
运行,或者
Docker
  • #### pip 安装(需要 pip 或 easy_install)
    1. 安装 ddns:
      pip install ddns
      easy_install ddns
    2. 运行:
      ddns
  • #### 二进制版(单文件,无需 python)
  • #### 源码运行(无任何依赖, 需 python 环境)
    1. clone 或者下载此仓库并解压
    2. 运行./run.py (widnows 双击
      run.bat
      或者运行
      python run.py
      )
  • #### Docker(需要安装 Docker)
    docker run -d -v /path/to/config.json:/config.json --network host newfuture/ddns

② 快速配置

  1. 申请 api
    token
    ,填写到对应的
    id
    token
    字段:
  1. 修改配置文件,
    ipv4
    ipv6
    字段,为待更新的域名,详细参照配置说明

详细配置

config.json 配置文件
  • 首次运行会自动生成一个模板配置文件
  • 可以使用 -c使用指定的配置文件 (默认读取当前目录的 config.json)
  • 推荐使用 vscode 等支持 JsonSchema 的编辑器编辑配置文件
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 可留空
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,
华为 DNS 为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 No http 代理;分割 多代理逐个尝试直到成功,DIRECT为直连
debug bool No false 是否开启调试 运行异常时,打开调试输出,方便诊断错误
cache bool No true 是否缓存记录 正常情况打开避免频繁更新

index4 和 index6 参数说明

  • 数字(0,1,2,3等): 第 i 个网卡 ip
  • 字符串"default"(或者无此项): 系统访问外网默认 IP
  • 字符串"public": 使用公网 ip(使用公网 API 查询,url 的简化模式)
  • 字符串"interface": 使用指定网卡 ip(如:"interface:eno1")
  • 字符串"url:xxx": 打开 URL xxx(如:"url:http://ip.sb"),从返回的数据提取 IP 地址
  • 字符串"regex:xxx" 正则表达(如"regex:192.*"): 提取ifconfig/ipconfig中与之匹配的首个 IP 地址,注意 json 转义(\要写成\\)
    • "192.*"表示 192 开头的所有 ip
    • 如果想匹配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", "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/v2.8.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",
  "debug": false
}

定时任务

可以通过脚本设置定时任务(默认每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

FAQ

Windows Server [SSL: CERTIFICATE_VERIFY_FAILED]

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

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

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

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.