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

ddns-go

[复制链接]

991

主题

92

回帖

5万

积分

管理员

积分
55457
发表于 2024-4-8 08:38:17 | 显示全部楼层 |阅读模式
# ddns-go
: i  Q/ w6 ^, k$ Z, y$ \* q# l
* Y5 f6 \* A$ U% ^8 W4 z' {/ M自动获得你的公网 IPv4 或 IPv6 地址,并解析到对应的域名服务。* [! _: T9 z* Y8 o: C  a- P5 Z

* V* S, s, @" T& J- [特性](#特性)6 o3 B- t0 B+ y" u7 _& y
- [系统中使用](#系统中使用)8 _3 @/ N1 g& ?- V" _
- [Docker中使用](#docker中使用)# [! @* k3 L* I' C7 X
- [使用IPv6](#使用ipv6)
3 _4 ~: m  d) O* y" U4 x4 X, L- [Webhook](#webhook), W) @0 h+ W" g1 ?/ _  [4 z4 ?4 d/ N
- [Callback](#callback)
0 ~) z& y0 B5 A' D7 U5 ?) h& u# B- [界面](#界面)( q' b- a; R6 j5 D9 N  q7 V5 S
- [开发&自行编译](#开发自行编译)
. d; m" K3 Q5 i
' |# \; \6 a' F/ h## 特性
/ Z% F% I- E- G9 t" A0 O0 }
4 |7 c2 T) w! k5 s' f- 支持Mac、Windows、Linux系统,支持ARM、x86架构& S8 c- j0 u4 V# J2 D, y
- 支持的域名服务商 `阿里云` `腾讯云` `Dnspod` `Cloudflare` `华为云` `Callback` `百度云` `Porkbun` `GoDaddy` `Namecheap` `NameSilo` `Dynadot`
- @! j6 u. D- j( c3 r  O7 g- 支持接口/网卡/[命令](https://github.com/jeessy2/ddns-go/wiki/通过命令获取IP参考)获取IP
2 y! E7 w/ k# J3 A* U- 支持以服务的方式运行
4 I, d7 F2 z2 W  Z0 S4 c, i  W- 默认间隔5分钟同步一次
! {# K5 E2 Y, F0 P( k* a- x- 支持同时配置多个DNS服务商
+ \) f. D! |" `3 r" [' E  p1 v! B& ]: y- 支持多个域名同时解析2 w& i9 s3 T& ^; J
- 支持多级域名
- m5 j2 M8 O% x1 _: m- 网页中配置,简单又方便,默认勾选`禁止从公网访问`+ f% z* c, i* g9 I6 J4 m
- 网页中方便快速查看最近50条日志$ K! E9 a2 V: T' Q) X
- 支持Webhook通知
+ o- e: S4 k' p/ A1 I- 支持TTL0 ^& w5 U  D6 K* |# Z2 \
- 支持部分DNS服务商[传递自定义参数]
8 q8 [8 ~& ^) L1 I/ _
5 x+ B+ E) L" o7 [7 Q1 G2 {> [!NOTE]
% o0 G0 r3 j+ D. ?" S> 建议在启用公网访问时,使用 Nginx 等反向代理软件启用 HTTPS 访问,以保证安全性。4 e/ ]8 p( L5 @  e. C: q+ g
## 系统中使用1 @0 `; k- A/ u) g0 l4 T; v
2 D- p* G4 Y+ w! W7 i9 E' Q) E3 R
- 从 [Releases] 下载并解压 ddns-go
  k) z5 b8 J4 x1 M2 `9 q, N- 安装服务& z- u7 q, v# @$ ?
  - Mac/Linux: `sudo ./ddns-go -s install`
% ^) W$ Z  t6 i, L9 g$ I( t  - Win(以管理员打开cmd): `.\ddns-go.exe -s install`( Y# n6 h, B% v  I- @: h$ d
- [可选] 服务卸载) q3 e; L+ N2 |# n; D
  - Mac/Linux: `sudo ./ddns-go -s uninstall`
1 Q, K7 L9 p0 T& d8 e+ V  - Win(以管理员打开cmd): `.\ddns-go.exe -s uninstall`
6 F. ^$ v+ d. a9 ]- [可选] 支持安装带参数
6 S/ M+ z4 w% S# k8 C  - `-l` 监听地址" {7 P- @! S/ s0 D2 ~' T, [$ s( l/ w- t& }
  - `-f` 同步间隔时间(秒)
$ `' @1 s( w; Q5 Y9 k/ h! d& E. Z. r  - `-cacheTimes` 间隔N次与服务商比对8 U" ]! r& o- }2 }2 Z8 z! b
  - `-c` 自定义配置文件路径
$ E0 z- \: g! k7 y; L4 \% u4 o  - `-noweb` 不启动web服务1 Y% f% H/ `) J7 c' f
  - `-skipVerify` 跳过证书验证) d+ B. {+ n! h/ m
  - `-dns` 自定义 DNS 服务器
! u* }8 p7 m* T- [可选] 参考示例  D' S0 i+ E: n: a4 Z
  - 10分钟同步一次, 并指定了配置文件地址
& i- G& l! F4 [    ```bash
' N3 T" M8 v* g9 u    ./ddns-go -s install -f 600 -c /Users/name/.ddns_go_config.yaml4 A$ L; p2 [6 \8 m) G) f5 B
    ```
1 y8 t: {8 \, W. U0 L" q) m; X  - 每 10 秒检查一次本地 IP 变化, 每 30 分钟对比一下 IP 变化, 实现 IP 变化即时触发更新且不会被服务商限流, 如果使用接口获取IP, 需要注意接口限流
0 J& B0 j* Y4 [9 {0 n    ```bash; G) n- u- S' V* y7 u9 I9 `
    ./ddns-go -s install -f 10 -cacheTimes 180
' U; u+ I! P: L+ }9 M- N5 f0 c    ```* e. \$ v0 D. B
- [可选] 使用 [Homebrew](https://brew.sh) 安装 [ddns-go](https://formulae.brew.sh/formula/ddns-go):& ~; [8 e3 q6 |4 A% `
2 J& m) e9 N) v; g% ^/ K. M  W( u
  ```bash
/ p9 S9 ]) T& J8 Y8 ]  brew install ddns-go
3 _. v  B  D& d, S* C  X# j" c* C  ```
3 L& i- ~' H3 A% q- y4 R7 a7 x1 m, c! w! I% v' b3 f
## Docker中使用
3 K2 B' V  u5 q8 O8 L7 u8 r6 C8 [- c
- 挂载主机目录, 使用docker host模式。可把 `/opt/ddns-go` 替换为你主机任意目录, 配置文件为隐藏文件
  n# c3 b. Q5 o* w; y3 Q1 s( u! U: e0 ~4 H
  ```bash5 x! A5 q, Z8 q2 N! ?
  docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go
9 c3 P, Q4 w' D5 i  X+ w' ?6 H  ```- @. v0 t  }/ f' r" E
" Y% s% D6 e! `6 o: H! S0 S
- 在浏览器中打开`http://主机IP:9876`,并修改你的配置$ }0 }3 ^: A: A( w% V6 k- a% E

- ]- K$ j* y1 X. |. p- [可选] 使用 `ghcr.io` 镜像
" P% Q$ _( d3 }. y8 r% e4 ^- C( M- t, v1 l1 Z  z
  ```bash
; ~" }+ Y' u* q+ H# D  docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root ghcr.io/jeessy2/ddns-go
! b& P6 L0 v1 \; m( ]( S  ```
$ L4 p# B, n! J
' {# T! V# k! c! e% e# @4 a- [可选] 支持启动带参数 `-l`监听地址 `-f`间隔时间(秒). j' Y! ^! T. z

