最近在折腾飞牛NAS,有一个需求一直困扰着我,家里设备越来越多,路由器后台看到的只有一堆IP和MAC地址,根本不知道哪台是哪台。

NAS是NAS,智能音箱是智能音箱,电视盒子是电视盒子,全糊在一起,你敢信???

然后我就发现了LanLens这个东西。

开源、自托管、能自动扫描局域网、能给每台设备加备注、能一键SSH连接,还有深色主题,颜值在线。最关键的是,它完全免费,MIT协议,想怎么折腾就怎么折腾。

今天就把它部署在飞牛NAS上的完整过程记录下来,希望对你有用。


先简单说说 LanLens 是什么

LanLens 是一个自托管的局域网监控和设备文档仪表盘,核心能力是通过ARP扫描持续发现网络中的设备,用MAC/IP地址识别每一台,然后给你一个干净的Web界面来管理它们。你可以给每台设备加备注、记录它跑了哪些服务、配置一键SSH/RDP/HTTP连接,还能用nmap做端口扫描,甚至通过SSH深度扫进去拿到硬件信息、操作系统、容器列表。

0-fgnp

对飞牛NAS用户来说,这东西特别实用,NAS本身就是家里的网络核心,把网络监控也跑在上面,顺理成章。


在开始之前,有一件事必须说清楚。

LanLens要做ARP扫描,就必须使用host网络模式,也就是说容器要直接共享宿主机的网络栈,才能发出原始的以太网帧。这跟我们平时部署其他容器不太一样,大多数容器用bridge网络就够了,但LanLens不行,bridge模式下ARP扫描直接失效。

所以这次部署,文件夹创建和后续的docker-compose我们用飞牛的Web界面来操作,但有一种情况例外,如果你更习惯命令行,文章后面也会给出完整的docker cli方案,两种方式任选其一。


先把目录建好

打开飞牛NAS的Web管理界面,进入「文件管理器」,在docker文件夹下新建一个文件夹,命名为lanlens,再在lanlens里面新建一个子文件夹,命名为data

0-zjRX

最终的目录结构是这样,

docker/
└── lanlens/
    └── data/

data文件夹是LanLens存放SQLite数据库和持久化数据的地方,这个目录必须提前建好,不然容器启动会报错。


生成密钥,这步不能偷懒

这是LanLens最重要的一个环境变量,叫SECRET_KEY,它用来加密存储你的SSH和WinRM凭据,必须是至少32个字符的随机字符串,弱了直接拒绝启动。

打开飞牛NAS的「终端」,或者SSH进去,跑下面这条命令,

openssl rand -hex 32

跑完会输出一串64位的十六进制字符串,类似这样,

0-YMsn

如果不会使用 SSH,可以直接复制这段话:生成一个32位的随机密码 发给 AI 帮你生成一个32位随机密码。

0-bghd

把这串东西复制下来,后面要用。


把配置文件写好,核心就这一块

飞牛NAS的Docker管理界面支持直接粘贴docker-compose.yml内容来创建项目,不需要手动写文件。

打开「Docker」→「Compose」→「新建项目」,项目名填lanlens,路径选择刚才建好的/vol1/1000/docker/lanlens,然后在compose内容区域把下面的配置粘进去,把SECRET_KEY换成你刚才生成的那串。

