10分钟用Docker搭建局域网监控告警系统
教你用 Docker 一键部署 NetAlertX,实现局域网设备自动发现与实时监控。配置 ARP 扫描后,结合 Telegram 实现新设备接入秒级告警。全程无需复杂配置,数据本地化,适合家庭实验室与运维工程师快速搭建网络资产监控闭环。

你的网络里到底接了多少台设备?
做后端这几年,我越来越有一个感受:网络管理不是运维的专属活儿,而是每个技术人迟早要面对的难题。
家里 NAS、树莓派、朋友的手机临时连 WiFi、IoT 设备悄悄上线……路由器后台永远是一团乱麻。企业环境更复杂,影子 IT 设备随意接入、IP 地址频繁漂移、未经授权的服务暗中运行,等你察觉时往往已经引发安全事件。
我之前试过 Fing 这类手机 App,扫一次看一次,无法持续盯防;Zabbix、Nagios 又过于笨重,光是调通插件就够喝一壶的。直到我遇到 NetAlertX —— 一个用 Docker 起一下就能跑的网络可见性平台,持续发现设备、监控状态变化、还能自动发通知。
这篇教程带你从零到一,在局域网里部署 NetAlertX、配置主动扫描、接入 Telegram 告警。跟着走完一遍,你就能拥有一套 7×24 小时自动盯守网络的眼睛。
环境准备
| 要求 | 说明 |
|---|---|
| 一台 Linux 主机 | Ubuntu/Debian/CentOS 均可,虚拟机或物理机不限,2C4G 配置足够运行 |
| Docker 环境 | 执行 docker --version 确认已安装且可正常运行 |
| 宿主机网络权限 | 容器必须使用 --network=host 模式,否则无法抓包 |
| Telegram 账号(可选) | 用于接收实时告警推送,下文会详细说明创建流程 |
为什么强制要求 host 网络模式?NetAlertX 底层调用的是 arp-scan、nmap 等命令行工具,这些程序依赖物理网卡直接收发二层以太网帧。如果使用默认的 bridge 桥接网络,ARP 请求会被 Docker 的 NAT 规则拦截,导致扫描结果全部为空。这个坑很多新手第一次部署时都会踩。
部署容器
官方提供了极简的 Docker 启动命令,我们直接拿来用,但我会把每个核心参数拆解清楚,方便你后续按需调整。
执行以下脚本创建数据目录并启动容器:
bash
mkdir -p /opt/netalertx/{config,db}
docker run -d \
--name netalertx \
--network=host \
--restart unless-stopped \
--cap-add=NET_RAW \
--cap-add=NET_ADMIN \
--cap-add=NET_BIND_SERVICE \
-v /opt/netalertx/config:/data/config \
-v /opt/netalertx/db:/data/db \
-v /etc/localtime:/etc/localtime:ro \
-e PORT=20211 \
-e APP_CONF_OVERRIDE='{"GRAPHQL_PORT":"20214"}' \
ghcr.io/netalertx/netalertx:latest
参数拆解说明:
--network=host:共享宿主机网络栈,ARP 扫描的物理基础--cap-add=NET_RAW等三项权限:赋予容器底层发包、绑定特权端口的能力-v挂载/data/config与/data/db:持久化核心配置与设备库,后续升级容器时不会丢失历史数据-v /etc/localtime:同步宿主机时区,避免日志时间出现偏差PORT=20211:自定义 Web 管理面板访问端口,按需修改即可
等待几十秒后,浏览器打开 http://<宿主机IP>:20211,即可进入 NetAlertX 初始界面。
配置设备自动发现
登录系统后,首要任务是配置扫描引擎,让局域网里的设备自己“冒出来”。
NetAlertX 内置了十余种发现插件:arp-scan、Pi-hole DHCP 日志、UNIFI 控制器 API、SNMP 轮询等。针对普通家庭或小型办公网络,arp-scan 是最稳定、最省心的选择。它的工作原理非常简单:向指定网段广播 ARP 请求,存活设备收到后会自动响应并上报 MAC 地址。
配置流程:
- 左侧导航栏点击 Settings → Plugins
- 搜索并找到
Scan > ARP-SCAN,点击启用开关 - 扫描间隔保持默认 15 分钟(频率过高会引发局域网广播风暴,影响正常业务)
- 在 Network range 填入你的局域网网段,例如
192.168.1.0/24 - 点击保存,等待一个扫描周期结束后刷新 Devices 页面
此时你会看到按 MAC 地址去重的设备列表,清晰标注了首次发现时间、最后在线时间以及设备厂商。后续任何新设备接入 WiFi,下一轮扫描都会自动追加记录。这种持续监控的能力,是手机临时扫描类 App 无法替代的。
接入 Telegram 实时告警
光有设备列表只是“看”,真正的价值在于“防”。我们需要实现:陌生设备接入时,第一时间推送消息到手机。
NetAlertX 底层集成了 Apprise 通知框架,原生支持 80 多种消息渠道。这里演示最轻量的 Telegram 对接方案。
获取 Telegram Bot 凭证
- 在 Telegram 搜索
@BotFather,发送/newbot - 按提示输入机器人 Display Name 和 Username,成功后复制返回的 API Token
- 搜索
@userinfobot,发送任意文字,复制返回的纯数字 Chat ID
配置通知渠道
回到 NetAlertX 管理后台:
- 导航至 Settings → Notification channels
- 点击添加,频道类型选择 Apprise
- 在 URL 字段填入标准化格式:
tgram://<BotToken>/<ChatID> - 保存并点击测试,Telegram 应立刻收到一条测试消息
绑定触发规则
渠道就绪后,需要定义具体的告警触发条件:
- 进入 Settings → Notification rules
- 新建规则,触发事件选择
New device detected - 关联刚才创建的 Telegram 渠道
- 保存生效
配置完成后,每当有未知 MAC 地址出现在网络中,你的手机 Telegram 会秒级弹出卡片:包含设备名称、MAC、IP 及精确发现时间。安全边界由此建立。
高频避坑指南
跨网段/VLAN 设备扫描不到
ARP 是严格的二层局域网协议,天然无法跨越路由器或 VLAN 边界。如果你的网络划分了多个子网,需要在每个子网内部署独立的 NetAlertX 采集节点,通过内置的 Sync Nodes 功能将数据汇总到主节点。普通家庭单 /24 网段无需此操作。
告警消息刷屏怎么办
手机通知被轰炸会严重影响体验。去 Notification rules 中为规则添加 throttling(限流策略),例如设置“同一事件 1 小时内仅推送一次”。生产环境强烈建议开启,避免设备网卡重连或 DHCP 续约导致的通知风暴。
容器升级数据会丢失吗
只要部署时正确挂载了 /data/config 和 /data/db,数据就与容器生命周期解耦。升级时只需 docker stop netalertx && docker rm netalertx,拉取最新镜像后执行相同的 docker run 命令,历史记录和配置会完整继承。操作前建议对挂载目录执行一次 tar 备份。
Wi-Fi 客户端识别混乱
现代 iOS 和 Android 默认开启“私有 Wi-Fi 地址”(MAC 随机化),导致同一台手机每次连接都显示为新设备。可在手机 Wi-Fi 设置中针对家庭网络关闭此功能,或在 NetAlertX 中导入路由器 DHCP Leases 文件辅助绑定真实设备指纹。
写在最后
走完这套流程,你实际上完成了一件很有工程价值的事:用一行 Docker 命令拉起了一套持续运行的网络资产监控平台,打通了自动发现到实时告警的完整闭环。 无需依赖第三方云服务,所有流量与数据严格本地化,架构轻量且扩展性极强。
后续如果有余力,可以尝试对接 Home Assistant 实现设备上下线触发智能家居场景,或者通过 Prometheus Exporter 将指标接入 Grafana 绘制网络健康大盘。这些进阶玩法留待后续专题展开。
项目仓库地址:netalertx/NetAlertX,官方文档站:docs.netalertx.com。部署过程中遇到网络权限或扫描异常,欢迎在评论区交流排查思路。