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

ddns-go

[复制链接]

989

主题

92

回帖

5万

积分

管理员

积分
55362
发表于 2024-4-8 08:38:17 | 显示全部楼层 |阅读模式
# ddns-go' F# ~9 z0 f% a+ {1 n
( v1 v* n( Y0 [* P9 @
自动获得你的公网 IPv4 或 IPv6 地址,并解析到对应的域名服务。  x4 g9 N$ ~/ @6 f; o3 N' y8 j

8 J3 C/ Y  h( ~- [特性](#特性): p6 k; b: `7 L/ z
- [系统中使用](#系统中使用)
# r$ D, r3 u, b+ R$ L7 J/ }- [Docker中使用](#docker中使用)
  c* f) r! @* K) X* k2 X+ R- [使用IPv6](#使用ipv6)+ g- o4 i/ h9 ]! R% b
- [Webhook](#webhook)
+ r5 F- _. s4 @6 a4 D- x- `+ j- [Callback](#callback)
8 J1 l5 G; p+ F' H- [界面](#界面)( n+ w8 h5 _( I3 N- f
- [开发&自行编译](#开发自行编译)4 G/ P: [0 b! Z: Q: I$ e
% m2 L% H& d$ T1 o; K5 |% Y
## 特性
3 H1 F2 E4 R; w  O8 V; Z
9 X* s9 R  W7 Y# y+ i; E- 支持Mac、Windows、Linux系统,支持ARM、x86架构
# Y  k' |/ ^. a& C- 支持的域名服务商 `阿里云` `腾讯云` `Dnspod` `Cloudflare` `华为云` `Callback` `百度云` `Porkbun` `GoDaddy` `Namecheap` `NameSilo` `Dynadot`5 b( d! ^; R' `6 ?" n
- 支持接口/网卡/[命令](https://github.com/jeessy2/ddns-go/wiki/通过命令获取IP参考)获取IP
6 c7 ~! x& |# |8 a: b- 支持以服务的方式运行: n8 a4 l- A/ [* [) g" K
- 默认间隔5分钟同步一次1 |: b' z3 z9 P: w; Q. i
- 支持同时配置多个DNS服务商5 J  z* ^% J7 `! }4 q
- 支持多个域名同时解析
! x) b  o: P4 v4 n- 支持多级域名
# `1 C$ K. d9 Y+ j- E4 v- 网页中配置,简单又方便,默认勾选`禁止从公网访问`
, B2 T7 w. C2 w$ g/ h# V- 网页中方便快速查看最近50条日志
7 b7 ?/ @7 m1 x$ h- 支持Webhook通知
/ V( K1 {( h  `- 支持TTL
8 O- Q9 z5 X$ O5 y3 b- 支持部分DNS服务商[传递自定义参数]
* Q* j) x. C9 a/ o- H
; l; ~0 [  U5 a' P9 W> [!NOTE]
/ G. v8 I) \) _1 \. P, x' n* v: n> 建议在启用公网访问时,使用 Nginx 等反向代理软件启用 HTTPS 访问,以保证安全性。
! J7 ^' c" y+ E" w( _## 系统中使用
4 F+ _4 j) k/ s! V% H, |, l! w) o* c8 w
- 从 [Releases] 下载并解压 ddns-go
6 i: q" j6 i. q* u- 安装服务1 l! n6 X7 x$ E7 c
  - Mac/Linux: `sudo ./ddns-go -s install`
, s, a( N  f( f# {5 O5 ^1 P  - Win(以管理员打开cmd): `.\ddns-go.exe -s install`7 [+ Y( L+ j% {: V% C1 N4 f: j: ~
- [可选] 服务卸载  P' R- H; s" K& l# W1 q4 m+ ^
  - Mac/Linux: `sudo ./ddns-go -s uninstall`
7 N( a7 i+ E/ W, Q$ _  - Win(以管理员打开cmd): `.\ddns-go.exe -s uninstall`
3 N2 j7 d2 @4 |! B- [可选] 支持安装带参数
6 Q( u9 B2 I7 ~5 \! K3 V$ w* S  - `-l` 监听地址8 U9 o) S8 D* t, a4 R% \
  - `-f` 同步间隔时间(秒)
) u" c" R  y( I2 p  - `-cacheTimes` 间隔N次与服务商比对
$ ~  X* s* p  Y1 \3 |3 @9 V4 e  - `-c` 自定义配置文件路径  U3 O4 ?$ F4 `( H
  - `-noweb` 不启动web服务
# R9 U  @8 e0 V# H3 K  - `-skipVerify` 跳过证书验证" X* w4 S( w& o8 w
  - `-dns` 自定义 DNS 服务器8 D6 O2 _- t5 x3 w1 ?8 I
- [可选] 参考示例
9 v/ A' m' W0 ?+ H9 u4 o9 q5 q  - 10分钟同步一次, 并指定了配置文件地址
$ V" ]8 ]0 D; {* U4 s. n1 Y    ```bash
* Y2 Q' f$ [4 x4 i    ./ddns-go -s install -f 600 -c /Users/name/.ddns_go_config.yaml
. l& }' E3 B3 [; o( x9 o# u    ```8 N. K- |% e8 J, R! E  G
  - 每 10 秒检查一次本地 IP 变化, 每 30 分钟对比一下 IP 变化, 实现 IP 变化即时触发更新且不会被服务商限流, 如果使用接口获取IP, 需要注意接口限流! Z/ D5 g. @/ }7 e( p! u' ^
    ```bash
2 J4 }, J$ d3 W- E) J; f7 t    ./ddns-go -s install -f 10 -cacheTimes 180# `# M. n4 ^% `* p0 l; |
    ```
# U7 I2 w# {/ h3 ^+ B& [- [可选] 使用 [Homebrew](https://brew.sh) 安装 [ddns-go](https://formulae.brew.sh/formula/ddns-go):( O0 I% G7 x# u: {# v/ c" I
/ [* q2 B& @0 |. s
  ```bash  M% C9 H8 M/ C- o$ j
  brew install ddns-go& y- L8 r3 s+ V
  ```
2 ^, N* n1 i; ]9 S: K
4 b8 w) h7 ?. S0 u## Docker中使用, d7 b2 m" w8 g' U; a( d

7 m0 Z) ~  T  O8 o3 D. L- 挂载主机目录, 使用docker host模式。可把 `/opt/ddns-go` 替换为你主机任意目录, 配置文件为隐藏文件
3 ^/ @# U% D/ l# O2 J
0 ~; {3 e  z2 K& K6 u  ```bash' ^- I3 g1 ^* h0 d0 E! e
  docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go2 E: C# E* o# j" O5 L
  ```
- {* q: ~0 R0 H( j3 S- C# `. F5 Z) y4 a
- 在浏览器中打开`http://主机IP:9876`,并修改你的配置
5 `' ]  ?! ^' \* [7 g
& Z" z& t6 {9 z: v  R' }! f- [可选] 使用 `ghcr.io` 镜像0 E$ |+ A. I; S, i7 q& ?0 x1 F
* _7 X: G; [/ w& s" f
  ```bash
2 O% L, u! T: a# {  docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root ghcr.io/jeessy2/ddns-go- r- n8 I/ T) f) x8 E/ I$ C
  ```8 }+ h( ^& W2 Q# C2 ]" H
+ ]6 |; G: z% h7 ]) S# w* F
- [可选] 支持启动带参数 `-l`监听地址 `-f`间隔时间(秒)" Q, E/ D9 m8 e4 I, g; _9 C3 H

- k( s% W$ C& G5 E1 A4 B5 l7 C/ `  ```bash' l3 m, Q" T- ]2 s: E3 N2 m- z8 w
  docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go -l :9877 -f 600
+ t: o# K) j' v, Z3 H- F" b. E) C) {  ```
2 P) n' T0 |2 l( ~1 J: d' e. ]; ^" C2 i  @; C8 u: ~2 C' W5 g( Q: F# {
- [可选] 不使用docker host模式6 G' C' A+ v* m# p5 `3 B: k

+ L: t7 F0 X/ B5 b5 m  ```bash
$ N% m, A' j- a5 e, d+ t0 U  docker run -d --name ddns-go --restart=always -p 9876:9876 -v /opt/ddns-go:/root jeessy/ddns-go
* a0 H; q+ z/ A. l4 q  ```
& O# G1 x7 I  ]) C$ v" G( L7 w) m  D1 B8 Z$ Y0 w# x6 u
## 使用IPv6, R9 g+ x0 Q/ B' ?1 |1 q, N

9 ?' x0 a- M5 ?: D7 ~- r- 前提:你的电脑或终端能正常获取IPv6,并能正常访问IPv6
) B: x6 O" C! a# D3 A: A- Windows/Mac:推荐 [系统中使用](#系统中使用),Windows/Mac桌面版的docker不支持`--net=host`
' U5 e  k* `. U* E% F6 B- 群晖:- L1 ]5 ]; ^/ C8 g3 w* @8 t
  - 套件中心下载docker并打开
# P7 ~3 N8 L) O+ C  - 注册表中搜索`ddns-go`并下载
1 x3 w1 v7 t8 g' _0 ~  - 映像 -> 选择`jeessy/ddns-go` -> 启动 -> 高级设置 -> 网络中勾选`使用与 Docker Host 相同的网络`,高级设置中勾选`启动自动重新启动`
. m7 S& i: }# T  - 在浏览器中打开`http://群晖IP:9876`,修改你的配置,成功
$ [4 ]2 C( _7 s& n0 O/ x9 ?6 _4 P- Linux的x86或arm架构,推荐使用Docker的`--net=host`模式。参考 [Docker中使用](#Docker中使用)5 R! E5 v% N2 b2 `
- 虚拟机中使用有可能正常获取IPv6,但不能正常访问IPv66 J+ l; S( `9 S; A  W
+ M% [7 C4 G6 e+ c# @- R: z+ w
## Webhook3 m7 P/ |2 ]& ^" R- F) f
5 ]- x+ B, q: P$ o
- 支持webhook, 域名更新成功或不成功时, 会回调填写的URL1 U' g. @' i, d1 R7 g
- 支持的变量
3 x) x* J, N2 g3 K. @" }2 O
" ^0 \# ^9 `4 o2 C3 X  |  变量名   | 说明  |
+ B/ T+ h* Z0 _  |  ----  | ----  |
$ o" [: q3 l% Q  h0 Y  C  | #{ipv4Addr}  | 新的IPv4地址 |# i6 R5 |+ e: q
  | #{ipv4Result}  | IPv4地址更新结果: `未改变` `失败` `成功`|0 S1 y" n) [/ E' D
  | #{ipv4Domains}  | IPv4的域名,多个以`,`分割 |0 x9 \0 K% W  C& g
  | #{ipv6Addr}  | 新的IPv6地址 |9 u- ?2 U5 G) X3 o
  | #{ipv6Result}  | IPv6地址更新结果: `未改变` `失败` `成功`|
  H7 X1 b- e! w; i. ]( J* J  | #{ipv6Domains}  | IPv6的域名,多个以`,`分割 |
. q# _! A2 m7 t8 M
0 R- H8 b) K, V1 W* f3 G! {- 如 RequestBody 为空则为 GET 请求,否则为 POST 请求
: ?7 a7 J% }" u! ?& D% G- <details><summary>Server酱</summary>
& j' s* j+ N; V2 @& D
" e) m/ @+ x) H2 n# t4 ^  ```- l3 d' F+ Q8 r% U0 Q5 ]6 O
  https://sctapi.ftqq.com/[SendKey].send?title=你的公网IP变了&desp=主人IPv4变了#{ipv4Addr},域名更新结果:#{ipv4Result}
; @3 [2 T6 L! N2 j: J  ```/ m" K/ J) E0 p* W5 R
- <details><summary>Bark</summary>) ^% L- Y/ g7 G4 ~+ M( b1 W/ m
4 [) T6 f3 D" ~, \: b& k0 P5 E( y) D
  ```
1 z% J$ e( ?0 r- W  https://api.day.app/[YOUR_KEY]/主人IPv4变了#{ipv4Addr},域名更新结果:#{ipv4Result}" A0 K; ?$ R  V' I6 Q
  ```% q8 Q8 w, [/ A. Z% q
  </details># p0 I; Q2 @2 {: z1 A3 o5 p
- <details><summary>钉钉</summary>
! u" f  l- V: \; J& ?+ ^& }' C2 z( N5 |' T
  - 钉钉电脑端 -> 群设置 -> 智能群助手 -> 添加机器人 -> 自定义1 Y# f0 J) z( n" e
  - 只勾选 `自定义关键词`, 输入的关键字必须包含在RequestBody的content中, 如:`你的公网IP变了`3 p. Z# H4 l5 L
  - URL中输入钉钉给你的 `Webhook地址`
* D/ @* V$ O/ n. u8 }' |( s* J  - RequestBody中输入
6 R7 Q! [1 ]$ v8 J( `! o6 c0 R    ```json
% K( P1 t3 f0 w    {; [8 V' ^- q3 H+ Z  `, T
        "msgtype": "markdown",
* I  u3 z1 F% W! S& D        "markdown": {
' K) w6 F! I& t" ^. D            "title": "你的公网IP变了",
/ l6 R# [& c0 U+ V5 H$ `            "text": "#### 你的公网IP变了 \n - IPv4地址:#{ipv4Addr} \n - 域名更新结果:#{ipv4Result} \n"! v' B" ]. y3 y9 l6 v
        }
1 l# \; [7 g, G1 S/ D' y, }7 G    }
% Z  S; j; _: O2 @: B! \* R    ```
8 ~, P/ g. P+ S# m/ y  </details>* I" E+ G# |2 O- z1 R5 D+ L* L0 R
- <details><summary>飞书</summary>
2 T4 H9 I; s' H" c. X
: ^& F* z* K* ~/ C  - 飞书电脑端 -> 群设置 -> 添加机器人 -> 自定义机器人
% a' E, N& _8 J2 K: e6 Y  - 安全设置只勾选 `自定义关键词`, 输入的关键字必须包含在RequestBody的content中, 如:`你的公网IP变了`* x6 G- V0 w  o2 ~8 [
  - URL中输入飞书给你的 `Webhook地址`
8 c) Q; g+ f8 s: t9 T  - RequestBody中输入/ {/ Y8 l4 w: m( F
    ```json! Q- [9 S9 {. w# _/ n1 @
    {$ a  K  @0 z- `
        "msg_type": "post",: j7 B. w1 z+ _/ E0 O
        "content": {* W5 q: K# M) v" ]; k+ u7 l9 @
            "post": {
: |3 Y6 \+ c" O! y                "zh_cn": {! t8 k+ Y, I) X( k2 E) o* f
                    "title": "你的公网IP变了",+ a$ l; Q% z) h! U9 q
                    "content": [9 }+ f! M0 x( {- H) @
                        [% e6 ?0 Z1 A8 r
                            {
  k7 u; ]2 r6 v% e8 o# v                                "tag": "text",/ L3 P. i" T! K8 G
                                "text": "IPv4地址:#{ipv4Addr}"3 e7 a) Z) R* i3 I# D
                            }: v( l- h; W' j! t' f2 X
                        ],
% ]* Q7 w+ z( U4 n                        [
$ z0 v, [% T6 ]* _0 t                            {
- L8 n3 t; m7 b2 D                                "tag": "text"," m+ Z% K. D/ K, O$ N
                                "text": "域名更新结果:#{ipv4Result}"! O' t( a' G- z( ~
                            }
# d& _/ K6 d+ y7 |& \) v                        ]3 l% a( p# B) }# {
                    ]3 r1 j3 I) ?* V4 k: ?- C
                }
, s1 S( t5 c6 U9 R0 ]8 q            }
$ S+ N% I1 D5 [9 m        }# l0 K& W/ u! n6 N  t$ ?/ C
    }
3 i7 Q; V) _1 ?) Y    ```
% ]  S8 O7 d4 o- V4 {; r  </details>
, X2 I6 S3 f/ ^- <details><summary>Telegram</summary>! l2 E) z) O7 [/ b- C% F7 E  ?& C. V9 C

$ n& n4 L4 U. F; ]  [ddns-telegram-bot]
- F4 Y1 ]4 J/ X  w  </details>& m! H( x* O0 x0 A; N( w
- <details><summary>plusplus 推送加</summary>8 }+ Z# U  Z0 l' J$ K
: V1 U% O4 y* a: u5 S
  - [获取token](https://www.pushplus.plus/push1.html)# g! t2 p7 k& O6 W+ Y: x9 @2 ?
  - URL中输入 `https://www.pushplus.plus/send`0 O" Y" a* \$ `) _4 B& ?5 R9 q
  - RequestBody中输入, Q: l! `8 _$ B  b
    ```json/ a) Q: x# T: S0 {% B" C
    {; y$ w- }" I8 k2 A2 \. N
        "token": "your token",' C4 ~/ S6 d6 S# F
        "title": "你的公网IP变了",8 p7 r0 d  R9 v7 Y8 o$ y
        "content": "你的公网IP变了 \n - IPv4地址:#{ipv4Addr} \n - 域名更新结果:#{ipv4Result} \n"
  K. s, G3 }5 w# ]& D% T    }
4 h$ P/ s2 T& ~- l4 a/ C% j8 Q    ```
; P7 ^1 p& @5 {# K3 t  </details>) ^, O, b9 x: z0 M! O, {9 Y2 g
- <details><summary>Discord</summary>" K4 N2 F$ ]0 {) e

$ `, J% N5 d  d. S# h: d9 z  - Discord任意客户端 -> 伺服器 -> 频道设置 -> 整合 -> 查看Webhook -> 新Webhook -> 复制Webhook网址
$ l8 C7 r1 w5 y" j& r- ]  - URL中输入Discord复制的 `Webhook网址`
. g" O: o" D6 M5 f3 z  - RequestBody中输入
  z0 S% `# I/ w3 H7 J' _    ```json
0 e3 H, H" E# t! R5 Y( O& A. [& U    {
/ P! H& _, U2 V6 j! ]/ `; j        "content": "域名 #{ipv4Domains} 动态解析 #{ipv4Result}.",4 E% Z# z* q% R) z: t: R! F
        "embeds": [6 k* R: I/ C+ E* `( `) C% s- p
            {' ?* i& C  r8 r1 |$ H
                "description": "#{ipv4Domains} 的动态解析 #{ipv4Result}, IP: #{ipv4Addr}",
5 w" ^! q8 n; O6 p; ]& S, Y                "color": 15258703,
. n! b  b* {' t% h3 b6 B+ }                "author": {$ ?7 Q; d& \: }! Y( l
                    "name": "DDNS"
1 ~# o2 q! ?" N5 K8 L9 G1 [9 ^5 C                }," N. \" I4 @7 f2 M" k
                "footer": {  t# e6 ?# E" B( f- I0 G/ W
                    "text": "DDNS #{ipv4Result}"
# L& `4 M6 X9 |- H; @1 i; B. c                }
; g  |3 W' [% |0 ~            }% [- g" A) X& J4 ?
        ]: d$ V0 K8 o  ]0 S. A1 `# r7 d" ]
    }
* S) s: |+ y9 {3 `    ```
/ I; i3 r/ g; ~/ E! G" x, L0 d9 ]  </details>
% P4 i( a" f1 r, m' Q, T' K1 B* B) l3 T" O$ J# S
## Callback2 P" ^3 n* O% Z! I2 ?
  @) Q0 D9 T" _- h
- 通过自定义回调可支持更多的第三方DNS服务商& C3 d8 S% [( L% \& y1 E+ A% |
- 配置的域名有几行, 就会回调几次8 S/ Z; n) Y# @' ]
- 支持的变量
1 P( ]3 Q3 R5 n8 W( v% ~! H5 C% p/ ]$ d6 g1 W' s' c; w4 ^
  |  变量名   | 说明  |
7 k: R7 Y# X% F# t3 @. Q, m  |  ----  | ----  |
* m- A& b2 H2 S* e6 h- M; F0 ]  | #{ip}  | 新的IPv4/IPv6地址 |6 K# S/ ^3 [+ d  p. e% ?
  | #{domain}  | 当前域名 |
: k# \4 }, A  A# ?9 e7 m' C  | #{recordType}  | 记录类型 `A`或`AAAA` |3 P! @5 i8 h, l! P- Y+ [) Q
  | #{ttl}  | TTL |
# h: l. {1 S8 Z3 ~0 ~- 如 RequestBody 为空则为 GET 请求,否则为 POST 请求0 x. C9 g, K7 `' T, |. p6 ~) `/ B
- [Callback配置参考](https://github.com/jeessy2/ddns-go/wiki/Callback配置参考)

ddns-go.exe

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

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

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

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2026-5-6 04:12 PM , Processed in 0.105445 second(s), 26 queries .

Powered by xyh-moon X3.5

© 2001-2025 Discuz! Team.

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