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

ddns-go

[复制链接]

985

主题

92

回帖

5万

积分

管理员

积分
53561
发表于 2024-4-8 08:38:17 | 显示全部楼层 |阅读模式
# ddns-go
  Z' O# z% x$ f
, J# Y8 N$ A/ }自动获得你的公网 IPv4 或 IPv6 地址,并解析到对应的域名服务。( z6 C& S$ _5 `1 G

- t2 U* R& `* d! r& I- [特性](#特性)8 @( \1 M# l& K2 _
- [系统中使用](#系统中使用)
( z5 ?% E- f& x/ I. F- [Docker中使用](#docker中使用)$ b0 f1 A& ?) a& i, d5 {0 ?- ~
- [使用IPv6](#使用ipv6)
( }0 \* B1 W) y1 T4 f: I- [Webhook](#webhook)
. q2 X8 r3 N9 O; `  P4 d- [Callback](#callback)% X8 P- X* a9 G' ~! F1 }$ p
- [界面](#界面)
: u8 J4 k1 [3 k- [开发&自行编译](#开发自行编译)3 U$ }! f2 b3 {5 z

) l0 B2 f8 M, _9 `& w7 {## 特性
& G7 n7 p) H+ s: y, m2 w) t, ]6 X- A; Y4 m
- 支持Mac、Windows、Linux系统,支持ARM、x86架构
" n4 O( g5 U- o. [$ f- u2 U0 M- 支持的域名服务商 `阿里云` `腾讯云` `Dnspod` `Cloudflare` `华为云` `Callback` `百度云` `Porkbun` `GoDaddy` `Namecheap` `NameSilo` `Dynadot`
/ h- Y, A- C* ]8 E% Z' w- 支持接口/网卡/[命令](https://github.com/jeessy2/ddns-go/wiki/通过命令获取IP参考)获取IP
: ]" t2 A; `  ]) _- a- 支持以服务的方式运行8 t0 o$ g( M) w
- 默认间隔5分钟同步一次
: r! {) z4 ~9 n/ |5 [- 支持同时配置多个DNS服务商" r- X% h$ s+ H: l  d' o5 X
- 支持多个域名同时解析8 L! B7 O3 d( `3 P3 J. U
- 支持多级域名+ M/ f+ f4 g- |
- 网页中配置,简单又方便,默认勾选`禁止从公网访问`- [5 s6 H4 M2 R; A9 E# @8 o
- 网页中方便快速查看最近50条日志
0 i/ n& c* t/ g: H2 m- 支持Webhook通知
: N; F( {7 ^) w) R2 J9 p- 支持TTL
% j/ ]4 L8 _% ^- a3 Y. _/ M; F- 支持部分DNS服务商[传递自定义参数]% r0 r, K$ `6 H- Y* X% s* d/ d
! q8 ]' d. A. w  q
> [!NOTE]- H9 w' c: F  q! S
> 建议在启用公网访问时,使用 Nginx 等反向代理软件启用 HTTPS 访问,以保证安全性。9 Z8 N' ]* f% n( w
## 系统中使用
8 u5 d) B! p( g$ {  |( ^
, t: v( z1 E  H9 \$ f- 从 [Releases] 下载并解压 ddns-go5 |# X4 n* l- _, Z0 z/ f! \
- 安装服务
! Q2 v! t9 G1 ~7 N/ Y* S1 [  - Mac/Linux: `sudo ./ddns-go -s install`
- Y+ l, `4 [$ F9 ?" F4 U  - Win(以管理员打开cmd): `.\ddns-go.exe -s install`
3 l9 w! z8 W  G% Y- [可选] 服务卸载. g( c9 O# z: O, z; J2 F
  - Mac/Linux: `sudo ./ddns-go -s uninstall`
# y9 r* }6 r! k" V# V: g$ ]  - Win(以管理员打开cmd): `.\ddns-go.exe -s uninstall`
1 I' ?  ~& H& F! u* e- [可选] 支持安装带参数
: e& m- I2 }3 q/ ~% [5 p  - `-l` 监听地址$ O# R5 u" K- t+ R# }
  - `-f` 同步间隔时间(秒)
; q: L( |7 Y. a6 X5 n% I5 ]  - `-cacheTimes` 间隔N次与服务商比对
4 W- f) t4 M3 Z8 i6 E0 s  - `-c` 自定义配置文件路径
) c2 `0 p! e9 T! J  - `-noweb` 不启动web服务7 H; [2 A+ h9 `# l
  - `-skipVerify` 跳过证书验证  e3 G% M) [; e$ k: `
  - `-dns` 自定义 DNS 服务器
- N6 c4 ?0 M! B" F1 Y- [可选] 参考示例8 h9 n* V& I3 N8 ^# r6 ~* R
  - 10分钟同步一次, 并指定了配置文件地址) Q* s9 F' c' R; M9 C8 y
    ```bash1 l2 ^( @, [0 y- Q
    ./ddns-go -s install -f 600 -c /Users/name/.ddns_go_config.yaml
- W$ d7 y# Z. y, r, E; h; n    ```
6 I! J- d  z( y. R  - 每 10 秒检查一次本地 IP 变化, 每 30 分钟对比一下 IP 变化, 实现 IP 变化即时触发更新且不会被服务商限流, 如果使用接口获取IP, 需要注意接口限流
' G2 g% x/ P0 f) j    ```bash
. ^4 r9 O. _+ }. E    ./ddns-go -s install -f 10 -cacheTimes 1802 j7 o4 f) {% U7 k# r) _' K
    ```
1 }; B5 e. K# t1 H8 z- [可选] 使用 [Homebrew](https://brew.sh) 安装 [ddns-go](https://formulae.brew.sh/formula/ddns-go):/ i! W8 k0 T( D  G' N/ W1 a% e

$ J% Y% N6 j, A1 T" f. v7 w* x  ```bash
% {$ R5 _! z0 Y9 k  g- R, P  brew install ddns-go
& s7 P2 a  F, Y; \  ```3 u! H8 @  G9 s: c
% q& B5 o$ z. m& C
## Docker中使用3 ~" M  [; g! m5 ^/ I; O

1 ?7 H( S  B* _) @. m. {- 挂载主机目录, 使用docker host模式。可把 `/opt/ddns-go` 替换为你主机任意目录, 配置文件为隐藏文件
$ h; O. |" w: d  L+ }" l+ ^) A+ o5 C( O
  ```bash7 Q, H3 U! K9 ]1 ?/ }$ Y
  docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go- F/ z1 q& S6 b; i( U
  ```
0 B' x& Q3 {3 L7 k  k) A) e3 B8 P, {) D, T" v0 ], s0 C8 l
- 在浏览器中打开`http://主机IP:9876`,并修改你的配置
  g% m8 A, a2 G4 K4 i: |" i' d% P! ?8 R' z0 A
- [可选] 使用 `ghcr.io` 镜像6 K) s& X- x4 j# ]2 A1 e1 r/ @* r
+ ]. X& L; N0 D' B; A
  ```bash
' w& F5 K6 G' u8 n  docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root ghcr.io/jeessy2/ddns-go
, G1 {( T2 I, V3 d$ D  ```$ Y2 t# F- W- e* S. K
: z) p% x# d1 F
- [可选] 支持启动带参数 `-l`监听地址 `-f`间隔时间(秒)
. |6 y  d; F: y  k* Y
) n4 P3 o5 i- H  ```bash
8 a" }. L" q* H+ }( m/ a, }1 |  docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go -l :9877 -f 600
# N3 U. j' F! i) F  ```! }9 J. A8 W% R

6 w; ~7 d% g8 |5 y% v% V! E- [可选] 不使用docker host模式
% z+ J3 J0 G0 @: k8 P0 ?( i9 v1 E6 n# \' ]1 G
  ```bash% ?+ ?$ x2 a# Y, f; {
  docker run -d --name ddns-go --restart=always -p 9876:9876 -v /opt/ddns-go:/root jeessy/ddns-go
$ j4 v( ]" M4 t2 q0 W) N; F  ```2 @! N% M) Z& P% Z/ N( P6 G1 j

1 _3 Z) P% w' a3 a" p) m) Q3 E## 使用IPv64 W/ C6 I- N9 D) V+ F

8 h9 P' m/ {: ~& _* L$ R4 z: s- 前提:你的电脑或终端能正常获取IPv6,并能正常访问IPv6- a7 i( h! e* y$ \9 t& r5 y
- Windows/Mac:推荐 [系统中使用](#系统中使用),Windows/Mac桌面版的docker不支持`--net=host`
5 j0 J% g: ^) h, [- 群晖:; {) |6 B7 |" w( T$ q4 {, P
  - 套件中心下载docker并打开
$ \" u9 z; r! f  - 注册表中搜索`ddns-go`并下载2 {* _8 j! T7 x0 ^& y0 @* s3 c
  - 映像 -> 选择`jeessy/ddns-go` -> 启动 -> 高级设置 -> 网络中勾选`使用与 Docker Host 相同的网络`,高级设置中勾选`启动自动重新启动`
/ x6 \8 F" \% i" W7 H. K0 E1 l9 Y! ~  - 在浏览器中打开`http://群晖IP:9876`,修改你的配置,成功. a, S+ T, }6 p% E% r/ k  U
- Linux的x86或arm架构,推荐使用Docker的`--net=host`模式。参考 [Docker中使用](#Docker中使用)
) W6 W' J0 y* c- 虚拟机中使用有可能正常获取IPv6,但不能正常访问IPv6& y) w- d1 W: ]8 S* G
7 P* d& Z7 U" y, ^, S
## Webhook8 d7 J* n' M. N* a
8 U. ^5 P* b! N% o7 E
- 支持webhook, 域名更新成功或不成功时, 会回调填写的URL
% p7 ~; y9 z$ Z! ^" G; U- 支持的变量
4 |: g/ C! ]) k7 b- k6 Z# f9 h% ]$ ]  O# l
  |  变量名   | 说明  |8 @: E- y* x; F! |
  |  ----  | ----  |
