10分钟用Docker搭建局域网监控告警系统

38 次阅读 0 点赞 0 评论 8 分钟原创技术教程

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

#Docker #网络监控 #NetAlertX #局域网 #资产发现 #运维自动化
10分钟用Docker搭建局域网监控告警系统

你的网络里到底接了多少台设备?

做后端这几年,我越来越有一个感受:网络管理不是运维的专属活儿,而是每个技术人迟早要面对的难题。

家里 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-scannmap 等命令行工具,这些程序依赖物理网卡直接收发二层以太网帧。如果使用默认的 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 地址。

配置流程:

  1. 左侧导航栏点击 Settings → Plugins
  2. 搜索并找到 Scan > ARP-SCAN,点击启用开关
  3. 扫描间隔保持默认 15 分钟(频率过高会引发局域网广播风暴,影响正常业务)
  4. Network range 填入你的局域网网段,例如 192.168.1.0/24
  5. 点击保存,等待一个扫描周期结束后刷新 Devices 页面

此时你会看到按 MAC 地址去重的设备列表,清晰标注了首次发现时间、最后在线时间以及设备厂商。后续任何新设备接入 WiFi,下一轮扫描都会自动追加记录。这种持续监控的能力,是手机临时扫描类 App 无法替代的。


接入 Telegram 实时告警

光有设备列表只是“看”,真正的价值在于“防”。我们需要实现:陌生设备接入时,第一时间推送消息到手机。

NetAlertX 底层集成了 Apprise 通知框架,原生支持 80 多种消息渠道。这里演示最轻量的 Telegram 对接方案。

获取 Telegram Bot 凭证

  1. 在 Telegram 搜索 @BotFather,发送 /newbot
  2. 按提示输入机器人 Display Name 和 Username,成功后复制返回的 API Token
  3. 搜索 @userinfobot,发送任意文字,复制返回的纯数字 Chat ID

配置通知渠道

回到 NetAlertX 管理后台:

  1. 导航至 Settings → Notification channels
  2. 点击添加,频道类型选择 Apprise
  3. 在 URL 字段填入标准化格式:tgram://<BotToken>/<ChatID>
  4. 保存并点击测试,Telegram 应立刻收到一条测试消息

绑定触发规则

渠道就绪后,需要定义具体的告警触发条件:

  1. 进入 Settings → Notification rules
  2. 新建规则,触发事件选择 New device detected
  3. 关联刚才创建的 Telegram 渠道
  4. 保存生效

配置完成后,每当有未知 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。部署过程中遇到网络权限或扫描异常,欢迎在评论区交流排查思路。

最后更新:2026-09-04T10:03:16

评论 (0)

发表评论

blog.comments.form.loading
0/500
加载评论中...