背景 链接到标题

已有 NetBird 自建网络覆盖办公室、家里、云服务器等多个节点,日常用 macOS/Linux 客户端体验很好。现在想让 iPhone 也能访问办公室内网资源(如内部服务、开发环境)。

第一选择:NetBird 链接到标题

NetBird 有官方 iOS App,支持自建服务器(Private Setup),配置很简单:

  1. 在管理面板生成 Setup Key
  2. iPhone App 输入服务器 URL 和 Key
  3. 授权 VPN 权限即可

遇到的问题 链接到标题

问题一:iOS DNS 限制

办公室内网域名走 *.lan 后缀,由内网 dnsmasq 解析。NetBird 的 Nameserver Group 虽然配置了 lan 域指向内网 DNS,但 iOS 客户端对自定义 DNS 解析器支持有限——蜂窝网络下根本无法配置 DNS,WiFi 下手动改 DNS 为内网地址后,流量走隧道出去 DNS 查询却不一定走隧道。

问题二:网络封锁

在办公室集团 WiFi 下,NetBird 一开始能连通,也能通过 IP 访问内网服务。但几分钟后连接中断,反复重连都失败。切换到 5G 则一切正常。判断是企业 WiFi 的 DPI 检测到 VPN 特征后进行了限流或阻断。

这两个问题在 NetBird 层面难以绕过,决定换方案。

回归 WireGuard 链接到标题

之前已经有一条 WireGuard 备份网络,拓扑很简单:

  • 中心 Hub:一台公网服务器(10.99.99.10
  • 办公室跳板:10.99.99.40
  • 家庭节点:10.99.99.41
  • 笔记本:10.99.99.5

只需要把 iPhone 加进去即可。

添加 iPhone 节点 链接到标题

在 Hub 上生成密钥对,添加 Peer:

# 生成密钥
priv=$(wg genkey)
pub=$(echo "$priv" | wg pubkey)

# 添加到运行中的 WG 接口
wg set wg0 peer <PUBKEY> allowed-ips 10.99.99.60/32 persistent-keepalive 25

持久化到配置文件,在 [Peer] 段添加:

[Peer]
PublicKey = <PUBKEY>
AllowedIPs = 10.99.99.60/32
PersistentKeepalive = 25

关键:添加路由 链接到标题

Hub 上需要添加 iPhone IP 的路由,否则回包走公网:

ip route add 10.99.99.60/32 dev wg0

同时修改跳板机的 AllowedIPs,从单 IP 改为整个办公室子网:

wg set wg0 peer <WASP_PUBKEY> allowed-ips 10.99.99.40/32,192.168.99.0/24

Hub 上还需要添加办公室子网的路由指向 wg0:

ip route replace 192.168.99.0/24 dev wg0

跳板机 iptables 链接到标题

跳板机上开启转发和 MASQUERADE:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i wg0 -j ACCEPT
iptables -A FORWARD -o wg0 -j ACCEPT

iPhone 配置 链接到标题

WireGuard iOS App 支持导入配置文件或扫描二维码。配置内容:

[Interface]
PrivateKey = <iPhone 私钥>
Address = 10.99.99.60/32
DNS = 内网 DNS

[Peer]
PublicKey = <Hub 公钥>
Endpoint = <Hub 公网 IP>:51820
AllowedIPs = 10.99.99.0/24, 192.168.99.0/24
PersistentKeepalive = 25

DNS 设为办公室内网的 dnsmasq 地址,这样 *.lan 域名和短名(如 http://内网服务)都能解析。

二维码用 qrencode 生成:

qrencode -t ANSIUTF8 < iphone.conf

最终拓扑 链接到标题

iPhone -> Hub(公网)-> 跳板机 -> 办公室内网 192.168.99.0/24

对比 链接到标题

特性 NetBird WireGuard
配置复杂度 低(自动 Mesh) 中(手动配 Peer)
iOS DNS 支持 有限 好(直接在配置中指定)
抗封锁能力 弱(WebSocket 特征明显) 强(纯 UDP,特征简单)
蜂窝网络 稳定 稳定
短名访问 依赖 NetBird DNS 直接配内网 DNS

总结 链接到标题

NetBird 在桌面端和服务器端体验很好,Mesh 网络自动管理 Peer 非常方便。但在 iOS 上遇到 DNS 和网络封锁两个硬伤。回归 WireGuard 虽然需要手动管理,但胜在稳定可控,配置一次后 iPhone 上基本不用再管。

WireGuard iOS App 支持按需连接(检测到特定 WiFi 自动触发),日常使用几乎无感。