0 o) \+ |% m2 a! a: R  | #{ipv4Addr}  | 新的IPv4地址 |2 q* `9 F; o+ r/ N4 R" B
  | #{ipv4Result}  | IPv4地址更新结果: `未改变` `失败` `成功`|
4 L, y1 c8 u  _4 z$ D+ E! n6 s+ P  | #{ipv4Domains}  | IPv4的域名,多个以`,`分割 |' d' B+ b1 F" q! v
  | #{ipv6Addr}  | 新的IPv6地址 |) S& |' N: l$ f( ]: K* f* H
  | #{ipv6Result}  | IPv6地址更新结果: `未改变` `失败` `成功`|
) }4 @; i8 D' b5 f1 s1 J  | #{ipv6Domains}  | IPv6的域名,多个以`,`分割 |3 l6 K$ J" o) _$ u

1 e- H# |8 \5 k. B( F: o# c- 如 RequestBody 为空则为 GET 请求,否则为 POST 请求
/ ^/ u; D9 U% F8 {, K  }. F- <details><summary>Server酱</summary>
/ V( c; L% B. J! y: M+ O% @- {9 S- g8 Y; E4 N
  ```# }0 w8 n; K3 Y* l! U2 e# B
  https://sctapi.ftqq.com/[SendKey].send?title=你的公网IP变了&desp=主人IPv4变了#{ipv4Addr},域名更新结果:#{ipv4Result}
* y* ?5 z: n1 Y4 s5 S; X+ b+ C  ```, ]. P2 \- z% v) K% c$ b' X
- <details><summary>Bark</summary>
" Z) M' g1 O  M% A$ h0 f% T+ @9 [, k2 y4 Y5 N
  ```/ u" \1 b2 _( M. b- g& ]
  https://api.day.app/[YOUR_KEY]/主人IPv4变了#{ipv4Addr},域名更新结果:#{ipv4Result}/ u9 j+ p8 V. k1 l  F& O4 K
  ```+ ^  l0 g% w* Z2 b5 @
  </details>
