yoyo 21592ae8a0 fix: 修复 IPv6 地址解析中的端口处理逻辑
- 将 LastIndex 替换为 Index,以正确找到第一个闭合括号。
- 添加逻辑以在端口部分为空时使用默认端口 80,解决了潜在的连接问题。
2025-12-17 20:09:51 +08:00
2025-12-03 20:04:49 +08:00
2025-12-03 19:28:41 +08:00
2025-12-07 18:09:49 +08:00
2025-11-21 16:32:35 +08:00
2025-11-21 16:32:35 +08:00
2025-11-21 16:32:35 +08:00
2025-12-17 19:56:16 +08:00
2025-11-21 16:41:02 +08:00
2025-11-21 16:32:35 +08:00
2025-12-03 21:57:18 +08:00
2025-12-03 22:08:08 +08:00
2025-12-03 20:05:47 +08:00

LinkMaster Node

LinkMaster 节点服务,用于执行网络测试任务。

功能

  • HTTP GET/POST 测试
  • Ping 测试
  • DNS 查询
  • Traceroute 路由追踪
  • Socket 连接测试
  • TCPing 端口延迟测试
  • FindPing IP段批量ping检测
  • 持续 Ping/TCPing 测试
  • 心跳上报
  • 日志文件输出(支持配置日志文件路径和级别)
  • 心跳故障排查工具

安装

方式一:一键安装(推荐)

从 GitHub 一键安装,只需指定后端服务器地址。安装脚本会自动克隆源码并编译安装:

# 基本用法(替换为实际的 GitHub 仓库地址)
curl -fsSL https://raw.githubusercontent.com/yourbask/linkmaster-node/main/install.sh | bash -s -- http://your-backend-server:8080

# 示例
# 节点和后端在同一服务器
curl -fsSL https://raw.githubusercontent.com/yourbask/linkmaster-node/main/install.sh | bash -s -- http://localhost:8080

# 节点和后端在不同服务器
curl -fsSL https://raw.githubusercontent.com/yourbask/linkmaster-node/main/install.sh | bash -s -- http://192.168.1.100:8080

