Giter Site home page Giter Site logo

jeessy2 / ddns-go Goto Github PK

View Code? Open in Web Editor NEW
10.6K 52.0 1.2K 24.27 MB

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

License: MIT License

Go 71.76% CSS 2.16% HTML 17.74% Dockerfile 0.22% Makefile 0.35% JavaScript 7.76%
ddns alidns dnspod cloudflare baiduyun porkbun ddns-go godaddy-ddns google-domains

ddns-go's Introduction

ddns-go

GitHub release GitHub release downloads Go version

中文 | English

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

特性

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

Note

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

系统中使用

  • Releases 下载并解压 ddns-go

  • 安装服务

    • 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 服务器
    • -resetPassword 重置密码
  • [可选] 参考示例

    • 10分钟同步一次, 并指定了配置文件地址
      ./ddns-go -s install -f 600 -c /Users/name/.ddns_go_config.yaml
    • 每 10 秒检查一次本地 IP 变化, 每 30 分钟对比一下 IP 变化, 实现 IP 变化即时触发更新且不会被服务商限流, 如果使用接口获取IP, 需要注意接口限流
      ./ddns-go -s install -f 10 -cacheTimes 180
    • 重置密码
      ./ddns-go -resetPassword 123456
  • [可选] 使用 Homebrew 安装 ddns-go

    brew install ddns-go

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
  • [可选] 重置密码

    docker exec ddns-go ./ddns-go -resetPassword 123456
    docker restart 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 镜像

ddns-go's People

Contributors

buffge avatar catofes avatar dependabot[bot] avatar dezhishen avatar fangzhengjin avatar feranwq avatar hlskysong avatar itzmiracleowo avatar jeessy2 avatar klzwii avatar labulac avatar largemouth avatar ldsink avatar liuzhonghao avatar luckyboy avatar mingcheng avatar ngc7331 avatar okrc avatar oldweipro avatar pairzhu avatar redstone1024 avatar rektyfikowany avatar standchan avatar waterlemons2k avatar winterbokeh avatar wobuxie1997 avatar xiyaowong avatar yangerstars avatar yin1999 avatar yyxida avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ddns-go's Issues

在host网络端口问题

阿里云和腾讯云的DDNS,因一个镜像只能设置一家的,我要用ipv6,选了host网络,这样要同时用两家的,我就要开二个镜像,但端口冲突只能运行一个,能否一个镜像同时设置多家(id和token分开保存),或开多个镜像(端口可以自定义)?

IPV6 内网的IPv6 地址获取

这个程序非常好用,看了说明已经在 群晖部署成功。
另外提个建议,就是我发现 爱快的DDNS 有个很好的功能,就是能通过mac 地址获取内网机器的 IPV6 地址。
因为ipv6情况下,内网机器也都能获得公网地址,虽然可以在每台机器安装这个客户端,
但是有些机器不方便安装程序,就无法用上这个DDNS的功能了。
如果能实现类似爱快的DDNS功能,就可以只安装一个,就为全网的主机实现的独立的ipv6公网ip更新了

windows server 2012 R2运行异常

在这个系统上,解析DNSPOD,打开后会提示打开端口异常,一分钟后关闭,放在那,过一会之后就开始更新,有时候会提示IPV6查不到地址。多开几次就正常。但是安装服务之后,几乎就没成功过。也就是手动打开可以,安装服务不行。每次打开都是端口异常

能否添加关闭 web 服务的功能?

非常感谢大佬开发的 ddns-go,我用的是腾讯云,配置好 域名、id 和 token 就可以自动更新记录了,非常方便。

但是我想,能否添加一个关闭 web 服务的功能?这样只需要第一次使用网页填好配置,以后就让 web 处于关闭状态。这样会不会安全性会更强一点?

当然现在可以通过设置账号密码来提高安全性,但是感觉要是能够选择是否关闭 web,可能会更好一些。

关于配置填写

抱歉有点笨

Domains:支持泛域名嘛

*.abc.com
@.abc.com
b.abc.com
a.b.abc.com
这几种都可以还是怎么样对
谢谢!

[Windows] 以 NT Authority\Network Service 身份启动服务

目前的版本以 Windows 服务运行时,使用的是 SYSTEM (本地系统) 账户,这样的话程序权限太高,可能造成安全风险

可否兼容 NT Authority\Network Service 身份启动服务?目前的版本,手动这样修改会导致 ddns-go 不响应服务控制器的请求