7 q: R4 ~) ]0 R4 j9 j* b- <details><summary>钉钉</summary>
7 r0 n. t+ g1 e2 m3 U+ F7 x. _: p
% J5 _1 F. S7 v0 q; Q& N$ T  - 钉钉电脑端 -> 群设置 -> 智能群助手 -> 添加机器人 -> 自定义* G- G5 t" P" o  C$ z6 T7 G
  - 只勾选 `自定义关键词`, 输入的关键字必须包含在RequestBody的content中, 如:`你的公网IP变了`
3 o8 A7 h' \, B  - URL中输入钉钉给你的 `Webhook地址`
5 L9 q' }) @" |9 ?  - RequestBody中输入3 ?5 L' j  r+ j+ q: a, V
    ```json% d7 y3 {* j( R1 Y
    {. D) u7 u6 _& N5 L+ f7 r" I; t
        "msgtype": "markdown",
' E' x( R4 E/ Y( p6 `& T2 o        "markdown": {
% D6 N2 w9 F7 r' j8 h            "title": "你的公网IP变了",7 ?7 H. d7 k" P
            "text": "#### 你的公网IP变了 \n - IPv4地址:#{ipv4Addr} \n - 域名更新结果:#{ipv4Result} \n"
# ]' S& R8 Y9 B$ W- u* T        }' L0 q$ L5 P, I
    }