, d" P7 m" N1 g# T: |  ```bash4 B, r, N: l* t. G
  docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go -l :9877 -f 6001 u# f- B3 J* q) ~. r9 u; q
  ```
0 A/ z: T* B. x; ]0 \7 ~
1 g1 j3 `* g- D, M! d, }8 N- [可选] 不使用docker host模式: B- K& I" _" v& I# d5 \0 F1 ]0 G  U
7 w! m( f3 A" i7 f0 {* o9 {
  ```bash
/ @3 r4 F  [' u3 m' K' Y  docker run -d --name ddns-go --restart=always -p 9876:9876 -v /opt/ddns-go:/root jeessy/ddns-go3 x0 R1 @. ~! V9 B. q7 B
  ```5 Z5 [/ {6 \" C( ]

0 e! b" r2 ~0 `) j' Y1 K## 使用IPv6
% b4 \0 z2 Y8 ^% b% Z% ]
5 G, C5 s7 X+ U$ e+ ]5 n" v- 前提:你的电脑或终端能正常获取IPv6,并能正常访问IPv68 D# ?- j' }# g+ z  J! V
- Windows/Mac:推荐 [系统中使用](#系统中使用),Windows/Mac桌面版的docker不支持`--net=host`
& Q) k  J# i7 j- 群晖:" A; |% H( p$ X/ B
  - 套件中心下载docker并打开7 p! x- x$ a1 u0 R) I
  - 注册表中搜索`ddns-go`并下载
