|
|
# ddns-go" c Y5 t4 c8 \1 o, l h! ~8 H
- l% s( ~1 d- {/ A- u! Q自动获得你的公网 IPv4 或 IPv6 地址,并解析到对应的域名服务。
" R3 ^( L% m, L
6 m+ Q: m4 f2 u u; |- [特性](#特性)
3 d1 S& v: T, O$ [# M9 n, ^- [系统中使用](#系统中使用)9 Z5 Q' w( U& | m! d9 @
- [Docker中使用](#docker中使用)
: s0 `: D9 C& V G4 j/ M! T$ {- [使用IPv6](#使用ipv6)7 \5 z- [2 Z; f; w s
- [Webhook](#webhook)
U- f0 b" v- h) h0 _6 k- [Callback](#callback)
& u4 f0 t) A2 z" P M- [界面](#界面)
3 l3 U5 p) L7 [- [开发&自行编译](#开发自行编译)" r* x% V8 v( ^! F) q/ ^
5 c- d* G7 n" s+ C2 C3 I
## 特性6 S2 V- W( y9 \( L% l% k* o+ I
3 `0 ]+ Z5 Q; Z+ q b' v/ |
- 支持Mac、Windows、Linux系统,支持ARM、x86架构! k- C6 X' C4 C: c3 U' \8 G$ b
- 支持的域名服务商 `阿里云` `腾讯云` `Dnspod` `Cloudflare` `华为云` `Callback` `百度云` `Porkbun` `GoDaddy` `Namecheap` `NameSilo` `Dynadot`
& ]' I/ b4 F' L0 i- e$ g- 支持接口/网卡/[命令](https://github.com/jeessy2/ddns-go/wiki/通过命令获取IP参考)获取IP: k3 y2 ], {) w0 B1 ^- ^+ a. `
- 支持以服务的方式运行2 s6 b; z- W$ w9 N) g5 d
- 默认间隔5分钟同步一次 w. h' l# @& g* L8 L
- 支持同时配置多个DNS服务商" L% E/ m6 C) I; y7 h
- 支持多个域名同时解析
* }% d1 z( @& r& O. c* J5 r8 s! V- 支持多级域名
5 m$ g1 r; \% h' u. G- 网页中配置,简单又方便,默认勾选`禁止从公网访问`2 O8 Z9 G: n y2 f9 B1 _
- 网页中方便快速查看最近50条日志" C2 N. Z1 j: q; B0 D0 }6 q
- 支持Webhook通知8 F8 F7 |; ^* R( W! Z
- 支持TTL% ?/ U1 M; M! a: ]8 E: a, |4 T" u
- 支持部分DNS服务商[传递自定义参数]
+ h( v2 v! N V3 @2 Y: ?1 I, O. B' P/ v3 k
> [!NOTE]
" E' D2 e1 ^, _> 建议在启用公网访问时,使用 Nginx 等反向代理软件启用 HTTPS 访问,以保证安全性。* i' P( P1 I; |" _7 V
## 系统中使用) h0 a+ }4 |# y
[7 `3 P5 ~4 ^, y) a- 从 [Releases] 下载并解压 ddns-go
6 c* O8 k! B* s3 Z5 p7 Y; Q- 安装服务
' H! n% }. N: X' S - Mac/Linux: `sudo ./ddns-go -s install`
p3 n6 g" v7 g( ]4 V4 P" ~+ c- C - Win(以管理员打开cmd): `.\ddns-go.exe -s install`
/ q% I5 c, b( o1 p0 O9 n) C: M. A- [可选] 服务卸载2 k2 k3 u3 ^+ s5 R
- Mac/Linux: `sudo ./ddns-go -s uninstall`
) v7 G6 r" l3 Z3 ?8 w, G - Win(以管理员打开cmd): `.\ddns-go.exe -s uninstall`8 S; y0 m1 b) O# g. g# y% h! j
- [可选] 支持安装带参数2 M: `0 z0 N6 }6 U) q9 G: `
- `-l` 监听地址
& A- W9 @( l( M) T - `-f` 同步间隔时间(秒) O* p* q( `5 T. J
- `-cacheTimes` 间隔N次与服务商比对: ~* ?; I( ~$ s7 R, C# u* K6 f
- `-c` 自定义配置文件路径
% [' E0 O, X7 T5 ]& f - `-noweb` 不启动web服务
& [0 [( G8 n) `) e, R/ j - `-skipVerify` 跳过证书验证
% y* q( g1 A. \ Y) c9 n - `-dns` 自定义 DNS 服务器
" Z2 D7 P5 @: ~, U6 b- [可选] 参考示例
7 t$ V% g$ n! X8 u6 T5 H+ f( g - 10分钟同步一次, 并指定了配置文件地址, X O P$ t9 }( u
```bash3 v+ q) P6 F" w! P- [4 D9 F+ b
./ddns-go -s install -f 600 -c /Users/name/.ddns_go_config.yaml0 l3 `$ |0 w- [* z3 j @
```
# w3 f) C* x4 w: o" N. ^0 C+ E - 每 10 秒检查一次本地 IP 变化, 每 30 分钟对比一下 IP 变化, 实现 IP 变化即时触发更新且不会被服务商限流, 如果使用接口获取IP, 需要注意接口限流( j1 b% y3 B* p- C2 C
```bash1 ^+ `9 Z% ^+ e
./ddns-go -s install -f 10 -cacheTimes 180$ H5 l$ F' R9 w2 S8 g
```
3 L: B2 q3 |: H) q! L- [可选] 使用 [Homebrew](https://brew.sh) 安装 [ddns-go](https://formulae.brew.sh/formula/ddns-go):) C% d+ _. t B9 _
$ N' w+ N/ T, g/ s$ n ```bash
8 p& h2 ^6 a0 r/ j2 l! \ brew install ddns-go# W( |0 I7 L' O0 h0 F n" |
```
- J7 W2 b+ y' i `
0 s& Y, X! L/ x/ ` {## Docker中使用
# S# h/ I" K9 D9 }/ n0 Z9 P7 `6 a# Q, e z Z! |9 h
- 挂载主机目录, 使用docker host模式。可把 `/opt/ddns-go` 替换为你主机任意目录, 配置文件为隐藏文件
8 g* z. k a0 v- y/ S& r1 g/ t( l# c% o( t' F5 f/ A
```bash
1 O, G9 u( i$ b( g! X1 {, J docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go0 g0 {- X( o. s8 h2 }
```5 f. L9 D* e g$ L
. v! [; }3 H' u; k+ E
- 在浏览器中打开`http://主机IP:9876`,并修改你的配置
! g- o* v$ c4 Y7 K8 t1 C! Q
' O) ]8 r, _5 `- [可选] 使用 `ghcr.io` 镜像+ t/ H+ i0 g" x
. [! o, P: G9 ?! Y
```bash
8 U6 P3 y4 x: c/ I" ]: { docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root ghcr.io/jeessy2/ddns-go; ]5 C* }3 H! |/ L6 j
```; ]# H% }* e+ e a
5 y" `% H8 P6 P, P- [可选] 支持启动带参数 `-l`监听地址 `-f`间隔时间(秒)& ] v+ ]2 I& c+ g0 g# g4 K+ X# h
3 j, s$ s, _/ V# P% Z
```bash
; m) L& n% ^( u% J2 U. A docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go -l :9877 -f 600
4 K. W" }, _! m& X7 g ```1 C! U+ ~) r6 t* y% A1 N
- C Q% c' J4 D/ x2 h
- [可选] 不使用docker host模式
/ O$ k: K( S. \2 |7 w1 P# S) h( w6 u( ]
```bash3 C7 F" J8 w. `- v3 t! h
docker run -d --name ddns-go --restart=always -p 9876:9876 -v /opt/ddns-go:/root jeessy/ddns-go2 v; X; b; k3 V5 W; L/ `
```
3 T8 |& x# u) m5 a! G$ {, r$ x' p7 p/ W' \! @) k( N
## 使用IPv6
2 y+ w! L5 ?# x. ~6 U
% i# a) q' A% P" x7 _; K5 f9 z- 前提:你的电脑或终端能正常获取IPv6,并能正常访问IPv6
c0 P7 g1 j2 O6 O& R. ~$ H- Windows/Mac:推荐 [系统中使用](#系统中使用),Windows/Mac桌面版的docker不支持`--net=host`0 L$ Q% q% N, _ \1 t9 }6 O" ?4 t
- 群晖:: M& T$ V( Q( X6 t9 S
- 套件中心下载docker并打开
" n( L, U; R4 }/ ]; I2 d( h - 注册表中搜索`ddns-go`并下载 b+ K- V0 \+ k; N: z! c
- 映像 -> 选择`jeessy/ddns-go` -> 启动 -> 高级设置 -> 网络中勾选`使用与 Docker Host 相同的网络`,高级设置中勾选`启动自动重新启动`$ w0 h5 j, y B: C0 O6 t, ]2 O
- 在浏览器中打开`http://群晖IP:9876`,修改你的配置,成功& ~0 @8 b: `3 f9 k
- Linux的x86或arm架构,推荐使用Docker的`--net=host`模式。参考 [Docker中使用](#Docker中使用)% s0 R \" A. Z: O
- 虚拟机中使用有可能正常获取IPv6,但不能正常访问IPv62 n3 L Z# n) B( f8 `+ V' C+ ?
- F7 E8 B, w' R3 J+ N! u; Q
## Webhook7 K! r* N" z1 L5 i
) c2 |+ `. }& N1 S% l$ t" l2 Z5 q3 n- 支持webhook, 域名更新成功或不成功时, 会回调填写的URL; ~$ E9 i2 m# ]6 ]
- 支持的变量6 Z1 K! e4 M. |, [# c
?( S/ d' Y0 \9 x
| 变量名 | 说明 |
# c/ p1 t# L; P, S& V# R5 u | ---- | ---- |' V8 }/ {+ N% Y& M0 i9 B
| #{ipv4Addr} | 新的IPv4地址 |
9 p3 _, R8 S! x | #{ipv4Result} | IPv4地址更新结果: `未改变` `失败` `成功`|$ a) q( e6 i7 q6 i& u: H
| #{ipv4Domains} | IPv4的域名,多个以`,`分割 |$ B8 M9 s, U$ T! ^5 o
| #{ipv6Addr} | 新的IPv6地址 |& @5 ]# l1 i; v- Q1 d* @
| #{ipv6Result} | IPv6地址更新结果: `未改变` `失败` `成功`|
" f2 D) i3 |1 N | #{ipv6Domains} | IPv6的域名,多个以`,`分割 |
$ a' U0 h/ O2 d1 A3 f( ^8 T p2 v: E
- 如 RequestBody 为空则为 GET 请求,否则为 POST 请求& i' c" S2 I" L! V
- <details><summary>Server酱</summary>
" s, R1 d/ R6 ^& h6 u( u2 m' q# y- c2 e9 k
```5 A2 m$ g# u5 N) b& S( \- ^
https://sctapi.ftqq.com/[SendKey].send?title=你的公网IP变了&desp=主人IPv4变了#{ipv4Addr},域名更新结果:#{ipv4Result}
( ~( Q2 e3 ^) {$ ]( K U% [ ```, o6 s' f% Q1 h% z
- <details><summary>Bark</summary>6 m# s6 e: g5 w" n' }
! h1 a) L5 u$ k/ L/ i: s ```, t% G( \ s0 }; ^; k' N( t
https://api.day.app/[YOUR_KEY]/主人IPv4变了#{ipv4Addr},域名更新结果:#{ipv4Result}
. z( W/ O4 Y5 P: X" T8 X ```! _7 P7 H; r; r- g% I
</details>
( _, R. X) J F4 D; \% O, @, c3 V- <details><summary>钉钉</summary>3 N. O* D3 H9 t
9 q4 O6 Y; }: K0 E, {; |3 o - 钉钉电脑端 -> 群设置 -> 智能群助手 -> 添加机器人 -> 自定义1 ~9 ?: ~1 }( c( p
- 只勾选 `自定义关键词`, 输入的关键字必须包含在RequestBody的content中, 如:`你的公网IP变了`
- Z1 `1 b7 O7 w2 l - URL中输入钉钉给你的 `Webhook地址`
1 u U& U; N$ [ - RequestBody中输入
2 g7 c8 P6 G8 P6 z: E ```json
6 Z. z* w0 D' F# \0 R& X {+ e. {4 i, T' X4 x# Z5 e+ d$ W
"msgtype": "markdown",+ w" E3 f7 u$ N+ }. f
"markdown": {
' v8 a. T( N9 Y! w. O, l "title": "你的公网IP变了",
) i2 x) F+ R! s; v' _ "text": "#### 你的公网IP变了 \n - IPv4地址:#{ipv4Addr} \n - 域名更新结果:#{ipv4Result} \n"
0 v: V# v: C' z# Y2 P }0 J! x/ R2 P+ l3 W& a1 a
}
( }5 v! ^7 A1 _ ```
0 V: _: [. T: N' t( }) ^ </details>
8 }4 h6 E/ k2 U8 h: C! o1 J- <details><summary>飞书</summary>8 |, \+ M$ x7 u$ f
! L8 ? Z# A, P( b
- 飞书电脑端 -> 群设置 -> 添加机器人 -> 自定义机器人
0 l3 w+ M: c' }5 ~ \4 w - 安全设置只勾选 `自定义关键词`, 输入的关键字必须包含在RequestBody的content中, 如:`你的公网IP变了`
5 X3 I/ x. @5 S3 a# `5 w1 d - URL中输入飞书给你的 `Webhook地址`# s; b& K V& p1 z
- RequestBody中输入
0 X1 C$ N- n( ~/ }$ [4 K- R& N9 K ```json' [& k5 W6 H1 s* G& @6 _' d
{
3 s+ I1 v; d" B, Q+ j6 D+ `/ m "msg_type": "post",/ V9 c+ w; G: S. S1 \
"content": {
( h5 ?9 f" N/ V0 E( e& A* G' b "post": {2 B3 L7 w% S' \6 i5 A$ M% H, Q) A
"zh_cn": {
# Q! Z# T. a2 N {2 B ?7 @ "title": "你的公网IP变了",3 O0 T8 Z$ @* Y! i1 l! \
"content": [3 T7 q S: o% y% K7 a. t
[% l5 ]* x7 f, G9 V3 }; ?3 z0 N
{
' S7 }6 N, g8 A( ^ "tag": "text",
) c% l" P* H7 {) d4 {% p8 M "text": "IPv4地址:#{ipv4Addr}"
4 B4 T. E; T& D4 G! k+ w$ _% | }
4 F6 @* V, E' F- g ],6 }( Z' e4 I* u
[
3 z! s4 r! ~; \6 d# _ {
8 y) H' }- _+ D- o* S "tag": "text",
3 g. G ~) K! w "text": "域名更新结果:#{ipv4Result}": a( Y; [) {' z2 T& W# a) W
}
) `6 h& J5 c# F5 Y: C- y" |( b ]
0 [% R0 G: ]2 H) i3 U" O; D ]
/ g- P# v/ Z6 b: \3 _ b6 i; O% y }
& A2 F9 m% V7 s, p) s( \6 r( p }3 C5 I) S. A/ r% ^. K5 L
}' B; b t* l+ D0 P$ U
}
2 s% O+ _, o7 z7 i; k6 [ ```
9 \, A; D l7 P0 u </details>
' p9 S1 `- K4 ] y! \- <details><summary>Telegram</summary>
- V# E% H4 S! y: Y* i9 j) d' q5 z l0 y; q2 ?, V; ?7 c& D
[ddns-telegram-bot]
/ b7 x! z) C3 q, q3 ~3 F </details>
' l3 B' [. a5 z+ d' T. I. ?5 M: j- <details><summary>plusplus 推送加</summary> A( F! @7 Q+ O
" J$ C5 B$ I d1 w O8 m
- [获取token](https://www.pushplus.plus/push1.html)
4 M2 \5 P/ W& t - URL中输入 `https://www.pushplus.plus/send`
+ u4 N% E* |4 L, y& h+ ^ - RequestBody中输入
: L* ^) J" p7 K' T9 x0 C9 p ```json/ ^+ _$ |, A" `+ p- R' Q2 D
{. R1 x# u: g# _! l
"token": "your token",
o7 _( G: ^5 {# p2 f0 f7 y& Q "title": "你的公网IP变了",$ Q5 v! `* B! b
"content": "你的公网IP变了 \n - IPv4地址:#{ipv4Addr} \n - 域名更新结果:#{ipv4Result} \n"
# n; E, \, }4 U: K/ K }& n7 d( e0 x6 }5 N( \
```* b4 S$ s" l3 k+ d
</details>
8 ?% U* t5 b$ p7 Y- I, Q) j0 J- <details><summary>Discord</summary>* a) Z9 o0 Q4 U2 Y
, B u5 z1 s: m( |8 f ?/ J% _ - Discord任意客户端 -> 伺服器 -> 频道设置 -> 整合 -> 查看Webhook -> 新Webhook -> 复制Webhook网址# S+ Q' G/ c& e. q. {) [9 U+ x
- URL中输入Discord复制的 `Webhook网址`
" }; B0 J" P6 `) C. q1 _! W/ | - RequestBody中输入- S3 U- i$ u' L0 f
```json- H. {, [ \% o
{% Y9 r/ B; ?8 ], D
"content": "域名 #{ipv4Domains} 动态解析 #{ipv4Result}.",2 Z' r) @6 Q8 g8 F2 X+ ~
"embeds": [
/ C1 I' g9 k5 N/ ~7 V8 P, ^5 q- \ {* T' n1 I$ z" U& ^
"description": "#{ipv4Domains} 的动态解析 #{ipv4Result}, IP: #{ipv4Addr}",$ d" \' @5 E! f8 {' D" u
"color": 15258703,' K' B6 N p Q2 g6 `$ P
"author": {7 S% m1 j# }' m% Q" X+ P5 E5 \
"name": "DDNS"" N2 s8 w! T# X" V
},
" J" ]/ E9 o9 @* U6 } "footer": {
* [2 Z3 z2 P9 K "text": "DDNS #{ipv4Result}"! `! l8 @; l& D/ C
}7 k( r0 B2 U9 q' m' X( `$ v& a
}
3 m/ F/ A! C5 r8 e5 y3 y1 J* c' E ]' Z9 ^* ~3 a! h# @- y& a
}
, d4 y& ], p, |- M. i) k! ` ```
9 B1 N. d: M0 K! K4 r. Y- t </details>
4 e( [$ f5 e' r1 \. H
) l0 s" D; t- D: L## Callback8 {4 w$ ?" }( z% Y2 Y
' g2 e: A( W/ r7 ^- 通过自定义回调可支持更多的第三方DNS服务商. |; X- @0 C6 s. n3 w
- 配置的域名有几行, 就会回调几次) ?0 V( ~% }3 Y; F8 P
- 支持的变量
4 ^" h3 s6 [ d7 Y6 j/ d6 R2 O9 ]; T: d+ ?$ L
| 变量名 | 说明 |6 N& p2 M6 p: T! J/ d
| ---- | ---- |9 p/ Z# `0 q: {& w) d+ k
| #{ip} | 新的IPv4/IPv6地址 |: W$ H' y) @9 k! B
| #{domain} | 当前域名 |/ z6 C0 W; u4 E3 L7 s6 G& n
| #{recordType} | 记录类型 `A`或`AAAA` |
' D$ f3 g/ Z' G: {5 t: V& s | #{ttl} | TTL |. g6 }+ x! i2 y7 i" D( k) ~% G
- 如 RequestBody 为空则为 GET 请求,否则为 POST 请求
- s! [" j, m- g* [( b" X8 z- [Callback配置参考](https://github.com/jeessy2/ddns-go/wiki/Callback配置参考) |
|