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

ddns-go

[复制链接]

991

主题

92

回帖

5万

积分

管理员

积分
55457
发表于 2024-4-8 08:38:17 | 显示全部楼层 |阅读模式
# ddns-go
) M# b2 [8 q8 K3 j$ g) V8 A6 Z8 Y" z
自动获得你的公网 IPv4 或 IPv6 地址,并解析到对应的域名服务。
9 u8 I6 q& }% c6 v" p1 `
, p! R, Z; x( K, [- [特性](#特性)2 f7 M- q2 K% c( J5 k
- [系统中使用](#系统中使用)) x# d) r/ R) Z/ V" K: }
- [Docker中使用](#docker中使用)
; W8 ^$ Q6 f4 W/ `) L& p- [使用IPv6](#使用ipv6)
9 z# u2 T# P2 d5 G- [Webhook](#webhook)
/ P7 `5 {3 x# U' f3 Q- [Callback](#callback)5 P/ h8 V" ]" u6 g. a( V' H! @3 e. |# T, k
- [界面](#界面)
+ s& Q# g4 c' b( u7 \: L; y, d. @- [开发&自行编译](#开发自行编译)
+ @. m( {! T8 p: G; r
# I! b5 @2 P  ~0 A5 G: `; l( T## 特性1 H- u. q6 ?- Y" a

$ v5 u) x# G& q" H2 z- 支持Mac、Windows、Linux系统,支持ARM、x86架构7 O6 f/ ]. Y$ T
- 支持的域名服务商 `阿里云` `腾讯云` `Dnspod` `Cloudflare` `华为云` `Callback` `百度云` `Porkbun` `GoDaddy` `Namecheap` `NameSilo` `Dynadot`
$ m1 t, F2 D9 h- 支持接口/网卡/[命令](https://github.com/jeessy2/ddns-go/wiki/通过命令获取IP参考)获取IP3 f" O' ^+ ^2 m4 D" B+ h; u2 g
- 支持以服务的方式运行
# N" S, H0 W- n' w2 X' Q& H- 默认间隔5分钟同步一次
' X1 H: A+ W3 E# D4 ]+ V9 P1 Y# H- 支持同时配置多个DNS服务商
6 F! O4 p0 y4 }" X6 G: y- 支持多个域名同时解析. s. e( j8 n/ s5 ?$ s
- 支持多级域名1 w0 i. o4 l) L' P
- 网页中配置,简单又方便,默认勾选`禁止从公网访问`/ j+ m8 j) X5 n: Y+ X
- 网页中方便快速查看最近50条日志# m! H. S. N, X' R# Z& Z: u, z* Q
- 支持Webhook通知
+ n* d/ `* N* u6 |1 I/ }/ x! a  c, a- 支持TTL9 h; X# m! |1 Q# u; |5 {+ T0 c9 A
- 支持部分DNS服务商[传递自定义参数]* `8 \( K8 V( J( w
- q7 h# V+ \! }: a4 o( ?
> [!NOTE]
- S/ X, Q( a0 K0 B/ u) c0 G9 z2 w> 建议在启用公网访问时,使用 Nginx 等反向代理软件启用 HTTPS 访问,以保证安全性。
, `/ i$ ^: U. W" Q" I7 C## 系统中使用
: }; k1 Y- v) \/ M" y/ S$ i6 \- q3 M1 I) M  F" q
- 从 [Releases] 下载并解压 ddns-go* d5 p$ s' f1 g4 C3 ^  `# p
- 安装服务
1 a2 K* v, E, [" _6 U  - Mac/Linux: `sudo ./ddns-go -s install`
3 p, N: [) `7 D8 c4 _; H  - Win(以管理员打开cmd): `.\ddns-go.exe -s install`" Q4 b, G; \3 `) }% m
- [可选] 服务卸载
$ B9 @/ Y4 X9 z. l, L8 r  - Mac/Linux: `sudo ./ddns-go -s uninstall`
* ^) ?8 n. Q5 x) `# w4 {  - Win(以管理员打开cmd): `.\ddns-go.exe -s uninstall`
5 @6 G8 K: I/ y9 z& G7 s  j- [可选] 支持安装带参数
1 v& ~2 J( q" V8 V  q* [* p: _  - `-l` 监听地址
4 |- @1 m- |% E' o/ f3 m' q3 E3 H' `  - `-f` 同步间隔时间(秒)
, p8 @7 \$ `: u6 P  - `-cacheTimes` 间隔N次与服务商比对" @3 `0 W$ d5 ^7 `
  - `-c` 自定义配置文件路径
; o! v9 j5 o% F* X$ Z; V! Y  - `-noweb` 不启动web服务
4 P: I7 v( q9 ?  - `-skipVerify` 跳过证书验证* V- [1 ~  j0 q2 ~) e
  - `-dns` 自定义 DNS 服务器
: P" T6 l& p6 F9 {' I- [可选] 参考示例0 a7 f' X' x9 a# n/ X% u3 M/ O
  - 10分钟同步一次, 并指定了配置文件地址/ Y* a7 G+ L% H* u$ e5 x
    ```bash
5 }2 f4 y7 x  p( X    ./ddns-go -s install -f 600 -c /Users/name/.ddns_go_config.yaml
7 B( X7 G0 G% Z0 `: w    ```
6 U1 ?6 h6 h$ M  - 每 10 秒检查一次本地 IP 变化, 每 30 分钟对比一下 IP 变化, 实现 IP 变化即时触发更新且不会被服务商限流, 如果使用接口获取IP, 需要注意接口限流
; B( z6 E0 J7 C. l1 t3 `+ I    ```bash
% S  B* h/ ]7 x$ A4 T- L! \7 N6 t2 M    ./ddns-go -s install -f 10 -cacheTimes 1800 @6 k* n, I, a' ~/ t6 {9 y8 V
    ```* v! p2 n: V4 w
- [可选] 使用 [Homebrew](https://brew.sh) 安装 [ddns-go](https://formulae.brew.sh/formula/ddns-go):
) J9 l& h6 _* \, }* q  n/ O/ Y( O9 |6 Y: X, J& m" b2 W
  ```bash
' ]& m9 O; m- S) T! ]  brew install ddns-go
. U! y5 X: S3 Y! Q( ?3 W; J  ```
3 D9 M. @: g5 J5 [, \& o
: x& ~6 G8 e/ B- [) V4 Y: t## Docker中使用
6 @; J- A. F0 B$ Y& Y1 B$ D, M3 \- J6 m! P6 U( n
- 挂载主机目录, 使用docker host模式。可把 `/opt/ddns-go` 替换为你主机任意目录, 配置文件为隐藏文件
/ o3 Q' g* j  G8 @) @$ I/ U4 L: D$ M; Q- ?+ S0 S7 y! R4 K
  ```bash
# F- U1 J4 I! r* O  docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go+ ?8 e3 \6 F3 q5 F8 J
  ```
) ~6 \/ c/ |; a; T( C
8 H% z( L8 }% I5 A# F6 v- 在浏览器中打开`http://主机IP:9876`,并修改你的配置
  Z( H7 l7 Q2 c$ L$ i1 p, Q& E
" H7 A3 {+ ~! i: I1 A  K$ I- [可选] 使用 `ghcr.io` 镜像  ~5 _  w/ ]4 O  V1 ]
/ O4 ?+ \, P1 w
  ```bash
3 t0 K3 S5 W$ Q  docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root ghcr.io/jeessy2/ddns-go
9 ^% p% K$ S3 P  ```  K6 e  x" n# o
) y  L; [) z# z8 y1 I4 _* x* o3 E  A
- [可选] 支持启动带参数 `-l`监听地址 `-f`间隔时间(秒)$ A6 l6 H+ y1 ?  [" o5 @( C
" l& \- \3 v8 e, c1 Y& j1 C. A
  ```bash7 e) m) J$ i' W6 L
  docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go -l :9877 -f 600
  @  l3 k' g  Y9 ~+ q4 r0 F  ```- I: ^) ~7 U* C, h

  C; ]6 c! V$ x8 I! S  d7 p- [可选] 不使用docker host模式
8 ]" k2 Y8 J2 g# N# _9 H! a. @  N: ]. t* ~2 T* U+ ^
  ```bash( F; e3 |' k* S7 ]. c3 w# g8 q8 a
  docker run -d --name ddns-go --restart=always -p 9876:9876 -v /opt/ddns-go:/root jeessy/ddns-go% ~9 Z/ B0 \$ c" A, U6 [- B1 B
  ```
( ~$ L8 g. e4 M- s' L6 M. {* @, X# }% q
## 使用IPv69 [# b+ O1 k) h" C7 i+ x1 }
) V, j" _! L0 |/ l6 D: p7 R
- 前提:你的电脑或终端能正常获取IPv6,并能正常访问IPv6
6 \6 E$ j" u8 w# R  |- Windows/Mac:推荐 [系统中使用](#系统中使用),Windows/Mac桌面版的docker不支持`--net=host`
* m1 G# C3 o: \6 w4 a- 群晖:& r5 v1 L! m9 y0 W% x  o, I
  - 套件中心下载docker并打开. Y+ M2 M! d1 H/ C) N: k1 U
  - 注册表中搜索`ddns-go`并下载9 b0 K. w$ I4 q! M* o1 F
  - 映像 -> 选择`jeessy/ddns-go` -> 启动 -> 高级设置 -> 网络中勾选`使用与 Docker Host 相同的网络`,高级设置中勾选`启动自动重新启动`
  U7 B& ^4 U5 A: x  - 在浏览器中打开`http://群晖IP:9876`,修改你的配置,成功' Y* Y& }: ?* z! ^4 @& ~1 A
- Linux的x86或arm架构,推荐使用Docker的`--net=host`模式。参考 [Docker中使用](#Docker中使用)
3 L0 F) c; N& P& f- 虚拟机中使用有可能正常获取IPv6,但不能正常访问IPv6
& V6 h* J0 o# t# q* R7 }# C' j" V: H/ q: M: Q3 Y
## Webhook' @. ?" r1 @; a$ f( e# x3 r) s* F. {  d
, N( O! \+ n6 j7 q" m
- 支持webhook, 域名更新成功或不成功时, 会回调填写的URL8 N% S% A. V7 H5 }) \! t& J" z( h
- 支持的变量
, ]* Q; z8 a! ~- |- u/ x& T2 ^
. n/ ?- K% T( k* g- A8 a  |  变量名   | 说明  |
2 _0 x9 B( G4 l, ~* J0 H& w  |  ----  | ----  |+ [. {9 `3 j8 a+ U" h9 y
  | #{ipv4Addr}  | 新的IPv4地址 |6 C) E/ G! e1 u9 C  x9 x1 _
  | #{ipv4Result}  | IPv4地址更新结果: `未改变` `失败` `成功`|9 ^  h3 W8 [+ y! [0 N  u5 t
  | #{ipv4Domains}  | IPv4的域名,多个以`,`分割 |
5 d- b. `$ e8 T; |2 G  | #{ipv6Addr}  | 新的IPv6地址 |
3 [0 f3 O; G4 ]- c& v! w  A! A  | #{ipv6Result}  | IPv6地址更新结果: `未改变` `失败` `成功`|
0 V  l; k$ U% Z  | #{ipv6Domains}  | IPv6的域名,多个以`,`分割 |+ n2 v2 V! ~" q: n1 Y- p/ g

% ]9 A& P6 _1 S) u+ W, d- 如 RequestBody 为空则为 GET 请求,否则为 POST 请求
4 |: s3 V8 u3 V. P  x# P8 U- <details><summary>Server酱</summary>
2 s" I. `: i! g* _- u, j2 s( ], b3 s: G
  ```5 T. j* T+ i: l& X3 w2 d9 x/ }
  https://sctapi.ftqq.com/[SendKey].send?title=你的公网IP变了&desp=主人IPv4变了#{ipv4Addr},域名更新结果:#{ipv4Result}; L0 [" ~1 o3 d! h& i8 l+ w# _' T
  ```
9 Z9 f/ _0 v* t# v4 c4 {8 V- <details><summary>Bark</summary>
0 y7 p: e8 H/ L" K% {! S& P3 Z& Q
  ```
4 N5 o2 A. g  w5 E- g  https://api.day.app/[YOUR_KEY]/主人IPv4变了#{ipv4Addr},域名更新结果:#{ipv4Result}& @, A9 r* _8 d  G
  ```. D8 E# ]8 f  ?, B# I/ w
  </details># G, T# l6 l  d8 }# `. Z
- <details><summary>钉钉</summary>' i$ |3 d5 d" \. E9 ~

' n0 [) F8 U; C3 a  - 钉钉电脑端 -> 群设置 -> 智能群助手 -> 添加机器人 -> 自定义7 K9 }6 P' @+ g  ?
  - 只勾选 `自定义关键词`, 输入的关键字必须包含在RequestBody的content中, 如:`你的公网IP变了`
( D; }9 i+ \* Z  - URL中输入钉钉给你的 `Webhook地址`0 I6 L0 G, \) K$ m: v! h. c
  - RequestBody中输入7 E) a/ \* ^$ l3 W- ~) c' T! Y
    ```json/ }0 P: q9 P( Z! F% O" _& L
    {
' z' {4 x9 W* V+ ^  ~& E        "msgtype": "markdown",
+ d4 V- U0 h5 |0 D  l7 f        "markdown": {
2 H0 f2 h4 t' G  G& |0 V  i; W            "title": "你的公网IP变了",
' Z( v7 D* r4 Y! k/ ~            "text": "#### 你的公网IP变了 \n - IPv4地址:#{ipv4Addr} \n - 域名更新结果:#{ipv4Result} \n"0 u9 }. s- j/ J% Q* n% w; A( ]- W
        }
& O( y2 `" ]7 C6 [8 X% a1 W    }
- o& }4 X% X8 j* i% J' v    ```
" H" B6 }5 X3 w) J  </details>' @2 l, ]# t+ v& q/ D: W8 U$ y
- <details><summary>飞书</summary>
: Z% y8 a, U0 [+ M4 j' f2 ?; _* y2 ^9 V! g
  - 飞书电脑端 -> 群设置 -> 添加机器人 -> 自定义机器人% Z3 N. N8 Q% f, ^" i6 g: k! |
  - 安全设置只勾选 `自定义关键词`, 输入的关键字必须包含在RequestBody的content中, 如:`你的公网IP变了`$ X' C1 O3 ?5 T( g
  - URL中输入飞书给你的 `Webhook地址`  Y1 W2 x6 N5 j$ m8 d
  - RequestBody中输入# ?& N! y& E0 a3 b5 D& W6 i( w
    ```json: t; E4 S: d- `3 o7 G% w: R
    {: e6 Y* V1 s0 E! q8 U
        "msg_type": "post",
& c7 j) d* T. j' {        "content": {4 X& R2 e% Y' ?5 K+ A% P( C
            "post": {, W7 n' C. G, O/ T
                "zh_cn": {
' m$ g1 N1 ^, S0 N                    "title": "你的公网IP变了",: c- {$ b8 ^* Y  Y9 `/ v9 U
                    "content": [6 ]; w2 L+ G; R
                        [6 d6 h0 U. C+ e+ ~% x6 I
                            {
+ N/ f; G* V$ T                                "tag": "text",3 ?) j* v! ^  r# f
                                "text": "IPv4地址:#{ipv4Addr}"8 j; \% O) M4 s# ~7 C) e+ y6 r5 \
                            }
8 n  {6 O% q  n( t3 M                        ],
% U7 r8 e+ y# T# ^+ A                        [
2 [) e  v% y, m9 J$ S" O$ \) B                            {
. O8 M* `+ E3 N) U5 S9 c, O+ j                                "tag": "text",
( L0 e( f. F: u( l4 ?" z                                "text": "域名更新结果:#{ipv4Result}"
- v" o$ w; [$ F: }) J                            }* i6 [3 l9 t; w4 o8 F1 Y
                        ]& g1 Y/ F2 B, F  A
                    ]
9 j* j# S) w" ]                }
' S! b( U: J! Y; Y& P2 X            }
; y# {! [; P$ b        }
0 N  T' [6 ^, T/ c3 s& z1 j    }
" O7 s# O; h( u' Q8 ^+ R    ```; S- I6 |  {$ j0 l' A% q- n
  </details>
( c% j# X/ O, J2 I, f( D) e- <details><summary>Telegram</summary>
, L6 h* D1 d$ w! l5 h9 c8 z3 g  n9 [# B/ _9 G; d/ Y
  [ddns-telegram-bot]
/ C9 a; e+ \- Q0 M- ?- r% J) c  </details>4 {$ g5 Q0 y3 ]( D4 J0 h1 Y; N
- <details><summary>plusplus 推送加</summary>7 ^1 ^! \3 T9 S4 r8 U! R
# ^5 P8 b/ F6 O
  - [获取token](https://www.pushplus.plus/push1.html)( z5 y: V/ ?' m5 B( P4 Y& [. ^/ y
  - URL中输入 `https://www.pushplus.plus/send`$ Y; [. _; y  c0 o7 F% C7 l4 O
  - RequestBody中输入: W! I; C& o$ k
    ```json
; W- m' m' s8 w/ v$ D! }    {
/ |2 _: X9 Y3 Y- F5 Z" Q        "token": "your token",8 T) D0 ], }$ G
        "title": "你的公网IP变了",- Y9 a, E& V$ |- [% B
        "content": "你的公网IP变了 \n - IPv4地址:#{ipv4Addr} \n - 域名更新结果:#{ipv4Result} \n"7 u% W$ R( l  {6 K# M9 h
    }1 v  L* |( V7 \8 @
    ```
% l# f( {+ f& `9 h5 ~, F4 e$ h8 t  </details>
# z/ q3 A! g" j5 _$ c' t1 j" R- <details><summary>Discord</summary>
2 N+ u9 k' x# B7 s5 S9 s9 ~; z. m+ ?8 z
  - Discord任意客户端 -> 伺服器 -> 频道设置 -> 整合 -> 查看Webhook -> 新Webhook -> 复制Webhook网址
+ p& k: x- Z% J4 u3 A  - URL中输入Discord复制的 `Webhook网址`
" a$ _8 n% d7 x2 Y: B  - RequestBody中输入
0 [( Z" M  ^0 m; u+ x    ```json
( m* U% _( S( c9 x* V3 K9 w    {8 Q4 g5 `) T7 Z
        "content": "域名 #{ipv4Domains} 动态解析 #{ipv4Result}.",
7 o! |: ~  O1 r4 F4 ^        "embeds": [* ^$ W5 D. M6 s5 O
            {$ N0 @8 b- R% S( c
                "description": "#{ipv4Domains} 的动态解析 #{ipv4Result}, IP: #{ipv4Addr}",
3 Q" z5 D; I4 l# v* F4 f                "color": 15258703,3 e- B4 r% i. m! |( {
                "author": {
9 u$ G' m! ?( b8 G6 d9 g  o                    "name": "DDNS"( o( }  T9 t( ^# s! v/ p
                },6 p* _( `% m* s- Q/ x
                "footer": {4 L, K: t8 U) o% d2 b
                    "text": "DDNS #{ipv4Result}"6 a2 j; P2 d, ^" @8 B" \7 V
                }
" O5 f% Z8 A# a/ k- L1 [5 H            }
4 o) K/ e& s" i  {  Y7 z5 [; U        ]) m- p/ q! q3 x
    }
1 \- y8 X6 X0 `+ b5 H  z8 Y) G    ```& a% v4 ?4 J. w  k3 h, l4 h
  </details>: C. b. w, n0 s- }$ k

, e- }9 p. c' {3 d& l9 C$ G+ `## Callback
2 S7 R, x  T7 N* o' t: }3 p9 i& q6 z: F
- 通过自定义回调可支持更多的第三方DNS服务商
0 E( G- m7 A5 O4 T- ?. r' r+ Q- 配置的域名有几行, 就会回调几次
  M( P/ D0 J  J* ~( n9 M- 支持的变量
7 |/ i  `$ y' j5 `. Y' y) N. q% M- i8 N' ]8 c$ c, h; ], g6 N
  |  变量名   | 说明  |6 ]  O- b6 s/ l
  |  ----  | ----  |% q/ }$ w; l4 n+ R$ v4 L2 i; f) h, b
  | #{ip}  | 新的IPv4/IPv6地址 |
. V' N4 ~% j8 q; U  | #{domain}  | 当前域名 |" M& s9 f# a$ D
  | #{recordType}  | 记录类型 `A`或`AAAA` |' z7 Y! ~9 h" Y8 R+ `5 L7 ?% m
  | #{ttl}  | TTL |) Y- v6 u# l% [. E2 J6 j( W
- 如 RequestBody 为空则为 GET 请求,否则为 POST 请求$ f. |) j& U3 k
- [Callback配置参考](https://github.com/jeessy2/ddns-go/wiki/Callback配置参考)

ddns-go.exe

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

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

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

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2026-8-5 10:21 AM , Processed in 0.093868 second(s), 27 queries .

Powered by xyh-moon X3.5

© 2001-2026 Discuz! Team.

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