|
|
# 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配置参考) |
|