Homelab 网络系列:NetBird ACL:Mobile Devices / MacBook 如何访问 Homelab / Hometown / Office 网络

系列导航

  1. Homelab 网络系列:开篇 - 家庭网络为什么会变复杂
  2. Homelab 网络系列:RouterOS 主网关和 WRT 旁路由为什么要分工
  3. Homelab 网络系列:透明代理 VIP、VRRP 和 Fallback DNS
  4. Homelab 网络系列:NetBird ACL:Mobile Devices / MacBook 如何访问 Homelab / Hometown / Office 网络
  5. Homelab 网络系列:Backup Path:ZeroTier P2P 和 Sing-box Inbound 为什么还留着
  6. Homelab 网络系列:自动化和可恢复性:订阅生成、健康检查、配置同步、回滚

背景

前面几篇一直在说 RouterOS、WRT、VIP、Fallback DNS。那些东西解决的是 Homelab 里面的默认网关、透明代理和降级问题。

但还有另一个问题:人不在家里的时候,Mobile Devices 和 MacBook 怎么访问这些网络?

这里的访问目标不止一个 Homelab:

  • Homelab 的管理入口和内网服务
  • Hometown 的 WRT Peer
  • Office-JT / Office-SQ 的管理网络
  • DC-101 这类远端 RouterOS / WRT 管理点

如果只看“能连进去”,方案很多:WireGuard、Tailscale、ZeroTier、NetBird、Sing-box Inbound 都能做一部分。

但我这里真正要解决的不是“从外面连回家”,而是:

  • 哪些 Portable Devices (Admin) 可以访问哪些站点
  • 哪些 WRT Peer 可以作为 Subnet Router
  • Mobile Devices / MacBook 是 Admin Device,不应该变成任意 LAN 的默认出口
  • Homelab 内部的部分客户端也需要知道 Office / Hometown 路由
  • 出问题时,Admin Overlay 和 Backup Path 要能分清楚

所以 NetBird 在这套网络里的定位,是 Admin Overlay。

它不是普通客户端的默认代理,也不是 Office 日常用户流量的主通道。Office 那部分日常流量和管理职责主要由 RouterOS / WireGuard 解决,属于另一个系列。这里讲的是我作为 Admin,用 Mobile Devices / MacBook 访问 Homelab / Hometown / Office / DC-101 的路径。

为什么不是只开一个 VPN

最朴素的做法,是在 Homelab 开一个 VPN,Mobile Devices 和 MacBook 连进来。

这个方案在单站点时很好理解:

  • 客户端连进 Homelab
  • 拿到一个虚拟网段地址
  • 访问 Homelab LAN
  • 必要时再从 Homelab 转发到其他站点

但多站点之后,它很快会变成另一个问题:所有访问都必须先回 Homelab,再从 Homelab 绕出去。

这带来几个麻烦:

  • Homelab 变成所有管理流量的单点
  • 每个远端站点都要处理从 Homelab 过来的回程
  • 远端 Peer 是否在线、Route 是否发布、ACL 是否允许,很难从一个普通 VPN 配置里看清楚
  • Mobile Devices / MacBook 的权限边界容易变成“能进 VPN 就都能访问”

NetBird 的好处不是“它比某个产品更高级”,而是它的抽象刚好贴近这个问题:

  • Peer Registry 能看到哪些设备和站点在线
  • ACL 可以按 Peer / Group / Route 控制访问
  • WRT Peer 可以作为 Subnet Router 暴露受控网段
  • Portable Devices (Admin) 可以只拿 Admin 访问,不承担站点路由职责

Tailscale 我也对比过,但这篇不是 Tailscale 评测。对我来说,关键不是客户端体验,而是 NetBird 的 ACL、Peer Registry 和 Route Awareness 能比较自然地嵌进现有 RouterOS / WRT 分工里。

角色怎么拆

我把 NetBird 里面的角色分成三类。

第一类是 Portable Devices (Admin):

  • Mobile Devices
  • MacBook

它们是随身管理设备。它们应该能访问被允许的 Homelab / Hometown / Office / DC-101 管理入口,但不应该被当成某个站点的 Subnet Router。