' N& E* |3 b8 q' S! w  - 映像 -> 选择`jeessy/ddns-go` -> 启动 -> 高级设置 -> 网络中勾选`使用与 Docker Host 相同的网络`,高级设置中勾选`启动自动重新启动`$ d" c, y, h$ n; d9 @
  - 在浏览器中打开`http://群晖IP:9876`,修改你的配置,成功5 b1 ~1 L8 L8 Q4 U" W2 m
- Linux的x86或arm架构,推荐使用Docker的`--net=host`模式。参考 [Docker中使用](#Docker中使用)
* u0 n6 A3 b$ f6 d4 n& s  F" U- 虚拟机中使用有可能正常获取IPv6,但不能正常访问IPv67 o$ a6 i$ A( E* H1 z
  K* N( C/ t$ ^# L: r4 _( ?
## Webhook9 I8 f" g" z1 C; h

0 V% ?. v4 i# ^% V1 U, j9 r- 支持webhook, 域名更新成功或不成功时, 会回调填写的URL5 `- T+ g( k: Z
- 支持的变量  Z, y+ M5 F% ?' A1 x
; e+ y; z. Z- c1 i! k* W: h
  |  变量名   | 说明  |
% E6 f1 E) k) W" _. j  |  ----  | ----  |
+ v' D% O1 S1 _1 Y  | #{ipv4Addr}  | 新的IPv4地址 |
1 f3 J" w# v& b! K! j& A: s  | #{ipv4Result}  | IPv4地址更新结果: `未改变` `失败` `成功`|
0 t! [3 L$ u2 a  | #{ipv4Domains}  | IPv4的域名,多个以`,`分割 |9 {) u$ K( e( L- E
  | #{ipv6Addr}  | 新的IPv6地址 |+ \3 V& V. A) c: F$ T
  | #{ipv6Result}  | IPv6地址更新结果: `未改变` `失败` `成功`|
- \" R4 I8 o' m/ m  j0 V  | #{ipv6Domains}  | IPv6的域名,多个以`,`分割 |
9 M3 M2 K4 D; Q0 Z( D
, M/ m1 k1 _  u8 W4 C! z' Z- 如 RequestBody 为空则为 GET 请求,否则为 POST 请求/ h9 i" Q( u; }' s* f6 }
- <details><summary>Server酱</summary>9 _" e' Y7 t+ W$ h
9 C; U# R& P1 O- W6 l1 V- {
  ```
! Z* @! j" u' G, u' c  https://sctapi.ftqq.com/[SendKey].send?title=你的公网IP变了&desp=主人IPv4变了#{ipv4Addr},域名更新结果:#{ipv4Result}
  {( W5 r3 v* u8 s# n; I' `5 ~  ```4 x/ Y; m1 O3 Z5 V+ k1 U) v. t
- <details><summary>Bark</summary>/ C/ Q7 v4 k% _- t8 ^5 k

7 p! ]/ Y" \. f8 ^( p  ```2 @; u" u3 a. o
  https://api.day.app/[YOUR_KEY]/主人IPv4变了#{ipv4Addr},域名更新结果:#{ipv4Result}  j5 g+ d2 z) x( P4 t" E; @6 v3 d; _6 |
  ```
% G: e4 _8 \+ x4 M  </details>% e/ k5 [5 m! n! c: [7 U6 W$ O/ w/ B
- <details><summary>钉钉</summary>! V5 M  e* w: X4 b4 p' r( K) F2 a
9 ]: [1 a* l1 h  @' Y
  - 钉钉电脑端 -> 群设置 -> 智能群助手 -> 添加机器人 -> 自定义( a: W0 `4 K' }" d: F, j- _. x
  - 只勾选 `自定义关键词`, 输入的关键字必须包含在RequestBody的content中, 如:`你的公网IP变了`4 {( q+ O7 \8 |1 @8 M4 a. g" g
  - URL中输入钉钉给你的 `Webhook地址`4 B7 _8 q& N8 p2 N
  - RequestBody中输入
& `3 N5 {+ x% `6 b- d% a    ```json8 n. P% w& S+ S# J0 Z5 o
    {- N2 y( m* Y' ]7 u. H
        "msgtype": "markdown",
- _7 t6 \1 ^" d5 L$ N8 Z) l        "markdown": {9 e! `0 Y' P  Q2 D! Q4 b. J
            "title": "你的公网IP变了",' |' x4 Y& f* F+ q! Z: T6 e
            "text": "#### 你的公网IP变了 \n - IPv4地址:#{ipv4Addr} \n - 域名更新结果:#{ipv4Result} \n": {& J  G8 s$ S" [
        }; d5 N$ F+ q4 I% w4 l: b' j
    }* s5 p$ f) o4 V7 f
    ```
5 b) l! ^6 b1 ]/ W: g1 R6 @  </details>7 F8 `7 I4 T0 b
- <details><summary>飞书</summary>
: C7 ]- R7 J% M) z! b8 S' F8 U
: B5 T; P: z' S! A0 E8 e  - 飞书电脑端 -> 群设置 -> 添加机器人 -> 自定义机器人
" g+ W" m" z( v% v6 d6 a  - 安全设置只勾选 `自定义关键词`, 输入的关键字必须包含在RequestBody的content中, 如:`你的公网IP变了`
  }' g! y) a% |  - URL中输入飞书给你的 `Webhook地址`5 s  C0 R7 w4 |
  - RequestBody中输入3 D, F) e  L1 f
    ```json3 R4 C4 z* a/ h* H  L, C
    {$ _: e6 [, o. C' J
        "msg_type": "post",
9 i7 p3 r+ ^9 S. Y+ Q6 t5 P( k( ~        "content": {
! q" E/ s' O& X1 A3 {4 _( ]            "post": {( f$ u5 R# _+ F/ ]5 T8 B4 U) i% G* [
                "zh_cn": {
, X8 `/ O5 h* _* m: k9 B" o                    "title": "你的公网IP变了",8 f4 o: E. ?9 ^5 _
                    "content": [
& Y( d& _1 a# z% c  `                        [
/ p% @' q' B- t4 H7 L                            {% a- H+ }7 z1 S( z
                                "tag": "text",4 z7 B3 m4 w# \+ x
                                "text": "IPv4地址:#{ipv4Addr}"
1 w9 m1 i  Z$ C3 f1 \( Z                            }# J; `6 @7 A; o2 t; M& b/ b1 C; {
                        ],
( U/ h; p& u1 ?: B" Y" s% g                        [
( V' g8 @+ K+ @# |/ z1 d                            {* P& g/ U' N* Q0 J. q. ]
                                "tag": "text",
) _5 q% c% i5 c  o$ G$ ^% |5 ^, L( I                                "text": "域名更新结果:#{ipv4Result}"
  _/ H5 E, R; Y/ o: v                            }
3 y* a& l* y0 L7 ?$ `) E4 e* e                        ]
$ Z% D: Y8 I& O5 ?, {5 C# v4 i                    ]
3 A0 s! Y- C; _" }# U' k" k                }
& k5 N- m, S: T2 r) q8 t            }& A( q8 w% J* K8 Y- R
        }9 Q$ F- q6 [/ Y' R
    }  Q, ]& I. Z! K6 C, D  c
    ```
, r% E& }1 ?  S4 @  </details>: N  ^) E. ~# x
- <details><summary>Telegram</summary>) o4 b& I3 n! ]8 {" u
5 i0 m8 i3 K3 ~: |2 O3 W+ Q
  [ddns-telegram-bot]
& Q9 U! o1 N, x9 }  </details>  v! {# m  u8 N5 [1 V/ h
- <details><summary>plusplus 推送加</summary>
; s7 E8 u! g/ \1 ~1 S. J  A$ e% |% o# V5 V; A% A# e# D7 G
  - [获取token](https://www.pushplus.plus/push1.html)
% _) u* j# l/ \1 v9 |  - URL中输入 `https://www.pushplus.plus/send`
8 |; E  N" o5 ~) W: H8 }  - RequestBody中输入
. q5 P+ P/ O4 ~$ I4 B1 B9 [    ```json
5 d& Y+ a( n8 H& ^2 [' B6 P    {
" }" S1 F( x2 M* `5 X$ R        "token": "your token",/ Q3 H$ E2 W& S% s
        "title": "你的公网IP变了",* ]5 w2 ~/ E$ b2 W$ a
        "content": "你的公网IP变了 \n - IPv4地址:#{ipv4Addr} \n - 域名更新结果:#{ipv4Result} \n"+ ^( C- i; X3 j  Q
    }  X* s5 ?9 N( z" E+ w; r
    ```! m9 i, |  h3 R3 y  n4 u6 @
  </details>
" b/ P- N# F( S- <details><summary>Discord</summary>
$ E5 `% I: e$ z  S( O, i. K& |' O8 s2 T
  - Discord任意客户端 -> 伺服器 -> 频道设置 -> 整合 -> 查看Webhook -> 新Webhook -> 复制Webhook网址% j9 @! m" _: V- J/ R4 S; ?
  - URL中输入Discord复制的 `Webhook网址`& _5 u$ l+ }$ C
  - RequestBody中输入" q& E/ Y  U3 s0 q3 {
    ```json$ ~9 B" i+ s" D4 \3 a: ^, X+ ^
    {* {: m! Y  i. o1 `) v& \
        "content": "域名 #{ipv4Domains} 动态解析 #{ipv4Result}."," @) I. D" y( B
        "embeds": [" f- ^  U# w. p, o+ l& C
            {
7 o" H# B( b! L, n                "description": "#{ipv4Domains} 的动态解析 #{ipv4Result}, IP: #{ipv4Addr}",
1 H6 O8 `+ R8 o5 m2 {1 S+ Q. Y) ~                "color": 15258703,+ S  E8 e" a; e" N* \0 _
                "author": {/ E- j% i( _6 a& B5 F% C/ l+ G
                    "name": "DDNS"+ [6 p, b) _! k7 @) |4 S7 r. q
                },' ^! l  |5 r' b0 n
                "footer": {
1 e- l. Y* U+ T7 X) \# o" O                    "text": "DDNS #{ipv4Result}"* s: p) E- m0 M9 s* ?
                }  Q, I; _  P8 K- L8 D
            }
; R/ L3 W; k8 R5 U        ]) r/ ~2 @- O+ a3 E# ~) m4 E7 k
    }
" D! P( L& t# ~& }: P2 O1 l( v    ```
) j. ]1 M3 ]2 K  </details>8 a& ~5 ]& Q. F' v( G8 m' U
4 Y$ U! D- o( X6 |
## Callback
3 c' K2 P' @5 `7 O- N8 o
& D: l2 i2 ~# ~( D  t- 通过自定义回调可支持更多的第三方DNS服务商
8 d; o* E, L. x# F- 配置的域名有几行, 就会回调几次! P0 ~2 ]/ I' H) B- E
- 支持的变量. n# k$ d* |3 L) A6 w, T

# W! b% ?1 ~; l% e+ x  g( i% t  |  变量名   | 说明  |/ }: H% a$ M$ n6 t6 p% S1 |; n0 A
  |  ----  | ----  |
1 q# V& ?+ h# I  Y( @  | #{ip}  | 新的IPv4/IPv6地址 |
/ W6 C6 g; ~& N4 l; ~; A+ ]  | #{domain}  | 当前域名 |
* M6 }7 A% W: z( v. I* e) A4 @" w  | #{recordType}  | 记录类型 `A`或`AAAA` |# I0 F" z; n/ D3 B! d
  | #{ttl}  | TTL |
7 G* O  N3 t4 J- 如 RequestBody 为空则为 GET 请求,否则为 POST 请求6 v; x1 q! \' [4 L/ ^
- [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 05:27 PM , Processed in 0.097834 second(s), 27 queries .

Powered by xyh-moon X3.5

© 2001-2026 Discuz! Team.

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