由于通过市面上常见的探针程序无法准确完整的、随时随地的分析当前小鸡网络状况,所以我研发了一款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地址,或者隐藏
第一次发开源作品,大佬们轻喷!
是个人作品,希望能得到MJJ们的支持与尝试。 
好鸡帮顶
@星际泰迪 #1 ?
为什么帖子冷了呀
帮顶
好东西 顶
帮顶
顶
@admin 好像发错板块了,能帮忙移动到dev板块吗
第一次发作品 好像真的不受欢迎
@DaisikiCloud #8 没有发错,就是这个版块