扫一遍局域网,陌生设备立刻现形

简介

什么是 LAN Orangutan ?

LAN Orangutan 是一个开源的轻量级局域网设备发现工具,底层借助 nmap 自动扫描网络中的设备,并为每一台设备打上持久化的标签、分组和备注。它可以帮助用户在完全本地化的前提下,快速搞清家庭或办公网络上到底”有什么”。

主要特点

  • 自动发现设备:基于 nmap 自动扫描网络,识别 IPMAC 地址、厂商和主机名
  • 设备标注管理:可以为设备添加标签、分组和备注,并在多次扫描后保持不变,便于长期追踪
  • 多网络支持:自动检测本机所有网络接口,也支持手动添加路由网段或 VLAN
  • Tailscale 集成:自动拉取 tailnet 在线节点,也可以在应用内一键连接、断开 Tailscale(需要在宿主机安装 Tailscale,详见注意事项)
  • 实时扫描进度:扫描在后台运行,仪表盘可实时查看进度,长扫描不会超时,还支持随时取消
  • 现代 Web 仪表盘:实时在线状态、明暗双主题、搜索过滤、快捷键操作,支持导出 CSV/JSON
  • 完整 CLI 工具:内置命令行工具,支持 scanservelistexport 等命令,输出 JSON
  • 数据完全本地:设备列表、标签和设置都保存在本地,无任何云端依赖
  • 开源免费:基于 MIT 协议开源,可免费使用和修改

应用场景

  • Homelab 设备盘点:家庭服务器、树莓派、NAS、智能家居设备数量众多,一键扫描即可摸清家底,并给每台设备打上标签方便管理
  • IoT 设备监控:随时掌握哪些物联网设备在线、哪些掉线,MAC 厂商信息还能帮你识别”陌生设备”
  • Tailscale 网络管理:在应用内直接查看 tailnet 在线节点,并快速连接、断开 Tailscale,无需切换到命令行(仅限直接运行二进制时可用,Docker 部署下不可用)
  • 网络安全自查:定期扫描网络可以发现未授权的接入设备,配合导出功能留存设备变更记录
  • 开发者测试:开发人员可以在局域网内快速搭建一个轻量的设备发现环境,用于排障和调试

LAN Orangutan 界面

LAN Orangutan 是一个把”局域网里有什么”这个问题回答得最简单、最直观的自托管工具,设备发现、标注和追踪一屏搞定。

项目采用 Go 编写,以单个二进制发布,支持 LinuxmacOSWindows,同时提供 Docker 镜像,还内置了 Tailscale 集成,是一款面向 homelab 玩家的自托管网络发现利器。

安装

在群晖上以 Docker 方式安装。

本文写作时, latest 版本对应为 3.3.8

LAN OrangutanDocker 方式部署有一个特殊要求:必须使用 host 网络模式,且容器需要 NET_RAWNET_ADMIN 等额外权限。原因在于,如果使用 Docker 默认的 bridge 网络,容器永远只能看到 172.17.0.0/16 上的其他容器,而看不到局域网里的真实设备。

官方镜像同时发布在 Docker Hub291group/lan-orangutan)和 GitHub Container Registryghcr.io/291-group/lan-orangutan),下面的命令以 GHCR 为例。

docker cli 安装

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 新建文件夹 lan-orangutan 和 子目录
mkdir -p /volume1/docker/lan-orangutan/data

# 进入 lan-orangutan 目录
cd /volume1/docker/lan-orangutan

# 一键启动
docker run -d \
--name=lan-orangutan \
--restart=unless-stopped \
--network host \
--cap-add NET_RAW \
--cap-add NET_ADMIN \
--cap-add NET_BIND_SERVICE \
-v $(pwd)/data:/var/lib/lan-orangutan \
-e ORANGUTAN_PORT=10291 \
-e TZ=Asia/Shanghai \
ghcr.io/291-group/lan-orangutan:latest

环境变量的简单说明,更多的环境变量可以参考:https://hub.docker.com/r/291group/lan-orangutan#configuration

可变
ORANGUTAN_PORT 10291,服务监听端口
TZ Asia/Shanghai,时区
ORANGUTAN_PASSWORD 可选,预设仪表盘密码

环境变量说明ORANGUTAN_PASSWORD 可以不设置,首次打开仪表盘时应用会引导你创建密码;如希望提前确定密码,可在此设置。更多变量还包括 ORANGUTAN_BIND_ADDRESS(默认 0.0.0.0)、ORANGUTAN_SESSION_HOURS(默认 168)等。

