为什么盯上这台网关
家里现在是这样:硬路由跑 PPPoE 和基本的 NAT/Firewall,旁路由上挂着一套自己的代理网关(容器化那一类)、AdGuard Home 做 DNS 拦截、WireGuard 容器给家人和自己用,三套容器各管各的,最近一年没再扩容过,但每次想加个新能力就得改 Compose、加端口、还要小心它们的网段别撞上。
直到上周翻到一个叫 Wardnet 的项目,定位一句话:「可以理解为 Pi-hole 的替代品,内置每设备 VPN 路由、网络分段和移动应用」。单二进制、Linux 跑、不替代主路由,它说自己要当 gateway 就当 sidecar。我顺手翻了下源码和 release,意识到这其实是把上面那三套容器整体打包成一个进程——只是这个进程真的什么都管。
这周它把版本刷到了 v2026.08.00。值得记一笔。

## 它到底在管什么
如果只看项目主页的介绍,它会让人以为是另一个 AdGuard Home 替代。但把 release notes 翻完,会发现这东西本质是个 gateway 套件,核心四件:
– DNS 拦截:StevenBlack / OISD / AdGuard 三套分流列表直接内置,没要求你再开一个 Pi-hole
– DHCP:自带,加 ARP 扫描 + OUI 厂商识别,新连进来的设备会自动出现在列表里
– 每设备 VPN 路由:WireGuard 隧道一个或者多个,按 MAC / 子网 / 域名规则绑定到不同出口
– 网络区域(zone):把设备打标签进 iot / media / guest / kids 几个区,区域之间默认不通
也就是说,我以前那三套容器(代理网关、AdGuard Home、WireGuard)要做的事,它在网关这一个进程里全部覆盖。还附送你结构化诊断、CLI(叫 wctl)、OpenAPI 文档——以及一个 Wi-Fi 设备可对应到蓝牙 MAC 的小细节。

## v2026.08.00 这次改了啥
按照 release notes 自 2026.07.01 以来最大版本,最大变化是四件事凑到一起落地:
域名路由配置。按域名规则把流量引导到指定隧道。比如 `*.netflix.com` → UK 隧道、`*.youtube.com` → 别的出口。在网关执行,设备不需要装客户端也不需要切换系统代理。这一条对家里有 NAS、HTPC、电视盒子的人最直接,不用每个 app 自己配代理。
DNS 查询分析升级。原来只是总数,现在把拦截按公司归类(Google / Meta / Amazon 这些),按设备排名查询量,周环比对比。也就是说「这台电视一晚上跑了 18 万次 Google 域名解析」这种以前只能靠 tcpdump 猜的事,现在 UI 里点开就有。
Private DNS(Premium,手机在蜂窝下也能用你家的过滤解析走 DoT 853 进来)。这一项要钱,我没测,不评价。
CLI 重写。新 wctl 19 个命令统一支持 `–json`,Go SDK 同步发布。给习惯 shell 化操作的人算是补上了最短那块板。

fix 那一栏里有两条值得在升级前看一眼:
1. 数据库无限增长 bug——单一网关在某人手里涨到了 2.15 GB,两个独立的问题修掉。这意味着如果你已经在跑了,升级前最好 `du -sh /var/lib/wardnet/` 看了一眼存了多少,能省一步重建。
2. `systemctl stop wardnetd` 行为变了:现在会清理自身 nftables 表和 `wg_ward*` 接口。如果你的脚本里有依赖「停服但保留规则」的步骤,要重新对一遍;否则下次重启会变成裸奔。
## 按设备走不同出口,这个值得展开一下
网关类工具(Pi-hole 路线、传统固件路由器路线、x86 防火墙路线)已经被讨论得差不多了。Wardnet 把镜头从「管控」转到「策略路由」,思路是这样的:
1. ARP 拿到设备 IP/MAC/厂商
2. 看它当前所在 zone(iot / media / kids / guest / 默认)
3. 看域名规则(设备发起 `*.netflix.com` 查询时匹配 UK 隧道)
4. 看设备级 VPN 绑定(某台 NAS 直接绑到一个专用隧道)
5. 任意一条命中就走策略路由表,剩下的走默认出口
意味着你在家里可以做到这种状态:办公笔记本默认出口走 UK 隧道;智能电视被丢进 media 区,仅允许 80/443 出去,且不能访问内网;扫地机器人只允许厂商域,其他一律黑洞;女儿手机被丢进 kids 区,访问列表是自建的;访客 Wi-Fi 走完全独立的 zone,只能上互联网、内网一刀切。

如果换到我自己的环境:硬路由不动,旁路由继续承担最关键的网络出口(这不是 wardnet 能替代的事),wardnet 跑在一台空着的迷你机上接软路由下游,拿到的是「我以前用三套容器兜起来的事,现在一套进程管」。运维上省了不少——尤其是 iptables/nftables 这块,以前改一条规则怕撞上 dnsmasq,改另一条怕撞上代理网关的 TUN,现在只有 wardnet 一个边界。
## 几个我自己试之前会先想清楚的点
它是 sidecar 路线,不是替代品。这意味着主路由、IPv6/PPPoE、基础 NAT 这些还得交给原来那台。wardnet 的设计是放在主路由下游,专门做「DNS + DHCP + VPN 路由 + 分区」这几件事。如果你想要的是一个能完整取代路由系统的二合一,那 pfSense / OPNsense 比它成熟得多,没它什么事。
它仍是早期项目。作者自己 README 里也写了「expect rough edges」。issue 列表里目前看得到 open 比 merged 多一些,CALVER 版本号每月一刷,但 release notes 中破碎的、数据库膨胀这种历史 bug,让我暂时不会把它推到家里主网关的位置。比较合理的姿势是放一台空机器做实测或者作为旁路第二选择,生产网关继续用我已经熟悉的那套。
它对硬路由有依赖。wardnet 现在不接管 PPPoE,不当 DHCPv6 服务器,不做 IPv6 RA;它要绑定一个 LAN 网卡。这意味着虽然它能简化「DNS + VPN + 分区」这堆容器,IPv4 / IPv6 双栈防火墙那一层你还是得自己想办法。
## 接下来我打算这么做
不替换主路由。
把 wardnet 装到一台二手 mini-PC 上,主路由 DHCP 把它设为「指定 DNS」+「首选 DHCP」模式,把家里所有设备的 DNS 流量引导过去。试一周,重点看:
– DNS 拦截命中数和漏网数,是否真的能替代我现在的 AdGuard Home
– 数据库大小是不是真的不再膨胀
– 每设备 VPN 路由那套策略路由表,会不会跟我现有的旁路代理面板打架
– 重启一次主路由之后 wardnet 能不能自己恢复所有规则
如果一切还过得去,就用它替换 AdGuard Home + WireGuard 这两套容器,代理网关那套继续留旁路由不管。等于少两个进程的运维量,但核心代理面板仍然独立——因为那部分是另一回事,不在 wardnet 设计范围内。
如果你已经在跑 ad-blocking + 多 WireGuard + 区域隔离这套,看到 v2026.08.00 这种把策略路由和查询分析做齐的版本,可以考虑在实验机器上花一个下午试试。我会在下个月折腾完反馈一次。
—
项目主页:[wardnet.network](https://wardnet.network) · 源码与 release:[github.com/wardnet/wardnet](https://github.com/wardnet/wardnet) · 当前最新稳定版:**v2026.08.00**(2026-08-09 发布)。注意项目官方首页目前仍标记 v2026.07.01,看 release 进度得直接去 GitHub Releases。