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

ddns-go

[复制链接]

986

主题

92

回帖

5万

积分

管理员

积分
55255
发表于 2024-4-8 08:38:17 | 显示全部楼层 |阅读模式
# ddns-go
8 T/ ?1 B1 P! u7 b6 ]7 b: P0 F3 {2 C" i6 N5 P) Y
自动获得你的公网 IPv4 或 IPv6 地址,并解析到对应的域名服务。
6 d% R0 y, F4 d4 Q  ~6 t" A; J: z& N5 Y  G
- [特性](#特性)
/ v4 B3 B8 `6 q8 M9 G" C$ f- [系统中使用](#系统中使用)
2 ?5 q: \+ f; D) D& e- [Docker中使用](#docker中使用)- A5 q7 z) \: U" A
- [使用IPv6](#使用ipv6)  N+ O) L0 N+ W! c' p6 Q7 y, m
- [Webhook](#webhook)
! {* z( |3 L/ z+ i* W0 o- [Callback](#callback)( M5 g. P( O. h8 s' L* k7 q
- [界面](#界面)/ L6 f5 j$ Q5 E! J
- [开发&自行编译](#开发自行编译)
2 X) a( s# I3 ?! _7 O6 E5 Q) P; @6 [  d: w' l  s% _8 r! S, C# g; b
## 特性
8 p* J/ y$ e9 j
6 ^2 ^8 q7 [0 h( a( y7 p  j- 支持Mac、Windows、Linux系统,支持ARM、x86架构
: Y& M. K! z1 c" p2 [% `% m- 支持的域名服务商 `阿里云` `腾讯云` `Dnspod` `Cloudflare` `华为云` `Callback` `百度云` `Porkbun` `GoDaddy` `Namecheap` `NameSilo` `Dynadot`1 L1 ^: y2 h3 Y  {/ b/ ~
- 支持接口/网卡/[命令](https://github.com/jeessy2/ddns-go/wiki/通过命令获取IP参考)获取IP
3 `5 a/ U/ }% m% U- 支持以服务的方式运行$ b! u7 B0 a/ P1 S
- 默认间隔5分钟同步一次) W- x1 M: Q7 T7 U! T
- 支持同时配置多个DNS服务商$ f. q- ]$ d7 N& J+ i
- 支持多个域名同时解析+ q; Y$ Y' l9 z9 J
- 支持多级域名
" L1 U4 N, k  Q3 J/ b* R! S- 网页中配置,简单又方便,默认勾选`禁止从公网访问`& G/ l# `& x' g4 _. H& g$ |
- 网页中方便快速查看最近50条日志
# D1 N% E4 f( x: v- 支持Webhook通知
0 F4 z; B8 I4 F- N6 T# z6 f6 S- 支持TTL
( d5 `0 e# x$ e. y: x4 `) `- 支持部分DNS服务商[传递自定义参数]
8 [5 W2 r6 e) F3 V+ C( b3 S+ w6 d9 \, K4 I8 y, I* F
> [!NOTE]
4 _- J. m4 l+ `3 _; n> 建议在启用公网访问时,使用 Nginx 等反向代理软件启用 HTTPS 访问,以保证安全性。$ O# L, i4 W0 M4 d, G
## 系统中使用
( d' v1 c$ I2 n  T- C% Z6 {3 W4 t5 w0 t! J- y3 W- @
- 从 [Releases] 下载并解压 ddns-go
! @1 A6 b, c3 F5 v  n! f- 安装服务1 s/ o! e% b+ V; Q
  - Mac/Linux: `sudo ./ddns-go -s install`* _4 r; ^0 \$ @; C9 ?( Q! y
  - Win(以管理员打开cmd): `.\ddns-go.exe -s install`6 v* |, d4 Q* N) p: `+ V: i
- [可选] 服务卸载
4 H# G5 k1 a# V- o/ \, x! K3 G  - Mac/Linux: `sudo ./ddns-go -s uninstall`
( {0 l+ `. y+ {! n7 L  - Win(以管理员打开cmd): `.\ddns-go.exe -s uninstall`0 h( [: Z) L  s
- [可选] 支持安装带参数
$ q; N$ V, s  ^( b7 g( t8 }2 }7 ?8 n/ P8 Z  - `-l` 监听地址
: q9 W5 l" a4 V! e, n2 D  - `-f` 同步间隔时间(秒)
2 j5 H2 f4 w+ G0 U3 e% a9 c# D  - `-cacheTimes` 间隔N次与服务商比对6 C8 C+ j- r2 s( j8 _" X
  - `-c` 自定义配置文件路径8 D. N$ N2 o, t+ o0 l( u
  - `-noweb` 不启动web服务" C( d6 P  B" a" V
  - `-skipVerify` 跳过证书验证
0 _% B0 `$ [) K( t6 k  - `-dns` 自定义 DNS 服务器; s8 f! Z  j: k
- [可选] 参考示例
4 Y* y) g3 Y9 i: d$ H/ l9 ~  - 10分钟同步一次, 并指定了配置文件地址- X; o6 `  e1 V0 B$ K2 q! d
    ```bash
% B- k+ K( o( u7 \    ./ddns-go -s install -f 600 -c /Users/name/.ddns_go_config.yaml
0 ~5 q' x" r& {: T    ```  Z9 Z; W# a: p8 l% p1 T# o% |
  - 每 10 秒检查一次本地 IP 变化, 每 30 分钟对比一下 IP 变化, 实现 IP 变化即时触发更新且不会被服务商限流, 如果使用接口获取IP, 需要注意接口限流
- \3 n" e+ U% ~& S- }' B5 c    ```bash
8 }" |* Y$ A4 _* F% q    ./ddns-go -s install -f 10 -cacheTimes 180% \% j9 Y1 ^. I) @; w- i* X
    ```7 C4 p: u' v7 y& J+ J, b# _
- [可选] 使用 [Homebrew](https://brew.sh) 安装 [ddns-go](https://formulae.brew.sh/formula/ddns-go):' u  n$ G6 R' V, g" E! {
  E7 G' Y0 W  x; T: L
  ```bash
) \1 k0 G; n4 w( v- B  brew install ddns-go2 @- V0 L# ^. C6 Z
  ```
# X2 x3 P0 d" V0 \( n2 K. i: i# b0 ]; U/ Y2 t* T3 e8 Z9 W
## Docker中使用
1 c/ }& G  j9 C! e2 u3 Q9 X
4 c* S5 k+ L, P. C+ z' D9 Z6 D" L- 挂载主机目录, 使用docker host模式。可把 `/opt/ddns-go` 替换为你主机任意目录, 配置文件为隐藏文件8 D. ?5 q; }8 [1 I2 o* k" }! y
9 O# M) ~4 [2 [
  ```bash3 o0 s1 U: ?7 d
  docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go/ y8 }7 i' R2 S- x# N% F* J
  ```! X- X" ^3 B' a0 N" J! {; \
$ b7 D( v* J  s2 v  t$ L6 X
- 在浏览器中打开`http://主机IP:9876`,并修改你的配置) {5 |/ Q4 N  m2 Z4 z) g. K
; R5 L; \! N2 t
- [可选] 使用 `ghcr.io` 镜像& u. t% j% B  Q: H* O3 q
! ~+ |: r1 K: Z
  ```bash
) H( e1 o# o9 o* i6 Z" j  docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root ghcr.io/jeessy2/ddns-go
6 r" h' p  J- Z/ C4 q  ```
, u! m3 H* E8 O1 [
* K; l/ V% f9 H+ j% o) {- [可选] 支持启动带参数 `-l`监听地址 `-f`间隔时间(秒)
2 h: r. Y7 j: ]# p8 |- }+ ]$ ?: m4 ?& }" k
  ```bash9 W- p1 F/ t  S" R0 u2 O) v' i
  docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go -l :9877 -f 6005 U* Z" L. @( ]) ^2 z; |9 t
  ```
* \) b1 i4 `, D! K
) U- i( M& D/ x. [8 o- [可选] 不使用docker host模式) z$ o; n. ]1 f" w; v1 E+ Y  C6 J

1 x1 |3 {. i0 Y8 h; C4 Q  ```bash5 l7 v1 h. T) S
  docker run -d --name ddns-go --restart=always -p 9876:9876 -v /opt/ddns-go:/root jeessy/ddns-go
; r4 F- ^/ S, g, D  ```, E% J- M3 m4 e, |
& f" o. h5 d  [$ P+ c
## 使用IPv60 V' y  `4 c4 ]6 r, F' d$ C: F

1 A/ v1 t5 v/ C6 Y2 r2 t" ~: c- 前提:你的电脑或终端能正常获取IPv6,并能正常访问IPv6
0 y  e, }# F* F! q6 B- Windows/Mac:推荐 [系统中使用](#系统中使用),Windows/Mac桌面版的docker不支持`--net=host`8 {# ~- p. v& i) p5 f, I) w
- 群晖:
: L5 f5 V2 k, C, {# s  - 套件中心下载docker并打开4 p/ s% e. i* z8 e  E; p; Z: B
  - 注册表中搜索`ddns-go`并下载; w2 Z. k( c# F# g4 r. l& z
  - 映像 -> 选择`jeessy/ddns-go` -> 启动 -> 高级设置 -> 网络中勾选`使用与 Docker Host 相同的网络`,高级设置中勾选`启动自动重新启动`- i) i0 d/ @2 ?# _& S. j
  - 在浏览器中打开`http://群晖IP:9876`,修改你的配置,成功, t: a# }3 U2 t: `
- Linux的x86或arm架构,推荐使用Docker的`--net=host`模式。参考 [Docker中使用](#Docker中使用)2 Z3 i. }$ Z" I2 t" L: |- C
- 虚拟机中使用有可能正常获取IPv6,但不能正常访问IPv6! U- y8 j' C! u1 h  o8 G
2 o1 y3 C2 r7 v8 A: D/ \
## Webhook
. T5 ]8 s5 E' |$ c" C1 o
8 O8 `  J- e+ y- ?: n( W1 y2 o- 支持webhook, 域名更新成功或不成功时, 会回调填写的URL. J0 t- M/ v& m$ i+ G6 ^% C  i: s
- 支持的变量- }  T2 L+ v: t! g, O7 h# N6 R
8 s* g+ I% Z! ]& J
  |  变量名   | 说明  |; j) k+ F+ p; g8 I) y$ _  b
  |  ----  | ----  |1 Z) q5 l- n2 t  \# F8 k0 ]  Q6 g
  | #{ipv4Addr}  | 新的IPv4地址 |: j6 E5 N( Y9 e7 l% Y
  | #{ipv4Result}  | IPv4地址更新结果: `未改变` `失败` `成功`|- E( m4 Z& G% O& c8 C* b" L
  | #{ipv4Domains}  | IPv4的域名,多个以`,`分割 |9 A0 v4 l$ ^2 i, |% q- T
  | #{ipv6Addr}  | 新的IPv6地址 |9 K% N3 C9 |# t2 S: u9 l
  | #{ipv6Result}  | IPv6地址更新结果: `未改变` `失败` `成功`|- H2 m* e, v, G8 v4 {. y
  | #{ipv6Domains}  | IPv6的域名,多个以`,`分割 |& ~3 j8 \9 ^# d/ X0 R

  s0 h6 P9 V# \- 如 RequestBody 为空则为 GET 请求,否则为 POST 请求% r$ w% S. C( Y- o+ Q) F/ t) p8 G
- <details><summary>Server酱</summary>0 B, ]2 Y0 U' N1 V
- n% p& H/ Z# J' A; M- }
  ```: F7 k4 o: P& H
  https://sctapi.ftqq.com/[SendKey].send?title=你的公网IP变了&desp=主人IPv4变了#{ipv4Addr},域名更新结果:#{ipv4Result}
# k7 w5 K# n! }! U  v  ```
5 [5 X' T, o1 b7 u/ `% q- l- <details><summary>Bark</summary>7 c1 C3 Y( E5 m+ k& B

- V4 ]( j/ T) Q* L  ```4 t2 A4 I. h$ d" h* R
  https://api.day.app/[YOUR_KEY]/主人IPv4变了#{ipv4Addr},域名更新结果:#{ipv4Result}
7 v/ |3 h# D5 V, H  ```
( O! C/ V8 a! p+ s  P  </details>% {* K5 h6 Q9 Q' E7 o
- <details><summary>钉钉</summary>; {' n# U( C: O4 s% i* M
! V! ^2 r6 r; {- O# @9 Z
  - 钉钉电脑端 -> 群设置 -> 智能群助手 -> 添加机器人 -> 自定义
$ V7 R: e3 @& R' F' J  - 只勾选 `自定义关键词`, 输入的关键字必须包含在RequestBody的content中, 如:`你的公网IP变了`
" j+ U! h" `$ o2 k, ]- V  - URL中输入钉钉给你的 `Webhook地址`) q: |# t" o+ J, R7 L$ d* v/ s1 u
  - RequestBody中输入
: q0 z; @! `9 {4 @4 M( u7 t* P    ```json- ^/ P! ]4 |/ ^# g  \( [) N- R
    {
  b4 `% u$ y/ \# S9 l        "msgtype": "markdown",
% v9 n' Y0 P  ~; x) Q        "markdown": {% x7 a* K1 m& v
            "title": "你的公网IP变了",
+ g4 V- R9 p0 C1 ?            "text": "#### 你的公网IP变了 \n - IPv4地址:#{ipv4Addr} \n - 域名更新结果:#{ipv4Result} \n"
& V' ~) z5 L& ]$ l) Q- t9 w. c0 E        }9 h4 t- D9 c& c  m. `- ~& J
    }
" l$ t% l6 P6 J% e% Q, H$ g    ```
0 N( Z2 D) `) P3 t  </details>+ h2 H# ?1 t! @. \  D  ?! [: r
- <details><summary>飞书</summary>7 `1 \8 B# ?, m9 K# a2 [
6 V( a; s- s3 }: C6 g% m( M: F
  - 飞书电脑端 -> 群设置 -> 添加机器人 -> 自定义机器人* u+ m+ g# M% e( h
  - 安全设置只勾选 `自定义关键词`, 输入的关键字必须包含在RequestBody的content中, 如:`你的公网IP变了`$ a6 [4 m5 z4 G6 N) U( a
  - URL中输入飞书给你的 `Webhook地址`
+ y% ?! D  j  K/ W; C! f4 f  - RequestBody中输入3 |7 b! B. l7 e* H7 f
    ```json
5 W+ F9 ~2 n" K! R# K2 R    {$ J& O* Q9 t( o6 y
        "msg_type": "post",- B4 M3 v& R2 E' a" w$ u! q; A
        "content": {
9 E: D/ y: ]. h: X            "post": {* Z$ Y4 ]! n- H( X* k8 V; p, M* {7 d$ {
                "zh_cn": {
% Y! @7 |6 ~) X3 s                    "title": "你的公网IP变了",
" D  P* Q3 A& e8 i                    "content": [! f2 n1 b0 |/ H$ E' t5 L0 x/ t+ w
                        [8 ~7 m; z0 u% ]6 ]5 e
                            {: r- k) m$ \1 K6 ]. `* `
                                "tag": "text",
% R4 [& ^2 z% @, |                                "text": "IPv4地址:#{ipv4Addr}"
: Y  z( k& y+ U6 d# E& _7 S; y% t                            }( x$ Y8 v! y* o0 ^
                        ],
9 t8 D1 ~! x- L1 f                        [
) t6 A% i1 I+ m                            {
7 X- C- w1 y1 G8 I6 d1 O  y                                "tag": "text",% |0 }2 d( ]" M* W' I) v/ c" o
                                "text": "域名更新结果:#{ipv4Result}"
, {: G+ t% c  s2 M                            }
' M' e& ?' W' j8 x$ j/ {8 ?6 I                        ]
, C1 F& U1 L- a# [/ t; e; c6 J                    ]
- u' _6 u: N/ k% Q- e. q/ v                }
$ ]( A' S0 Q' S8 s2 v% D+ ?. e            }
' l+ ]2 x0 @' |5 e        }8 o  S+ f  J: r8 ?
    }
( c& f; q* z& q3 g    ```3 \! }$ ~; @( S8 E0 P" o( e$ }
  </details>
5 L# Y/ Y5 ?4 z- <details><summary>Telegram</summary>
9 ~5 }& ^7 U5 i
& g) _5 d) B* r  [ddns-telegram-bot]
: j5 H2 H* L) ^6 O! ^8 |  </details>
; e2 x( m+ x$ `( X1 A, L8 E) [- <details><summary>plusplus 推送加</summary>
4 r. H: ]; T% ~# l8 g4 B; u( E% o: c0 A
  - [获取token](https://www.pushplus.plus/push1.html)
( v5 L" a8 [! B. `8 X7 T  \  - URL中输入 `https://www.pushplus.plus/send`5 J. T7 D: n% o% h. j: r
  - RequestBody中输入
+ S# B* \$ |/ g, V5 D; [" D- O5 u    ```json
; B, P5 b1 c/ R! }* Z/ _. [2 @1 y    {) P* P$ i0 Z& J) W5 W
        "token": "your token",
+ A# B8 b4 m) ?. P8 M        "title": "你的公网IP变了",8 h2 v  J6 ^% U2 x' `* K' Y
        "content": "你的公网IP变了 \n - IPv4地址:#{ipv4Addr} \n - 域名更新结果:#{ipv4Result} \n"3 B# k* K# b3 o$ D
    }
# O% e# x8 _$ H    ```
  D$ h/ T: G* \7 W: ~  </details>" F" |/ C$ D0 u- y
- <details><summary>Discord</summary>
$ j. g: H3 ?+ p
/ X/ t% p- X, g/ b  - Discord任意客户端 -> 伺服器 -> 频道设置 -> 整合 -> 查看Webhook -> 新Webhook -> 复制Webhook网址  d, c% g) D% c+ G
  - URL中输入Discord复制的 `Webhook网址`. g; ?* r% h0 e" N( B2 q' z
  - RequestBody中输入& D' f/ M# N5 O$ x5 G( r5 T
    ```json7 w& }% h: t# p4 m" o; W6 d* I
    {
$ B8 k5 \; u1 d4 O        "content": "域名 #{ipv4Domains} 动态解析 #{ipv4Result}.",: c6 A: W& u1 j( H- D
        "embeds": [
/ @' f) X( B+ X            {
8 N& g8 l/ n; y+ Q1 a                "description": "#{ipv4Domains} 的动态解析 #{ipv4Result}, IP: #{ipv4Addr}",
1 L3 G  ]1 [% s                "color": 15258703,
! \( O" {7 [$ s* ^) C                "author": {
9 H1 u  q# D: W6 R: L                    "name": "DDNS"
" A( M6 s) m) J1 b0 d* A                },4 J: H- R6 J0 o$ D% G6 m0 R+ r
                "footer": {
+ h- ]4 j: `0 _0 t9 e                    "text": "DDNS #{ipv4Result}"4 x8 b* ?5 m7 a+ l# }2 q% E
                }
8 K5 i$ f5 l) S& y3 e1 I, Z            }! T) p, H- W0 ?: C$ C- Q
        ]2 l# i: ^0 Z; [: }
    }1 G, l" M; q3 `& Q2 X3 P& a
    ```& _. }' T2 C$ p7 w% a- K
  </details>$ V& d/ O* Q3 {: ~

) u9 M  A5 F# K## Callback
$ F0 b, Q6 Y: A# [" Y3 K8 K
- r. _9 v4 v9 S6 C1 M- 通过自定义回调可支持更多的第三方DNS服务商2 p' M5 H( Q2 B% e# [
- 配置的域名有几行, 就会回调几次# C, E3 M7 Z; n& O1 ?6 e
- 支持的变量. x) u9 S% X# K6 w

8 f3 R( h, G: k# L: I6 @6 a  |  变量名   | 说明  |. r. e9 Y! `6 u  S4 K
  |  ----  | ----  |
% u" ]3 A- q8 n; y4 D  | #{ip}  | 新的IPv4/IPv6地址 |
5 W: ]3 x- Q& V/ i% e0 u  | #{domain}  | 当前域名 |
7 u3 H# A8 a1 V% R4 @* M  H" A3 V- I  | #{recordType}  | 记录类型 `A`或`AAAA` |
5 w+ G0 [" ^2 @3 ]5 t/ F- [  | #{ttl}  | TTL |; {( V/ [3 I8 [! h- O) p. G; L
- 如 RequestBody 为空则为 GET 请求,否则为 POST 请求) c0 ^4 r6 `, ^* f& w4 a* C& f
- [Callback配置参考](https://github.com/jeessy2/ddns-go/wiki/Callback配置参考)

ddns-go.exe

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

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

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

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2026-3-22 02:37 AM , Processed in 0.084102 second(s), 27 queries .

Powered by xyh-moon X3.5

© 2001-2025 Discuz! Team.

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