• Stars
    star
    9,620
  • Rank 3,691 (Top 0.08 %)
  • Language
    Go
  • License
    MIT License
  • Created about 4 years ago
  • Updated 6 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Simple and easy to use DDNS. Support Aliyun, Tencent Cloud, Dnspod, Cloudflare, Callback, Huawei Cloud, Baidu Cloud, Porkbun, GoDaddy, Namecheap, NameSilo...

ddns-go

GitHub release GitHub release downloads Go version

自动获得你的公网 IPv4 或 IPv6 地址,并解析到对应的域名服务。

特性

  • 支持Mac、Windows、Linux系统,支持ARM、x86架构
  • 支持的域名服务商 Alidns(阿里云) Dnspod(腾讯云) Cloudflare 华为云 Callback 百度云 Porkbun GoDaddy Google Domain
  • 支持接口/网卡/命令获取IP
  • 支持以服务的方式运行
  • 默认间隔5分钟同步一次
  • 支持同时配置多个DNS服务商
  • 支持多个域名同时解析
  • 支持多级域名
  • 网页中配置,简单又方便,默认勾选禁止从公网访问
  • 网页中方便快速查看最近50条日志
  • 支持Webhook通知
  • 支持TTL
  • 支持部分DNS服务商传递自定义参数,实现地域解析等功能

Note 建议在启用公网访问时,使用 Nginx 等反向代理软件启用 HTTPS 访问,以保证安全性。FAQ

系统中使用

  • Releases 下载并解压 ddns-go

  • [可选] 使用 Homebrew 安装 ddns-go

    brew install ddns-go
  • 双击运行, 如没有找到配置, 程序将自动打开 http://127.0.0.1:9876

  • [可选] 安装服务

    • Mac/Linux: sudo ./ddns-go -s install
    • Win(以管理员打开cmd): .\ddns-go.exe -s install
  • [可选] 服务卸载

    • Mac/Linux: sudo ./ddns-go -s uninstall
    • Win(以管理员打开cmd): .\ddns-go.exe -s uninstall
  • [可选] 支持安装或启动时带参数 -l监听地址 -f同步间隔时间(秒) -cacheTimes间隔N次与服务商比对 -c自定义配置文件路径 -noweb不启动web服务 -skipVerify跳过证书验证 -dns 自定义 DNS 服务器。如:./ddns-go -s install -l :9877 -f 600 -c /Users/name/ddns-go.yaml

Note 通过合理的配置 -f-cacheTimes 可以实现 IP 变化即时触发更新且不会被 DDNS 服务商限流, 例如 -f 10 -cacheTimes 360 效果为每 10 秒检查一次本地 IP 变化, 每小时去公网对比一下 IP 变化

Docker中使用

  • 挂载主机目录, 使用docker host模式。可把 /opt/ddns-go 替换为你主机任意目录, 配置文件为隐藏文件

    docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go
  • 在浏览器中打开http://主机IP:9876,修改你的配置,成功

  • [可选] 使用 ghcr.io 镜像

    docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root ghcr.io/jeessy2/ddns-go
  • [可选] 支持启动带参数 -l监听地址 -f间隔时间(秒)

    docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go -l :9877 -f 600
  • [可选] 不使用docker host模式

    docker run -d --name ddns-go --restart=always -p 9876:9876 -v /opt/ddns-go:/root jeessy/ddns-go

使用IPv6

  • 前提:你的电脑或终端能正常获取IPv6,并能正常访问IPv6
  • Windows/Mac:推荐 系统中使用,Windows/Mac桌面版的docker不支持--net=host
  • 群晖:
    • 套件中心下载docker并打开
    • 注册表中搜索ddns-go并下载
    • 映像 -> 选择jeessy/ddns-go -> 启动 -> 高级设置 -> 网络中勾选使用与 Docker Host 相同的网络,高级设置中勾选启动自动重新启动
    • 在浏览器中打开http://群晖IP:9876,修改你的配置,成功
  • Linux的x86或arm架构,推荐使用Docker的--net=host模式。参考 Docker中使用
  • 虚拟机中使用有可能正常获取IPv6,但不能正常访问IPv6

