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

ddns-go

[复制链接]

986

主题

92

回帖

5万

积分

管理员

积分
55255
发表于 2024-4-8 08:38:17 | 显示全部楼层 |阅读模式
# ddns-go: W- O/ Z* ~# E! u% J$ v
3 ~! P7 p% S+ Q; B9 z/ K
自动获得你的公网 IPv4 或 IPv6 地址,并解析到对应的域名服务。% [7 c$ ], J) j4 U

/ y" N, u3 i. t8 d4 {2 t- [特性](#特性)
1 M1 B. b# ]! }' u5 `& J- R- [系统中使用](#系统中使用)/ n! v& {* A. j: k8 ]9 d0 }
- [Docker中使用](#docker中使用)  |/ m/ g: ^) w* ^( ?
- [使用IPv6](#使用ipv6)
9 Q; J1 Y. Q6 ]* L8 U* H  _- [Webhook](#webhook)6 W% {8 k, G/ D' F
- [Callback](#callback)* D9 K/ j4 ^- T( d1 \
- [界面](#界面): V- ^( j. z) |* o$ W0 |
- [开发&自行编译](#开发自行编译)& G; O* i# Y& N+ L' \, F  f

0 s+ b, q" ]( k## 特性& W, x6 W8 d0 ^. E2 ~$ n
/ a9 a; f* a* e% R# R! B4 ^
- 支持Mac、Windows、Linux系统,支持ARM、x86架构+ ?4 ^9 _3 `$ ~. O  w5 T% ?; n7 v
- 支持的域名服务商 `阿里云` `腾讯云` `Dnspod` `Cloudflare` `华为云` `Callback` `百度云` `Porkbun` `GoDaddy` `Namecheap` `NameSilo` `Dynadot`) O- C+ e  _- u/ O# N& ^
- 支持接口/网卡/[命令](https://github.com/jeessy2/ddns-go/wiki/通过命令获取IP参考)获取IP
' G0 j$ ^3 a9 Y. U- 支持以服务的方式运行5 Y" |0 v/ x9 _' F
- 默认间隔5分钟同步一次
5 u. N( w5 R+ \9 j- 支持同时配置多个DNS服务商
( Z9 U1 }. P$ Z$ o- 支持多个域名同时解析
) \* D9 b2 u3 Y$ ]$ n1 [4 a- 支持多级域名' u. v; i. ]! I6 Z0 T. g* r
- 网页中配置,简单又方便,默认勾选`禁止从公网访问`; }6 m5 ^0 ^1 U( d
- 网页中方便快速查看最近50条日志
1 O5 D8 P6 j4 P, d  I- 支持Webhook通知
$ ^' d/ m) }2 \, [& v- 支持TTL
! x( u$ B* q# z' V6 y- 支持部分DNS服务商[传递自定义参数]
/ A6 b% _; G& f' }2 e& D# Z
1 I" s4 F3 b! h# a1 i> [!NOTE]5 K9 [7 V# R& R, w7 _# m* D; p
> 建议在启用公网访问时,使用 Nginx 等反向代理软件启用 HTTPS 访问,以保证安全性。6 [* U! G4 E! w) Y, w5 h* R
## 系统中使用
: o) `! C5 V3 Y7 r$ F% B/ H/ Y- r* n0 o6 Q' w& U
- 从 [Releases] 下载并解压 ddns-go% @( W# T  d& z5 T# x
- 安装服务
2 `9 X$ p) T; J) k7 {  - Mac/Linux: `sudo ./ddns-go -s install`: y4 i; b4 M( B- u3 v
  - Win(以管理员打开cmd): `.\ddns-go.exe -s install`7 F4 r5 O$ O! M1 A% g0 N( [  M
- [可选] 服务卸载
# x9 z" a. s/ R  - Mac/Linux: `sudo ./ddns-go -s uninstall`5 x3 \  F; J" V* R. ^( w
  - Win(以管理员打开cmd): `.\ddns-go.exe -s uninstall`% L$ Q8 y- c# o; Z/ ~
- [可选] 支持安装带参数
* S) u9 E# P5 z6 h  - `-l` 监听地址
" f# ~! M! W4 o, x  - `-f` 同步间隔时间(秒)' N/ |. \% p) a
  - `-cacheTimes` 间隔N次与服务商比对
2 k. P( H; X- m  - `-c` 自定义配置文件路径
7 z; M1 C3 p, r( T  H! @% a: j' J  D  - `-noweb` 不启动web服务9 ~: K" [" F, l; F* j* k9 h  B! Y
  - `-skipVerify` 跳过证书验证
, G/ b% G5 @0 n) a; ^  - `-dns` 自定义 DNS 服务器) O" M; c+ L1 B5 V1 v2 O
- [可选] 参考示例
+ n, E4 ?+ c' {- Y: m  - 10分钟同步一次, 并指定了配置文件地址
, T7 H/ y0 \- g- Z2 k    ```bash
% d! |% t: W: a6 T3 R    ./ddns-go -s install -f 600 -c /Users/name/.ddns_go_config.yaml
1 d3 O+ ]( e/ i& }! b& n    ```: S. n* W% `3 D+ R4 i0 l. J0 e
  - 每 10 秒检查一次本地 IP 变化, 每 30 分钟对比一下 IP 变化, 实现 IP 变化即时触发更新且不会被服务商限流, 如果使用接口获取IP, 需要注意接口限流" t  B8 X. i: x& g" Y9 B+ j
    ```bash6 G  D+ g1 |1 K- S
    ./ddns-go -s install -f 10 -cacheTimes 1801 j. K: I/ P! t7 F8 Y
    ```
1 i' b9 ^2 _$ \: x$ m$ d( j  I- [可选] 使用 [Homebrew](https://brew.sh) 安装 [ddns-go](https://formulae.brew.sh/formula/ddns-go):' d- E6 g* a; m  i9 c

7 }1 M$ v, _3 j% d8 K6 a& H8 ?  ```bash
. b! u* w# U# `" ^, x9 u  brew install ddns-go
: D  r0 l* C( |! [  ```6 O/ S3 r4 |' [$ W7 K8 p! {2 M. T

$ D" y# w2 C% ^! t  T# c1 N## Docker中使用+ S- q9 B. w3 J' [

6 W1 R5 t: M" p3 L  Z* O- 挂载主机目录, 使用docker host模式。可把 `/opt/ddns-go` 替换为你主机任意目录, 配置文件为隐藏文件) [; {' v. H  N" J
. s! l7 k  L5 R9 b8 a
  ```bash1 `& I5 N4 s4 _1 K; O
  docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go* _( d7 p  K6 \
  ```
# w9 T) @! k3 D" ^% W! |8 o
; J7 c1 {/ ^' V7 z6 y+ v6 \9 e. Y- 在浏览器中打开`http://主机IP:9876`,并修改你的配置
8 T1 R- L8 u* A" w  _  D' v& o$ `1 `& [2 f: f! g7 T
- [可选] 使用 `ghcr.io` 镜像
0 {/ n8 _& Z  j) {' ~6 g) H; v5 H% |" E: p- v% p# \" r
  ```bash, A% s5 @, R4 n4 m' Z
  docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root ghcr.io/jeessy2/ddns-go3 M0 E1 i' e# X; f
  ```
% @( z" I6 z) y+ X* a: B7 c  i2 W8 j0 A& j% Q& @1 d2 T3 G
- [可选] 支持启动带参数 `-l`监听地址 `-f`间隔时间(秒)$ {, X& f5 X5 |0 T' q' J7 Q* R

, q3 u8 n  v& a, c: M  ```bash
) c4 Y# o4 b4 ?/ y/ i: h- y' j  docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go -l :9877 -f 600# ^7 X" M8 E; M8 r- A9 A
  ```, e  t4 J3 i1 Y2 E- c) i- K9 S

' Q; {/ j9 y# ?$ ]- [可选] 不使用docker host模式
5 C0 ^3 y5 }, S- v3 @9 _7 w2 l9 |7 C  y
  ```bash  J: a& b4 u  h$ g5 |5 L* U
  docker run -d --name ddns-go --restart=always -p 9876:9876 -v /opt/ddns-go:/root jeessy/ddns-go' b6 x4 i' w' e, `' }" d
  ```
- m/ C4 J  q4 H
) W$ E7 K! l4 y1 k! H## 使用IPv6  [* V# ]# m$ F9 t
* e  T; v- s& x2 Q
- 前提:你的电脑或终端能正常获取IPv6,并能正常访问IPv6' b9 A8 B# F5 R
- Windows/Mac:推荐 [系统中使用](#系统中使用),Windows/Mac桌面版的docker不支持`--net=host`* E. l, _6 l, `7 H' X; b$ T' E
- 群晖:
. j# b" v, H1 X$ g  - 套件中心下载docker并打开
9 I! I4 Z( u: Q6 `$ h  - 注册表中搜索`ddns-go`并下载
( N. o0 u: z& v, a/ X, M  - 映像 -> 选择`jeessy/ddns-go` -> 启动 -> 高级设置 -> 网络中勾选`使用与 Docker Host 相同的网络`,高级设置中勾选`启动自动重新启动`6 ~  q3 j9 p3 w8 P! x& K$ L
  - 在浏览器中打开`http://群晖IP:9876`,修改你的配置,成功
6 d+ P7 E* b+ q: k- Linux的x86或arm架构,推荐使用Docker的`--net=host`模式。参考 [Docker中使用](#Docker中使用)
9 b. ?5 Q7 H! I* \- 虚拟机中使用有可能正常获取IPv6,但不能正常访问IPv6
1 u/ O! e2 a0 u- Y6 r; o/ w
3 n* t) }3 a- T9 @8 |: S  P) K## Webhook, @3 J+ u- U( W0 ~8 }" Y2 ?

: O- a; \1 r: s! q* S- 支持webhook, 域名更新成功或不成功时, 会回调填写的URL: I1 y( r+ }- o  Q9 N# `  W; c
- 支持的变量
7 `+ [; {, S/ _; m; J9 M% ~7 s* {
  |  变量名   | 说明  |
" {; r  M6 y, O7 z4 |7 a' e: k8 u  |  ----  | ----  |
( J5 f# L9 m+ Z) Y3 j  | #{ipv4Addr}  | 新的IPv4地址 |3 |/ j) e9 O+ r
  | #{ipv4Result}  | IPv4地址更新结果: `未改变` `失败` `成功`|
2 c3 u1 S# p& I% a  | #{ipv4Domains}  | IPv4的域名,多个以`,`分割 |
+ Q' y/ a* p4 a: A' [  | #{ipv6Addr}  | 新的IPv6地址 |2 X" e5 i+ q$ q* K% Y1 N0 d9 c( u6 [& g
  | #{ipv6Result}  | IPv6地址更新结果: `未改变` `失败` `成功`|' ^( y) r6 N7 j6 O9 g4 p! ~: ^
  | #{ipv6Domains}  | IPv6的域名,多个以`,`分割 |. L. @4 w2 X/ l& D1 X
2 O% O5 j2 _) W3 Z+ d" m" d
- 如 RequestBody 为空则为 GET 请求,否则为 POST 请求; `: |5 D5 Z; G4 {
- <details><summary>Server酱</summary>) O: M3 {+ J8 p
( Q5 h# t% e$ U# e$ l
  ```
" i& I* z5 a$ Q% `# n2 A7 b' W5 d5 n  https://sctapi.ftqq.com/[SendKey].send?title=你的公网IP变了&desp=主人IPv4变了#{ipv4Addr},域名更新结果:#{ipv4Result}
& G( p2 d+ t% n* C3 k  ```
4 ~. u( Y6 \7 n$ C( R4 p2 }- <details><summary>Bark</summary>
! Z6 N- q3 R; M9 Q* h& u
# o9 `) f7 p9 o1 H' u/ u  ```; U7 t! j$ o$ G8 h  U
  https://api.day.app/[YOUR_KEY]/主人IPv4变了#{ipv4Addr},域名更新结果:#{ipv4Result}
* E( l& R/ Z+ @& f; b' R3 ~  ```
4 N% h$ q  h" J' l6 a& p" B3 W0 j- K0 |  </details>  ]- {# c: \$ _1 P' G
- <details><summary>钉钉</summary>( X% Y7 {2 w" u7 ~- h  A# Z

3 q1 l5 t" A5 @; w! C5 z& f/ k6 j  - 钉钉电脑端 -> 群设置 -> 智能群助手 -> 添加机器人 -> 自定义
: T; G4 Q. q5 G* y& \+ E  - 只勾选 `自定义关键词`, 输入的关键字必须包含在RequestBody的content中, 如:`你的公网IP变了`
# F! ^- l4 D' `9 `  - URL中输入钉钉给你的 `Webhook地址`
' M; v4 D1 f- `  - RequestBody中输入
# }/ ?: G) c; i    ```json# d, v! {7 C% x# i/ ]! N" w
    {
9 F# u/ V2 @# s* f/ O0 [" s        "msgtype": "markdown",
* i% {6 d2 K  S3 g5 y, E        "markdown": {
. T" X1 V! N+ ]9 |6 h- s            "title": "你的公网IP变了",
0 V0 j) ]! j% S) H1 L; d3 e            "text": "#### 你的公网IP变了 \n - IPv4地址:#{ipv4Addr} \n - 域名更新结果:#{ipv4Result} \n"
# I0 c9 Q, V1 @, v        }
& d- Q& U7 N9 I4 i! i    }
- H) x$ w; [2 v    ```! X+ o8 h& D3 f! X
  </details>+ A3 Z% C5 J. f, g! l
- <details><summary>飞书</summary>
$ M0 L% D$ U$ L0 M4 f/ I" Q0 i8 y) J% b5 _" R
  - 飞书电脑端 -> 群设置 -> 添加机器人 -> 自定义机器人/ O; N( F% C, e! \& p* ^; n
  - 安全设置只勾选 `自定义关键词`, 输入的关键字必须包含在RequestBody的content中, 如:`你的公网IP变了`
8 {1 g3 z! T2 J/ t, `  - URL中输入飞书给你的 `Webhook地址`8 e% e0 f8 U1 I: L0 h6 y' u
  - RequestBody中输入9 y7 [5 P. b4 w: w
    ```json
; S7 m4 F+ n+ j# z    {! [8 m3 f( p+ n: @/ F
        "msg_type": "post",. k) N3 g" `% a( h( e1 U( ~1 B
        "content": {$ N& N" \9 [# K( m7 P
            "post": {
) C8 t* S( p( r7 ?                "zh_cn": {' o; P) i* B/ W1 s2 v: @3 D  X9 c
                    "title": "你的公网IP变了",/ W4 }+ Q# ?+ V* |1 @
                    "content": [! n) _0 ~6 @% E2 b  a- e. ^2 m" L
                        [1 ]- X) p8 v6 _9 D# B0 ]# ^2 U
                            {+ w/ p9 v  H9 H  J  J: V* e
                                "tag": "text",6 Z9 }5 C8 g) O7 }0 R9 h
                                "text": "IPv4地址:#{ipv4Addr}"# f; P- `$ [" A( Z9 N8 Z
                            }
6 k& U- V  u( ]- @" Z6 y* I                        ],* b0 L9 B8 k/ O- _! V) o* G
                        [# C7 T* P' Y: k  I1 Q
                            {
+ K6 T! {9 j# K/ _- O) o, `                                "tag": "text",
: t3 y5 ?8 L! {1 G                                "text": "域名更新结果:#{ipv4Result}". P, w9 ^8 ?) J7 g
                            }: h! x% B4 |0 b6 y4 ^
                        ]5 f" m9 n# P9 U( y$ @% N
                    ]8 {' P7 H. e, j# w7 I8 D! l
                }
+ v( x3 c9 w( N* T4 Y  }/ c            }: T( g. Z& v% S
        }& q( ]. n5 o' A  t
    }: _% X, p1 Z, o
    ```0 Z" K3 Y2 g+ h& \( k/ Y! m% w
  </details>
' e2 R; m  L+ Q- <details><summary>Telegram</summary>
  ?& V9 e  ]) \6 J( D
7 q+ I+ ]' w, L* t  [ddns-telegram-bot]
; U. [# N) G$ C% K% I* z  </details>
- V0 J" F2 \  `, k# [( j9 E) v- <details><summary>plusplus 推送加</summary>6 X+ {$ B# Q) V8 j" \

: {; E8 A& [1 A5 R: z  - [获取token](https://www.pushplus.plus/push1.html)
$ M* \3 B# b. d" q1 l) K- e. v2 C1 i  - URL中输入 `https://www.pushplus.plus/send`
1 r2 K' ]) K' _, ~6 _6 l0 Z  - RequestBody中输入
3 m, K" O$ B, X1 `1 _    ```json0 Z! O# w3 r: l; p( S( k
    {/ [4 O9 o. M3 M% M; H* p4 A
        "token": "your token",
: L/ ?3 K2 Z6 e1 e3 s        "title": "你的公网IP变了",
: P6 F( G) _  r4 m( U: Y2 N        "content": "你的公网IP变了 \n - IPv4地址:#{ipv4Addr} \n - 域名更新结果:#{ipv4Result} \n"
+ L4 ^3 k6 k) U1 n7 e( Z2 `" z* G    }
6 o# z' w8 m; y8 Z    ```" f" h! S! u" G* R3 Y7 a- x
  </details>
$ l) F0 T( w2 O/ b7 s6 C- <details><summary>Discord</summary>/ r, {! s2 z* C! r  n

- o8 B9 T' B+ w+ g% k. t8 p  x5 B  - Discord任意客户端 -> 伺服器 -> 频道设置 -> 整合 -> 查看Webhook -> 新Webhook -> 复制Webhook网址; A9 k$ \! Z( j5 h. L, W; ~
  - URL中输入Discord复制的 `Webhook网址`
6 B9 {$ y" I6 C" s  - RequestBody中输入9 {3 R1 v! V/ h+ X5 v' C
    ```json0 A2 P8 ?) F9 L% l3 M4 P& u, \
    {4 h* ]6 [1 e  h# g
        "content": "域名 #{ipv4Domains} 动态解析 #{ipv4Result}.",! J" p4 Y; z9 I# ^4 f) I3 W
        "embeds": [
0 N+ C9 i. [9 u$ ^3 E            {2 j0 V5 n! X9 _( d, E7 C* ?
                "description": "#{ipv4Domains} 的动态解析 #{ipv4Result}, IP: #{ipv4Addr}",
% [- E& F$ a4 ^5 B! W' h7 }                "color": 15258703,3 x4 m/ L- `  y5 T4 _! |8 c
                "author": {. E! X+ V: r+ [$ p9 A: W
                    "name": "DDNS"
0 [7 I$ p" I* {5 R' E9 _                },! _7 r) c3 |$ Z3 @' i6 N
                "footer": {: j- }! p: e0 E( x* H% I/ R, K
                    "text": "DDNS #{ipv4Result}"
* [! z( e' b5 b9 W  r: S9 F  o                }
2 e; p8 t7 A* _" R, }* ~            }
/ N$ J7 N6 E7 r- @* k4 _        ]! o' @1 y& T, [4 v/ F- S; R
    }
4 @+ G5 y5 k4 ?: J9 E    ```
( w/ B1 j: \+ d  </details>: L0 ]% ?; a" }: E! E* x+ U8 m( N) t

2 E. Z+ A/ b0 E+ Z$ I4 ?. z## Callback6 Z" M. p4 N& {& X% o& n4 v9 f

2 M6 w( A  D% a" }- 通过自定义回调可支持更多的第三方DNS服务商$ y7 B, }7 I* o, s! p: X
- 配置的域名有几行, 就会回调几次0 a% ?/ R. G$ \4 V5 b
- 支持的变量0 P" h2 _' A" i

) _3 z7 s. u0 p+ c1 z) U8 v  |  变量名   | 说明  |" P7 |0 V( ?: O7 M
  |  ----  | ----  |& g8 [  d- C' H& k) J8 q3 M- ]- D- A
  | #{ip}  | 新的IPv4/IPv6地址 |: x, O9 C( r2 H) ~- Q# j: [- H
  | #{domain}  | 当前域名 |
  a9 P0 @- [2 q1 ]6 w3 f  | #{recordType}  | 记录类型 `A`或`AAAA` |
/ f  j6 H! f0 D* U+ _  | #{ttl}  | TTL |9 T/ C2 Q- T3 p6 T$ d6 |/ d
- 如 RequestBody 为空则为 GET 请求,否则为 POST 请求+ x1 g9 i: H; V( q8 F( J0 Q4 w
- [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:25 AM , Processed in 0.116630 second(s), 27 queries .

Powered by xyh-moon X3.5

© 2001-2025 Discuz! Team.

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