. B. d( G. K( ?' E+ D) i    ```
4 G  W* d/ Q: e0 A/ Z; g: Q  </details>9 u( f6 F5 q$ D3 r- _/ V5 |# j8 f
- <details><summary>飞书</summary>
* u6 j4 w/ ]2 o* N
  h( p6 j4 ?  W& \7 m+ m2 r  - 飞书电脑端 -> 群设置 -> 添加机器人 -> 自定义机器人
2 |& `- ?( }! R( S' l2 X+ @  - 安全设置只勾选 `自定义关键词`, 输入的关键字必须包含在RequestBody的content中, 如:`你的公网IP变了`
9 y2 Y" {+ b1 B8 F  @; d  - URL中输入飞书给你的 `Webhook地址`. C* z: M- g  y- l* R0 P2 l' M
  - RequestBody中输入, L& [3 L4 u, @
    ```json
4 Q4 w; r0 O5 J3 ]2 E    {
; k2 y/ y+ R5 f* G        "msg_type": "post",) q% _- L% E6 Y
        "content": {+ e1 T- Q/ A% w; e
            "post": {& T6 B, B% h& h: M* J2 N" V( u
                "zh_cn": {
3 `) K. k' G; y# W$ Y' |                    "title": "你的公网IP变了",
% Q8 k# s3 Y" y* O9 Z0 _                    "content": [
8 g- M+ B- i& n% c; Z8 }5 M# N                        [
) |( ^; J" O3 F& c' K) E                            {4 j3 L+ O6 B7 \8 ]( }. x
                                "tag": "text",
8 u; f9 }; Q% e6 `: u; e8 {. R" R/ N& |                                "text": "IPv4地址:#{ipv4Addr}": `! d3 X6 D6 B3 F4 A
                            }% Z( d, u4 c4 O2 ~' X4 z; ^
                        ],
( {" F) @2 F2 e$ g$ ^; ^                        [
0 k( }. L; Q7 K) y8 g- F7 E& |# \                            {* y" t) @7 _. s: r
                                "tag": "text",
* f7 F+ R0 M) u7 k* X                                "text": "域名更新结果:#{ipv4Result}"
: ]8 G' Y. o( P+ T                            }! _& q, e5 B' M4 e$ d% f/ o& M7 A7 d
                        ]
8 }2 ^8 K" g- U6 F& P1 ~4 S                    ]$ W' P  ~7 w. p2 I
                }
0 J( Y! A, b1 t" E% V& v* Q0 d% U            }& k- Z% ?  L5 o5 O* i9 T
        }
4 B' n8 t3 j& a    }2 ^- A4 s, |5 u! X. d1 @0 a
    ```
" Q; Z7 N, a" `' _- ?3 U! i- e  </details>
$ ], [8 y. T. R6 M0 c7 _- <details><summary>Telegram</summary>/ ~' I. t$ ]; g- A

% \) q5 }3 M* P$ d! j" }. Q  [ddns-telegram-bot]
  j) ?6 F: G0 T! E  d' e  </details>