docker-compose 安装

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
services:
lan-orangutan:
image: ghcr.io/291-group/lan-orangutan:latest
container_name: lan-orangutan
restart: unless-stopped

# 使用宿主机网络,才能扫描真实局域网设备
network_mode: host

# nmap 扫描及获取 MAC 地址所需权限
cap_add:
- NET_RAW
- NET_ADMIN
- NET_BIND_SERVICE

environment:
# 不设置密码时,首次打开网页会提示创建
# - ORANGUTAN_PASSWORD=change-me
- ORANGUTAN_PORT=10291
- TZ=Asia/Shanghai

# 保存设备列表、标签和密码,避免容器重建后丢失
volumes:
- ./data:/var/lib/lan-orangutan

# 容器健康检查
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://127.0.0.1:10291/static/orangutan.svg"]
interval: 30s
timeout: 3s
start_period: 5s
retries: 3

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

1
2
3
4
5
6
7
8
9
10
# 新建文件夹 lan-orangutan 和 子目录
mkdir -p /volume1/docker/lan-orangutan/data

# 进入 lan-orangutan 目录
cd /volume1/docker/lan-orangutan

# 将 docker-compose.yml 放入当前目录

# 一键启动
docker-compose up -d

运行

在浏览器中访问 http://<群晖IP>:10291 即可进入主界面,首次需要先设置密码

登录成功后的主界面,应用会自动扫描检测到的网络,在仪表盘即可查看发现的设备,并为其添加标签、分组和备注

如需扫描未被自动检测到的网段,需通过环境变量 ORANGUTAN_NETWORKS 或配置文件 config.ini 中的 [scanning] networks 指定(设置界面没有添加网络的入口),添加后这些网络会出现在仪表盘上供扫描

Docker 部署中,通过环境变量添加额外网段:

1
2
# docker cli 方式:追加 -e 参数
-e ORANGUTAN_NETWORKS=192.168.10.0/24,10.0.5.0/24

或在 docker-compose.ymlenvironment 中添加:

1
2
3
4
environment:
- ORANGUTAN_PORT=10291
- TZ=Asia/Shanghai
- ORANGUTAN_NETWORKS=192.168.10.0/24,10.0.5.0/24

说明ORANGUTAN_NETWORKS 用于扫描通过路由器可达的网段或 VLAN,这类网络没有本机接口,不会被自动检测。通过路由网段扫描到的设备没有 MAC 地址和厂商信息,因为 ARP 只对同一网段生效。

注意事项

  1. 必须使用 host 网络模式:使用 Docker 默认 bridge 网络时,容器只能发现其他容器(172.17.0.0/16),无法发现局域网设备,且页面不会报错,看起来一切正常,实际结果却是错的
  2. 仅支持 Linux 上的 DockerDocker on macOS/Windows 的容器运行在虚拟机里,host 网络实际挂载的是虚拟机网络,扫描和访问均不可用,需要在宿主机直接运行二进制文件
  3. 容器无需额外安装 nmap:官方镜像内已内置 nmap 及其脚本,而直接在宿主机运行二进制时,需要自行安装 nmap
  4. 忘记密码怎么办:密码以 bcrypt 哈希保存在数据目录下的 auth 文件中(本例为 docker/lan-orangutan/data/auth),删除该文件并重启容器,即可重新设置密码,设备列表和标签不受影响,也没有任何数据会被清空
  5. 无内置 HTTPS:默认监听在网络上,建议将服务放在反向代理(如 Nginx、Traefik)之后,或通过 Tailscale` 访问,以保证连接加密
  6. Docker 部署下 Tailscale 集成不可用Tailscale 功能依赖宿主机上安装的 Tailscale CLI,而 Docker 容器拥有自己的文件系统,无法访问宿主机的 Tailscale,即使宿主机已接入 tailnet,仪表盘上的 Tailscale 状态卡片也会显示”未安装”。如需使用 Tailscale 集成,请在宿主机上直接运行二进制文件,而不是部署在容器中
  7. 安全建议:如通过反向代理完成认证,可以设置 allow_insecure 跳过密码;否则切勿在网络监听(0.0.0.0)下关闭密码保护,否则任何能路由到该主机的人都可读取甚至删除设备列表

参考文档

291-Group/LAN-Orangutan: Self-hosted network discovery for homelabbers with Tailscale support.
地址:https://github.com/291-Group/LAN-Orangutan

LAN Orangutan — Lightweight Network Scanner | 291 Group
地址:https://lanorangutan.com/

Docker Hub 镜像页面
地址:https://hub.docker.com/r/291group/lan-orangutan