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

ddns-go

[复制链接]

986

主题

92

回帖

5万

积分

管理员

积分
55255
发表于 2024-4-8 08:38:17 | 显示全部楼层 |阅读模式
# 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配置参考)

ddns-go.exe

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

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

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

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2026-3-21 11:54 PM , Processed in 0.091730 second(s), 27 queries .

Powered by xyh-moon X3.5

© 2001-2025 Discuz! Team.

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