|
# ddns-go7 \) ~" {3 f2 A* q7 l& G
2 C: E3 p5 R( S
自动获得你的公网 IPv4 或 IPv6 地址,并解析到对应的域名服务。( ]" s8 A6 p E B) J4 l* t
: `0 `/ f+ I/ o" ^2 _: P# ?+ x
- [特性](#特性)9 H$ {1 u# I D
- [系统中使用](#系统中使用)
l9 g* ?( x1 E) E- [Docker中使用](#docker中使用)& h5 ^4 _- Y8 B% t' E0 \
- [使用IPv6](#使用ipv6)5 A/ }5 ^) ^ x! C( V, {
- [Webhook](#webhook)* W, z0 q- |" y' ]) v! [
- [Callback](#callback)1 e8 z2 o: W* ^+ J! e
- [界面](#界面); P+ _! q& \8 N( P1 G$ G
- [开发&自行编译](#开发自行编译)
5 R% r" L3 O/ l) d8 h
4 G5 k6 P; h P## 特性7 ~* T& U2 ]. l/ _ X
7 t* I# E& x: o) B5 @$ X" \3 F7 M
- 支持Mac、Windows、Linux系统,支持ARM、x86架构/ z' i, p- j5 y; g
- 支持的域名服务商 `阿里云` `腾讯云` `Dnspod` `Cloudflare` `华为云` `Callback` `百度云` `Porkbun` `GoDaddy` `Namecheap` `NameSilo` `Dynadot`
, U9 I7 T* [$ R# [& Q1 q- 支持接口/网卡/[命令](https://github.com/jeessy2/ddns-go/wiki/通过命令获取IP参考)获取IP
# z+ c% c& z& h" j- 支持以服务的方式运行0 T2 O5 W' t, e
- 默认间隔5分钟同步一次* @ k. k, E O8 y% h, J) r q
- 支持同时配置多个DNS服务商
4 Z" g; {8 W1 c8 {; v# O+ D' o- 支持多个域名同时解析
3 u e1 X) r2 ?+ }: V1 l- 支持多级域名, ]" D2 l; d6 P8 `; H* _" }
- 网页中配置,简单又方便,默认勾选`禁止从公网访问`
% ?9 T% U6 z0 H; L6 `* l- 网页中方便快速查看最近50条日志
$ {: ` \, U% ~6 h; \% q/ q- 支持Webhook通知
1 E1 X5 P5 s) w: z8 R8 I/ Z- 支持TTL
' H. W9 x3 d- ]' }1 k- 支持部分DNS服务商[传递自定义参数]
5 x/ L' `$ j+ x1 \
' t) K0 k6 a. r. w! u$ p> [!NOTE]
4 ^4 {( g6 q5 |0 ?7 e7 W' _& ^> 建议在启用公网访问时,使用 Nginx 等反向代理软件启用 HTTPS 访问,以保证安全性。$ {+ j5 P. B; u/ C
## 系统中使用" n' P* E r6 Z: Z
8 q0 D% J2 Q2 D; b: Y
- 从 [Releases] 下载并解压 ddns-go" Q$ x2 ~7 m6 r8 Y) P
- 安装服务9 w3 s' [. [6 |) c- I
- Mac/Linux: `sudo ./ddns-go -s install`
, g0 I* H7 ?- R0 P# P - Win(以管理员打开cmd): `.\ddns-go.exe -s install`
! s8 Y. o$ r& B3 x- [可选] 服务卸载
1 b. Y. f- i7 l6 L6 n - Mac/Linux: `sudo ./ddns-go -s uninstall`- L; U0 E1 B5 |9 G
- Win(以管理员打开cmd): `.\ddns-go.exe -s uninstall`1 T% I7 {& p& [4 h4 F9 @; l
- [可选] 支持安装带参数
$ X9 E8 z6 z; x$ }1 A - `-l` 监听地址
1 W: {! N4 y3 r- @ - `-f` 同步间隔时间(秒)! ^, I& u- ~) j4 \
- `-cacheTimes` 间隔N次与服务商比对
1 b W5 n$ e8 ^! r; a1 I3 \; R( c - `-c` 自定义配置文件路径
/ h& _7 {4 ^' X9 {9 i# o: s6 @ - `-noweb` 不启动web服务4 G1 t$ R* v9 m& g( P2 S
- `-skipVerify` 跳过证书验证
5 }& B& M3 y- q# M* T' [ - `-dns` 自定义 DNS 服务器
! ~2 Z% e5 l6 v- Q# {+ B6 f- [可选] 参考示例5 s) S/ c" B4 N6 `4 s0 D
- 10分钟同步一次, 并指定了配置文件地址
: q0 g c' G/ C2 x9 u0 G ```bash/ u8 F/ x. g4 |! E
./ddns-go -s install -f 600 -c /Users/name/.ddns_go_config.yaml
3 A: J) K7 Q w$ W7 C ```, a& L1 V& p2 s6 }: k! |& y
- 每 10 秒检查一次本地 IP 变化, 每 30 分钟对比一下 IP 变化, 实现 IP 变化即时触发更新且不会被服务商限流, 如果使用接口获取IP, 需要注意接口限流$ X7 ?5 p$ |6 y5 v" Q1 X
```bash% N9 H% w: H! u6 h* `
./ddns-go -s install -f 10 -cacheTimes 180& Q0 j+ B- X/ F3 f V1 |6 y
```
6 r1 v3 S7 y0 t6 Y- [可选] 使用 [Homebrew](https://brew.sh) 安装 [ddns-go](https://formulae.brew.sh/formula/ddns-go):8 F& k7 y$ v, S: p2 ]# J! x5 i7 a
' l6 F C9 `4 e1 t1 B
```bash
& A8 q; ]! N2 q; M brew install ddns-go$ Z0 [, I3 W( W$ r
```
) V9 a7 ]5 l# x1 f0 G9 |/ I! S! ^, l) ?& Q+ J I
## Docker中使用$ x" D o7 t) F( C. {
( C0 e. J1 Q3 ]1 ^1 O% Z- 挂载主机目录, 使用docker host模式。可把 `/opt/ddns-go` 替换为你主机任意目录, 配置文件为隐藏文件! Y. N/ ]: d% t; n1 d j
; e0 G4 I; V! v( A
```bash
7 Y& x' I* b6 s# X* ^# f docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go( c' A! x% A! D' N( X/ q( y7 b
```
8 E& v! N! O& @ e
: ]- X( h# E& n- 在浏览器中打开`http://主机IP:9876`,并修改你的配置
( e$ z8 t: C, B5 r+ k. a i$ {1 ?) G4 }$ V# ]; e$ h0 t
- [可选] 使用 `ghcr.io` 镜像
% K: Z5 |, |0 z2 `2 O3 r( c! _7 O" k- x# v0 G, v8 v
```bash
, ]* h1 p L* l% b' T" w* H& U" l docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root ghcr.io/jeessy2/ddns-go; W! a( d- w6 P; R! P* j
```
( P0 W7 y/ t7 R* [6 m! y# g! v5 j8 P# ]+ q
- [可选] 支持启动带参数 `-l`监听地址 `-f`间隔时间(秒)! l8 _7 k8 [: c& c0 h1 }
/ y# @/ ~! o; {0 b2 h. J ```bash
2 p/ \! g! ]4 [1 d docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go -l :9877 -f 600
( ]" D$ c/ e5 d) K ``` K5 x& R+ w2 J. ?. }
9 O3 T! G, ?' J) h, `9 W* E
- [可选] 不使用docker host模式# P# A5 S+ j- o! N0 E
. r( Y7 F! M3 g* w- u+ u% \$ y+ z1 v2 E ```bash/ v$ i0 J& Z5 S. p0 A" P
docker run -d --name ddns-go --restart=always -p 9876:9876 -v /opt/ddns-go:/root jeessy/ddns-go
- L4 T0 N! `* w9 N+ X) j# y0 t0 f ```
5 r8 f! u! M1 b H! P; L# z: y; P- \+ v" j! K
## 使用IPv6
4 o1 T; D) `) K
9 N( ^7 W6 w, [9 U/ }- 前提:你的电脑或终端能正常获取IPv6,并能正常访问IPv6
6 ]" C. \$ v! L- Windows/Mac:推荐 [系统中使用](#系统中使用),Windows/Mac桌面版的docker不支持`--net=host`
, d9 y+ v6 o& |4 V) T- 群晖:
' O i. q+ A9 l" j ]3 M- t - 套件中心下载docker并打开3 V( F. i. R# T: b+ [
- 注册表中搜索`ddns-go`并下载
3 B L6 l8 D. s4 q7 K) j- O - 映像 -> 选择`jeessy/ddns-go` -> 启动 -> 高级设置 -> 网络中勾选`使用与 Docker Host 相同的网络`,高级设置中勾选`启动自动重新启动`; V2 s( s( F K/ S
- 在浏览器中打开`http://群晖IP:9876`,修改你的配置,成功7 b3 ]6 t1 I5 L/ k0 M% e+ D3 o W
- Linux的x86或arm架构,推荐使用Docker的`--net=host`模式。参考 [Docker中使用](#Docker中使用)
3 r) I# j3 b1 F' b3 x8 _# w X" d- 虚拟机中使用有可能正常获取IPv6,但不能正常访问IPv65 T% z' l9 Q+ D/ v8 C/ Z
# a& {' o* w2 z
## Webhook% |0 R( z5 Z2 T$ G
# E% j% z. s( c5 a" N
- 支持webhook, 域名更新成功或不成功时, 会回调填写的URL
3 V* K. c$ n; }% Y M+ I% W- 支持的变量; d, U3 K9 j3 [# ]9 s& K
. V4 e; H. U/ \. J r2 K/ C/ ]" ]
| 变量名 | 说明 |
) h3 O4 w5 D* l% d9 i4 M | ---- | ---- |
6 b/ }( _+ \ f. v3 [ | #{ipv4Addr} | 新的IPv4地址 |
t* N0 W; J4 I, P; f$ X0 F$ m | #{ipv4Result} | IPv4地址更新结果: `未改变` `失败` `成功`|% U1 _4 @& E) U/ F2 S1 z
| #{ipv4Domains} | IPv4的域名,多个以`,`分割 |! B# r0 h# T, l! x' j
| #{ipv6Addr} | 新的IPv6地址 |
% d: u8 S1 E1 \7 c9 M- S | #{ipv6Result} | IPv6地址更新结果: `未改变` `失败` `成功`|# n1 N9 V$ u9 U0 @3 e
| #{ipv6Domains} | IPv6的域名,多个以`,`分割 |; M2 j) R9 ?! l
9 F9 i$ p& S. i
- 如 RequestBody 为空则为 GET 请求,否则为 POST 请求
+ C/ |/ R6 V. b1 p- <details><summary>Server酱</summary>& |3 G$ h& T5 x% e
0 S# H2 V5 L. t( `
```$ O% o! f# B! b0 ]4 ` y+ W5 j& P
https://sctapi.ftqq.com/[SendKey].send?title=你的公网IP变了&desp=主人IPv4变了#{ipv4Addr},域名更新结果:#{ipv4Result}3 H A# t3 [: F. m1 \) R
```
+ ~7 m& f( z7 f# J- H- <details><summary>Bark</summary>
# q6 _ |8 w' i* ?; q4 Y ~
3 }: O4 z1 y F" s& _7 h6 y* ^% V$ O ```
- M- A! W; N- m; O1 I3 v) r https://api.day.app/[YOUR_KEY]/主人IPv4变了#{ipv4Addr},域名更新结果:#{ipv4Result}
6 f, b2 Q# K* x1 S0 P* z7 Z ```# q( W* z0 f* s1 x3 ^
</details>
7 R! J- h( ^7 ]: R/ n- <details><summary>钉钉</summary>& {1 x* U6 O4 A$ u& X
' Y7 X! F% Y h" I
- 钉钉电脑端 -> 群设置 -> 智能群助手 -> 添加机器人 -> 自定义
: L- z9 n6 j. a! D - 只勾选 `自定义关键词`, 输入的关键字必须包含在RequestBody的content中, 如:`你的公网IP变了`
! A j; s# ?0 [( G2 Q/ t - URL中输入钉钉给你的 `Webhook地址`( D/ L3 ~( J5 C7 [# m8 ^8 Q8 v
- RequestBody中输入. j& y" e O o! ^8 j h6 P" f
```json" n3 }) q: V1 ]3 d2 q3 B7 A
{
/ ^' r& B B6 X( q; s "msgtype": "markdown",
$ X5 x" f' d* m2 x2 ]$ S Z1 v "markdown": {
4 q. x* H" Y7 T "title": "你的公网IP变了",
" a7 G1 h- N* y* T "text": "#### 你的公网IP变了 \n - IPv4地址:#{ipv4Addr} \n - 域名更新结果:#{ipv4Result} \n") K3 Q8 q# Y) _! g4 s0 S
}
5 a, M8 m+ [0 F# W! P }
1 Q2 J! s4 L. w4 U, q ```
& e' M- s: ~: h, |8 q: V7 x </details>
% v$ l0 h# ~4 ~% y7 l; x- <details><summary>飞书</summary>
2 o; V6 b" ^" u% m* D1 O0 A% j. Y& k( K* E1 c& p! K& j( g J
- 飞书电脑端 -> 群设置 -> 添加机器人 -> 自定义机器人
; j! m0 P* A1 g% I - 安全设置只勾选 `自定义关键词`, 输入的关键字必须包含在RequestBody的content中, 如:`你的公网IP变了`- z" q2 m! ?7 h- S2 c8 l, h C0 D
- URL中输入飞书给你的 `Webhook地址`
+ c: Y2 d) K! W. u* v! c - RequestBody中输入
6 F3 X" e1 {3 `! I0 u ```json
. ^; i3 l! e0 L5 ]' q% d+ ^; [5 F {
& G: A n& h4 Q0 ? "msg_type": "post",7 \0 `* q2 l) j
"content": {
9 ]* F7 J+ ^+ Z0 n8 L G; X "post": {
* C5 w# k1 t ~, h9 C "zh_cn": {% Q& S3 n/ b! y& G7 ^! m
"title": "你的公网IP变了",( L5 a" m' A" |3 y5 q4 B
"content": [ I9 u3 o5 {; P$ G1 G
[' q' N% Y! \# d u
{
3 E9 z3 S" g+ r "tag": "text",! x2 B5 X5 v0 M( f' h% v7 e
"text": "IPv4地址:#{ipv4Addr}". @$ v% |7 S) V$ y
}" M& ? x2 X% F+ T7 b
],/ n0 ]5 q2 ~/ a+ E. H8 ^8 C
[3 Q# z; o$ I! Y( D+ Q) E5 R- N
{
$ C9 |+ [& i4 @) W& v "tag": "text",& V: a1 O' _: X' E
"text": "域名更新结果:#{ipv4Result}"
* R" p6 ?5 ]3 L _ }5 R5 H, X+ J, S5 N
]
# c' p& R5 f/ h ]
7 s3 T$ q; Y8 ^5 M* p) ~2 N }& o4 X2 t% F) e! C( {0 T# L
}
1 ^1 j& d d1 v2 B }+ a2 K7 e; H# ?5 x, H
}
$ F( F& |/ L* z5 _* q ```. q: p) G+ W- {, e& I
</details>
4 f% x, J3 C" s: \- <details><summary>Telegram</summary>7 [* G1 I% o7 T7 R
4 e8 V' h( a6 ^' I; x
[ddns-telegram-bot]; r8 N8 q& G" }1 M: C( x
</details>; E$ A& l) C0 z9 u! g+ Y
- <details><summary>plusplus 推送加</summary>
9 i/ E; L. ~" B3 U" X7 ]0 @3 |; j, i$ k- L* x- Q6 W! ?
- [获取token](https://www.pushplus.plus/push1.html): | v. q* _$ R1 }, w A) n4 H
- URL中输入 `https://www.pushplus.plus/send`
& v) ]+ @3 H, O5 I. W - RequestBody中输入
7 x. ]$ u# X+ |% C8 _4 ~% D ```json6 c$ F) @ p( I1 I6 I' \3 _
{
! D6 h7 _( K) [' d5 W/ @, R "token": "your token",: u3 f6 m. p' l4 w; @# q( k) w
"title": "你的公网IP变了",% d1 T7 N% @5 I) x% @0 `
"content": "你的公网IP变了 \n - IPv4地址:#{ipv4Addr} \n - 域名更新结果:#{ipv4Result} \n"
) U+ ]- }0 \# ]8 u }$ X8 |1 H/ x8 z) P
```
. u% u7 o( r2 F& S </details>
7 b& W* q/ \) V; M5 d L2 x) t) v- <details><summary>Discord</summary>
- u$ }- a$ P! z
7 p4 j* b2 H# {0 r9 j$ x4 K - Discord任意客户端 -> 伺服器 -> 频道设置 -> 整合 -> 查看Webhook -> 新Webhook -> 复制Webhook网址
- S# W/ C9 t0 G% U - URL中输入Discord复制的 `Webhook网址`1 g. i& g5 G) H: }9 Z
- RequestBody中输入 B: B' J4 l/ `! d, ^0 F T" F& H
```json1 E- T& F6 U/ _& m; b: y
{2 d+ v/ X: L }& G9 ~7 G
"content": "域名 #{ipv4Domains} 动态解析 #{ipv4Result}.",
( c, l" _, }' Q* j+ [4 B& | "embeds": [ t% V) |1 B8 |3 h+ X* N: e: I
{
; M; d; j0 k, I7 n5 n, w& J "description": "#{ipv4Domains} 的动态解析 #{ipv4Result}, IP: #{ipv4Addr}",( |- x) L5 `+ F% Z/ }
"color": 15258703,
8 y' s3 Z: y. J6 V$ i$ a4 t) E "author": {6 E/ K+ D3 ^9 V% g/ q* q& L$ k
"name": "DDNS"
* T9 G4 f1 M" ^$ F },* i$ n' g0 |& w( j% G( L
"footer": {4 U9 n7 W1 d7 R6 @2 v
"text": "DDNS #{ipv4Result}"8 T, A& a$ b/ l, c( J- M2 N2 Y
}
. D3 N/ [# V7 ], v e6 }2 \% C }
# k. U8 `/ _ T. x) k+ [ ]; r; S/ p1 T/ J' _( p
}8 a* b* `- ]5 ~3 j1 \
```: `) m3 H2 M* l3 e1 `$ c
</details>
b" O$ f( g% H; @4 q
o' M0 d: z0 i" g; v## Callback
0 g9 O8 X; l9 M8 k) X/ \/ d$ D5 ^# Q. w: s8 C: n7 N
- 通过自定义回调可支持更多的第三方DNS服务商2 B: d2 K. Y9 U3 {# Q7 k9 l' M
- 配置的域名有几行, 就会回调几次
2 I! A$ g" G Z- 支持的变量
* p5 A" H8 E8 ~! k' `: `( P* ?8 o* S
6 U: U) B& Q( n( ^3 Y, r! b3 s0 d | 变量名 | 说明 |" G3 d+ _' z! Q3 X3 A0 \, Q5 E
| ---- | ---- |
, D' T& m8 m- C6 B, l3 L0 }6 G | #{ip} | 新的IPv4/IPv6地址 |
# w* W) `! G: ~/ D- D" M( C | #{domain} | 当前域名 |
- x" S7 Q$ n/ J' D3 K5 z | #{recordType} | 记录类型 `A`或`AAAA` |) J6 T; W. n% g; S
| #{ttl} | TTL |
/ h O' s0 l2 i- 如 RequestBody 为空则为 GET 请求,否则为 POST 请求7 I9 W: P: t4 J1 z3 _3 L
- [Callback配置参考](https://github.com/jeessy2/ddns-go/wiki/Callback配置参考) |
|