找回密码
 立即注册
搜索
查看: 282|回复: 0

ddns-go

[复制链接]
发表于 2024-4-8 08:38:17 | 显示全部楼层 |阅读模式
# ddns-go
$ z9 u9 W* x% P) j5 d0 J! ]4 i  t5 X  A% c; U% a
自动获得你的公网 IPv4 或 IPv6 地址,并解析到对应的域名服务。
1 p- x2 U' M  M" k8 F; w( q: k& K+ v
- [特性](#特性)
5 B+ V1 Z( r  I$ }9 z/ T- [系统中使用](#系统中使用)* D( v4 y- ?$ P0 q( s
- [Docker中使用](#docker中使用)7 {8 O- u/ K+ |' ~8 S$ f
- [使用IPv6](#使用ipv6)* U8 O" }3 U! h- L' G3 e
- [Webhook](#webhook)
$ W5 N; \7 e' U2 G# M- [Callback](#callback)
1 `" }  i: x) j* B9 q. h) Z/ W4 a9 z- [界面](#界面)% I0 d, w( a) ^" ]& `( f
- [开发&自行编译](#开发自行编译). @2 |* M/ p- z" _* {& f0 L2 |: \

1 s4 U5 M( G; P7 S  q, o## 特性0 ~9 }8 Z7 |7 F1 Y

8 t6 N3 D% J; d1 q* z6 {5 Z- 支持Mac、Windows、Linux系统,支持ARM、x86架构
! O( h, a$ u' ]- k3 N$ l3 H) T3 o. j% n- 支持的域名服务商 `阿里云` `腾讯云` `Dnspod` `Cloudflare` `华为云` `Callback` `百度云` `Porkbun` `GoDaddy` `Namecheap` `NameSilo` `Dynadot`
' |- J* y2 P3 l3 |) p- 支持接口/网卡/[命令](https://github.com/jeessy2/ddns-go/wiki/通过命令获取IP参考)获取IP1 l! m, r6 _& h5 ]% [, b: Z' y! ^6 m
- 支持以服务的方式运行
* B  r3 }; s$ s: C. e- 默认间隔5分钟同步一次
3 \, v5 [- v! Z: z3 z- 支持同时配置多个DNS服务商8 R$ u" _! ?: _
- 支持多个域名同时解析$ \2 A. u3 R8 R
- 支持多级域名
& ]* H8 Q+ ?- _8 |- 网页中配置,简单又方便,默认勾选`禁止从公网访问`
) Z! y/ V# B! e6 a" p2 Y* l8 t- 网页中方便快速查看最近50条日志
" S( }  m/ y; W3 g) ?# r- 支持Webhook通知
* ]/ p4 U$ i  ?6 V% L5 ?- 支持TTL" C8 ^; V: |3 H9 ~+ a! J
- 支持部分DNS服务商[传递自定义参数]$ j/ d7 t2 ]6 N* M0 p7 Y) e1 c5 q
* _2 m1 e3 L+ s# q
> [!NOTE]
8 @$ t* ?* |% n) x2 Y% S$ x$ I' y> 建议在启用公网访问时,使用 Nginx 等反向代理软件启用 HTTPS 访问,以保证安全性。2 g" W9 q+ w. @  B# A# W
## 系统中使用
5 S* E; m. K7 H( D6 p4 B( B( `$ ?- w/ E
- 从 [Releases] 下载并解压 ddns-go
! ~. f7 l9 T  P! B( ?: S( H' v( G- 安装服务) ]3 V3 S: r6 o6 O# r2 O
  - Mac/Linux: `sudo ./ddns-go -s install`
6 t! I% E3 m/ B  - Win(以管理员打开cmd): `.\ddns-go.exe -s install`
3 Y  A4 R: p+ _4 o+ T. k1 d- [可选] 服务卸载
% b3 e4 Q2 |: J: `1 ^8 C5 r# {  - Mac/Linux: `sudo ./ddns-go -s uninstall`
5 R" v! K0 x. G% m  - Win(以管理员打开cmd): `.\ddns-go.exe -s uninstall`
. o4 c* `3 Q) R4 x" M9 E- [可选] 支持安装带参数9 o$ W% j: O# t5 y) a
  - `-l` 监听地址
7 ~( h- X) y$ n! R0 c3 x0 y  - `-f` 同步间隔时间(秒)7 p$ `* o# y* ]' D- k
  - `-cacheTimes` 间隔N次与服务商比对
( F6 x' b" ?% S3 u- k  - `-c` 自定义配置文件路径% r4 `+ ~4 ?% K7 w+ |- f1 }) V
  - `-noweb` 不启动web服务
# E7 k& n; H3 O% }- q' R* b' B  - `-skipVerify` 跳过证书验证
, N6 M  U: p$ P  - `-dns` 自定义 DNS 服务器
9 p0 v  b8 Q5 `$ x! {% h6 h4 b- [可选] 参考示例
& j/ Q8 a; V8 T% U( I. F  - 10分钟同步一次, 并指定了配置文件地址
" F. ~" X2 B) O* Q1 D/ t9 {    ```bash
# k! a, m* L  t! N7 @4 t    ./ddns-go -s install -f 600 -c /Users/name/.ddns_go_config.yaml3 _3 R; Y& Z" @1 R- ?, T; ?; \
    ```( F; I: }/ x' `3 R' D! |
  - 每 10 秒检查一次本地 IP 变化, 每 30 分钟对比一下 IP 变化, 实现 IP 变化即时触发更新且不会被服务商限流, 如果使用接口获取IP, 需要注意接口限流
9 E& o4 x! ]+ \6 `% w) K% V    ```bash& o6 ^' w( U- h1 H+ D% E" T
    ./ddns-go -s install -f 10 -cacheTimes 1802 N0 h3 C: Z  L# `+ `! X
    ```
( l& Y3 ]; `6 T, C* X- [可选] 使用 [Homebrew](https://brew.sh) 安装 [ddns-go](https://formulae.brew.sh/formula/ddns-go):/ N) a  p" P( ]  `

7 ]) v7 Z1 J0 z0 u6 y/ H  ```bash
% L' d; x9 S5 T1 [  brew install ddns-go) x( c8 Z$ I- V7 t8 T" Q
  ```
9 X- y6 G# H: T
" X# I0 O2 S" T6 T/ O& a* n; {## Docker中使用
' W5 D- M8 E6 C' ^9 s0 t& N9 O$ A, I: {
- 挂载主机目录, 使用docker host模式。可把 `/opt/ddns-go` 替换为你主机任意目录, 配置文件为隐藏文件
' D. S. E! `: Q# W" j4 E/ Z# i2 u# d3 t" X
  ```bash7 u8 J) H8 g6 p
  docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go' G. E  D3 ^) h' r
  ```6 @" [  P  S( j
' @8 f& [, H: ?* ~: z
- 在浏览器中打开`http://主机IP:9876`,并修改你的配置2 r& d% \; v8 G0 y* C* z
6 V& K+ l) }3 f! {% L$ o
- [可选] 使用 `ghcr.io` 镜像
! S( c* {4 G+ \( J6 U  |) V3 x! T! f9 b9 d1 K2 c
  ```bash
- r. R% ?0 p% U5 @  docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root ghcr.io/jeessy2/ddns-go
& `% c. f- h8 m+ k# @  ```
/ i0 I, v& O# k! X/ X9 S) R; K5 O, [6 {: e2 i) C6 A& i' V5 K
- [可选] 支持启动带参数 `-l`监听地址 `-f`间隔时间(秒)
$ }% S# f; N* L8 H+ E
1 r7 V5 W* s: `0 x: [8 A5 a( [  ```bash# S, T, {+ |# d. e+ V5 T
  docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go -l :9877 -f 600' ~. H, ~* q8 p
  ```
3 w! }& z. M, M
0 ~  ?. ~" T* b$ L- [可选] 不使用docker host模式9 x0 B7 N5 \! w

4 R' m0 R) M. t0 E  ```bash
  X! Y) R1 F7 u" T# c  docker run -d --name ddns-go --restart=always -p 9876:9876 -v /opt/ddns-go:/root jeessy/ddns-go
% W3 i, L( j8 [. W  ```
1 T$ l* p) H% |+ P2 V5 h
; X; |1 L9 o, T+ _## 使用IPv6+ o3 p- u8 S  X. C% c3 P( f
6 c! g( a- F: V" y0 W$ S1 M
- 前提:你的电脑或终端能正常获取IPv6,并能正常访问IPv6  j" M" K7 w" X! |; l
- Windows/Mac:推荐 [系统中使用](#系统中使用),Windows/Mac桌面版的docker不支持`--net=host`
# n) Z5 g) D6 u1 b& m- 群晖:
# O# v+ W! S" O- g) f- V  - 套件中心下载docker并打开6 o; E  \0 }) _/ Y; p
  - 注册表中搜索`ddns-go`并下载' @8 A3 h3 S) ]1 R2 X
  - 映像 -> 选择`jeessy/ddns-go` -> 启动 -> 高级设置 -> 网络中勾选`使用与 Docker Host 相同的网络`,高级设置中勾选`启动自动重新启动`& S' z5 Z4 f/ z( l' C+ ^
  - 在浏览器中打开`http://群晖IP:9876`,修改你的配置,成功
2 a$ s- C$ ?- W  V; @* A- Linux的x86或arm架构,推荐使用Docker的`--net=host`模式。参考 [Docker中使用](#Docker中使用)8 S; z# b1 ~' R5 R( K8 x* y5 w
- 虚拟机中使用有可能正常获取IPv6,但不能正常访问IPv6
/ z; Q  X3 n& e- g- Z% ]. j, O* v+ K
## Webhook
. k" V9 D& h, |6 Y3 s- w  t3 G& x/ m! z' a8 q/ F7 A  X  @
- 支持webhook, 域名更新成功或不成功时, 会回调填写的URL. ]* n7 b2 `( d+ r
- 支持的变量* H9 j/ M) S$ h) Z4 a: m/ ~

  U  b1 e6 i. }' C  |  变量名   | 说明  |
5 |1 V8 n- [4 E  |  ----  | ----  |( a0 \" Z! Z! a% J9 _
  | #{ipv4Addr}  | 新的IPv4地址 |0 r4 i; D1 C4 F) V$ M. {
  | #{ipv4Result}  | IPv4地址更新结果: `未改变` `失败` `成功`|
% D' H1 [1 Q  ]6 Z7 z3 H  | #{ipv4Domains}  | IPv4的域名,多个以`,`分割 |1 o7 o) D1 b: N) [4 d; U. w
  | #{ipv6Addr}  | 新的IPv6地址 |
1 ?* t* a- C5 J  | #{ipv6Result}  | IPv6地址更新结果: `未改变` `失败` `成功`|& ?1 {/ q5 V5 G  K; \$ Z
  | #{ipv6Domains}  | IPv6的域名,多个以`,`分割 |
% L) [% ]/ Q3 ?% O4 x
; X, N$ C# l7 i/ x0 B9 o, `* S- 如 RequestBody 为空则为 GET 请求,否则为 POST 请求6 W; A2 k0 q5 O* g+ v, \0 X; k
- <details><summary>Server酱</summary>! I8 @4 K7 y( }4 b4 k; \/ B; m. u
* q# c5 M/ n  j# J
  ```
* G  ^- `6 o0 K  A6 O7 ]  https://sctapi.ftqq.com/[SendKey].send?title=你的公网IP变了&desp=主人IPv4变了#{ipv4Addr},域名更新结果:#{ipv4Result}" J* {6 q+ X8 P  u, D3 b
  ```
$ |1 |+ p1 H2 o' Q( z: `- <details><summary>Bark</summary>
8 w0 f: M, }  O  L
6 ~+ H/ Q/ b; P- C  ```4 X6 O  c$ f2 [0 H* q
  https://api.day.app/[YOUR_KEY]/主人IPv4变了#{ipv4Addr},域名更新结果:#{ipv4Result}3 G3 N+ \. M! O0 k
  ```. c3 v, g& I4 d& t% D0 r
  </details>
7 e9 K0 m7 ~( |% S- <details><summary>钉钉</summary>/ C' S/ g7 t4 j" w' {
% O3 z# R" e7 S6 e! M; [1 f) E
  - 钉钉电脑端 -> 群设置 -> 智能群助手 -> 添加机器人 -> 自定义. S  I" E* G) F) }2 Q
  - 只勾选 `自定义关键词`, 输入的关键字必须包含在RequestBody的content中, 如:`你的公网IP变了`
: ], v2 X3 g* h& N  - URL中输入钉钉给你的 `Webhook地址`9 l$ S% F! N' M! _7 [( D
  - RequestBody中输入. [2 M3 y# Q1 x
    ```json9 Y! E. Q! U0 q# Z7 ?. w1 t6 G
    {
" K/ T" I9 @& @        "msgtype": "markdown",
- j- i  F8 U5 W, V. y/ ]        "markdown": {: U# x, w8 t3 _% ^& n$ J
            "title": "你的公网IP变了",
' m' l0 l6 d& |/ }6 P, m1 B            "text": "#### 你的公网IP变了 \n - IPv4地址:#{ipv4Addr} \n - 域名更新结果:#{ipv4Result} \n"+ {3 B4 K+ y' L- A
        }
# }, `' b" u- C    }
  i4 ]9 s- B: W    ```: \) J# g' Y. E- Y% b
  </details>
% I  L& T6 \( A2 b/ ~' y- <details><summary>飞书</summary>
8 a4 C1 J9 E4 J. o( P: H! w8 T) b' ?/ U2 ~* K3 K6 i2 B- F
  - 飞书电脑端 -> 群设置 -> 添加机器人 -> 自定义机器人
6 W1 }9 o5 ?8 A' m3 y5 V/ n  - 安全设置只勾选 `自定义关键词`, 输入的关键字必须包含在RequestBody的content中, 如:`你的公网IP变了`+ b8 i4 A3 }7 j' O
  - URL中输入飞书给你的 `Webhook地址`
1 Y7 Z! g& S# I* Q5 N4 r2 A  - RequestBody中输入
0 Q) h7 _: {" a9 m; |    ```json
! C2 r( Y1 N% E' F    {: i* }* o" S! ^" u" o5 C
        "msg_type": "post",
* ?  d+ I5 V4 X8 I7 `/ y) Z( h        "content": {, w+ B. N7 w$ t) f+ N. p' ?
            "post": {+ n  L' m6 w& B9 `" w' x' `7 i
                "zh_cn": {
9 A. b, K  D) Q1 P" t5 f  h                    "title": "你的公网IP变了",: @3 S6 H- I2 o5 l: ]
                    "content": [
+ o$ |  l* t1 F! p                        [
: S) N3 @" n% ]( U; A2 \                            {
' T$ Z8 ^- \0 m, ]7 J; s  Z                                "tag": "text",# Z8 O; r- P3 T1 R- O5 Y
                                "text": "IPv4地址:#{ipv4Addr}"
9 Y* ?  [8 T1 W( E                            }! P) B2 Z( h+ s: S
                        ],7 q7 T. Y, J# ^9 C
                        [8 a, L- H" F- }
                            {
7 S. N4 F* \/ J+ j2 v; J! e2 @                                "tag": "text",6 L. p' M9 x  d. T7 u
                                "text": "域名更新结果:#{ipv4Result}"6 O+ z: g- q5 g; I
                            }. i. f5 k. |# z7 L2 L# l
                        ]
- R+ l1 I. J% w7 y' M                    ]5 B+ {0 l' O6 ?- u
                }) I3 s, G( L1 S1 a, S, `! k( c- `
            }
( c; {/ s/ h3 [6 w5 D        }
' _3 X+ n6 j' M* H+ V9 b; J    }
. i% k& @: {9 f, o    ```- X: ^8 N/ g/ F
  </details>
, g, r  c. ~. k! V8 k5 J8 l( p- <details><summary>Telegram</summary>
) J. F7 ^' i1 n) |: T4 D5 l. O4 Z3 {' `2 o
  [ddns-telegram-bot]1 z4 h. F; n( @$ M
  </details>
5 t5 v$ Z+ @; D1 t, l- <details><summary>plusplus 推送加</summary>5 ~( H8 H6 c. U' l5 O& L9 a
6 G& @7 U, R% D$ a
  - [获取token](https://www.pushplus.plus/push1.html); ]4 Y4 j# J0 j( o  m. v4 p: r
  - URL中输入 `https://www.pushplus.plus/send`3 I# M9 E$ J# C. K
  - RequestBody中输入
* D1 Y9 U+ {- H+ S4 J    ```json3 B% f1 D1 S& i. p- \( w3 J7 u1 y
    {! y, B: b( }# \/ F
        "token": "your token",) I2 G7 X; o8 S5 w0 S6 ~" h
        "title": "你的公网IP变了",6 a3 J6 }  y6 y- D1 ^- n
        "content": "你的公网IP变了 \n - IPv4地址:#{ipv4Addr} \n - 域名更新结果:#{ipv4Result} \n"# @4 F6 G' T& Q- G
    }
+ e0 t3 T. k5 Q    ```
0 i+ `: F9 m, T' g2 ^  </details>, t. K. m+ X+ Y3 E  h1 E; P, ]6 _
- <details><summary>Discord</summary>: [" V% w7 j. W/ u/ a: W

) M0 X: c" k7 ^, ?$ d& A2 _1 g  - Discord任意客户端 -> 伺服器 -> 频道设置 -> 整合 -> 查看Webhook -> 新Webhook -> 复制Webhook网址% {1 Q: ]1 Y; ?# T! b' H' `
  - URL中输入Discord复制的 `Webhook网址`% K' F& C' M, N: ]5 z
  - RequestBody中输入. C. i# I8 P3 |4 N% y
    ```json! i7 f- ]  F: [3 i: [) P3 y4 e! R/ i
    {' X4 N( D" R1 p# p
        "content": "域名 #{ipv4Domains} 动态解析 #{ipv4Result}.",
; J& k" B* b5 l2 z        "embeds": [2 p0 z% w0 @, h$ G  ]3 f
            {/ A; G  v( m6 X0 v
                "description": "#{ipv4Domains} 的动态解析 #{ipv4Result}, IP: #{ipv4Addr}",% q5 \. L' z" W1 R( N) D
                "color": 15258703,
) n% O1 Z6 x' k* j) [) e( B$ ~                "author": {
0 v* L, g' j3 y0 j3 z* B+ D+ A                    "name": "DDNS"
9 a, M( `3 a6 K2 Q) r7 r                },) \0 ^1 N( J: `
                "footer": {9 ^2 m; z4 W3 f
                    "text": "DDNS #{ipv4Result}"
' J$ f/ t( E0 O1 K# G5 G                }
& T/ D4 ?: {" s0 d3 K: F' J            }
+ {7 M0 N1 f9 R8 t" F        ]
% d9 O4 x9 G8 N    }! W5 \9 Z4 O/ o( \- ~$ }
    ```! X! I2 H% d4 x- |# [
  </details>6 x& X! n$ `! c3 C$ X  K9 y
$ |2 U+ r9 L! R5 @& S! N8 P
## Callback  o8 r, w: x+ @. Q
. v9 z- s( h: N' B6 N, F& R
- 通过自定义回调可支持更多的第三方DNS服务商  c5 N) b' w( r( a  U' P
- 配置的域名有几行, 就会回调几次
7 ]# |! ]$ `( F* J5 q- 支持的变量
3 m% O2 P$ i0 Z! |, @- s" h5 d. U6 m$ T/ L& r8 ^5 Z
  |  变量名   | 说明  |
/ k6 l8 ^6 J* O7 N7 R) B  |  ----  | ----  |
2 J8 I& D+ c9 V0 K  | #{ip}  | 新的IPv4/IPv6地址 |
/ Y0 \0 A% G: e3 Q% l9 k3 ?  | #{domain}  | 当前域名 |) c, T: e) o  B* l/ o
  | #{recordType}  | 记录类型 `A`或`AAAA` |/ \7 u- i( h. S3 R( ?) Z" T5 B
  | #{ttl}  | TTL |( o8 A2 R6 M3 \- \5 D; x
- 如 RequestBody 为空则为 GET 请求,否则为 POST 请求. N' a& k$ l; `0 f5 B+ ^% S
- [Callback配置参考](https://github.com/jeessy2/ddns-go/wiki/Callback配置参考)

ddns-go.exe

9.02 MB, 阅读权限: 10, 下载次数: 0, 下载积分: 金钱 -5

售价: 5 金钱  [记录]  [购买]

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2026-11-3 02:34 AM , Processed in 0.106566 second(s), 26 queries .

Powered by xyh-moon X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表