第二类是 WRT Peers:

  • Homelab WRT
  • Hometown WRT
  • Office-JT WRT
  • Office-SQ WRT
  • DC-101 WRT

这些节点更像站点边界上的 Admin Sidecar。它们可以暴露某个站点的受控网段,也可以承载 NetBird Peer、ZeroTier Peer、Sing-box Inbound 这类额外管理路径。

这里还要再分一层:Homelab WRT 10.1.1.254 和 Office-JT WRT 是我常驻 Admin 位置的 Peer,它们拥有完整 Routes。其他 WRT Peers 更多是 Peer-level 管理目标,主要用于互 Ping / SSH 和状态确认,不默认展开背后的 LAN 访问。

第三类是 Homelab 里的 proxy-netbird Clients。

这类客户端仍然把默认网关和 DNS 指向代理 VIP 10.1.1.253,但额外通过 DHCP Option 121/249 拿到 NetBird / Site Routes。这些 Route 的下一跳不是 RouterOS,而是 WRT 10.1.1.254

也就是说,同一台客户端上会同时存在两类路径:

流量类型 下一跳
默认网关 / DNS 代理 VIP 10.1.1.253
NetBird / Site Route WRT 10.1.1.254

这点很重要。RouterOS 仍然是主网关和 DHCP 控制点,但它不需要理解 NetBird Overlay 的内部状态。它只负责把经过筛选的站点路由下发给需要的客户端。

原生 NetBird Peer 路径

第一种路径,是 Mobile Devices / MacBook 自己就是 NetBird Peer。

这时它们和各个 WRT Peers 是 NetBird Overlay 里的 P2P 关系。Portable Devices (Admin) 可以访问被 ACL 允许的 Peer;如果目标是 Homelab WRT 或 Office-JT WRT 这类常驻 Admin Peer,还可以继续访问它们背后的受控 LAN Routes。

其他 WRT Peers 不是“打开一个站点 LAN 给所有 Admin 设备”。它们默认更像 Peer-level 管理点,能互 Ping / SSH / 看状态,但不把背后 LAN 当成默认可访问范围。

sequenceDiagram
  participant Portable as Portable Devices (Admin)
Mobile Devices / MacBook participant NetBird as NetBird ACL / Registry participant HomeWRT as Homelab WRT 10.1.1.254 participant OfficeJT as Office-JT WRT
Admin Full Routes participant OtherPeers as Hometown / Office-SQ / DC-101 WRT Peers participant AdminLAN as Permitted Admin LAN Routes rect rgb(245, 248, 255) Note over Portable,NetBird: 原生 NetBird Peer,先受 ACL 约束 Portable->>NetBird: Authenticate Peer NetBird-->>Portable: Allowed Peers and Routes end rect rgb(240, 250, 244) Note over Portable,AdminLAN: 常驻 Admin Peers 拥有完整 Routes Portable->>HomeWRT: P2P Access to Homelab WRT HomeWRT->>AdminLAN: Routed Homelab Access when Allowed Portable->>OfficeJT: P2P Access to Office-JT WRT OfficeJT->>AdminLAN: Routed Office-JT Access when Allowed end rect rgb(255, 248, 230) Note over Portable,OtherPeers: 其他 WRT Peers 默认是 Peer-level Admin Targets Portable->>OtherPeers: Ping / SSH / Peer Health Checks OtherPeers-->>Portable: Peer-level Response end
sequenceDiagram
  participant Portable as Portable Devices (Admin)
