找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 69|回复: 0

ddns-go

[复制链接]

983

主题

83

回帖

5万

积分

管理员

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

ddns-go.exe

9.02 MB, 阅读权限: 10, 下载次数: 0

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

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

本版积分规则

Archiver|手机版|小黑屋|返回首页

GMT+8, 2024-12-23 20:49 , Processed in 0.087472 second(s), 29 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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