@@ -1068,4 +1068,317 @@ Webhook 是 GoDNS 提供的另一个功能,用于在 IP 更改时向其他应
10681068可用变量:
10691069
10701070> - `Domain`:当前域名。
1071- > - `IP`:新 IP
1071+ > - `IP`:新 IP 地址。
1072+ > - `IPType`:IP 类型:`IPV4` 或 `IPV6`。
1073+
1074+ # ### 使用 HTTP GET 请求的 Webhook
1075+
1076+ ` ` ` json
1077+ "webhook": {
1078+ "enabled": true,
1079+ "url": "http://localhost:5000/api/v1/send?domain={{.Domain}}&ip={{.CurrentIP}}&ip_type={{.IPType}}",
1080+ "request_body": ""
1081+ }
1082+ ` ` `
1083+
1084+ 对于此示例,将向目标 URL 发送带有查询字符串参数的 webhook:
1085+
1086+ ```
1087+ http://localhost:5000/api/v1/send?domain=ddns.example.com&ip=192.168.1.1&ip_type=IPV4
1088+ ```
1089+
1090+ #### 使用 HTTP POST 请求的 Webhook
1091+
1092+ ```json
1093+ "webhook": {
1094+ "enabled": true,
1095+ "url": "http://localhost:5000/api/v1/send",
1096+ "request_body": "{ \"domain\": \"{{.Domain}}\", \"ip\": \"{{.CurrentIP}}\", \"ip_type\": \"{{.IPType}}\" }"
1097+ }
1098+ ```
1099+
1100+ 对于此示例,当 IP 更改时将触发 webhook,目标 URL ` http://localhost:5000/api/v1/send ` 将收到带有请求体的 ` HTTP POST ` 请求:
1101+
1102+ ``` json
1103+ { "domain" : " ddns.example.com" , "ip" : " 192.168.1.1" , "ip_type" : " IPV4" }
1104+ ```
1105+
1106+ ### 杂项主题
1107+
1108+ #### IPv6 支持
1109+
1110+ 大多数 [ 提供商] ( #支持的-dns-提供商 ) 都支持 IPv6。
1111+
1112+ 要启用 GoDNS 的 ` IPv6 ` 支持,有两种解决方案可供选择:
1113+
1114+ 1 . 使用在线服务查找外部 IPv6
1115+
1116+ 为此:
1117+
1118+ - 将 ` ip_type ` 设置为 ` IPv6 ` ,并确保配置了 ` ipv6_urls `
1119+ - 在您的 DNS 提供商中创建 ` AAAA ` 记录而不是 ` A ` 记录
1120+
1121+ <details >
1122+ <summary >配置示例</summary >
1123+
1124+ ``` json
1125+ {
1126+ "domains" : [
1127+ {
1128+ "domain_name" : " example.com" ,
1129+ "sub_domains" : [" ipv6" ]
1130+ }
1131+ ],
1132+ "resolver" : " 2001:4860:4860::8888" ,
1133+ "ipv6_urls" : [" https://api-ipv6.ip.sb/ip" ],
1134+ "ip_type" : " IPv6"
1135+ }
1136+ ```
1137+
1138+ </details >
1139+
1140+ 2 . 让 GoDNS 查找其运行机器的网络接口的 IPv6(稍后详细说明[ 网络接口 IP 地址] ( #网络接口-ip-地址 ) )。
1141+
1142+ 为此,只需将 ` ip_urls ` 和 ` ipv6_urls ` 留空。
1143+
1144+ 请注意,网络接口必须配置 IPv6 才能正常工作。
1145+
1146+ #### 网络接口 IP 地址
1147+
1148+ 由于某些原因,如果您想获取与网络接口关联的 IP 地址(而不是执行在线查找),您可以在配置文件中这样指定:
1149+
1150+ ``` json
1151+ "ip_urls" : [" " ],
1152+ "ip_interface" : " interface-name" ,
1153+ ```
1154+
1155+ 将 ` interface-name ` 替换为网络接口的名称,例如 Linux 上的 ` eth0 ` 或 Windows 上的 ` Local Area Connection ` 。
1156+
1157+ 注意:如果也指定了 ` ip_urls ` ,它将首先用于执行在线查找,网络接口 IP 将在失败情况下用作后备。
1158+
1159+ #### SOCKS5 代理支持
1160+
1161+ 您可以通过在配置文件中指定 [ SOCKS5 代理] ( https://en.wikipedia.org/wiki/SOCKS#SOCKS5 ) 来使所有远程调用通过该代理:
1162+
1163+ ``` json
1164+ "socks5_proxy" : " 127.0.0.1:7070"
1165+ "use_proxy" : true
1166+ ```
1167+
1168+ #### 从 RouterOS 获取 IP
1169+
1170+ 如果您想从 Mikrotik RouterOS 设备获取公共 IP,您可以使用以下配置:
1171+
1172+ ``` json
1173+ "mikrotik" : {
1174+ "enabled" : false ,
1175+ "server" : " http://192.168.88.1" ,
1176+ "username" : " admin" ,
1177+ "password" : " password" ,
1178+ "interface" : " pppoe-out"
1179+ }
1180+ ```
1181+
1182+ #### 显示调试信息
1183+
1184+ 要显示调试信息,将 ` debug_info ` 设置为 ` true ` 以启用此功能。默认情况下,调试信息被禁用。
1185+
1186+ ``` json
1187+ "debug_info" : true ,
1188+ ```
1189+
1190+ #### 多个 API URL
1191+
1192+ GoDNS 支持通过简单的轮询算法从多个 URL 获取公共 IP。如果第一个 URL 失败,它将尝试下一个,直到成功。以下是配置示例:
1193+
1194+ ``` json
1195+ "ip_urls" : [
1196+ " https://api.ipify.org" ,
1197+ " https://myip.biturl.top" ,
1198+ " https://api-ipv4.ip.sb/ip"
1199+ ],
1200+ ```
1201+
1202+ #### 推荐的 API
1203+
1204+ - < https://api.ipify.org >
1205+ - < https://myip.biturl.top >
1206+ - < https://ipecho.net/plain >
1207+ - < https://api-ipv4.ip.sb/ip >
1208+
1209+ ## Web 面板
1210+
1211+ <img src =" https://github.com/TimothyYe/godns/blob/master/assets/snapshots/web-panel.jpg?raw=true " />
1212+
1213+ 从版本 3.1.0 开始,GoDNS 提供了一个 Web 面板来管理配置和监控域名状态。Web UI 默认是禁用的。要启用它,只需在配置文件中启用 ` web_panel ` 。
1214+
1215+ ``` json
1216+ "web_panel" : {
1217+ "enabled" : true ,
1218+ "addr" : " 0.0.0.0:9000" ,
1219+ "username" : " admin" ,
1220+ "password" : " 123456"
1221+ }
1222+ ```
1223+
1224+ 启用 Web 面板后,您可以访问 ` http://localhost:9000 ` 来管理配置和监控域名状态。
1225+
1226+ ## 运行 GoDNS
1227+
1228+ 有几种运行 GoDNS 的方式。
1229+
1230+ ### 手动运行
1231+
1232+ 注意:确保在配置文件中设置 ` run_once ` 参数,这样程序将在首次运行后退出(默认值为 ` false ` )。
1233+
1234+ 它可以添加到 ` cron ` 或附加到系统上的其他事件。
1235+
1236+ ``` json
1237+ {
1238+ "..." : " ..." ,
1239+ "run_once" : true
1240+ }
1241+ ```
1242+
1243+ 然后运行
1244+
1245+ ``` bash
1246+ ./godns
1247+ ```
1248+
1249+ ### 作为手动守护进程
1250+
1251+ ``` bash
1252+ nohup ./godns &
1253+ ```
1254+
1255+ 注意:当程序停止时,它不会重新启动。
1256+
1257+ ### 作为托管守护进程(使用 upstart)
1258+
1259+ 1 . 首先安装 ` upstart ` (如果尚未可用)
1260+ 2 . 将 ` ./config/upstart/godns.conf ` 复制到 ` /etc/init ` (并根据需要调整)
1261+ 3 . 启动服务:
1262+
1263+ ``` bash
1264+ sudo start godns
1265+ ```
1266+
1267+ ### 作为托管守护进程(使用 systemd)
1268+
1269+ 1 . 首先安装 ` systemd ` (如果尚未可用)
1270+ 2 . 将 ` ./config/systemd/godns.service ` 复制到 ` /lib/systemd/system ` (并根据需要调整)
1271+ 3 . 启动服务:
1272+
1273+ ``` bash
1274+ sudo systemctl enable godns
1275+ sudo systemctl start godns
1276+ ```
1277+
1278+ ### 作为托管守护进程(使用 procd)
1279+
1280+ ` procd ` 是 OpenWRT 上的 init 系统。如果您想在 OpenWRT 和 procd 上将 godns 用作服务:
1281+
1282+ 1 . 将 ` ./config/procd/godns ` 复制到 ` /etc/init.d ` (并根据需要调整)
1283+ 2 . 启动服务(需要 root 权限):
1284+
1285+ ``` bash
1286+ service godns enable
1287+ service godns start
1288+ ```
1289+
1290+ ### 作为 Docker 容器
1291+
1292+ 可用的 docker 注册表:
1293+
1294+ - < https://hub.docker.com/r/timothyye/godns >
1295+ - < https://github.com/TimothyYe/godns/pkgs/container/godns >
1296+
1297+ 访问 < https://hub.docker.com/r/timothyye/godns > 获取最新的 docker 镜像。` -p 9000:9000 ` 选项暴露 Web 面板。
1298+
1299+ 使用 ` /path/to/config.json ` 作为您的本地配置文件,运行:
1300+
1301+ ``` bash
1302+ docker run \
1303+ -d --name godns --restart=always \
1304+ -v /path/to/config.json:/config.json \
1305+ -p 9000:9000 \
1306+ timothyye/godns:latest
1307+ ```
1308+
1309+ 要使用 ` YAML ` 配置文件运行:
1310+
1311+ ``` bash
1312+ docker run \
1313+ -d --name godns \
1314+ -e CONFIG=/config.yaml \
1315+ --restart=always \
1316+ -v /path/to/config.yaml:/config.yaml \
1317+ -p 9000:9000 \
1318+ timothyye/godns:latest
1319+ ```
1320+
1321+ ### 作为 Windows 服务
1322+
1323+ 1 . 下载最新版本的 [ NSSM] ( https://nssm.cc/download )
1324+
1325+ 2 . 在管理员提示符中,从下载 NSSM 的文件夹(例如 ` C:\Downloads\nssm\ ` ** win64** )运行:
1326+
1327+ ```
1328+ nssm install YOURSERVICENAME
1329+ ```
1330+
1331+ 3 . 按照界面配置服务。在"Application"选项卡中只需指明 ` godns.exe ` 文件的位置。您还可以选择在"Details"选项卡上定义描述,并在"I/O"选项卡上定义日志文件。点击"Install service"按钮完成。
1332+
1333+ 4 . 该服务现在将与 Windows 一起启动。
1334+
1335+ 注意:您可以通过运行以下命令卸载服务:
1336+
1337+ ```
1338+ nssm remove YOURSERVICENAME
1339+ ```
1340+
1341+ ## 贡献
1342+
1343+ 欢迎贡献!请随时提交 Pull Request。
1344+
1345+ ### 设置前端开发环境
1346+
1347+ 要求:
1348+
1349+ - Node.js ` 18.19.0 ` 或更高版本
1350+ - Go ` 1.17 ` 或更高版本
1351+
1352+ 前端项目使用 [ Next.js] ( https://nextjs.org/ ) 和 [ daisyUI] ( https://daisyui.com/ ) 构建。要启动开发环境,运行:
1353+
1354+ ``` bash
1355+ cd web
1356+ npm ci
1357+ npm run dev
1358+ ```
1359+
1360+ ### 构建前端
1361+
1362+ 要构建前端,运行:
1363+
1364+ ``` bash
1365+ cd web
1366+ npm run build
1367+ ```
1368+
1369+ ### 运行前端
1370+
1371+ 要运行前端,运行:
1372+
1373+ ``` bash
1374+ cd web
1375+ npm run start
1376+ ```
1377+
1378+ ## 特别感谢
1379+
1380+ <img src =" https://i.imgur.com/xhe5RLZ.jpg " width =" 80px " align =" right " />
1381+
1382+ 感谢 JetBrains 使用[ 免费开源许可证] ( https://www.jetbrains.com/community/opensource/ ) 赞助此项目。
1383+
1384+ > 我喜欢 GoLand,它是一个令人惊叹且高效的工具。
0 commit comments