找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 68|回复: 0

ddns-go

[复制链接]

983

主题

83

回帖

5万

积分

管理员

积分
53122
发表于 2024-4-8 08:38:17 | 显示全部楼层 |阅读模式
# ddns-go
1 N2 ]( i7 l& Q$ k" N* _
& P& x$ ^( u, p% ~+ b0 X- T$ T自动获得你的公网 IPv4 或 IPv6 地址,并解析到对应的域名服务。
' s& J# }- ?& w' Q
" U. }) C4 T# @- D" l& s- [特性](#特性)
; ?2 s) Z9 _- z( l' n& h, U- [系统中使用](#系统中使用)9 ^' M8 y4 l* u* x- h. b8 A7 p0 i( s
- [Docker中使用](#docker中使用)
9 q) T8 w0 U2 h' B5 p" V+ x1 d2 I- [使用IPv6](#使用ipv6)
$ ?2 C* y* F7 n5 S  }- [Webhook](#webhook)
/ x0 d2 H" [# E9 N" ~( _3 ~& \- [Callback](#callback)
: k5 ~' p7 P$ f8 k; J% r, |- [界面](#界面)! @5 n  E) O4 ?9 b- x
- [开发&自行编译](#开发自行编译); p6 G& U: n$ L# z$ N' L
) [  n/ @7 g# [& p
## 特性8 e5 g! @" d) z$ A, |- H% y1 ?5 g5 ?2 ^8 I

! I4 a, t0 Z# V% ]  f1 k& \- 支持Mac、Windows、Linux系统,支持ARM、x86架构4 J, B8 ?' ^* t+ F, Z: ~1 Z# q3 x2 r
- 支持的域名服务商 `阿里云` `腾讯云` `Dnspod` `Cloudflare` `华为云` `Callback` `百度云` `Porkbun` `GoDaddy` `Namecheap` `NameSilo` `Dynadot`8 @3 k; ]1 y) Q4 \& m8 _
- 支持接口/网卡/[命令](https://github.com/jeessy2/ddns-go/wiki/通过命令获取IP参考)获取IP6 y$ L* M$ i3 E% I8 w0 u
- 支持以服务的方式运行& U0 Q/ q; B1 p) g
- 默认间隔5分钟同步一次0 }. \2 W$ y8 x& D' t
- 支持同时配置多个DNS服务商
3 f! ?4 }% y0 v: d( n- 支持多个域名同时解析2 {, T8 @! f% V
- 支持多级域名
6 ?& U, q7 {% j9 @8 E3 I% i; Y- 网页中配置,简单又方便,默认勾选`禁止从公网访问`; w0 i( E! {$ H" N" J2 D5 |
- 网页中方便快速查看最近50条日志2 i+ l' i% ?! H8 w  F9 _" u
- 支持Webhook通知3 v: D% j4 m4 W* ]: b
- 支持TTL: j! e2 p( R1 Y! D7 W1 c  \" E/ f
- 支持部分DNS服务商[传递自定义参数]
" G. K0 q( `1 A+ T# @
0 o5 G+ d* y$ T  L5 i4 m* U> [!NOTE]# a9 _: W4 z) \- T6 ^/ H
> 建议在启用公网访问时,使用 Nginx 等反向代理软件启用 HTTPS 访问,以保证安全性。
4 @' D- O, S% c6 G## 系统中使用
" S) q* K( [8 L4 c- }+ D" |- A/ g/ s" K% v% [
- 从 [Releases] 下载并解压 ddns-go4 E; U! }( }; z+ }
- 安装服务7 j4 |6 q2 ^2 I- I+ i: I
  - Mac/Linux: `sudo ./ddns-go -s install`
9 ~% S/ C0 b5 \! `3 F! g  - Win(以管理员打开cmd): `.\ddns-go.exe -s install`6 C. W' C0 N2 I% f, m9 V$ r
- [可选] 服务卸载
+ g( }' e6 n: d  - Mac/Linux: `sudo ./ddns-go -s uninstall`& ?. o' Y. i- H
  - Win(以管理员打开cmd): `.\ddns-go.exe -s uninstall`& ~6 H0 B+ ~1 U! u  \
- [可选] 支持安装带参数% A, T, ]  |# l8 ?: x0 F
  - `-l` 监听地址
$ s/ Y7 r* Z3 P  - `-f` 同步间隔时间(秒)- }* O2 V7 E- Q9 ~
  - `-cacheTimes` 间隔N次与服务商比对2 {1 V, e% E7 Q" _- q
  - `-c` 自定义配置文件路径
2 t$ [) v! {5 }' o  - `-noweb` 不启动web服务% a, f0 I4 r& h! W5 I7 M
  - `-skipVerify` 跳过证书验证+ i1 J' B- \- q1 ^' K  a
  - `-dns` 自定义 DNS 服务器5 l1 n# L/ w; x# s! i
- [可选] 参考示例$ N) w# f( t% r& ]1 l- Z
  - 10分钟同步一次, 并指定了配置文件地址
2 \' `9 o  J( V* d/ e    ```bash. v$ K3 G( G: k* i8 d, m
    ./ddns-go -s install -f 600 -c /Users/name/.ddns_go_config.yaml
1 A4 I  g/ m" F& b1 {9 y7 ?    ```
9 f# E) p. N9 V$ C2 t" b3 D  - 每 10 秒检查一次本地 IP 变化, 每 30 分钟对比一下 IP 变化, 实现 IP 变化即时触发更新且不会被服务商限流, 如果使用接口获取IP, 需要注意接口限流
0 u8 v  Z( Z9 p" J# b    ```bash
$ u3 E; f+ y& p5 A# {6 u+ L    ./ddns-go -s install -f 10 -cacheTimes 180/ J: m/ S; w; \& U6 ]& ~/ r
    ```
& `: _9 d. A0 e4 Q! a5 t- [可选] 使用 [Homebrew](https://brew.sh) 安装 [ddns-go](https://formulae.brew.sh/formula/ddns-go):
! y9 y$ Z2 V8 i3 a# Y5 ~; H% L' H) D" Q) K" c5 n% \2 i4 ?
  ```bash
+ N- ~" t, N9 ?7 N9 f: ?# N  brew install ddns-go5 Q' |( N+ Z4 X9 `; [  `5 ~
  ```* Y8 m. E* V# c8 ?* Z1 Y. X; K( `
$ R3 o: q  c, j* M' G8 Z3 ^0 X
## Docker中使用- W, B) ~; U5 e1 A
+ g! \- K" a6 a& [5 }3 y, f  l
- 挂载主机目录, 使用docker host模式。可把 `/opt/ddns-go` 替换为你主机任意目录, 配置文件为隐藏文件9 D. s0 y( D7 w
7 u5 b. S9 n4 \, H! B# o
  ```bash
% O3 M8 k4 ]- l7 y& C* H  docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go
5 {) A3 c) q( u  ```  W: d$ c& t/ X
9 U/ e$ |1 @$ k! X
- 在浏览器中打开`http://主机IP:9876`,并修改你的配置1 _3 e' u. }1 q7 J. R

; j9 z/ L& [+ o0 y1 E& I- [可选] 使用 `ghcr.io` 镜像$ G( u  l% g7 i; y  j" I7 C
5 S9 P2 j6 {# Y) l
  ```bash1 Z; x  v2 C$ s7 r# r* J0 B1 X2 S' m
  docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root ghcr.io/jeessy2/ddns-go; Q( h9 l; ~* a5 {; r$ [5 U& c
  ```' t% Q+ [& E5 ?/ Q
3 ^' t( s) k5 s9 z
- [可选] 支持启动带参数 `-l`监听地址 `-f`间隔时间(秒)
% `* q8 T# s5 n4 L, q0 ~- I- n$ ~1 R3 [1 I
  ```bash
; Y: u5 }5 r) A  y: c2 Q! L7 p  docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go -l :9877 -f 600
- W# R- U6 m* [$ e; u  ```! F2 a( f- C/ S* u) o
  X: L# S2 x) E$ x- R' |" ]
- [可选] 不使用docker host模式
! A- ]7 _7 q. f: z' z3 i  M& f4 N0 R' u' v$ q" O1 x
  ```bash, l- w+ d' }" D/ a4 c
  docker run -d --name ddns-go --restart=always -p 9876:9876 -v /opt/ddns-go:/root jeessy/ddns-go& ^- o. d1 _& b4 c) R* N
  ```
" x& G! [' O" L$ S# s  c8 c8 a
$ ]" V: i. `$ N2 a5 g. a: V) K# S## 使用IPv6' r& J' `# m- x6 Z8 b
2 Y8 S5 S* Q1 O! R  y6 n
- 前提:你的电脑或终端能正常获取IPv6,并能正常访问IPv6: k1 U! l% ~* j) R8 T' N0 q2 E7 w
- Windows/Mac:推荐 [系统中使用](#系统中使用),Windows/Mac桌面版的docker不支持`--net=host`
0 {1 D  R) R0 J' X7 p6 [: `- 群晖:% S4 X  Z! @& w) k3 u
  - 套件中心下载docker并打开
& H9 t; n/ Z. w5 K2 [; R  - 注册表中搜索`ddns-go`并下载7 ^( p1 V; F  B$ R0 y
  - 映像 -> 选择`jeessy/ddns-go` -> 启动 -> 高级设置 -> 网络中勾选`使用与 Docker Host 相同的网络`,高级设置中勾选`启动自动重新启动`
4 C+ K1 ~; b8 j0 q+ J' n' e2 F. C  - 在浏览器中打开`http://群晖IP:9876`,修改你的配置,成功
7 n2 C  {: x2 R3 f- V$ Z& P- Linux的x86或arm架构,推荐使用Docker的`--net=host`模式。参考 [Docker中使用](#Docker中使用); k1 ~4 X, ^6 @% {6 P$ ~- r
- 虚拟机中使用有可能正常获取IPv6,但不能正常访问IPv6' T  T4 j( C: G' Q8 P* _
: X# S' g* N" n$ I  }; {1 i
## Webhook
! z" y' L3 E0 {$ V0 z6 ?* [' `6 O9 E$ O3 g5 B7 k  H
- 支持webhook, 域名更新成功或不成功时, 会回调填写的URL
3 i5 h  k8 j- g3 ]' j2 e- 支持的变量
& v* |7 R5 I" |" Q  j1 a+ P
8 \. }) {# V* I  |  变量名   | 说明  |
% _) ^8 W& J/ _9 J  |  ----  | ----  |+ a; m8 P- e3 N' }! G& G. e
  | #{ipv4Addr}  | 新的IPv4地址 |8 C/ l0 F% D4 ^* ]
  | #{ipv4Result}  | IPv4地址更新结果: `未改变` `失败` `成功`|  g! I6 f, _( D4 S+ r# i& M) o
  | #{ipv4Domains}  | IPv4的域名,多个以`,`分割 |/ [2 c5 H# m) Z$ X0 E! `( `
  | #{ipv6Addr}  | 新的IPv6地址 |
7 g. B! Q; ^8 v( U  | #{ipv6Result}  | IPv6地址更新结果: `未改变` `失败` `成功`|2 e7 b) ~- l) R  y" ~! n
  | #{ipv6Domains}  | IPv6的域名,多个以`,`分割 |
/ z" ^4 I' i, }
: t- M0 I7 S( ~. Z" t/ C- 如 RequestBody 为空则为 GET 请求,否则为 POST 请求+ ?) q+ d, h& Z6 \2 n$ {
- <details><summary>Server酱</summary>
+ Z/ [1 H3 h- o1 B
  [7 _( H0 e. Y7 Y4 ^+ F% ?1 T  ```3 e6 ^! U/ J1 d2 {6 [7 l
  https://sctapi.ftqq.com/[SendKey].send?title=你的公网IP变了&desp=主人IPv4变了#{ipv4Addr},域名更新结果:#{ipv4Result}
2 n/ o9 A3 `" t  ```# i' ]  R$ W: ]; @
- <details><summary>Bark</summary>
4 b' u( ^9 P/ q5 U1 v# A/ S
0 ^' V: I7 \8 u/ D0 G* }" \  ```" F+ c5 G9 \8 x5 ], e* _
  https://api.day.app/[YOUR_KEY]/主人IPv4变了#{ipv4Addr},域名更新结果:#{ipv4Result}
0 Z2 h4 B. Q2 a1 F! _  ```
2 ?$ O( A9 @# B. f) Z" I* D  </details>
- @5 k, ]) K; K0 ]. q  G. o  T- <details><summary>钉钉</summary>2 [) n/ T5 k% ?$ f) ]$ v- ^1 K

: L& s5 E; c3 ^  - 钉钉电脑端 -> 群设置 -> 智能群助手 -> 添加机器人 -> 自定义& y7 F. S7 D5 y" f/ p
  - 只勾选 `自定义关键词`, 输入的关键字必须包含在RequestBody的content中, 如:`你的公网IP变了`
& R9 U- f& {1 c6 z8 I, k  - URL中输入钉钉给你的 `Webhook地址`9 P% ~1 H- t4 M  S1 ]/ h" S& G
  - RequestBody中输入; ]; M9 s7 I  I. X- W5 h! d/ o
    ```json
0 c7 s: o' |* J. ?0 e' Z( F    {
* f& D, ~7 o7 P/ ~        "msgtype": "markdown",
, n; R& `9 w- a        "markdown": {5 X7 S0 {+ ?' p
            "title": "你的公网IP变了",/ t1 M8 ^, W0 G! [7 b
            "text": "#### 你的公网IP变了 \n - IPv4地址:#{ipv4Addr} \n - 域名更新结果:#{ipv4Result} \n"
  h& g- g2 K# z( |. o        }
' `3 F2 c) i* S3 u    }
( ]8 t; ^7 W9 L0 H# W    ```
5 _8 `, I& `/ O, r5 C* ~& o! i; l  </details>
& r) H: U; n* G7 K- <details><summary>飞书</summary>8 K) l4 g! U; @4 z7 i. n

5 R' ~( d3 b6 X! g0 H2 s  - 飞书电脑端 -> 群设置 -> 添加机器人 -> 自定义机器人
9 o1 D1 w% _; D/ J% r  - 安全设置只勾选 `自定义关键词`, 输入的关键字必须包含在RequestBody的content中, 如:`你的公网IP变了`
1 y4 N) v- x0 ~, ?( V* o# X  - URL中输入飞书给你的 `Webhook地址`
! v, S8 ?0 c8 {) }0 M0 n7 G1 E* F  - RequestBody中输入+ o& Y. {2 z9 k1 h& o/ J
    ```json* |# m9 @. O- |$ w* X) C1 \/ ~
    {
" n/ m0 ^" K. e6 `# f0 N7 |        "msg_type": "post",
- _* ]( v+ q* Z& N! H* g        "content": {/ M# x4 w2 f2 V
            "post": {- ]  p! X. h) @- X; J) n6 y
                "zh_cn": {
# `  _+ W1 l+ W: |" u8 G                    "title": "你的公网IP变了",* f# t7 N9 t5 v0 p* V
                    "content": [
0 P5 I8 y3 {+ s" [- f  {* V" a0 M# t& f                        [
+ g1 |; z( g2 [; c                            {
8 V9 I* q( o) H* t% b1 H# }5 y2 Z/ z9 Y                                "tag": "text",
3 D: }8 [. g- |0 D) ~                                "text": "IPv4地址:#{ipv4Addr}"
0 O5 F% ]% }0 E" W                            }
8 {7 h8 x) n" d, ]+ G) h                        ],4 X, n) J9 Q% P. q
                        [8 @  `4 c! t) S& C& C
                            {
+ [0 ?; q5 P3 E2 U5 f                                "tag": "text",
+ ]4 T$ D8 C$ o# i+ L% t                                "text": "域名更新结果:#{ipv4Result}"8 m7 s3 I' O( z  i3 C
                            }! @+ @1 a$ n4 u1 F6 ~+ e
                        ]
! ^" n6 u, o( o; D7 v$ m                    ]( J: K6 m1 v* O- y! t
                }7 \: T/ f# l; v& K+ w
            }
% i6 R7 [- ]: v1 A9 }- k7 |        }* t0 U% C/ B/ j3 E" K
    }; K5 V: w. c: W% l! J3 `' y
    ```
5 m7 M2 L5 p1 _  </details>- m& P- G9 b2 G6 \
- <details><summary>Telegram</summary>/ m. M  ]  z0 |- n! l& b

  b6 r- x9 R# U' ~$ S( U  [ddns-telegram-bot]
* ]9 X4 l8 B- B; {& t6 `  </details>- T+ Q8 r8 a0 d8 r
- <details><summary>plusplus 推送加</summary>
5 \# P/ g6 }3 |: Q4 G
/ x8 W$ d/ t5 Y  O  w. e5 v  - [获取token](https://www.pushplus.plus/push1.html)& P6 W8 m3 B9 ~4 `
  - URL中输入 `https://www.pushplus.plus/send`& V% l$ }# n9 u- y, V7 H
  - RequestBody中输入# F. e2 }: A3 c. M1 v
    ```json
0 S- m! |; C' J, W    {" p7 N4 K8 O, h8 _
        "token": "your token"," A- }; J' z) C
        "title": "你的公网IP变了",# ~+ @* s8 g4 K. X
        "content": "你的公网IP变了 \n - IPv4地址:#{ipv4Addr} \n - 域名更新结果:#{ipv4Result} \n"  N7 F. f1 G, z5 p* t& x% b# g% f+ A: G
    }
, p4 e0 h8 K" V    ```
% a9 y8 k( y8 Q5 P0 A0 A  </details>
" k( P$ F2 X3 l# S- <details><summary>Discord</summary>0 O% c6 ^& a/ L. S! ~
4 Y( Z2 W: Y. v. }( I% A2 Z
  - Discord任意客户端 -> 伺服器 -> 频道设置 -> 整合 -> 查看Webhook -> 新Webhook -> 复制Webhook网址
5 p, p  S$ m2 G% |4 t2 m3 w  - URL中输入Discord复制的 `Webhook网址`0 p9 [- E+ j5 r3 ~% `# Q) e8 b9 l
  - RequestBody中输入
! G' I1 Q+ B4 v, v5 F    ```json
" N+ g4 E- G+ ?& ~3 i    {2 _- _9 A) ^. x& x3 H) H4 ~# ^
        "content": "域名 #{ipv4Domains} 动态解析 #{ipv4Result}.",
+ x2 K8 l. r0 z        "embeds": [5 z9 a% G- o5 X( Z6 l7 }% |
            {
) D  ~0 @5 A# v% x/ p* ?                "description": "#{ipv4Domains} 的动态解析 #{ipv4Result}, IP: #{ipv4Addr}",# h  N% R: N# {" ?2 _% y3 a; r4 p
                "color": 15258703,
) \3 K# B5 p4 z$ V# u5 z                "author": {
, Q1 i+ \, {  }+ x+ G                    "name": "DDNS"
9 M+ J2 n1 H( A, \: W7 f                },
% D6 E/ \, q) M! C6 f0 L# l1 C- C                "footer": {2 A3 |1 S( a9 N6 L* O; t
                    "text": "DDNS #{ipv4Result}"
* [; ^/ {4 }! e8 f( d- E1 @2 w                }6 f; ^! b5 n+ c% S
            }2 p: w$ {1 D; n( f; y3 m, y
        ]4 F8 ~" i% E$ w1 u6 W6 o
    }
4 }1 \* m" K2 A8 O3 q    ```8 ~; B. x  A# ~4 V+ n2 Y7 j& t9 Y: _
  </details>
4 L& A: v  Q+ A: L. I# E& c4 Z$ J/ d' F" N
## Callback: N' l0 H2 {! U3 ?7 i, U( Y$ m
$ B5 y5 c5 m" V  c2 Y( |- n
- 通过自定义回调可支持更多的第三方DNS服务商2 ~' C" ?7 p# s8 t1 ]( R+ q
- 配置的域名有几行, 就会回调几次
$ I' W0 F9 |3 R- I- 支持的变量* U. r: u* w7 M3 X- S1 R8 M5 A! X
; }4 ^1 y! P) U
  |  变量名   | 说明  |
. w3 S: y1 L. H* l7 X  |  ----  | ----  |& Q9 E2 u4 e2 }
  | #{ip}  | 新的IPv4/IPv6地址 |
* V, L1 [1 w/ U  | #{domain}  | 当前域名 |7 U! l& e6 U/ `4 ]& }
  | #{recordType}  | 记录类型 `A`或`AAAA` |& [! r$ G- i3 S9 {
  | #{ttl}  | TTL |
/ d" N& r6 Z5 R8 N- 如 RequestBody 为空则为 GET 请求,否则为 POST 请求
) i/ F! n' b! ~9 u* v- [Callback配置参考](https://github.com/jeessy2/ddns-go/wiki/Callback配置参考)

ddns-go.exe

9.02 MB, 阅读权限: 10, 下载次数: 0

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

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

本版积分规则

Archiver|手机版|小黑屋|返回首页

GMT+8, 2024-12-23 20:32 , Processed in 0.087821 second(s), 30 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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