群晖获取路由器ipv6

黑群晖 docker装的
软路由 lean的openwet
按给的操作设置之后 获取到的不是群晖的ipv6地址 而是路由器的ipv6地址
迷茫。。。。这情况怎么解决啊

如何修改TTL值

阿里云DDNS, 默认10min,如何修改为1min?

如果需要修改源码重编译,请教应修改哪一个文件,感谢。

黑裙晖 显示 Failed to get ipv6, URL: https://api-ipv6.ip.sb/ip

我用ipv6 test 网站可以获取ipv6, 我的软路由Openwrt可以拿到openwrt的ipv6,并将ipv6传到阿里云上来域名访问, 群晖装这个ddsn-go失败, 夏天时我在网上找的aliddns.sh小插件正常实现过,将群晖上的ipv6攻取传到阿里云上, 后来电脑没开机半年时间,今天重装群晖, 用ddsn-go无法实现, 拿不到群晖的ipv6, 请问如何能解决?

群辉docker里面一直显示,未能获得IPv6地址!

2021/04/20 03:30:51 未能获得IPv6地址! 点击查看接口能否返回IPv6地址, 官方说明:点击访问

下面是日志显示内容。

2021/04/20 03: 15: 16 IPv6 <a target='blank' href=https: //api-未能获得IPv6地址!<atarget=blankhref=https:api-bipv6.ip.sb/ip>点击查看接口能否返回IPv6地址,官方说明< target=blank' href=https: //github. com/jeessy2/ddns-go#ipv6'>/a>使用ipv6>点击访问

黑白群辉都一样。

我的IPV6直接在阿里云上手动绑定域名是没有问题的,也能访问。

疑似存在bug

运行一段时间,可能是运行14天左右,突然某个点开始不再自动更新ip地址,日志记录也停了,仿佛软件卡住停掉了一样。。。需要手动重启软件

docker配置保存问题

建议添加环境变量,或者配置文件保存位置
docker compose

version: "2"

services:
miniflux:
image: jeessy/ddns-go
container_name: ddns-go
restart: always
ports:
- 9876:9876

更新程序的方法

请问下更新新版本的程序正确的方式是什么?覆盖文件,重启服务吗?

[功能请求]关于登录安全性

首先非常感谢作者的开发,无论是容器体积还是运行资源都非常轻量,还拥有网页控制台,功能齐全。

提一个小小的建议,希望能够提升一下登陆的安全性(当然我是没有看,也看不懂源码XD,不知道现在的登陆是如何实现的,如果已经有安全措施的话,希望作者能简单讲解一下,让我学习一些知识,感谢!)。
我的使用环境是群晖,使用了IPV6,可以直接用“群晖的V6:端口”访问到控制台,这个功能个人觉得有点还是不安全,希望能加入一些保护措施,比如不允许v4/v6公网访问,或者是使用一些加密方式登录,HTTPS之类的。

最后再次感谢作者的开发!

dnspod 修改和新建的parm有误

查询了官方的文档 添加或修改解析记录的 子域名字段应该为 "sub_domain "
"login_token": {dnspod.DNSConfig.ID + "," + dnspod.DNSConfig.Secret}, "domain": {domain.DomainName}, "sub_domain ": {domain.SubDomain}, "record_type": {recordType}, "record_line": {"默认"}, "record_id": {record.ID}, "value": {ipAddr},

提个web hook的bug

我想推送到钉钉,结果钉钉返回你传输过去的content-type类型不正确,希望能加个content-type的参数设置

内网外网问题

遇到了个问题
比如有时会不想暴露内网获取的ip而只想通过公网ip来更新(路由拨号获得的ip),这个在ipv4时用的比较多。但现在我在ipv6下这么用。
还有有的人能正常获取ipv6,但因为一些原因(路由硬件问题,或者路由固件问题)导致内网获取到的ipv6有问题,或者能获取但不断报错。这时就会通过迂回的方法,即外网ipv6内网ipv4.如果通过路由ddns则使用路由ssh安装socat,做ipv6端口转发。我现在就用的是这个。所以问题来了,能否直接获取路由的外网ip而非nas自身分配到的内网ipv6?

通过网卡获取IP, 能否添加关键字过滤