Mobile Devices / MacBook participant NetBird as NetBird ACL / Registry participant HomeWRT as Homelab WRT 10.1.1.254 participant OfficeJT as Office-JT WRT
Admin Full Routes participant OtherPeers as Hometown / Office-SQ / DC-101 WRT Peers participant AdminLAN as Permitted Admin LAN Routes rect rgb(245, 248, 255) Note over Portable,NetBird: 原生 NetBird Peer,先受 ACL 约束 Portable->>NetBird: Authenticate Peer NetBird-->>Portable: Allowed Peers and Routes end rect rgb(240, 250, 244) Note over Portable,AdminLAN: 常驻 Admin Peers 拥有完整 Routes Portable->>HomeWRT: P2P Access to Homelab WRT HomeWRT->>AdminLAN: Routed Homelab Access when Allowed Portable->>OfficeJT: P2P Access to Office-JT WRT OfficeJT->>AdminLAN: Routed Office-JT Access when Allowed end rect rgb(255, 248, 230) Note over Portable,OtherPeers: 其他 WRT Peers 默认是 Peer-level Admin Targets Portable->>OtherPeers: Ping / SSH / Peer Health Checks OtherPeers-->>Portable: Peer-level Response end
sequenceDiagram
  participant Portable as Portable Devices (Admin)
Mobile Devices / MacBook participant NetBird as NetBird ACL / Registry participant HomeWRT as Homelab WRT 10.1.1.254 participant OfficeJT as Office-JT WRT
Admin Full Routes participant OtherPeers as Hometown / Office-SQ / DC-101 WRT Peers participant AdminLAN as Permitted Admin LAN Routes rect rgb(245, 248, 255) Note over Portable,NetBird: 原生 NetBird Peer,先受 ACL 约束 Portable->>NetBird: Authenticate Peer NetBird-->>Portable: Allowed Peers and Routes end rect rgb(240, 250, 244) Note over Portable,AdminLAN: 常驻 Admin Peers 拥有完整 Routes Portable->>HomeWRT: P2P Access to Homelab WRT HomeWRT->>AdminLAN: Routed Homelab Access when Allowed Portable->>OfficeJT: P2P Access to Office-JT WRT OfficeJT->>AdminLAN: Routed Office-JT Access when Allowed end rect rgb(255, 248, 230) Note over Portable,OtherPeers: 其他 WRT Peers 默认是 Peer-level Admin Targets Portable->>OtherPeers: Ping / SSH / Peer Health Checks OtherPeers-->>Portable: Peer-level Response end

proxy-netbird DHCP 路径

第二种路径,是 Homelab 内部客户端本身不作为 NetBird Peer,而是被 RouterOS 放进 proxy-netbird DHCP Option-set。

这类客户端仍然使用代理 VIP 10.1.1.253 做默认网关和 DNS;只有 NetBird / Site CIDR 通过 DHCP 121/249 指向 WRT 10.1.1.254

sequenceDiagram
  participant RouterOS as Homelab RouterOS 10.1.1.1
  participant Client as proxy-netbird LAN Clients
  participant HomeWRT as Homelab WRT 10.1.1.254
  participant NetBird as NetBird Route Table
  participant SiteWRT as Permitted Site WRT Peer
  participant SiteLAN as Permitted Site LAN

  rect rgb(240, 250, 244)
    Note over RouterOS,Client: Homelab 内部 Route Awareness
    RouterOS->>HomeWRT: Read NetBird Route Table
    RouterOS-->>Client: DHCP 121/249 Site Routes -> 10.1.1.254
    Client->>HomeWRT: Site CIDR Traffic via 10.1.1.254
    HomeWRT->>SiteWRT: NetBird Site Route
    SiteWRT->>SiteLAN: Routed or NATed Site Access
  end

  rect rgb(255, 248, 230)
    Note over SiteWRT,Client: ACL 不是唯一问题,回程也要成立
    SiteLAN-->>SiteWRT: Return Traffic
    SiteWRT-->>HomeWRT: Return Path through Overlay or Local SNAT
    HomeWRT-->>Client: Response
  end