重要说明:

  • 节点端需要直接连接后端服务器(端口 8080不是前端地址
  • 前端通过 /api 路径代理到后端,但节点端不使用代理
  • 如果后端在公网,使用公网 IP 或域名
  • 如果后端在内网,使用内网 IP
  • 本项目是独立的 GitHub 仓库,与前后端项目分离

安装说明:

  • 自动检测系统类型和架构
  • 自动安装系统依赖(包括 Git 和 Go
  • 从 GitHub 克隆源码到 /opt/linkmaster-node
  • 自动编译并安装二进制文件
  • 自动创建 systemd 服务
  • 自动启动服务并验证

指定分支安装:

GITHUB_BRANCH=develop curl -fsSL https://raw.githubusercontent.com/yourbask/linkmaster-node/main/install.sh | bash -s -- http://your-backend-server:8080

方式二:手动编译安装

# 克隆仓库
git clone https://github.com/yourbask/linkmaster-node.git
cd linkmaster-node

# 编译
go build -o agent ./cmd/agent

# 安装需要root权限
sudo cp agent /usr/local/bin/linkmaster-node
sudo chmod +x /usr/local/bin/linkmaster-node

# 或使用安装脚本
./install.sh http://your-backend-server:8080

方式三:手动运行

# 克隆仓库
git clone https://github.com/yourbask/linkmaster-node.git
cd linkmaster-node

# 运行(会自动拉取最新代码并编译)
BACKEND_URL=http://your-backend-server:8080 ./run.sh start

配置

环境变量

  • BACKEND_URL: 后端服务地址(必需,默认: http://localhost:8080
  • CONFIG_PATH: 配置文件路径(可选,默认: config.yaml
  • LOG_FILE: 日志文件路径(可选,默认: node.log

配置文件(可选)

创建 config.yaml 文件:

server:
  port: 2200
backend:
  url: http://your-backend-server:8080
heartbeat:
  interval: 60
log:
  file: node.log        # 日志文件路径(默认: node.log空则输出到标准错误
  level: info           # 日志级别: debug, info, warn, error默认: info
debug: false

日志配置说明:

  • log.file: 日志文件路径。如果为空日志将输出到标准错误stderr
  • log.level: 日志级别,支持 debuginfowarnerror
  • 也可以通过环境变量 LOG_FILE 设置日志文件路径
  • 日志文件会自动创建,如果目录不存在会自动创建

运行脚本

使用 run.sh 脚本管理节点端。每次启动时会自动拉取最新代码并重新编译

# 启动服务(会自动拉取最新代码并编译)
./run.sh start

# 停止服务
./run.sh stop

# 重启服务(会拉取最新代码并重新编译)
./run.sh restart

# 查看状态
./run.sh status

# 查看日志
./run.sh logs

# 查看完整日志
./run.sh logs-all

# 指定后端地址启动
BACKEND_URL=http://192.168.1.100:8080 ./run.sh start

重要提示:

  • 启动脚本会自动执行 git pull 拉取最新代码
  • 拉取代码后会自动执行 go mod download 更新依赖
  • 然后自动编译生成新的二进制文件
  • 如果 Git 拉取失败(如网络问题),会使用当前代码继续编译
  • 如果编译失败,服务不会启动

脚本工具

项目提供了多个脚本工具,方便安装、卸载、运行、编译和发布。

1. install.sh - 一键安装脚本

自动安装 LinkMaster 节点端到系统包括依赖安装、源码编译、systemd 服务配置等。

使用方法:

# 通过 curl 下载并安装(推荐)
curl -fsSL https://gitee.nas.cpolar.cn/yoyo/linkmaster-node/raw/branch/main/install.sh | bash -s -- http://your-backend-server:8080

# 本地运行安装脚本
./install.sh http://your-backend-server:8080

# 指定分支安装
GITHUB_BRANCH=develop curl -fsSL https://gitee.nas.cpolar.cn/yoyo/linkmaster-node/raw/branch/main/install.sh | bash -s -- http://your-backend-server:8080

功能特性:

  • 自动检测系统类型和架构Linux/macOS, amd64/arm64
  • 自动检测并配置最快的镜像源Ubuntu/Debian/CentOS
  • 自动安装系统依赖curl, wget, git, ping, traceroute 等)
  • 自动安装 Go 环境(优先使用系统包管理器,失败则从官网下载)
  • 优先从 Releases 下载预编译二进制文件,失败则从源码编译
  • 自动创建 systemd 服务并配置自启动
  • 自动配置防火墙规则(开放 2200 端口)
  • 自动登记节点到后端服务器
  • 自动启动服务并验证安装

安装位置:

  • 二进制文件:/usr/local/bin/linkmaster-node
  • 源码目录:/opt/linkmaster-node
  • 服务文件:/etc/systemd/system/linkmaster-node.service
  • 配置文件:/opt/linkmaster-node/config.yaml

2. uninstall.sh - 一键卸载脚本

完全卸载 LinkMaster 节点端,包括停止服务、删除文件、清理配置等。

使用方法:

# 通过 curl 下载并运行
curl -fsSL https://gitee.nas.cpolar.cn/yoyo/linkmaster-node/raw/branch/main/uninstall.sh | bash

# 本地运行卸载脚本
./uninstall.sh

# 卸载并删除防火墙规则
./uninstall.sh --remove-firewall

功能特性:

  • 停止并禁用 systemd 服务
  • 删除 systemd 服务文件和配置目录
  • 删除二进制文件(/usr/local/bin/linkmaster-node
  • 删除源码目录(/opt/linkmaster-node
  • 清理所有残留进程
  • 重新加载 systemd daemon
  • 可选:删除防火墙规则(默认保留)

注意事项:

  • 卸载前会询问确认(交互式环境)
  • 默认保留防火墙规则,避免影响其他服务
  • 使用 --remove-firewall 参数可删除防火墙规则

3. run.sh - 运行管理脚本

用于管理节点端的启动、停止、重启、状态查看和日志查看。每次启动时会自动拉取最新代码并重新编译

使用方法:

# 启动服务(会自动拉取最新代码并编译)
./run.sh start

# 停止服务
./run.sh stop

# 重启服务(会拉取最新代码并重新编译)
./run.sh restart

# 查看运行状态
./run.sh status

# 实时查看日志
./run.sh logs

# 查看完整日志
./run.sh logs-all

# 显示帮助信息
./run.sh help

# 指定后端地址启动
BACKEND_URL=http://192.168.1.100:8080 ./run.sh start

功能特性:

  • 启动时自动执行 git pull 拉取最新代码
  • 自动执行 go mod download 更新依赖
  • 自动编译生成新的二进制文件
  • 自动检测端口占用并提示处理
  • 后台运行并保存 PID 文件
  • 健康检查验证服务状态
  • 支持通过环境变量 BACKEND_URL 指定后端地址

环境变量:

  • BACKEND_URL: 后端服务地址(默认: http://localhost:8080

4. start-systemd.sh - systemd 启动脚本

用于 systemd 服务启动,直接运行二进制文件。如果二进制文件不存在,会自动拉取代码并编译。

使用场景:

  • 由 systemd 服务自动调用
  • 不需要手动运行

功能特性:

  • 检查二进制文件是否存在且有效
  • 如果二进制文件不存在,自动拉取代码并编译
  • 使用 vendor 目录编译(无需网络连接)
  • 直接运行二进制文件systemd 管理进程)

注意事项:

  • 此脚本由 systemd 服务调用,通常不需要手动运行
  • 需要确保源码目录存在且是 Git 仓库
  • 需要 Go 环境已安装并在 PATH 中

5. all-build.sh - 跨平台编译脚本

编译多个操作系统和架构的二进制文件,支持并行编译。版本号自动从 version.json 读取

使用方法:

# 编译所有平台(自动使用 version.json 中的版本号)
./all-build.sh

# 只编译指定平台
./all-build.sh -p linux/amd64

# 编译前清理输出目录
./all-build.sh -c

# 设置并行编译数量
./all-build.sh -j 2

# 覆盖版本号(覆盖 version.json 中的版本)
./all-build.sh -v 1.0.0

# 只生成不带版本号的文件
./all-build.sh -s

# 列出所有支持的平台
./all-build.sh -l

# 显示帮助信息
./all-build.sh -h

支持的平台:

  • linux/amd64 - Linux x86_64
  • linux/arm64 - Linux ARM64
  • darwin/amd64 - macOS Intel
  • darwin/arm64 - macOS Apple Silicon
  • windows/amd64 - Windows x86_64
  • windows/arm64 - Windows ARM64

功能特性:

  • 自动从 version.json 读取版本号(无需手动指定)
  • 支持并行编译(默认 4 个任务)
  • 自动生成带版本号和不带版本号的文件
  • 输出到 bin/ 目录
  • 显示编译进度和结果
  • 支持清理输出目录

输出文件:

  • bin/agent-{os}-{arch} - 不带版本号的二进制文件
  • bin/agent-{os}-{arch}-{version} - 带版本号的二进制文件
  • Windows 平台会自动添加 .exe 扩展名

版本管理: 版本号统一从 version.json 文件读取:

{
  "version": "1.1.0",
  "tag": "v1.1.0"
}

6. all-upload-release.sh - 发布上传脚本

将编译好的二进制文件上传到 Releases 或通过其他方式发布。版本号和标签自动从 version.json 读取Token 已硬编码

使用方法:

# 上传到 Gitea Releases自动从 version.json 和 .git/config 读取信息)
./all-upload-release.sh -m gitea

# 上传到 Gitea Releases覆盖版本号和标签
./all-upload-release.sh -m gitea -t v1.2.0 -v 1.2.0

# 上传到 GitHub Releases
./all-upload-release.sh -m github -r owner/repo -t v1.0.0 -v 1.0.0

# 通过 SCP 上传
./all-upload-release.sh -m scp -H example.com -u user -d /path/to/release

# 通过 SCP 上传(指定私钥)
./all-upload-release.sh -m scp -H example.com -u user -d /path/to/release -k ~/.ssh/id_rsa

# 通过 FTP 上传
./all-upload-release.sh -m ftp -H ftp.example.com -u user -d /path/to/release

# 复制到本地目录
./all-upload-release.sh -m local -d /path/to/release

# 只打包不上传
./all-upload-release.sh --pack-only

# 不上传压缩包,直接上传二进制文件
./all-upload-release.sh -m scp --no-pack -H example.com -u user -d /path/to/release

# 显示帮助信息
./all-upload-release.sh -h

支持的上传方式:

  • gitea - Gitea Releases自动从 .git/config 读取仓库信息)
  • github - GitHub Releases需要 GitHub CLI gh
  • scp - 通过 SCP 上传到远程服务器
  • ftp - 通过 FTP 上传
  • local - 复制到本地目录

功能特性:

  • 自动从 version.json 读取版本号和标签(无需手动指定)
  • Token 已硬编码(无需手动指定)
  • 自动打包二进制文件tar.gz 或 zip
  • 自动创建发布说明
  • 支持指定平台上传
  • 支持自定义版本号和标签(覆盖配置文件)
  • 支持自定义发布说明
  • 自动检测并处理已存在的 Release

参数说明:

  • -m, --method: 上传方式gitea|github|scp|ftp|local默认: gitea
  • -v, --version: 版本号(默认: 从 version.json 读取)
  • -t, --tag: Git 标签(默认: 从 version.json 读取)
  • -p, --platform: 只上传指定平台
  • -T, --token: 访问令牌(已硬编码,此选项已废弃)
  • -H, --host: 主机地址SCP/FTP
  • -u, --user: 用户名SCP/FTP
  • -d, --dest: 目标路径SCP/FTP/local
  • -k, --key: 私钥路径SCP
  • --pack-only: 只打包不上传
  • --no-pack: 不上传压缩包,直接上传二进制文件

版本管理: 版本号和标签统一从 version.json 文件读取:

{
  "version": "1.1.0",
  "tag": "v1.1.0"
}

典型工作流程:

# 1. 编译所有平台(自动使用 version.json 中的版本号)
./all-build.sh

# 2. 上传到 Gitea Releases自动使用 version.json 中的版本号和标签)
./all-upload-release.sh -m gitea

7. vendor.sh - Vendor 依赖打包脚本

将项目依赖下载到 vendor 目录,客户端克隆后可直接编译,无需网络连接。

使用方法:

# 运行脚本(会自动下载依赖并创建 vendor 目录)
./vendor.sh

功能特性:

  • 检查 Go 环境
  • 配置 Go 代理(使用官方源)
  • 下载所有依赖包
  • 创建 vendor 目录
  • 更新 .gitignore允许 vendor 目录被提交)
  • 自动添加到 Git 暂存区

使用场景:

  • 项目需要离线编译能力
  • 需要确保依赖版本一致性
  • 客户端环境网络受限

注意事项:

  • 需要 Go 环境已安装
  • vendor 目录会比较大,需要提交到 Git
  • 编译时使用 -mod=vendor 标志

编译命令(使用 vendor

go build -mod=vendor -o agent ./cmd/agent

API

POST /api/test

统一测试接口

{
  "type": "ceGet|cePost|cePing|ceDns|ceTrace|ceSocket|ceTCPing|ceFindPing",
  "url": "测试目标",
  "params": {}
}

POST /api/continuous/start

启动持续测试

{
  "type": "ping|tcping",
  "target": "测试目标",
  "interval": 10,
  "max_duration": 60
}

POST /api/continuous/stop

停止持续测试

{
  "task_id": "任务ID"
}

GET /api/continuous/status?task_id=xxx

查询任务状态

GET /api/health

健康检查

故障排查

心跳同步问题排查

如果节点无法同步心跳,可以使用排查脚本进行诊断:

# 运行心跳故障排查脚本
./check-heartbeat.sh

排查脚本会自动检查以下项目:

  1. 进程状态 - 检查节点进程是否正在运行
  2. 配置文件 - 检查配置文件是否存在和正确
  3. 网络连接 - 检查能否连接到后端服务器
  4. 日志分析 - 分析日志中的心跳相关错误
  5. 手动测试 - 手动发送心跳测试连接
  6. 系统资源 - 检查磁盘空间和内存使用情况

常见问题及解决方案:

  1. 进程未运行

    ./run.sh start
    
  2. 网络连接失败

    • 检查后端服务是否正常运行
    • 检查防火墙规则(确保可以访问后端端口)
    • 检查 BACKEND_URL 配置是否正确
  3. 心跳发送失败

    • 查看日志: ./run.sh logs
    • 检查后端服务日志
    • 确认后端 /api/node/heartbeat 接口正常
  4. 配置文件问题

    • 检查 config.yaml 文件格式是否正确
    • 确认 BACKEND_URL 环境变量或配置文件中的 URL 正确
  5. 查看详细日志

    # 实时查看日志
    ./run.sh logs
    
    # 查看完整日志
    ./run.sh logs-all
    

日志功能

节点端支持将日志直接写入文件,便于排查问题和监控运行状态。

日志配置方式:

  1. 环境变量(推荐)

    LOG_FILE=/var/log/linkmaster-node.log ./run.sh start
    
  2. 配置文件config.yaml 中配置:

    log:
      file: node.log        # 日志文件路径
      level: info           # 日志级别: debug, info, warn, error
    
  3. 默认行为

    • 默认日志文件:node.log(当前目录)
    • 默认日志级别:info
    • 如果未设置日志文件日志输出到标准错误stderr

日志特性:

  • 自动创建日志文件和目录
  • 追加模式,不会覆盖已有日志
  • JSON 格式,便于日志分析
  • 包含调用信息(文件名和行号)
  • Error 级别日志包含堆栈信息

查看日志:

# 实时查看日志
tail -f node.log

# 查看心跳相关日志
grep -i "心跳" node.log

# 查看错误日志
grep -i "error" node.log

# 查看最后100行
tail -n 100 node.log

更新日志

v1.1.0 (最新)

新增功能:

  • 添加日志文件输出功能,支持配置日志文件路径和级别
  • 添加心跳故障排查工具 check-heartbeat.sh
  • 支持通过环境变量 LOG_FILE 设置日志文件路径
  • 日志自动创建目录,支持相对路径和绝对路径

改进:

  • 🔧 优化日志初始化逻辑,支持直接写入文件
  • 🔧 改进配置加载,支持日志配置项
  • 📝 完善文档,添加故障排查章节

v1.0.0

  • 🎉 初始版本发布
  • 支持 HTTP GET/POST 测试
  • 支持 Ping、DNS、Traceroute 等网络测试
  • 支持持续 Ping/TCPing 测试
  • 支持心跳上报
Description
No description provided
Readme 12 MiB
agent 1.1.4 Latest
2025-12-24 01:27:51 +08:00
Languages
Shell 64%
Go 35.9%