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

ddns-go

[复制链接]

989

主题

92

回帖

5万

积分

管理员

积分
55361
发表于 2024-4-8 08:38:17 | 显示全部楼层 |阅读模式
# ddns-go
: g5 w! @) ^5 K" V
: z0 w+ F1 `3 @# ]/ I" T4 I3 a自动获得你的公网 IPv4 或 IPv6 地址,并解析到对应的域名服务。6 O& L5 U7 Z# l! i& W
/ s/ f2 C6 u+ @+ s2 j; T$ G- T' U
- [特性](#特性)
$ p& G+ g, k7 \) K, P! a; ?1 [$ R- [系统中使用](#系统中使用)
, r& J& S% _4 ]+ ?. W- [Docker中使用](#docker中使用)
* x- z3 g$ O: ?- [使用IPv6](#使用ipv6)) Z. O/ V* v& @. ]
- [Webhook](#webhook)
* k+ P; W7 @* B8 f, h) f0 \- [Callback](#callback)
. }9 G3 c) E: [' w0 U- [界面](#界面)# S. B5 K' Z- K; |% _
- [开发&自行编译](#开发自行编译)
5 H$ O3 Q5 D8 j, `+ [8 g/ r2 t8 S# N, O: \& d
## 特性
! u! i, t# L  M% Z' e0 W
9 @3 y7 q. ~7 N& a/ [" p. s3 W- W3 O+ X- 支持Mac、Windows、Linux系统,支持ARM、x86架构: l2 J% X6 h3 C7 l9 P/ z, s6 J
- 支持的域名服务商 `阿里云` `腾讯云` `Dnspod` `Cloudflare` `华为云` `Callback` `百度云` `Porkbun` `GoDaddy` `Namecheap` `NameSilo` `Dynadot`1 C3 K) v% _( ?+ Y. h, ~
- 支持接口/网卡/[命令](https://github.com/jeessy2/ddns-go/wiki/通过命令获取IP参考)获取IP/ O; u. f5 f; B1 _# k% G: h. }3 r
- 支持以服务的方式运行1 M6 k7 Z3 O# F8 C# v6 U& a
- 默认间隔5分钟同步一次$ ?9 d; ^+ X* Z" c: p. U2 N
- 支持同时配置多个DNS服务商
  p/ j. }' [1 I$ G- J. A- 支持多个域名同时解析: c9 W) v# g& [1 f# t
- 支持多级域名
% \9 l: D+ q" ?5 j4 g( O; E- 网页中配置,简单又方便,默认勾选`禁止从公网访问`
' ^0 d% m. F. ^/ H- 网页中方便快速查看最近50条日志8 E, F6 Y. c# c" \
- 支持Webhook通知# v; x1 z8 u, F& X: j/ W$ e: w
- 支持TTL% E! d" n$ }% x1 M
- 支持部分DNS服务商[传递自定义参数]$ C( p. V* l# o+ t

) X/ {2 {4 n3 [& F, ]+ `> [!NOTE], S( M. l; U; i; n
> 建议在启用公网访问时,使用 Nginx 等反向代理软件启用 HTTPS 访问,以保证安全性。
* s! k" F% y; h! i  }. T% E/ Q## 系统中使用
; P) X) d0 F2 m' C* f, Q
6 \7 W& ]6 q. \, L! J$ N- 从 [Releases] 下载并解压 ddns-go
7 C3 k1 Z* S6 n9 F# Z0 R* U- 安装服务
: f. i& D0 V5 R: M" P  - Mac/Linux: `sudo ./ddns-go -s install`" T* i5 @  _! R+ `( ~! k
  - Win(以管理员打开cmd): `.\ddns-go.exe -s install`
3 s+ d- c5 j4 ^$ t$ y- [可选] 服务卸载& C  D) ?- z  `' @- r4 Z3 x$ B7 o
  - Mac/Linux: `sudo ./ddns-go -s uninstall`
4 w# K- T: A3 V" d; x1 ]  - Win(以管理员打开cmd): `.\ddns-go.exe -s uninstall`) O- B( F: H- A$ G1 t
- [可选] 支持安装带参数. K* H) u1 y; ^
  - `-l` 监听地址
9 @7 O' e6 Y3 Q2 W' D  - `-f` 同步间隔时间(秒)  l, F: _, W+ B* \9 ~
  - `-cacheTimes` 间隔N次与服务商比对7 e: T2 k9 C, R. t% M, }% n0 \1 l
  - `-c` 自定义配置文件路径( N0 f8 W! v& r3 t
  - `-noweb` 不启动web服务
0 X6 w& ?" d$ d; P+ r6 s  - `-skipVerify` 跳过证书验证
* n# n, e. }( K  - `-dns` 自定义 DNS 服务器
2 J6 \, @! B$ i, x4 c- [可选] 参考示例3 u; `5 L. ]: B& ^
  - 10分钟同步一次, 并指定了配置文件地址" D* O8 [  |3 G2 K5 n4 Y7 W
    ```bash' {4 _+ q+ B' B5 ~" e. A9 ?
    ./ddns-go -s install -f 600 -c /Users/name/.ddns_go_config.yaml3 n  }) @! K7 Z# X/ z; C5 ]
    ```+ p7 v/ J6 I8 a2 d3 I
  - 每 10 秒检查一次本地 IP 变化, 每 30 分钟对比一下 IP 变化, 实现 IP 变化即时触发更新且不会被服务商限流, 如果使用接口获取IP, 需要注意接口限流- Q/ H* ~% e! e7 p2 h! j
    ```bash9 r' K. i+ j$ M3 O1 T
    ./ddns-go -s install -f 10 -cacheTimes 180
# j2 B! `& p0 U3 c7 ?5 j2 j$ |3 l    ```0 O) @; u1 j$ L/ |0 B2 D
- [可选] 使用 [Homebrew](https://brew.sh) 安装 [ddns-go](https://formulae.brew.sh/formula/ddns-go):* a% O4 `& ~6 I/ D* ?
1 I% ~8 t  `% @
  ```bash
# [5 W' p2 |- ]) i- D1 v+ }8 ?) ]  brew install ddns-go0 ^0 r5 ]# n% [  {
  ```
+ y. e, Z+ f" I6 B  o! l3 e
0 @& K3 p! k( S+ j4 r: ~## Docker中使用
9 A' C+ N( b0 q3 L% f! z' l! k3 p6 R. N( E3 U( a. E
- 挂载主机目录, 使用docker host模式。可把 `/opt/ddns-go` 替换为你主机任意目录, 配置文件为隐藏文件
9 L( `7 w# B. n7 R8 S
* \$ L% E( c; ^3 S4 O3 W  ```bash* `: \; Z1 l3 H; @5 K2 [" a, p
  docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go
& m5 i$ }( l+ n0 Q8 U0 ?/ i8 D  ```
$ s5 o6 ]" r$ f: N% S
, U6 L  H  B  V( c# L( ~0 ~' r* p- 在浏览器中打开`http://主机IP:9876`,并修改你的配置& V8 x9 P- N7 R' y+ N3 Y
1 |9 W" Y; E+ G! ~' p) q& y
- [可选] 使用 `ghcr.io` 镜像
8 r# m5 d* o+ \( G' o4 [% l" E% |# U( z9 N) `
  ```bash0 T7 O) s  |9 _
  docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root ghcr.io/jeessy2/ddns-go8 |( @7 \  l  A* b; p
  ```
6 x3 C( v: U  E  T5 O6 k) v8 n" D6 u) m; ^
- [可选] 支持启动带参数 `-l`监听地址 `-f`间隔时间(秒)
  [. {+ ^' P5 F9 U8 `
1 x+ H; S$ q9 G% H* H' e  ```bash
$ \  ^3 r4 K$ U- D( k* c2 c  docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go -l :9877 -f 600
  I" x3 X9 U, g; ]  ```
/ V; l0 x! S8 x$ ]" R# F# |" e
2 [% B) \: i* s# h3 G- u- [可选] 不使用docker host模式
( I6 Y, N; L) I* v. Z
, p4 E/ @, v6 c1 Q  ```bash
2 m) d& o! y$ H/ \3 C& R  docker run -d --name ddns-go --restart=always -p 9876:9876 -v /opt/ddns-go:/root jeessy/ddns-go
4 v( _0 w. ]+ s' V* o: U  ```
. ?' q' {6 ~/ ?) ]$ K& X. I0 g5 }( g: c
+ x! w2 B3 b, C; A$ ~## 使用IPv6
& o+ W5 @( _  `1 i1 A  O4 ]* D, |
- 前提:你的电脑或终端能正常获取IPv6,并能正常访问IPv6& }7 \- T2 Q* S7 p7 ~& K+ u+ T
- Windows/Mac:推荐 [系统中使用](#系统中使用),Windows/Mac桌面版的docker不支持`--net=host`
* a5 V& a3 X# `: D- 群晖:9 s7 }  J5 |3 e2 v
  - 套件中心下载docker并打开5 |) A6 |7 O7 E) p5 b( V$ W/ Q9 _4 t
  - 注册表中搜索`ddns-go`并下载$ v* W% J! a+ ], w7 L" \0 g
  - 映像 -> 选择`jeessy/ddns-go` -> 启动 -> 高级设置 -> 网络中勾选`使用与 Docker Host 相同的网络`,高级设置中勾选`启动自动重新启动`
* N9 O7 y, h1 D- p- x) R  - 在浏览器中打开`http://群晖IP:9876`,修改你的配置,成功
& M/ J7 j& s$ l' S- Linux的x86或arm架构,推荐使用Docker的`--net=host`模式。参考 [Docker中使用](#Docker中使用)+ y, l8 i# V1 j) T6 u5 f  T
- 虚拟机中使用有可能正常获取IPv6,但不能正常访问IPv6: c" u6 C" n3 b; |3 [9 W, d" [

! B# }: p  c. F7 [## Webhook
# c2 t- j) O: _, B9 g$ i+ P4 ]" l# F
3 n" Z3 o  o" v- ~; N- 支持webhook, 域名更新成功或不成功时, 会回调填写的URL9 L  ~/ N9 U: ?
- 支持的变量
$ ~8 @# U7 l* \3 h5 O) |) M, \7 {; B4 {. v1 `
  |  变量名   | 说明  |
# }0 t' y" ~* b0 A. W6 w  |  ----  | ----  |
  P  R) z0 ]1 Q; r  | #{ipv4Addr}  | 新的IPv4地址 |9 r' C% u7 |+ y# s4 B0 o
  | #{ipv4Result}  | IPv4地址更新结果: `未改变` `失败` `成功`|  r: I1 C5 W9 M! T& B
  | #{ipv4Domains}  | IPv4的域名,多个以`,`分割 |% o' z% y& ]0 L( S$ O
  | #{ipv6Addr}  | 新的IPv6地址 |
" Z0 i9 U7 L9 G4 J7 t. L  | #{ipv6Result}  | IPv6地址更新结果: `未改变` `失败` `成功`|
1 w! M9 h3 ?; r$ I5 f* A  | #{ipv6Domains}  | IPv6的域名,多个以`,`分割 |
. Q# S, K5 `& n$ C. r6 O9 w
. S1 R8 \" A' {% m- 如 RequestBody 为空则为 GET 请求,否则为 POST 请求
% F; z" T* K) N$ [; t( i; V. U- <details><summary>Server酱</summary>
) p3 C7 Q! ~3 T
: r9 n8 d3 x3 h: G  ```
8 f% i; ?0 Q' p  S; d. a; X  https://sctapi.ftqq.com/[SendKey].send?title=你的公网IP变了&desp=主人IPv4变了#{ipv4Addr},域名更新结果:#{ipv4Result}
, {; g+ y. P! }. {: p+ y: h! J) e  ```
3 w! s+ j: a2 \5 R7 Z# ?- <details><summary>Bark</summary>5 g# E/ s% f3 E3 J4 E, W) O8 G

' T* w- }/ ^: x' r! x5 q  ?  ```/ t: V/ Q" j8 I% S; S
  https://api.day.app/[YOUR_KEY]/主人IPv4变了#{ipv4Addr},域名更新结果:#{ipv4Result}  n% }! s4 v: h. I& M" n8 M' H
  ```
5 _! x; Q7 T( [9 `  </details>
' @! {/ @8 W1 `1 B  D' N- <details><summary>钉钉</summary>
& m: y- @5 w+ }. c7 y) B" s% }  y/ m8 u. W, l3 O
  - 钉钉电脑端 -> 群设置 -> 智能群助手 -> 添加机器人 -> 自定义
0 u/ Q4 {9 e) |2 |0 u  - 只勾选 `自定义关键词`, 输入的关键字必须包含在RequestBody的content中, 如:`你的公网IP变了`
7 v. r' B9 v# I- i  - URL中输入钉钉给你的 `Webhook地址`
! e# O  R- E/ b4 q8 ~  - RequestBody中输入
$ Q6 J/ N% P  I; K1 W    ```json
  j' _8 @* k7 _, Q8 }& X    {! X( G" F* b+ Q! I; k' |/ O" D/ C
        "msgtype": "markdown"," ^' i6 p, [2 o3 l
        "markdown": {
# o. w9 R9 H! u  y/ G; X, Q/ }            "title": "你的公网IP变了",
1 d4 I3 j* h! e+ m            "text": "#### 你的公网IP变了 \n - IPv4地址:#{ipv4Addr} \n - 域名更新结果:#{ipv4Result} \n"
7 r: a# w/ S# X# }6 k" |        }
$ M: k: E& O, m! z# Q& U5 ?& b    }0 d0 D( @  u# _' `
    ```
- L$ [. H# s* y3 F  </details>3 H$ ^& D) p2 S6 h' Y. F7 ?! K
- <details><summary>飞书</summary>
* c( ?+ _- W$ p9 G
; }( p1 z- u4 A/ v/ U  - 飞书电脑端 -> 群设置 -> 添加机器人 -> 自定义机器人
5 {' P' m0 q6 d# D# A- D6 ?  - 安全设置只勾选 `自定义关键词`, 输入的关键字必须包含在RequestBody的content中, 如:`你的公网IP变了`
# E5 s9 W+ `- Z. T" S0 R, r  - URL中输入飞书给你的 `Webhook地址`
; H. s7 I: K8 n8 i1 f: p/ A& b. L  N7 M  - RequestBody中输入
. G* `$ q- G4 G& I7 G: \4 ?( V0 I    ```json
/ v! P2 |, J, G9 {: _  A    {& b% D1 h, D; s
        "msg_type": "post",
6 z6 W# r6 }9 L. D, w. C' }1 i        "content": {
1 B9 f7 q( [. j. E7 v: [            "post": {
4 P" W# U0 d. X  I6 d; `. `" F                "zh_cn": {0 b* {" S% X, K, N; \3 `6 u
                    "title": "你的公网IP变了",, K0 e; E! I) E" J/ l
                    "content": [. q+ O# R  j/ O0 Y- J
                        [' R0 _4 R2 B2 z% [
                            {" N1 t- h& c& k2 T
                                "tag": "text",$ _# X8 d) \: Y( \, ?
                                "text": "IPv4地址:#{ipv4Addr}"# P: j+ H% B! F3 @+ S8 X% _7 O
                            }
3 P! d9 t4 P" p! [9 t                        ],
% \/ c% K+ Z5 t, D6 B) z5 B                        [6 F: L* e. t* y# T6 X' J8 {, \# f
                            {
1 r9 ]2 [# z2 D  N$ R0 e; a0 ]% ?, t                                "tag": "text",+ c" b3 v2 w" H4 [0 J: o
                                "text": "域名更新结果:#{ipv4Result}"# G9 K" @' @3 [5 w4 o
                            }
/ Y& i- R+ j% d/ Z$ Q                        ]3 F' Q  c3 u9 s) I" D3 `# M
                    ]' y- N% A( H! H( i, y5 N# E
                }
7 [7 {. J7 j  d2 |( s: J' p            }+ k, U6 v  T$ p  ^' M5 E( h3 A
        }
$ d( z- j2 Y- U    }1 z, Z* J4 d9 H$ V. f) M; j& ^6 K
    ```* Q9 B4 W& j# U7 O7 A
  </details>
3 `" L9 G8 G' E" J) V! e3 W- <details><summary>Telegram</summary>
( i  Y% C! C( a1 w# W$ |' g% z1 J& Z" z
  [ddns-telegram-bot]/ v8 g) U6 \4 N
  </details>
' {- g9 l5 H* F; }4 f- <details><summary>plusplus 推送加</summary>2 P7 j4 h( {9 J- x* a; T; _; O

! E' w7 H" u* N; d) D  - [获取token](https://www.pushplus.plus/push1.html)
9 o  b5 w6 P7 O" z  - URL中输入 `https://www.pushplus.plus/send`  @  b9 U2 T8 C7 n
  - RequestBody中输入+ y4 c" |4 a6 h% n0 |  m! P
    ```json1 A" H. b' d' O8 C5 o  [- ~
    {
- _2 q5 |9 V  S' z/ \        "token": "your token",
% C" e' k: |3 {4 s1 @        "title": "你的公网IP变了",6 E$ Y7 B$ j( ?6 g3 E) n' `7 P# I
        "content": "你的公网IP变了 \n - IPv4地址:#{ipv4Addr} \n - 域名更新结果:#{ipv4Result} \n"" O8 q1 O& z# z0 H( T6 Z* u
    }
8 b& }6 M3 x+ p7 a    ```4 |4 {! N- m- v8 h% I- c# x
  </details>- a/ ]+ u* _: v% f! J* a
- <details><summary>Discord</summary>
" W  |1 Y5 w+ m  s
- b% g6 S; y) s/ g7 `. \6 v  - Discord任意客户端 -> 伺服器 -> 频道设置 -> 整合 -> 查看Webhook -> 新Webhook -> 复制Webhook网址* a/ _* f, X- p' m- n# m+ S
  - URL中输入Discord复制的 `Webhook网址`
* A  E2 ]8 J& j4 ?7 `  - RequestBody中输入! c- D) [  K# J* G
    ```json
5 E$ ]0 B$ X1 f, [* W- F2 U8 q    {
: y9 W0 P+ D( @7 g3 W1 S        "content": "域名 #{ipv4Domains} 动态解析 #{ipv4Result}.",/ g& q& B5 _$ T/ N  k0 L5 \4 r* X( ]' s
        "embeds": [
! T7 U( p( K& Q2 G  ~3 q            {# i3 q; y1 j! u* H8 P
                "description": "#{ipv4Domains} 的动态解析 #{ipv4Result}, IP: #{ipv4Addr}",
0 v( B. N: G1 S/ j: l                "color": 15258703,
3 U' y- _1 }! ^                "author": {
& `% p* S$ ^* S1 l( W! t                    "name": "DDNS"
, Q4 d# N$ }' z# U0 N$ i* L                },
, P+ o4 N" ~* S0 V+ f8 N. f                "footer": {
% F. K) j# j- E' U( k                    "text": "DDNS #{ipv4Result}"$ y: W9 Y5 _; ~' y8 I+ @
                }4 b+ p1 W  ^- s! [- `/ q6 w: s
            }
4 `, n5 N3 u) v        ]
1 J4 {6 A- H/ e/ X3 U    }
+ V0 m) D$ l+ l1 S    ```
' G! U3 S  E8 U% {  </details>
) d% L9 |( N0 o. r" T# T8 L& s! V$ i+ g. I. b: d+ _! f
## Callback
6 r  ^  ^( k0 o5 X$ u* [8 F9 r% ?5 t9 O  t5 l/ h$ ]+ M( V$ H7 g1 R
- 通过自定义回调可支持更多的第三方DNS服务商6 E* O; c2 D1 K  @* `8 X: m3 u
- 配置的域名有几行, 就会回调几次$ M1 U$ S! h5 M7 Q
- 支持的变量
* h& |9 q6 M% u: z6 p2 a8 l6 I" E6 @% v
  |  变量名   | 说明  |
* B- N$ ?$ A2 H2 J- x3 p) ^  |  ----  | ----  |3 X3 i( Z& g% K) L
  | #{ip}  | 新的IPv4/IPv6地址 |0 @2 ?7 Q  K% j4 P9 P/ f2 p% ~( n. V
  | #{domain}  | 当前域名 |/ ~/ Q, p- R: U1 j8 G
  | #{recordType}  | 记录类型 `A`或`AAAA` |
8 P* ?  A5 b0 z8 V  | #{ttl}  | TTL |
- t. a: h5 j% p) }/ a# R- 如 RequestBody 为空则为 GET 请求,否则为 POST 请求
6 V$ k' n: H$ D  U+ `: a- [Callback配置参考](https://github.com/jeessy2/ddns-go/wiki/Callback配置参考)

ddns-go.exe

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

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

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

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2026-5-6 05:45 AM , Processed in 0.095500 second(s), 27 queries .

Powered by xyh-moon X3.5

© 2001-2025 Discuz! Team.

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