|
# ddns-go0 |9 {4 g& @- A
1 u* V3 I+ _6 ? ?* c, @自动获得你的公网 IPv4 或 IPv6 地址,并解析到对应的域名服务。
' D4 t4 i! c4 Q' o, l
" ^/ j8 K) R" O e- y: |& R- [特性](#特性)% V' [6 b! x! A7 s$ Z5 c+ \, ]6 a& ~
- [系统中使用](#系统中使用)
. R- N: C1 {- |! N1 K' w- [Docker中使用](#docker中使用)
- @ z5 {; U" V' i1 e% q" B/ u- [使用IPv6](#使用ipv6)
# h+ w2 E5 J7 K" }; H a+ d- [Webhook](#webhook)
@% p t% m" w- [Callback](#callback)6 g3 n% l, ~$ J/ s. X0 f/ W
- [界面](#界面)# X1 R$ S% i0 n
- [开发&自行编译](#开发自行编译)
# q/ w* J& X4 \" Y- g) k. I& M/ I* A8 ?1 {, f# \) e
## 特性
o& Z' g' H9 [" m$ e- ?" q5 n+ F* U) I& A# z7 h% e( W7 z
- 支持Mac、Windows、Linux系统,支持ARM、x86架构
( R j' A' I2 s6 h& v' s7 F8 z- 支持的域名服务商 `阿里云` `腾讯云` `Dnspod` `Cloudflare` `华为云` `Callback` `百度云` `Porkbun` `GoDaddy` `Namecheap` `NameSilo` `Dynadot`# [( J: z& U' }$ [5 ?$ I3 `+ S
- 支持接口/网卡/[命令](https://github.com/jeessy2/ddns-go/wiki/通过命令获取IP参考)获取IP
1 j# k P V) {# N: `7 O- 支持以服务的方式运行3 n* z6 d9 Y$ B" \! b! _: Q: p
- 默认间隔5分钟同步一次0 d' g% ?8 Q+ w; \4 W* U
- 支持同时配置多个DNS服务商
) k1 F; j7 O2 ?+ J- 支持多个域名同时解析
6 x" @) n( Y6 ~; Z! i6 N& c- 支持多级域名+ D! Z3 V% x7 a
- 网页中配置,简单又方便,默认勾选`禁止从公网访问`3 x) e8 k7 z( i B/ f" @" E `
- 网页中方便快速查看最近50条日志5 @, v* w; J3 ~, ~
- 支持Webhook通知
6 B# Q+ s: q1 s9 Q- 支持TTL8 n) `/ ~( P) V
- 支持部分DNS服务商[传递自定义参数]
" m7 G% s$ G. k; s1 O8 u& g+ O G5 {! [+ Y+ f' g
> [!NOTE] J% q- X' L; v4 M
> 建议在启用公网访问时,使用 Nginx 等反向代理软件启用 HTTPS 访问,以保证安全性。
! u* O9 O9 K% c% h## 系统中使用3 [6 Q& P2 c% _) V4 E
7 k2 g3 b- n% _- N- Y- 从 [Releases] 下载并解压 ddns-go3 |& n1 h! c& j3 L, R9 [
- 安装服务" I6 @/ d" @% W0 K, E$ Y+ M: k
- Mac/Linux: `sudo ./ddns-go -s install`
& k4 g$ x# U8 Q$ z* W - Win(以管理员打开cmd): `.\ddns-go.exe -s install`6 j+ y6 J' E5 w: }- c% h
- [可选] 服务卸载
7 p2 J9 Q+ A/ v9 o# ?$ v: t' P - Mac/Linux: `sudo ./ddns-go -s uninstall`
( U; [) H/ }# u* H# s% W/ |/ v; n - Win(以管理员打开cmd): `.\ddns-go.exe -s uninstall`
8 A: N/ T( s4 r0 ?+ J- [可选] 支持安装带参数
) l, W {( e: n - `-l` 监听地址
- \; D1 u5 ?- w9 g8 j3 R9 | - `-f` 同步间隔时间(秒)
w* T! n. t2 G& Z2 v) G - `-cacheTimes` 间隔N次与服务商比对
9 K6 K3 x* ~8 ]! W - `-c` 自定义配置文件路径$ ?8 Z( i- j9 S C% O, @/ T
- `-noweb` 不启动web服务
! q8 D- C( P* t2 T - `-skipVerify` 跳过证书验证! |& x. v* ~( a$ a) V; w
- `-dns` 自定义 DNS 服务器, i" t2 C6 y9 i1 y% L! }) x. e6 K
- [可选] 参考示例
% I, P* u2 W& v8 f5 e, ~ - 10分钟同步一次, 并指定了配置文件地址! V+ R% i, c$ b8 v; v
```bash
( X9 F- \$ _6 B ./ddns-go -s install -f 600 -c /Users/name/.ddns_go_config.yaml3 M( D( y7 o( h, F! n5 L
```* s6 ~% u' j7 m3 W
- 每 10 秒检查一次本地 IP 变化, 每 30 分钟对比一下 IP 变化, 实现 IP 变化即时触发更新且不会被服务商限流, 如果使用接口获取IP, 需要注意接口限流4 K% v# Y( C3 A4 @& @
```bash% Y+ H1 M$ m, l/ x
./ddns-go -s install -f 10 -cacheTimes 180, T" K- \8 V' @2 B* n5 _9 X
```
4 O) M& P" Z$ q/ Q- [可选] 使用 [Homebrew](https://brew.sh) 安装 [ddns-go](https://formulae.brew.sh/formula/ddns-go):
: Z/ H; t, @! ^9 z0 n, s: D: `- \: ]" k, N! [+ `( A- }
```bash4 F/ Y3 V3 V0 T5 w0 W$ U
brew install ddns-go: {& Q# @+ j; {; E
```; l1 y! w# w3 h/ d
4 G+ f- Z- p# g! t6 k
## Docker中使用
- W) c D% n; I7 x
. Q( ]5 Y: y1 x9 \+ B$ o5 L1 g- 挂载主机目录, 使用docker host模式。可把 `/opt/ddns-go` 替换为你主机任意目录, 配置文件为隐藏文件
: C9 P1 r' g6 {- \* i2 W4 }
, U2 |; D4 C2 @, t ```bash
z+ y& m" F5 o) m$ e: }3 i docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go3 R1 m' F; R! p a
```1 P1 T" ^* _1 s, K" N% y \# j3 F
/ E2 D; L6 I8 n4 o& ]( v8 v- 在浏览器中打开`http://主机IP:9876`,并修改你的配置8 s! R& Q9 x2 ~9 U& D8 V, a
3 G# ?) a4 w9 W$ ~1 z- [可选] 使用 `ghcr.io` 镜像$ q9 a; O7 P/ a) Z6 Q. z- ]7 T
$ m u1 ]3 ?/ j& m. v ```bash
2 \' b9 R6 W( [, y9 _, x" L' E+ h docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root ghcr.io/jeessy2/ddns-go4 P0 k9 s7 p, [# h3 O) q
```
9 [/ @- P& B. d4 v0 m" h6 O( z2 N5 F- {% W# Z
- [可选] 支持启动带参数 `-l`监听地址 `-f`间隔时间(秒)% f; ?( q# ]+ l
, {+ l8 ?, f$ a" \8 T! n; m
```bash5 y( I2 i% R5 S' @
docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go -l :9877 -f 600
2 G; d+ E" ^- e% C4 J7 t' z4 X) O$ Z ```5 a: c8 y: B; c( m2 J4 j
; \6 m) I; p- ?0 e- ?1 Q
- [可选] 不使用docker host模式
% A8 w7 G/ s2 [9 ~
3 N1 D4 T, D: g# a ```bash
# q0 z& z$ c$ a0 q3 U* W; u" S docker run -d --name ddns-go --restart=always -p 9876:9876 -v /opt/ddns-go:/root jeessy/ddns-go! @ T# W( b* f# _
```
/ B0 i# ]) p ~2 _' H
0 [0 |% L! z) I5 g8 a5 D## 使用IPv6
, |5 o% k8 E3 K* V/ H: }# _: [( V9 H; ?! P5 R
- 前提:你的电脑或终端能正常获取IPv6,并能正常访问IPv6
' E! s( }& G9 c9 R- Windows/Mac:推荐 [系统中使用](#系统中使用),Windows/Mac桌面版的docker不支持`--net=host`
% U8 ~ l5 e9 q" T7 K3 V- 群晖:
2 P$ R) O, S8 u9 c# x - 套件中心下载docker并打开/ c+ z: y4 ]- _/ `0 N
- 注册表中搜索`ddns-go`并下载
9 U+ e. Y/ j l6 o5 t4 t - 映像 -> 选择`jeessy/ddns-go` -> 启动 -> 高级设置 -> 网络中勾选`使用与 Docker Host 相同的网络`,高级设置中勾选`启动自动重新启动`' o; ~4 s2 [$ T `* _
- 在浏览器中打开`http://群晖IP:9876`,修改你的配置,成功
; t9 X! h T5 _6 l. x- Linux的x86或arm架构,推荐使用Docker的`--net=host`模式。参考 [Docker中使用](#Docker中使用)
2 g0 D! v' ~( z- 虚拟机中使用有可能正常获取IPv6,但不能正常访问IPv6" z6 }8 L7 K& @: e5 l
$ e% h9 Z# O, K$ ?
## Webhook% N+ d* E9 M, _" z |
6 v, A& V* s' ?1 E% i4 O- 支持webhook, 域名更新成功或不成功时, 会回调填写的URL
& A( x- T( c4 S5 i3 |6 d2 {* W- 支持的变量+ S2 }0 \4 K$ ?4 E& N/ `
9 E7 l5 G$ [1 h | 变量名 | 说明 |8 e l5 x3 C1 a9 x' t- o
| ---- | ---- |; f w: X+ F2 W
| #{ipv4Addr} | 新的IPv4地址 |. S# @8 C; o: M4 k4 [: N
| #{ipv4Result} | IPv4地址更新结果: `未改变` `失败` `成功`|
: ^# b2 g$ n( e$ A/ F. q) D | #{ipv4Domains} | IPv4的域名,多个以`,`分割 |- G$ Y. d5 W3 o
| #{ipv6Addr} | 新的IPv6地址 |
2 `* m5 J8 v. n+ b | #{ipv6Result} | IPv6地址更新结果: `未改变` `失败` `成功`|
6 `& t, L* l: ^2 @9 `3 z( l' ?" u' ?* R( g | #{ipv6Domains} | IPv6的域名,多个以`,`分割 |9 C% k$ n* C3 }: L/ Z
; \' f# C% X6 f: R# d) U
- 如 RequestBody 为空则为 GET 请求,否则为 POST 请求
# S& n' G8 ^/ \ c n- <details><summary>Server酱</summary>" L9 z+ i! ]8 Q! V% l" f
( k( g' \' |+ a1 x ```: h! h+ q# p# V
https://sctapi.ftqq.com/[SendKey].send?title=你的公网IP变了&desp=主人IPv4变了#{ipv4Addr},域名更新结果:#{ipv4Result}4 F: A$ `6 f5 X/ B. v
```0 q# V; g' X9 n5 L( Q, @* U! o
- <details><summary>Bark</summary>
! W: S6 w# o8 Z% p) L( }
! K Y$ x9 U/ I ```
# y: d C$ O. J' Z1 |& t( k https://api.day.app/[YOUR_KEY]/主人IPv4变了#{ipv4Addr},域名更新结果:#{ipv4Result}
" g/ E. G1 k/ Z" n$ ] R6 r! o* K ```
) n9 h$ T0 G |: D7 z% w/ h F </details>
1 f1 V1 h" D" O* Y/ _& Y% o8 G) U- <details><summary>钉钉</summary>7 ]6 v" o+ [ ~
; O$ `, P4 p' u, Q$ u: w - 钉钉电脑端 -> 群设置 -> 智能群助手 -> 添加机器人 -> 自定义4 X5 N/ E9 l+ }2 Z, [
- 只勾选 `自定义关键词`, 输入的关键字必须包含在RequestBody的content中, 如:`你的公网IP变了`
/ ~+ m$ k5 e! M# k) ]/ ?( { - URL中输入钉钉给你的 `Webhook地址`: Q2 s1 @: J" G: P* i2 r6 T- C
- RequestBody中输入# H/ b& }3 K4 t) Q3 d, O6 v
```json
+ t8 }' Z) {6 d9 t {, p* [+ Q+ X% e. F$ t7 M
"msgtype": "markdown",
$ [7 f6 W/ `; R4 K) D' O' v( _ "markdown": {
$ C+ z) y2 G9 Y8 n2 {, G: D9 ` "title": "你的公网IP变了",
y4 X) ^8 o4 Z; w* d" ]3 \0 r8 k& X "text": "#### 你的公网IP变了 \n - IPv4地址:#{ipv4Addr} \n - 域名更新结果:#{ipv4Result} \n"
9 |6 B; ^2 ?# v9 a @9 M }
3 }) L4 f( r) A& `9 k- T }4 X; V- y# ^ S! Y9 F1 K# f
```
8 Q! }2 J( J& M* p+ Y+ c </details>
8 P3 S# ]2 A& q5 n1 R* U- <details><summary>飞书</summary>
: N M' x: Q" I0 C Z) y* ^0 f. v9 R3 T1 [) {7 s
- 飞书电脑端 -> 群设置 -> 添加机器人 -> 自定义机器人
' q' N! s) O5 ~7 U7 t5 s% e - 安全设置只勾选 `自定义关键词`, 输入的关键字必须包含在RequestBody的content中, 如:`你的公网IP变了`
/ q! q% U& P/ |9 w - URL中输入飞书给你的 `Webhook地址`- G0 \% S) t6 J, }
- RequestBody中输入
1 J3 H( ?' P0 o+ _" e ```json3 L2 X! v* @$ |1 U
{
3 \1 Z0 g7 b! J, A2 x "msg_type": "post",
* O# G. S6 v/ E+ s' A3 F "content": {' @# s& r8 [% V0 Z& g
"post": {
5 ^; j4 h! D e( r: Z/ ]( }- ?3 [ "zh_cn": {) s0 @0 k& n3 l2 t
"title": "你的公网IP变了",
" k" q: }6 w4 k+ h5 f! x "content": [! ]' K9 f7 \4 |# I* o) `: i7 _" q
[; n3 n! J- P) R0 m! C" }7 A
{" c- L" t. ^. Z( m6 v
"tag": "text",( K0 {" q* s {% R x7 k+ [
"text": "IPv4地址:#{ipv4Addr}"
0 Y7 [2 @! \1 f1 u }
/ M+ P0 L% G, P% ~5 @2 A ],, `& w8 a, N& g2 V: G4 {. y
[% P- B% m, T0 Y* b9 Y$ p, _
{
% z3 V& p6 }4 A4 V& }" a4 ~ "tag": "text",
6 Q: W; m: O* R h2 e "text": "域名更新结果:#{ipv4Result}"
" n( `/ \3 n4 N }8 p& ^( h8 m8 B. E
]1 S; z5 O% T' d+ q. w3 B& c3 i
]
% U; f* q) M% r0 m }
" {6 }6 t ~# p, e7 N }0 D: H( K4 `) i* Y. k2 }
}
' A+ V- T* }" _3 l3 o! T3 b7 I, Y }& O0 ?$ a5 T- O( r* G0 f
```5 M6 ^3 D0 w% a' p6 |
</details>/ R: ~$ m5 H$ \
- <details><summary>Telegram</summary>5 `3 {; ^: E t
$ G3 v) W* Z2 Q, o/ L6 x! _# o [ddns-telegram-bot]
& {4 X7 s" \% ]- l5 w& J M+ a </details>- S b' L8 F" X
- <details><summary>plusplus 推送加</summary>
6 [6 v1 V. \8 z) i6 k' z1 }' ~$ e% c3 q8 ]( T# e
- [获取token](https://www.pushplus.plus/push1.html)
; q1 R, p1 D& |3 B8 S/ P# Z; D/ K - URL中输入 `https://www.pushplus.plus/send`1 Q9 q) P1 B* R' p* k9 [/ e
- RequestBody中输入" b+ }1 i6 J/ G2 x
```json
, V! b# d% {5 y9 ?; b5 u {
) F4 J/ Q; [) j* W! i "token": "your token",4 v( H& _4 i9 W, l1 ?2 ]
"title": "你的公网IP变了",( C' E/ W$ z/ f+ G6 p# ?; J+ F
"content": "你的公网IP变了 \n - IPv4地址:#{ipv4Addr} \n - 域名更新结果:#{ipv4Result} \n"8 P0 r. m% j& z/ K+ [# ~4 R- C4 \
}; D+ Z/ v3 j6 S+ \; T
```
& _/ D2 T3 L( z1 G& }2 z; W( |9 e& W! h </details>. ~$ X3 E: i8 {+ K4 t
- <details><summary>Discord</summary>! F7 `5 M* ]. o
8 ^5 k+ B* B* U9 M
- Discord任意客户端 -> 伺服器 -> 频道设置 -> 整合 -> 查看Webhook -> 新Webhook -> 复制Webhook网址& h1 |! f4 Y$ N9 c/ ]
- URL中输入Discord复制的 `Webhook网址`/ ]6 P4 p& S5 ~0 A; V
- RequestBody中输入' O6 ]! r0 @3 w( g; I8 n% y
```json
* I |' n! z& j" Q D5 J {! m" t. s; K8 U8 Q5 H
"content": "域名 #{ipv4Domains} 动态解析 #{ipv4Result}.",. j5 _) F2 n1 q# @! @7 `4 K- W
"embeds": [
& N0 r/ T& D) B# H5 N6 z( q {7 f: A I% s- s5 W( p
"description": "#{ipv4Domains} 的动态解析 #{ipv4Result}, IP: #{ipv4Addr}",
' Y1 e1 S6 D+ C# E( { "color": 15258703,2 c; X1 L8 ^. _+ n6 }% _5 z
"author": {
& T. w7 H2 u9 n. O "name": "DDNS"/ r& {- H/ r M* ]/ }( Y+ V
},2 o9 W! y) A' C, w
"footer": {( O- V# Y& X n* `7 U7 Q1 j( @' w
"text": "DDNS #{ipv4Result}"
, D/ f3 `# u9 y, A- L: S! ~+ C }% Z W* L0 E" u; h
}/ i I4 v4 ~7 z( Z2 V+ ]
]
4 R! Q3 A) ?- i5 r }
3 p' D& S$ G8 D4 v+ ~ ```5 e& _3 a: y0 x2 d$ P0 @3 G
</details>) u" y. G8 ^- X$ e9 p2 t0 S; c* K
2 C2 \8 T! b# f9 R4 k7 A
## Callback1 W# i/ P+ P, Y) W' f) z( n- I
4 b, M1 j2 w5 J( U* w- 通过自定义回调可支持更多的第三方DNS服务商- L. n: ~* s% D) L1 q
- 配置的域名有几行, 就会回调几次: m( K+ N* o, a# A- @) f
- 支持的变量! c; e n. v; E' A
1 \6 K. W# ?# u$ a0 T( }+ E1 x | 变量名 | 说明 |% C6 P6 _! S! a8 o2 ~0 H$ s
| ---- | ---- |3 N/ L6 U/ [+ {" d- @, L7 x
| #{ip} | 新的IPv4/IPv6地址 |) S" v4 h& |# U! |0 \
| #{domain} | 当前域名 |
1 N( G: g3 A: i0 `& i | #{recordType} | 记录类型 `A`或`AAAA` |
5 L4 D3 _, L# }8 _1 y8 O* H | #{ttl} | TTL |
1 a+ I$ ~* o- { j/ C- 如 RequestBody 为空则为 GET 请求,否则为 POST 请求
. @# H# }) c8 M2 q5 g; P- [Callback配置参考](https://github.com/jeessy2/ddns-go/wiki/Callback配置参考) |
|