家里联网设备多了,网速变慢、视频卡顿,多数人只会重启路由器。到底是宽带抽风、哪台设备偷占带宽,还是自建服务挂了,路由器管理页给不出答案。

MakeUseOf 撰稿人 Gregory Gibson 新硬件到手没急着装媒体服务器,而是先用一台虚拟机补齐网络”仪表盘”,用五个开源服务分别管起 DNS、故障监控、设备清点和测速记录。
一、准备一台虚拟机
他新建了一台 Ubuntu 26.04 虚拟机,分配 6GB 内存、20GB 硬盘,固定 IP 为 192.168.1.126,五个服务全部用 Docker Compose 装在这台机器上。其中 AdGuard Home 与 NetAlertX 需直接访问网卡、用 host 模式,其余三个共用一个 Docker 网络。
二、AdGuard Home 接管全网 DNS
它常被当作全网广告拦截器,但更大的价值是把 DNS 变成可观测的控制点。
- 部署后把路由器的 DNS 指向这台虚拟机,全网解析请求都会留痕。
- 查询日志能看出哪台设备请求了哪个域名;在客户端设置里给设备起名后,”Windows 笔记本”会取代无意义的地址。
- 想验证过滤是否生效,可自建一条 ads.test 规则,再从另一台电脑访问,确认请求被拦下。
- 在 DNS 重写中为每个服务建本地记录,如 dns.home、devices.home、status.home、speed.home、proxy.home。
若家中启用了 IPv6,要把 AdGuard Home 同时设为 IPv6 解析器,否则设备会走路由器的 IPv6 DNS 绕开过滤,填入该主机 ULA 地址即可。
三、Uptime Kuma 定位故障点
DNS 集中后这台机器成了单点,监控必须跟上。他建了五个监控项覆盖全部服务,另加一条对路由器的 ping 和一条经 AdGuard Home 的 DNS 查询。
为确认告警有效,可手动停掉一个容器演练:
docker compose stop netalertx
监控项先转黄再转红并记入历史,执行 docker compose start netalertx 后恢复绿色。这样断网时能一眼分清是 DNS、路由器还是哪个容器出了问题。
四、NetAlertX 建立设备清单
路由器的客户端列表只显示此刻在线的设备,名称含糊。NetAlertX 会把扫描结果沉淀成带历史的清单。虚拟机通过桥接网卡接入局域网,动手前先确认 ARP 扫描能穿透虚拟化层:
sudo arp-scan --interface=ens33 192.168.1.0/24
能列出设备后,把 NetAlertX 的 SCAN_SUBNETS 设为 ['192.168.1.0/24 --interface=ens33'],它会持续记录 IP、MAC、厂商、首次与最近出现时间、在线状态及新设备事件。它并非入侵检测系统,出现陌生设备只是提示值得一查。
五、Speedtest Tracker 画出网速曲线
手动测速时好成绩容易记住、差成绩容易忘掉。这个服务改为定时跑,每次保留下载、上传、延迟、抖动、丢包等信息。他固定了两项参数:
SPEEDTEST_SCHEDULE: "17 /2 ":每两小时的第 17 分钟执行,避开整点拥堵;SPEEDTEST_SERVERS: "55297":锁定同一台测速服务器,避免换目标导致数据不可比。
六、Nginx Proxy Manager 甩掉端口号
四个服务跑起来后,地址栏堆了一串端口:AdGuard 是 3000、Uptime Kuma 是 3001、NetAlertX 是 20211、Speedtest Tracker 是 8080。
做法是为每个本地域名建一个 Proxy Host:协议用普通 HTTP,域名填先前写好的 .home 记录,后端填对应地址和端口。AdGuard Home 与 NetAlertX 走 host 网络,填 192.168.1.126 加 3000 或 20211;Uptime Kuma 和 Speedtest Tracker 同在一个 Docker 网络,直接填 uptime-kuma:3001 和 speedtest-tracker:80。保存后输入 status.home 即可直达。
需要注意的地方
五个服务意味着五份维护工作,且都挤在一台虚拟机上,主机离线时 DNS、监控与记录会一起消失。换来的是出问题时不必再靠猜。
来源:MakeUseOf
发表回复