如何 5 分钟部署 WatchYourLAN:局域网监控从 0 到 1 完整教程
【免费下载链接】WatchYourLANLightweight network IP scanner written in Go. With notifications, history, export to Grafana项目地址: https://gitcode.com/GitHub_Trending/wa/WatchYourLAN
一台陌生设备悄悄接入你的内网,你却完全不知道它从哪来。WatchYourLAN 是一款轻量局域网监控工具,靠 IP 扫描与主机发现持续记录设备在线历史,陌生设备一出现还能推送提醒。照这篇操作,30 分钟跑起你自己的内网监控。
一条命令跑起来
这一步解决的是"最快看到结果":先让监控转起来,其他配置以后随时调。
WatchYourLAN 的 Docker 部署有个硬性要求:必须用 host 网络模式,因为它要调用arp-scan直接在宿主网络栈上收发 ARP 包。把eth0换成你的接口(ip link show可以查),执行:
docker run --name wyl \ -e "IFACES=eth0" \ -e "TZ=Asia/Shanghai" \ --network="host" \ -v ~/wyl:/data/WatchYourLAN \ aceberg/watchyourlan| 参数 | 作用 |
|---|---|
IFACES | 要扫描的网络接口,必填,多个用空格分隔 |
TZ | 时区,必填,保证历史记录时间正确 |
--network=host | 使用宿主网络,arp-scan 收发 ARP 包所必需 |
-v ~/wyl:/data/WatchYourLAN | 数据卷,保存配置与数据库 |
浏览器打开http://localhost:8840,这就是主机清单主界面:
每台主机的 IP、MAC、厂商、最后在线时间和在线状态一目了然。不想用容器也行:项目的 latest release 提供各发行版的二进制安装包,运行时依赖arp-scan和tzdata两个系统包,装完一样打开 8840 端口。
扫不全?从普通接口到 VLAN、docker0 逐级升级
这一步解决"我的网不止一个平面":先按最简配置来,扫不全再逐级加料。
第一级是IFACES,填接口名就行,绝大多数家庭网络到这一级就够。第二级是ARP_ARGS,它会给每个接口的扫描命令追加参数,比如想减少重试就填-r 1;把LOG_LEVEL设为debug,日志会打印实际执行的完整arp-scan命令,方便你核对参数有没有生效。
VLAN 107 与 docker0:两条现成命令
第三级是ARP_STRS,它和IFACES完全独立,每条字符串会被原样当成一条arp-scan命令执行。网络里有个 VLAN 107 的网段时这样写:
ARP_STRS_JOINED: "-gNx 10.0.107.0/24 -Q 107 -I eth0"-Q 107指定 VLAN ID。注意字符串的最后一个词会被当成发现主机所属的接口名,所以接口一定放最后。想把 Docker 网桥 docker0 也扫进来,逗号后再接一条:
ARP_STRS_JOINED: "-gNx 172.17.0.1/24 -I docker0,-gNx 10.0.107.0/24 -Q 107 -I eth0"⚠️ 多条扫描串用逗号分隔,逗号前后不能有空格,否则会被解析错。
ARP_STRS也可以在 GUI 的 Arp Strings 输入框逐条添加,或写进config_v2.yaml;走环境变量(比如 docker-compose)时用ARP_STRS_JOINED。arp-scan VLAN 扫描的完整细节见 docs/VLAN_ARP_SCAN.md。
新主机一出现就收到提醒,还能画进 Grafana
这一步解决"被动等发现":陌生设备出现时主动推给你,历史数据再进图表。
Shoutrrr:新主机出现即通知
WatchYourLAN 内置了Shoutrrr通知,你只需要填一个SHOUTRRR_URL,支持 Discord、Email、Telegram、Slack、Ntfy 等渠道,格式跟着所选渠道走。以 Gotify 为例,在配置文件里写:
shoutrrr_url: "gotify://192.168.0.1:8083/token/?title=Unknown host detected"之后每发现一台新主机,都会收到一条Unknown host found. Name: ... IP: ... MAC: ...的消息。渠道没配好也没关系,点 Config 页的测试按钮(对应/api/notify_test)先发一条 test notification 验证链路。
历史不用额外配置:每次扫描比对后,状态变化都会写进数据库的 history 表,History 页能看到每台设备的在线时间线,超过TRIM_HIST(默认 48 小时)的记录自动清理。
数据进 Grafana:InfluxDB2 或 Prometheus 二选一
想画面板,两条路挑一条。走InfluxDB2:打开INFLUX_ENABLE,再填服务器地址、bucket、org、token,这四个值与 Grafana 里 InfluxDB 数据源的配置一一对应,连不上会打错误日志。走Prometheus更省事:只开PROMETHEUS_ENABLE,/metrics端点就暴露出一个watch_your_lan_up指标,1 代表在线、0 代表离线,Grafana 加个数据源直接画面板 📊
数据库这块默认SQLite,想换PostgreSQL时设USE_DB=postgres加连接串即可,连接失败会自动回退到 SQLite。
| 变量 | 作用 | 默认值 |
|---|---|---|
TIMEOUT | 两次扫描间隔(秒) | 120 |
TRIM_HIST | 历史记录保留时长(小时) | 48 |
SHOUTRRR_URL | 新主机通知渠道地址 | 空 |
INFLUX_ENABLE | 启用 InfluxDB2 导出 | false |
PROMETHEUS_ENABLE | 启用 Prometheus/metrics端点 | false |
其余变量在 Web GUI 的 Config 页都能改,键名就是环境变量的小写形式。
上生产前必做的三件事
这一步解决"长期挂着不出事":认证、离线资源、API 集成,三件都做好才算上生产。
加认证:Authelia 或 ForAuth
WatchYourLAN 本身没有内置登录,推荐在前面挂 Authelia 这类 SSO,或作者写的轻量认证应用 ForAuth,仓库里带了配套的docker-compose-auth.yml示例。
⚠️ WYL 必须以 host 网络模式运行,Web 端口会直接暴露在宿主网络上。务必用防火墙或路由器 ACL 限制对 8840 端口的访问,否则任何人都能打开你的管理界面。
离线资源模式:-n 参数接入本地资源节点
默认 Web 界面会从互联网拉主题、图标和字体。纯内网环境先跑一个内置全部资源的小镜像:
docker run --name node-bootstrap -p 8850:8850 aceberg/node-bootstrap再给 WYL 加-n参数指向它,界面就完全不再依赖外网:
docker run --name wyl \ -e "IFACES=eth0" -e "TZ=Asia/Shanghai" \ --network="host" \ -v ~/wyl:/data/WatchYourLAN \ aceberg/watchyourlan -n "http://192.168.0.10:8850"HTTP API 与社区集成
想把自己的脚本接进主机清单,HTTP API 覆盖得挺全:/api/all拿全部主机 JSON,/api/status拿在线/离线统计,/api/port/地址/端口探测端口,/api/wol/MAC发 Wake-on-LAN 魔法包,/api/rescan触发立即重扫。完整清单见 docs/API.md,启动后访问/swagger/还能在线调试。社区也已有 AUR 包、Python 客户端等基于同一套 API 的集成,可以直接参考。
部署跑通只是开始:想理解扫描协程和主机比对逻辑,可以从 backend/internal/ 下的 arp、routines、notify 模块读起;文档目录里还有 API 与 VLAN 扫描的完整说明,够你再折腾一阵子。
【免费下载链接】WatchYourLANLightweight network IP scanner written in Go. With notifications, history, export to Grafana项目地址: https://gitcode.com/GitHub_Trending/wa/WatchYourLAN
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考