logo NodeSeekbeta

Distributed Lookingglass - 下一代分布式网络LG

由于通过市面上常见的探针程序无法准确完整的、随时随地的分析当前小鸡网络状况,所以我研发了一款Lookingglass,方便MJJ们随时随地查看网络状况,测试服务器速度。

项目使用Golang编写,前端全部由CodeX完成

项目地址:https://github.com/DaisikiCloud/lookingglass/

Distributed Looking Glass

原生部署的主控/探针分布式 Looking Glass,不依赖任何容器运行。

除浏览器直连节点测速外,还支持 Public Speedtest:由所选 Agent 使用来自 https://iperf3serverlist.net 的
listed_iperf3_servers.csv 中的公开 iPerf3 服务器测试节点自身的上下行带宽。

架构

浏览器 ──HTTPS──> lg-controller(管理、调度、流式结果)
                       ▲
                       │ 节点主动长轮询 + 独立 Token
          ┌────────────┼────────────┐
       lg-agent     lg-agent     lg-agent
       Los Angeles  Tokyo        Hong Kong

浏览器 ──HTTPS──> 所选 lg-agent(下载/上传测速)
浏览器 ──TCP────> 所选 lg-agent(临时 iPerf3)

节点主动连接主控,因此诊断控制通道适用于 NAT 后的节点。测速和 iPerf3 需要节点有可供浏览器访问的域名/端口,带宽不会绕主控。

一、安装主控

在主控服务器执行:

chmod +x install.sh
sudo ./install.sh
sudoedit /opt/lookingglass/config.json
sudo systemctl restart lookingglass

首次运行会自动生成 /opt/lookingglass/config.json 并正常退出。修改后重启服务。为每个节点设置不同的 agent_id 和随机 agent_token,并填写节点公开地址:

{
  "id": 1,
  "name": "Los Angeles Premium",
  "location": "Los Angeles, California",
  "country": "United States",
  "code": "PREMIUM",
  "facility": "LAX1",
  "routing_profile": "Premium",
  "ipv4": "203.0.113.10",
  "ipv6": "2001:db8::10",
  "agent_id": "lax-premium-1",
  "agent_token": "至少32字节的随机密钥",
  "public_url": "https://lax-lg.example.com",
  "enabled": true,
  "test_file_sizes": [10, 100, 1000]
}

生成密钥可使用:

openssl rand -hex 32

主控状态:

systemctl status lookingglass
journalctl -u lookingglass -f

二、安装节点

把项目源码复制或克隆到每台节点服务器,然后执行:

chmod +x install-agent.sh
sudo ./install-agent.sh
sudoedit /opt/lookingglass-agent/config.json
sudo systemctl restart lg-agent

节点首次运行同样会生成示例 config.json 并正常退出。配置示例:

{
  "controller": "https://lg.example.com:59600",
  "agent_id": "lax-premium-1",
  "agent_token": "与主控该节点配置完全相同的密钥",
  "listen": ":59601",
  "controller_origin": "https://lg.example.com:59600"
}

其中 controller_origin 必须是用户访问主控时的 HTTPS Origin,用于节点测速接口的 CORS 限制。

手动运行二进制时,两端都会在当前运行目录寻找或生成 config.json。只有需要自定义路径时才设置 LG_CONFIG(主控)或 LG_AGENT_CONFIG(节点)。

节点状态:

systemctl status lg-agent
journalctl -u lg-agent -f

三、域名与反向代理

  • 主控程序默认监听 0.0.0.0:59600。
  • 节点程序默认监听 0.0.0.0:59601。
  • lg.example.com 的反向代理指向主控的 127.0.0.1:59600。
  • 每个节点域名(例如 lax-lg.example.com)的反向代理指向该节点的 127.0.0.1:59601。
  • 主控的流式接口需要关闭反向代理缓冲;Nginx 设置 proxy_buffering off;。
  • 节点域名必须允许 GET /healthz、GET /api/download/*、POST /api/upload 和 POST /api/iperf3。
  • iPerf3 返回随机 TCP 端口。若使用防火墙,需允许临时 iPerf3 端口;生产环境建议固定一个小端口池,后续可按实际防火墙策略调整。

安全模型

  • 每个探针使用独立 Agent ID 和长随机 Token。
  • Agent Token 只在认证后的管理接口返回,公开配置会自动清除 Token。
  • 节点主动向主控发起请求,主控不需要 SSH 权限。
  • 诊断命令不经过 shell;节点解析 DNS 后阻止私网、环回、链路本地及其他特殊地址。
  • 节点最多同时运行两个诊断任务和一个 iPerf3 会话;任务有强制超时。
  • systemd 服务使用独立低权限用户,节点仅授予 CAP_NET_RAW。
  • 公网环境仍建议在反向代理层增加按 IP 速率限制和 CAPTCHA。

编译

make build

会生成两个原生程序:

  • lg-controller:部署在主控。
  • lg-agent:部署在每个网络节点。

Public Speedtest 还需要将 listed_iperf3_servers.csv (可以在 https://iperf3serverlist.net 中获取)放在主控工作目录。
一键安装脚本会从项目目录或其上一级目录自动查找并安装该文件。

更完整的中文安装、反向代理、故障排查和访客限速说明请参阅
usage.txt

##特色
主控包含后台,可自行任意开关各Agent的测速功能。例:id1小鸡开放iperf3/mtr,id2小鸡只开放浏览器测速 这类功能。
可自定义Agent前端展示信息,可选择展示IPv4/IPv6地址,或者隐藏
第一次发开源作品,大佬们轻喷! yct002 是个人作品,希望能得到MJJ们的支持与尝试。 yct001

12
12

你好啊,陌生人!

我的朋友,看起来你是新来的,如果想参与到讨论中,点击下面的按钮!

📈用户数目📈

目前论坛共有73246位seeker

🎉欢迎新用户🎉