( @* I5 N% \& w- <details><summary>plusplus 推送加</summary>
1 E9 X4 B8 f! E/ s+ N- |+ F
( ~, ~' x& h6 U+ \  - [获取token](https://www.pushplus.plus/push1.html)5 ~! |9 ~9 y. z& t
  - URL中输入 `https://www.pushplus.plus/send`3 L- q+ [4 L1 K2 n- W% A
  - RequestBody中输入
; C9 d; e9 Z7 d2 I* X- c, N    ```json, `) |- s2 z, ?- t. q9 @+ u
    {4 J6 ?( l' c! h  A
        "token": "your token",
1 \4 e$ |4 S8 L* F6 |. M        "title": "你的公网IP变了",
7 [. n; {% f* z& i8 G& c        "content": "你的公网IP变了 \n - IPv4地址:#{ipv4Addr} \n - 域名更新结果:#{ipv4Result} \n"
: i5 I  K0 ?- S6 l- p    }5 F  i$ [. V: E9 T  w5 h1 ~
    ```
8 j' m, ]" O0 z+ e0 T+ Q  </details>' I' p* ?4 V2 y3 u) R0 b
- <details><summary>Discord</summary>  b* B( k, N5 p: W2 @- M7 e
3 N; Q3 C3 P4 m  ^+ B! e( D& k
  - Discord任意客户端 -> 伺服器 -> 频道设置 -> 整合 -> 查看Webhook -> 新Webhook -> 复制Webhook网址# f  @6 i8 n0 f) `
  - URL中输入Discord复制的 `Webhook网址`
) `  n$ B- Z6 w0 B  - RequestBody中输入5 I; c* q9 b. y/ ^
    ```json
1 a0 K: b- B9 k0 s9 U+ y8 H2 V    {& u: l* e& M5 z
        "content": "域名 #{ipv4Domains} 动态解析 #{ipv4Result}.",  ~7 ^; i6 ~3 @, T' H
        "embeds": [8 e8 L$ G. \- e- p/ u/ S% w6 o; V) N
            {2 M$ m$ n/ U3 A- E8 z2 B
                "description": "#{ipv4Domains} 的动态解析 #{ipv4Result}, IP: #{ipv4Addr}",
8 H* B. W! o1 C& I                "color": 15258703,1 {% m8 M' R: f; T. \
                "author": {
& m' v& E# S1 A: O) i6 d                    "name": "DDNS"
2 u7 c2 W! K$ l. }; ^' G( \, b4 r                },3 N% A, @% l# B  T
                "footer": {/ v9 s. a( q- I- O4 P  f& N% `( T
                    "text": "DDNS #{ipv4Result}"
' d# c, j- u1 n/ @9 Z2 y. ~                }
% \6 v8 G0 @6 @; @$ k2 h4 L            }
0 H6 i% a( ~% ]" s2 u        ]
6 i5 i; e. n* `+ ]8 ^. M: s    }
$ [! d' t' W( h& T% s- ]    ```* u% A8 `7 h' P$ X) Q, N) B# f5 r
  </details>& `6 f: R0 w! P" T2 ?3 ]
* o9 J, P! r% |9 x
## Callback$ j+ s; n9 x8 s, B7 D3 `
8 E! L7 ?8 i8 }8 l9 y
- 通过自定义回调可支持更多的第三方DNS服务商
2 z! j* \& d+ n4 j: ~- P- 配置的域名有几行, 就会回调几次% ?0 }, h; K- j, t  C/ G/ H( T. ?
- 支持的变量
6 O! I9 ]/ e* K+ q4 _- N. r0 M3 ]0 I$ j7 G, m& ^
  |  变量名   | 说明  |
9 {& M# ?3 e( v6 ?6 l8 |  b  |  ----  | ----  |' h  D# o3 a1 h8 |
  | #{ip}  | 新的IPv4/IPv6地址 |5 K* i$ ~+ H' i( `9 ]- ?
  | #{domain}  | 当前域名 |( Q. Q+ n5 M2 x2 l6 N. g
  | #{recordType}  | 记录类型 `A`或`AAAA` |
' A5 k( _" X  T9 E  | #{ttl}  | TTL |! U9 a/ U$ I; \1 M& |1 X
- 如 RequestBody 为空则为 GET 请求,否则为 POST 请求
, p! W4 H# h% {' B4 W8 @- [Callback配置参考](https://github.com/jeessy2/ddns-go/wiki/Callback配置参考)

ddns-go.exe

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

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

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

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2025-11-5 01:55 AM , Processed in 0.088666 second(s), 27 queries .

Powered by xyh-moon X3.5

© 2001-2025 Discuz! Team.

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