sequenceDiagram
  participant RouterOS as Homelab RouterOS 10.1.1.1
  participant Client as proxy-netbird LAN Clients
  participant HomeWRT as Homelab WRT 10.1.1.254
  participant NetBird as NetBird Route Table
  participant SiteWRT as Permitted Site WRT Peer
  participant SiteLAN as Permitted Site LAN

  rect rgb(240, 250, 244)
    Note over RouterOS,Client: Homelab 内部 Route Awareness
    RouterOS->>HomeWRT: Read NetBird Route Table
    RouterOS-->>Client: DHCP 121/249 Site Routes -> 10.1.1.254
    Client->>HomeWRT: Site CIDR Traffic via 10.1.1.254
    HomeWRT->>SiteWRT: NetBird Site Route
    SiteWRT->>SiteLAN: Routed or NATed Site Access
  end

  rect rgb(255, 248, 230)
    Note over SiteWRT,Client: ACL 不是唯一问题,回程也要成立
    SiteLAN-->>SiteWRT: Return Traffic
    SiteWRT-->>HomeWRT: Return Path through Overlay or Local SNAT
    HomeWRT-->>Client: Response
  end
sequenceDiagram
  participant RouterOS as Homelab RouterOS 10.1.1.1
  participant Client as proxy-netbird LAN Clients
  participant HomeWRT as Homelab WRT 10.1.1.254
  participant NetBird as NetBird Route Table
  participant SiteWRT as Permitted Site WRT Peer
  participant SiteLAN as Permitted Site LAN

  rect rgb(240, 250, 244)
    Note over RouterOS,Client: Homelab 内部 Route Awareness
    RouterOS->>HomeWRT: Read NetBird Route Table
    RouterOS-->>Client: DHCP 121/249 Site Routes -> 10.1.1.254
    Client->>HomeWRT: Site CIDR Traffic via 10.1.1.254
    HomeWRT->>SiteWRT: NetBird Site Route
    SiteWRT->>SiteLAN: Routed or NATed Site Access
  end

  rect rgb(255, 248, 230)
    Note over SiteWRT,Client: ACL 不是唯一问题,回程也要成立
    SiteLAN-->>SiteWRT: Return Traffic
    SiteWRT-->>HomeWRT: Return Path through Overlay or Local SNAT
    HomeWRT-->>Client: Response
  end

这里有三个边界。

第一,Portable Devices (Admin) 的权限由 NetBird ACL 控制。Mobile Devices / MacBook 能不能访问某个 Peer、某条 Route,不靠“连上 VPN 以后全放开”,而是由 ACL 明确表达。

第二,Homelab 内部客户端的站点路由由 RouterOS DHCP 下发,但下一跳是 WRT 10.1.1.254。RouterOS 是控制点,不是 Overlay Data Plane。

第三,远端站点不是只要 ACL 允许就一定能通。站点 LAN 的回程路由、SNAT、NetBird Route 发布都要成立,否则就会出现“请求到了,对方回不来”的问题。

ACL 解决的不是所有路由问题

NetBird ACL 很容易被误解成“只要 ACL 放行,就应该通”。

实际不是这样。

ACL 解决的是访问边界:

  • Mobile Devices 是否可以访问 Homelab WRT
  • MacBook 是否可以访问 Office-JT 的管理入口
  • Portable Devices (Admin) 是否可以访问某个 Site Route
  • WRT Peers 之间是否允许互通

但 ACL 不负责这些事情:

  • 某个 LAN 主机有没有回程路由
  • 远端 RouterOS 是否知道 NetBird 源地址怎么回
  • WRT 是否需要对进入 LAN 的 Overlay 流量做 SNAT
  • Homelab 内部静态主机是否自己持有 Site Routes

我遇到过的典型问题就是回程不对称:请求从 Homelab 侧通过 NetBird 到了 Office-JT LAN,但 Office-JT LAN 主机不知道怎么把回包稳定送回 NetBird Peer。

这类问题最后不是靠“再放宽 ACL”解决,而是靠路由和 NAT 边界解决:

  • 首选在 Office-JT WRT 上对 NetBird 进入 LAN 的流量做窄范围 SNAT
  • 避免优先改 Production Gateway
  • RouterOS 侧兜底规则只作为辅助,不作为首选方案
  • 对静态 Homelab 主机,目标模型是它们自己持有 Site Routes,下一跳指向 10.1.1.254

这也是为什么我把 WRT 保留下来。WRT 这层能做 NetBird Peer、Nftables、SNAT、Route Table 观测和脚本修正,而不需要把这些快变化逻辑都塞进主网关。

