自托管网络监控工具LanLens

简介

什么是 LanLens ?

LanLens 是一个开源的自托管网络监控和文档仪表盘,它能够持续扫描本地网络,通过 MAC/IP 地址识别每台设备,并提供一个简洁的深色主题 Web 界面,让用户可以管理、文档化和连接网络中的所有设备。

主要特点

  • 自动 LAN 发现 :通过 ARP 扫描自动发现网络中的设备
  • 设备分类 :通过 MAC 厂商标识符自动识别设备类型
  • DHCP 标签检测 :检测 DHCP 分配的 IP 地址
  • 网段管理 :支持按颜色、范围和 IP 使用率管理不同网段
  • 设备文档:每个设备都可以添加自定义文档字段
  • 服务清单:记录设备上运行的服务
  • 一键连接 :支持 SSHRDPHTTPHTTPS 协议的一键连接
  • 端口扫描 :通过 nmap 进行端口扫描
  • 深度扫描 :通过 SSHLinux)和 WinRMWindows)进行深度扫描,获取硬件、操作系统、服务、容器信息
  • 虚拟化检测 :自动检测 ProxmoxKVMHyper-V 虚拟机管理程序
  • 加密凭据存储 :使用 Fernet 加密存储 SSHWinRM 访问凭据
  • Telegram 通知 :新设备上线和设备更新时发送 Telegram 通知
  • 多语言支持 :支持 EnglishGermanItalian 界面
  • 响应式设计:支持桌面和移动端访问
  • 开源免费 :基于 MIT 协议开源,可免费使用和修改

应用场景

  • 家庭网络管理:家庭用户可以监控家中所有联网设备,包括智能家居设备、电脑、手机等
  • 小型办公室:小型企业可以管理办公室网络中的打印机、服务器、工作站等设备
  • Homelab 爱好者Homelab 用户可以文档化管理自己的服务器和虚拟机
  • 网络安全管理:网络管理员可以监控网络中新增设备,及时发现异常接入

LanLens 是一个功能全面的自托管网络监控工具,特别适合需要集中管理家庭或小型办公网络设备的用户。

安装

在群晖上以 Docker 方式安装。

重要说明

LanLens 需要使用 host 网络模式 才能进行 ARP 扫描,建议使用命令行方式进行部署。

LanLens 镜像托管在 Docker Hub(alexrosbach/lanlens)和 ghcr.ioghcr.io/alexrosbach/lanlens),本文以 Docker Hub 镜像为例。

准备工作

  1. docker 文件夹中创建一个新文件夹 lanlens,再在其下建一个子文件夹 data
文件夹 装载路径 说明
docker/lanlens/data /data 存放数据库和持久化数据
bash 复制代码
# 新建文件夹 lanlens 和 子目录
mkdir -p /volume1/docker/lanlens/data

# 进入 lanlens 目录
cd /volume1/docker/lanlens
  1. 生成一个随机的 SECRET_KEY(至少 32 个字符):

官方建议用下面的命令来生成,但是这个命令在群晖上可能不行

bash 复制代码
python3 -c "import secrets; print(secrets.token_hex(32))"

所以还是用我们惯常的命令

bash 复制代码
openssl rand -hex 32

记下生成的密钥,后续需要填入配置。

SECRET_KEY 说明 :这是最重要的环境变量,LanLens 拒绝使用弱密钥启动。

docker cli 安装

如果你熟悉命令行,可能用 docker cli 更快捷

bash 复制代码
# 运行容器
docker run -d \
  --name=lanlens \
  --restart=unless-stopped \
  --network=host \
  --cap-add=NET_ADMIN \
  --cap-add=NET_RAW \
  -v $(pwd)/data:/data \
  -e SECRET_KEY=833c9672a9525b3ac9603559f47d35af63f176cd8629685ae021aaef502898f4 \
  -e DEFAULT_ADMIN_PASSWORD=admin \
  -e LANLENS_PORT=7765 \
  -e BACKEND_PORT=17765 \
  -e TZ=Asia/Shanghai \
  alexrosbach/lanlens:latest

注意 :由于 LanLens 使用 host 网络模式,端口映射直接在 LANLENS_PORT 环境变量中指定,无需通过 -p 参数映射。

环境变量说明

可变 说明
SECRET_KEY 至少 32 位随机字符串 必需,用于加密凭据存储
DEFAULT_ADMIN_PASSWORD admin 初始管理员密码,首次登录后需修改
LANLENS_PORT 7765 HTTP 服务端口
BACKEND_PORT 17765 内部 FastAPI 端口,一般无需修改
DB_PATH /data/lanlens.db SQLite 数据库路径
TZ Asia/Shanghai 容器时区

docker-compose 安装

也可以用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件

