飞牛 NAS 部署 LanLens,把家里的网络设备摸得一清二楚
最近在折腾飞牛NAS,有一个需求一直困扰着我,家里设备越来越多,路由器后台看到的只有一堆IP和MAC地址,根本不知道哪台是哪台。
NAS是NAS,智能音箱是智能音箱,电视盒子是电视盒子,全糊在一起,你敢信???
然后我就发现了LanLens这个东西。
开源、自托管、能自动扫描局域网、能给每台设备加备注、能一键SSH连接,还有深色主题,颜值在线。最关键的是,它完全免费,MIT协议,想怎么折腾就怎么折腾。
今天就把它部署在飞牛NAS上的完整过程记录下来,希望对你有用。
先简单说说 LanLens 是什么
LanLens 是一个自托管的局域网监控和设备文档仪表盘,核心能力是通过ARP扫描持续发现网络中的设备,用MAC/IP地址识别每一台,然后给你一个干净的Web界面来管理它们。你可以给每台设备加备注、记录它跑了哪些服务、配置一键SSH/RDP/HTTP连接,还能用nmap做端口扫描,甚至通过SSH深度扫进去拿到硬件信息、操作系统、容器列表。
对飞牛NAS用户来说,这东西特别实用,NAS本身就是家里的网络核心,把网络监控也跑在上面,顺理成章。
在开始之前,有一件事必须说清楚。
LanLens要做ARP扫描,就必须使用host网络模式,也就是说容器要直接共享宿主机的网络栈,才能发出原始的以太网帧。这跟我们平时部署其他容器不太一样,大多数容器用bridge网络就够了,但LanLens不行,bridge模式下ARP扫描直接失效。
所以这次部署,文件夹创建和后续的docker-compose我们用飞牛的Web界面来操作,但有一种情况例外,如果你更习惯命令行,文章后面也会给出完整的docker cli方案,两种方式任选其一。
先把目录建好
打开飞牛NAS的Web管理界面,进入「文件管理器」,在docker文件夹下新建一个文件夹,命名为lanlens,再在lanlens里面新建一个子文件夹,命名为data。
最终的目录结构是这样,
docker/
└── lanlens/
└── data/data文件夹是LanLens存放SQLite数据库和持久化数据的地方,这个目录必须提前建好,不然容器启动会报错。
生成密钥,这步不能偷懒
这是LanLens最重要的一个环境变量,叫SECRET_KEY,它用来加密存储你的SSH和WinRM凭据,必须是至少32个字符的随机字符串,弱了直接拒绝启动。
打开飞牛NAS的「终端」,或者SSH进去,跑下面这条命令,
openssl rand -hex 32跑完会输出一串64位的十六进制字符串,类似这样,
如果不会使用 SSH,可以直接复制这段话:生成一个32位的随机密码 发给 AI 帮你生成一个32位随机密码。
把这串东西复制下来,后面要用。
把配置文件写好,核心就这一块
飞牛NAS的Docker管理界面支持直接粘贴docker-compose.yml内容来创建项目,不需要手动写文件。
打开「Docker」→「Compose」→「新建项目」,项目名填lanlens,路径选择刚才建好的/vol1/1000/docker/lanlens,然后在compose内容区域把下面的配置粘进去,把SECRET_KEY换成你刚才生成的那串。
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几个参数解释一下,
配置填好之后,点「部署」,飞牛会自动拉取镜像并启动容器,根据网速等个一两分钟。
在「容器」列表里看到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确认一下状态,看到Up或healthy就好了。
注意,因为LanLens用的是host网络模式,端口直接由
LANLENS_PORT环境变量控制,不需要加-p参数映射。
打开浏览器,见证一下
不管你用哪种方式部署,接下来都一样,浏览器访问,
http://你的飞牛NAS的IP:7765第一次进去会让你登录,默认账号密码都是admin,登录之后会弹出重置密码的提示,改一个强密码,这步不能跳过。
改完密码,登录成功,LanLens会自动开始扫描你的局域网,稍等片刻,网络里的设备就会一台一台出现在Dashboard上。
进去之后,先把这三件事做了
第一件,前往Settings → Scan Range,确认扫描的网段配置正确,局域网段一般是192.168.x.0/192.168.x.254,对上了就行。
第二件,如果你想在有新设备接入网络时收到通知,可以去Settings → Notifications配置Telegram通知,填入Bot Token和Chat ID就能用,或配置下 SMTP 服务,通过邮件进行通知,这个通知功能是可选的。
第三件,等首次扫描完成之后,给你认识的设备逐一加上备注,NAS、路由器、电视、手机,一个个标清楚,以后看着就舒服多了。
玩熟了之后,还能这么搞
深度扫描,这个功能可以通过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跑几条命令的事儿,但带来的网络管理体验提升是实实在在的。
可以试试。
既然看到这里了,如果觉得不错,随手点个赞、在看、转发三连吧,如果想第一时间收到推送,也可以给我个星标⭐~
谢谢你看我的文章,我们,下次再见。