Homelab 内部为什么还要 Route Sync

Mobile Devices / MacBook 作为 Portable Devices (Admin) 时,NetBird 客户端自己知道 Overlay 和允许的 Route。

但 Homelab 内部的 proxy-netbird Clients 不一定跑 NetBird 客户端。它们只是通过 DHCP 被归到一个策略组里。

所以 Homelab 这里有一个 Route Sync:

  • WRT 维护 NetBird Route Table
  • RouterOS 每 10 分钟读取 WRT 上的 NetBird Routes
  • RouterOS 只接受私有网段 Route,并过滤掉 Homelab 自己的 LAN
  • RouterOS 生成 DHCP Option 121/249
  • proxy-netbird Option-set 组合 proxy-gwproxy-dnsnetbird-route-121netbird-route-249

这样,Homelab 内部客户端不需要理解 NetBird,它只需要从 DHCP 拿到“这些站点网段走 10.1.1.254”。

这个设计的好处是边界清楚:

  • RouterOS 负责 DHCP 和策略分组
  • WRT 负责 NetBird Route Table 和 Overlay Data Plane
  • 客户端只根据 DHCP 决定下一跳
  • Route Sync 失败时,不应该影响普通客户端

这里也故意没有把普通 proxy Option-set 变成带 NetBird Routes 的全集。普通 Proxy 客户端只拿 VIP 网关和 DNS。只有需要跨站路由的设备,才进入 proxy-netbird

NetBird 和 Backup Path 的边界

NetBird 是日常 Admin Overlay,但我没有把其他路径删掉。

原因很简单:Overlay 出问题时,最需要的是第二条入口,而不是现场开始研究 ACL。

现在边界大概是:

路径 定位
NetBird 日常 Admin Overlay,Mobile Devices / MacBook 的主要管理入口
ZeroTier 保留 P2P 能力,不作为主要 Network Route
Sing-box Inbound Homelab / Office-JT 的备用入口,由 WRT 承载

这三者不应该混成一个东西。

NetBird 负责平时的 Peer Registry、ACL 和受控站点路由。ZeroTier 和 Sing-box Inbound 更像故障时还能进去的 Backup Path。下一篇会单独讲为什么 Backup Path 仍然值得保留。

验证

这类设计要验证的不是“NetBird 显示在线”。

我会分几层看:

  • Mobile Devices / MacBook 是否作为 Portable Devices (Admin) 在线
  • ACL 是否只允许预期的 Peer 和 Site Routes
  • Homelab WRT 是否能看到 NetBird Route Table
  • RouterOS 是否能定时刷新 DHCP 121/249
  • proxy-netbird 客户端是否拿到 Site Routes,下一跳是否是 10.1.1.254
  • Office / Hometown / DC-101 的站点回程是否成立
  • 静态 Homelab 主机是否没有偷偷依赖临时 ACL Workaround

最后一条尤其重要。临时放行和 Emergency Workaround 很容易变成永久设计。我的目标模型还是:静态主机自己持有必要的 Site Routes,站点 CIDR 指向 10.1.1.254,而不是靠一堆特殊 ACL 去修每一条 TCP 流。

最后的结论

NetBird 在这套 Homelab 网络里,是 Admin Overlay,不是默认网关,也不是普通代理路径。

Mobile Devices / MacBook 是 Portable Devices (Admin),用 ACL 访问被允许的 Homelab / Hometown / Office / DC-101 Peer 和 Route。

WRT Peers 是站点边界上的 Subnet Router 和管理 Sidecar,负责把 NetBird Overlay 接到受控 LAN。

RouterOS 仍然做主网关和 DHCP 控制点,通过 Route Sync 把需要的 Site Routes 下发给 proxy-netbird 客户端,但不直接承载 Overlay Data Plane。

这套设计真正解决的,不是“能不能连上”,而是把访问权限、站点路由、回程路径和 Backup Path 分开。边界清楚之后,排障时才知道该看 ACL、WRT Route、RouterOS DHCP,还是远端 LAN 的回程。