虽然通过网卡获取IP, 默认使用第一个IPv6地址(一般为非临时的IPv6)
举例:
我的群晖一直会获取2个IPV6的IP,一个是基于IP,一个是基于MAC。
无论使用网卡获取IP,还是网络接口获取IP,经常会2个互相跳来跳去
IP:2409:####:####:####::123
MAC:2409:####:####:####:211:32ff:fe11:1111

建议可以设置过滤关键字,例如fe80::或者::123 或者:211:32ff:fe11:1111
这样我就可以控制到只会选择哪一个IPV6地址去更新DDNS

1

请问大神最近cloudflare出什么问题了还是我设置不对了

各种服务都试了,确定脚本没问题,不知道是我自己的设置还是cloudflare出了问题

获取状态之类的都没问题,只有设置dns失败
2021/05/05 05:36:12 请求接口https://api.cloudflare.com/client/v4/zones?name=myURL&status=active&per_page=50失败! {"success":false,"errors":[{"code":6003,"message":"Invalid request headers","error_chain":[{"code":6111,"message":"Invalid format for Authorization header"}]}],"messages":[],"result":null}

在centos中使用提示open /root/.ddns_go_config.yaml: permission denied

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

进行启动,打开ip:9876能进入页面,进行保存配置的时候,提示open /root/.ddns_go_config.yaml: permission denied

请问大大怎样解决?

另外还有一个问题,如果以--net=host启动,就无法通过ip:端口进入配置页面了,因为要使用ipv6,请问大大这个怎样解决呀?

v2.3版ipv4同步问题

新版的ipv4通过网卡获取出错,选eth0获取的不是正确的ip地址,而是内网地址(192.168.x.x),ipv6暂无问题

请求接口https://alidns.aliyuncs.com/失败!

系统是debian10,宽带是移动大内网,有ipv6,可以ping通alidns.aliyuncs.com,用docker版或者直接安装都会出现以下报错,我是小白,麻烦大佬给看看。

请求接口https://alidns.aliyuncs.com/失败! {"RequestId":"CDE6E6E6-F80C-47D3-BB95-C08BA23D4AC3","Message":"Specified time stamp or date value is expired.","Recommend":"https://error-center.aliyun.com/status/search?Keyword=InvalidTimeStamp.Expired&source=PopGw","HostId":"alidns.aliyuncs.com","Code":"InvalidTimeStamp.Expired"}

[help wanted] 群晖Ipv6地址可以ping通,但是却无法访问

我在两天前通过ddns-go布置好腾讯dnspod ddns设置,移动网络下外网内网4g网路访问一切正常。今天再次尝试域名访问却遇上这个情况。

解析都是正确的, 解析出来的ipv6可以ping通

PS C:\Users\k1mlka> ping  2409:8a6a:ffff:7185:211:32ff:fe12:3456

2409:8a6a:ffff:7185:211:32ff:fe12:3456 に ping を送信しています 32 バイトのデータ:
2409:8a6a:ffff:7185:211:32ff:fe12:3456 からの応答: 時間 =3ms
2409:8a6a:ffff:7185:211:32ff:fe12:3456 からの応答: 時間 =3ms
2409:8a6a:ffff:7185:211:32ff:fe12:3456 からの応答: 時間 =3ms
2409:8a6a:ffff:7185:211:32ff:fe12:3456 からの応答: 時間 =3ms

2409:8a6a:ffff:7185:211:32ff:fe12:3456 の ping 統計:
    パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 3ms、最大 = 3ms、平均 = 3ms

然后我在浏览器中通过输入http://[2409:8a6a:ffff:7185:211:32ff:fe12:3456] 访问页面直接没有回应 (ERR_EMPTY_RESPONSE),不论我是用电脑还是手机,wifi还是流量效果都相同。直接访问域名更是没效果。ax3pro直接拨号并且之前就关闭了防火墙的,尝试了运维大法重启ax3pro和光猫,结果任然如旧。

这个应该与ddns-go无关,希望能得到作者或者知慧的人的帮助/(ㄒoㄒ)/~~ 两天前刚弄好都还正常现在突然不行了是真的难受😫

不能打开:open /tmpstatic_pages_writing.html: no such file or directory

运行后的日志如下:

$ ./ddns-go 
2020/11/28 21:34:46 没有找到配置文件!请在网页中输入
2020/11/28 21:34:46 监听 :9876 ...
自动打开浏览器失败, 请手动打开。错误信息: exec: "xdg-open": executable file not found in $PATHError happened..
# 尝试访问后,提示:
open /tmpstatic_pages_writing.html: no such file or directory

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.