Webhook

  • 支持webhook, 域名更新成功或不成功时, 会回调填写的URL

  • 支持的变量

    变量名 说明
    #{ipv4Addr} 新的IPv4地址
    #{ipv4Result} IPv4地址更新结果: 未改变 失败 成功
    #{ipv4Domains} IPv4的域名,多个以,分割
    #{ipv6Addr} 新的IPv6地址
    #{ipv6Result} IPv6地址更新结果: 未改变 失败 成功
    #{ipv6Domains} IPv6的域名,多个以,分割
  • 如 RequestBody 为空则为 GET 请求,否则为 POST 请求

  • Server酱
    https://sctapi.ftqq.com/[SendKey].send?title=你的公网IP变了&desp=主人IPv4变了#{ipv4Addr},域名更新结果:#{ipv4Result}
    
  • Bark
    https://api.day.app/[YOUR_KEY]/主人IPv4变了#{ipv4Addr},域名更新结果:#{ipv4Result}
    
  • 钉钉
    • 钉钉电脑端 -> 群设置 -> 智能群助手 -> 添加机器人 -> 自定义
    • 只勾选 自定义关键词, 输入的关键字必须包含在RequestBody的content中, 如:你的公网IP变了
    • URL中输入钉钉给你的 Webhook地址
    • RequestBody中输入
      {
          "msgtype": "markdown",
          "markdown": {
              "title": "你的公网IP变了",
              "text": "#### 你的公网IP变了 \n - IPv4地址:#{ipv4Addr} \n - 域名更新结果:#{ipv4Result} \n"
          }
      }
  • 飞书
    • 飞书电脑端 -> 群设置 -> 添加机器人 -> 自定义机器人
    • 安全设置只勾选 自定义关键词, 输入的关键字必须包含在RequestBody的content中, 如:你的公网IP变了
    • URL中输入飞书给你的 Webhook地址
    • RequestBody中输入
      {
          "msg_type": "post",
          "content": {
              "post": {
                  "zh_cn": {
                      "title": "你的公网IP变了",
                      "content": [
                          [
                              {
                                  "tag": "text",
                                  "text": "IPv4地址:#{ipv4Addr}"
                              }
                          ],
                          [
                              {
                                  "tag": "text",
                                  "text": "域名更新结果:#{ipv4Result}"
                              }
                          ]
                      ]
                  }
              }
          }
      }
  • Telegram

    ddns-telegram-bot

  • plusplus 推送加
    • 获取token
    • URL中输入 https://www.pushplus.plus/send
    • RequestBody中输入
      {
          "token": "your token",
          "title": "你的公网IP变了",
          "content": "你的公网IP变了 \n - IPv4地址:#{ipv4Addr} \n - 域名更新结果:#{ipv4Result} \n"
      }
  • Discord
    • Discord任意客户端 -> 伺服器 -> 频道设置 -> 整合 -> 查看Webhook -> 新Webhook -> 复制Webhook网址
    • URL中输入Discord复制的 Webhook网址
    • RequestBody中输入
      {
          "content": "域名 #{ipv4Domains} 动态解析 #{ipv4Result}.",
          "embeds": [
              {
                  "description": "#{ipv4Domains} 的动态解析 #{ipv4Result}, IP: #{ipv4Addr}",
                  "color": 15258703,
                  "author": {
                      "name": "DDNS"
                  },
                  "footer": {
                      "text": "DDNS #{ipv4Result}"
                  }
              }
          ]
      }
  • 查看更多Webhook配置参考

Callback

  • 通过自定义回调可支持更多的第三方DNS服务商

  • 配置的域名有几行, 就会回调几次

  • 支持的变量

    变量名 说明
    #{ip} 新的IPv4/IPv6地址
    #{domain} 当前域名
    #{recordType} 记录类型 AAAAA
    #{ttl} ttl
  • 如 RequestBody 为空则为 GET 请求,否则为 POST 请求

  • Callback配置参考

界面

screenshots

开发&自行编译

  • 如果喜欢从源代码编译自己的版本,可以使用本项目提供的 Makefile 构建
  • 使用 make build 生成本地编译后的 ddns-go 可执行文件
  • 使用 make build_docker_image 自行编译 Docker 镜像