yaml 复制代码
services:
  lanlens:
    image: alexrosbach/lanlens:latest
    # To build locally instead of pulling from Docker Hub, uncomment:
    # build: .
    container_name: lanlens
    restart: unless-stopped

    # Required for ARP scanning: container must share the host network stack
    # so scapy can send raw Ethernet frames via the host's physical NIC.
    # Remove this and uncomment 'ports' below to use bridge networking ---
    # but note that ARP scanning will not work in bridge mode.
    network_mode: host
    cap_add:
      - NET_ADMIN  # network interface configuration
      - NET_RAW    # raw socket access for ARP broadcast

    volumes:
      - ./data:/data  # SQLite database + persistent state

    environment:
      # ── REQUIRED ──────────────────────────────────────────────────────────────
      # Replace with a strong random key (min 32 chars). App refuses to start otherwise.
      # Generate: python3 -c "import secrets; print(secrets.token_hex(32))"
      - SECRET_KEY=833c9672a9525b3ac9603559f47d35af63f176cd8629685ae021aaef502898f4

      # ── OPTIONAL ──────────────────────────────────────────────────────────────
      # Initial admin password (will be changed on first login)
      - DEFAULT_ADMIN_PASSWORD=admin
      # Host-mode HTTP port for the LanLens UI (for example 80, 8080, 7765)
      - LANLENS_PORT=7765
      # Internal API port used behind nginx (leave as-is unless you know why)
      - BACKEND_PORT=17765
      # Timezone (e.g. Europe/Berlin, America/New_York, UTC)
      - TZ=Asia/Shanghai

    # Host mode still allows a custom HTTP port.
    # Example: set LANLENS_PORT=80 above if you want LanLens on port 80.

    # ── Bridge networking alternative (ARP scanning disabled) ─────────────────
    # Comment out network_mode and cap_add above, then uncomment:
    # ports:
    #   - "8080:8080"
    # and set LANLENS_PORT=8080 above so nginx listens on the same port.

    healthcheck:
      test: ["CMD-SHELL", "curl -fs http://localhost:$${LANLENS_PORT:-7765}/api/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 20s

然后通过 SSH 登录到您的群晖,执行下面的命令:

bash 复制代码
# 将 docker-compose.yml 放入当前目录

# 一键启动
docker-compose up -d

运行

在浏览器中访问 http://<您的群晖IP>:7765 即可进入登录界面

默认账号密码admin / admin 写在下方

第一次需要重置密码

登录成功后的主界面

首次登录后建议:

  1. 前往 SettingsNetwork 配置扫描网段
  2. 前往 SettingsNotifications 配置 Telegram 通知(可选)
  3. 等待首次扫描完成,即可在 Dashboard 查看网络设备

进阶功能

使用 MariaDB/MySQL 替代 SQLite

LanLens 默认使用 SQLite 存储数据。对于生产环境或需要多设备访问的场景,可以切换到 MariaDBMySQL

需要修改 docker-compose.yml

yaml 复制代码
version: '3.8'

services:
  lanlens:
    image: alexrosbach/lanlens:latest
    container_name: lanlens
    restart: unless-stopped
    network_mode: host
    cap_add:
      - NET_ADMIN
      - NET_RAW
    volumes:
      - ./data:/data
    environment:
      - SECRET_KEY=您的32位随机密钥
      - DATABASE_URL=mysql+pymysql://lanlens:密码@mariadb:3306/lanlens
    depends_on:
      - mariadb

  mariadb:
    image: mariadb:11
    container_name: lanlens-db
    restart: unless-stopped
    environment:
      - MYSQL_ROOT_PASSWORD=root密码
      - MYSQL_DATABASE=lanlens
      - MYSQL_USER=lanlens
      - MYSQL_PASSWORD=密码
    volumes:
      - ./mariadb_data:/var/lib/mysql

深度扫描配置

LanLens 支持通过 SSHLinux)和 WinRMWindows)进行深度扫描,获取硬件、操作系统、服务、容器等信息。

可以参考官方文档:https://github.com/AlexRosbach/LanLens#deep-scan--required-permissions

注意事项

  1. 网络模式LanLens 必须使用 network_mode: host,这是 ARP 扫描的必需条件。bridge 模式下无法进行 ARP 扫描。

  2. 端口冲突 :如果 7765 端口被占用,可以修改 LANLENS_PORT 环境变量使用其他端口。

  3. 数据备份v1.4.0 及更新版本包含数据库结构变更,强烈建议在更新前备份数据库

  4. 密码重置:如果忘记管理员密码,可以通过以下命令重置:

    bash 复制代码
    docker exec -it lanlens reset-password --password "新密码"
  5. 安全性建议

    • 首次登录后立即修改默认密码
    • 使用强随机 SECRET_KEY
    • 如需 HTTPS 访问,建议将 LanLens 部署在反向代理后面

参考文档

LanLens: Self-hosted network monitoring and documentation dashboard

地址:https://github.com/AlexRosbach/LanLens
alexrosbach/lanlens - Docker Hub

地址:https://hub.docker.com/r/alexrosbach/lanlens
LanLens 官方文档 - Quick Start

地址:https://github.com/AlexRosbach/LanLens#quick-start

相关推荐
珠***格12 小时前
实操落地|防逆流装置的安装规范、调试标准与故障处置
网络·数据库·人工智能·分布式·能源·边缘计算
国科安芯12 小时前
国科安芯推出商业航天级抗辐照全双工 RS485/422 收发器 ASC491S2Y
网络·分布式·单片机·架构·安全性测试
浮芷.14 小时前
鸿蒙PC端 TTS 网络连接错误问题详解:在线/离线模式切换与网络状态管理
网络·华为·开源·harmonyos·鸿蒙·鸿蒙系统
雪度娃娃14 小时前
ASIO异步通信——多线程模型
开发语言·网络·c++·php
luj_176814 小时前
残熵算法:风险缓冲与效率优化的融合
c语言·开发语言·网络·经验分享·算法
Bobolink_14 小时前
多场次美区拍卖直播,网络资源调度与复用方案
网络·网络优化·网络调度·跨境直播·直播网络
时代文章14 小时前
UCX 官方文档和 InfiniBand 架构知识整理
网络·ai·性能优化
快乐肚皮14 小时前
【无标题】
服务器·网络·tcp/ip
zhangfeng113315 小时前
车载gpu 飞地 只保存密钥 不保存 权重 Orin确实有TEE安全飞地(TSEC/OP-TEE)
服务器·网络·人工智能·安全·transformer·芯片
飞Link16 小时前
【TCP\UDP与可靠传输】UDP 的“简单粗暴”和它真正适用的场景
网络·网络协议·tcp/ip·udp