0-pmeD
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=把你生成的密钥粘在这里
      - DEFAULT_ADMIN_PASSWORD=admin
      - LANLENS_PORT=7765
      - BACKEND_PORT=17765
      - TZ=Asia/Shanghai
    healthcheck:
      test: ["CMD-SHELL", "curl -fs http://localhost:/api/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 20s

几个参数解释一下,

环境变量

默认值

说明

SECRET_KEY

必填

加密凭据用,最少32字符

DEFAULT_ADMIN_PASSWORD

admin

初始密码,首次登录后必须改

LANLENS_PORT

7765

Web界面端口,冲突了改这里

BACKEND_PORT

17765

内部API端口,一般不用动

TZ

Asia/Shanghai

容器时区

配置填好之后,点「部署」,飞牛会自动拉取镜像并启动容器,根据网速等个一两分钟。

0-UmeX

在「容器」列表里看到lanlens状态变成「运行中」,就说明跑起来了。


【可选】命令行党看这里,docker cli 一步到位

如果你更习惯SSH命令行,不想走Web界面,下面这条命令可以直接替代上面所有的准备工作,一步到位。

先SSH进飞牛NAS,

ssh 你的用户名@你的飞牛NAS的IP

建好目录,

mkdir -p /vol1/1000/docker/lanlens/data
cd /vol1/1000/docker/lanlens

生成密钥,

openssl rand -hex 32

把生成的密钥复制下来,替换下面命令里的SECRET_KEY值,然后直接跑,

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=把你的密钥粘在这里 \
  -e DEFAULT_ADMIN_PASSWORD=admin \
  -e LANLENS_PORT=7765 \
  -e BACKEND_PORT=17765 \
  -e TZ=Asia/Shanghai \
  alexrosbach/lanlens:latest

跑完用docker ps | grep lanlens确认一下状态,看到Uphealthy就好了。

0-ADWu

注意,因为LanLens用的是host网络模式,端口直接由LANLENS_PORT环境变量控制,不需要加-p参数映射。


打开浏览器,见证一下

不管你用哪种方式部署,接下来都一样,浏览器访问,

http://你的飞牛NAS的IP:7765

第一次进去会让你登录,默认账号密码都是admin,登录之后会弹出重置密码的提示,改一个强密码,这步不能跳过。

0-uVcB
0-rKRT

改完密码,登录成功,LanLens会自动开始扫描你的局域网,稍等片刻,网络里的设备就会一台一台出现在Dashboard上。

0-ZKch

进去之后,先把这三件事做了

第一件,前往SettingsScan Range,确认扫描的网段配置正确,局域网段一般是192.168.x.0/192.168.x.254,对上了就行。

0-IAbL

第二件,如果你想在有新设备接入网络时收到通知,可以去SettingsNotifications配置Telegram通知,填入Bot Token和Chat ID就能用,或配置下 SMTP 服务,通过邮件进行通知,这个通知功能是可选的。

0-BOIU

第三件,等首次扫描完成之后,给你认识的设备逐一加上备注,NAS、路由器、电视、手机,一个个标清楚,以后看着就舒服多了。

0-MqlK
0-XNtF

玩熟了之后,还能这么搞

深度扫描,这个功能可以通过SSH连进Linux设备,拿到CPU型号、内存、磁盘、运行中的容器列表等详细信息。飞牛NAS本身就是Linux,理论上可以对NAS自身做深度扫描,在Settings里配置好SSH凭据就行,官方文档在 https://github.com/AlexRosbach/LanLens#deep-scan--required-permissions

一键连接,在设备详情页可以配置SSH、HTTP、HTTPS的快捷入口,配好之后直接点就能跳转,省去每次手动输IP的麻烦。

换数据库,LanLens默认用SQLite存数据,对家用场景完全够用。如果你已经在飞牛NAS上跑了MariaDB,也可以改用MariaDB,在compose配置里加一行DATABASE_URL就行,

- DATABASE_URL=mysql+pymysql://lanlens:你的密码@127.0.0.1:3306/lanlens

注意因为是host网络模式,数据库地址直接用127.0.0.1就能访问宿主机上的MariaDB。


踩坑记录,提前看能省不少事

网络模式这块,前面说了,必须用host,bridge模式ARP扫描直接废掉,这个没有绕过的办法。

端口冲突,7765这个端口如果已经被飞牛NAS上的其他服务占用了,改LANLENS_PORT的值就行,比如改成8765,重启容器生效。

数据备份,LanLens v1.4.0之后有数据库结构变更,更新之前一定要备份data目录,SSH进去跑一行,

cp -r /vol1/1000/docker/lanlens/data /vol1/1000/docker/lanlens/data.bak

密码忘了,不用慌,进容器重置,

docker exec -it lanlens reset-password --password "你的新密码"

安全这块,如果你的飞牛NAS有公网访问需求,强烈建议在LanLens前面加一层反向代理,比如Nginx Proxy Manager,套上HTTPS,不要裸跑在公网上。


怎么说呢,LanLens这个东西,真的让我第一次觉得家里的网络「被我掌握了」。以前路由器后台一堆没有名字的设备,现在每台都清清楚楚,哪台在线、哪台跑了什么服务、什么时候新接入了一台陌生设备,一目了然。

对飞牛NAS用户来说,部署成本不高,Web界面点几下或者SSH跑几条命令的事儿,但带来的网络管理体验提升是实实在在的。

可以试试。


既然看到这里了,如果觉得不错,随手点个赞、在看、转发三连吧,如果想第一时间收到推送,也可以给我个星标

谢谢你看我的文章,我们,下次再见。