如何在 macOS 上监控 VPN 流量
在 macOS 上看清 VPN 隧道究竟承载了什么:单应用流量、加密开销与泄漏检测。
- VPN
- macOS
- Bandwidth
- Privacy
你连上 VPN,跑了一次报国家正确的网页检查,就以为现在所有东西都走隧道了。两天后你注意到其中某个应用——比如某个老聊天客户端或同步代理——这段时间一直直接跟公网通信,完全无视隧道。VPN 是开着的。漏在某个进程上,它在隧道起来之前绑定到物理接口,然后再没松手。
在 macOS 上监控 VPN 带宽一部分是确认 VPN 在做它的工作,一部分是抓住悄悄绕过它的应用。这篇覆盖 utun 接口实际是什么、用内置工具怎么读 VPN 流量、怎么检测泄漏、以及怎么测量隧道增加的开销。如果你在搜"Mac 监控 VPN 带宽"是因为 VPN 自己面板说得不够多,下面的工具集回答更难的问题。
utun 接口是什么
VPN 客户端在 macOS 上连接时会创建一个虚拟接口——通常叫 utun0、utun1、utun2 等等("utun" 代表 "user tunnel")。VPN 进程读 OS 路由到该接口的数据包,加密并封装它们,把得到的封装包通过你的物理接口(典型情况下 Wi-Fi 是 en0)写出去。
终端里跑这个看当前在跑什么:
ifconfig | grep -E "^(en|utun)" -A 3你会看到类似:
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet 192.168.1.42 netmask 0xffffff00 broadcast 192.168.1.255
utun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1380
inet 10.8.0.6 --> 10.8.0.1 netmask 0xffffff00en0 是你真实的网络。utun0 是 VPN。一些 VPN 客户端创建多个 utun 接口(一个数据面、一个控制面);一些创建 utun9 或更高以避免和 iOS 风格的个人热点隧道冲撞。
怎样用 nettop 监控 Mac 上的 VPN 带宽流量
nettop 内置于 macOS,是看进程在用哪个接口最直接的方式。相关调用:
sudo nettop -P -m route这按路由分组显示每个进程的连接。走 VPN 的进程会显示流量经 utun 接口;绕过隧道的进程会显示经 en0(如果是以太网就是 en1)。
盯 nettop 一分钟,然后问:哪些应用在用 utun0、哪些在用 en0?如果你想要一切走隧道,但看到 Slack 在 en0,那是漏。
-P 标志按进程聚合;-m route 显示路由列。加 -x 显示字节数。加 -c 加延时做周期刷新,例如 nettop -P -c 2。
ova 对 VPN 流量显示什么
像 ova 这种按应用监控看到的是 nettop 看到的同一份内核统计,并按时间汇总。ova 里归到 "Slack" 的带宽包含 Slack 发的所有——经 en0 还是 utun0 不改变按进程总数。所以 ova 干净地回答"Slack 用了多少?"。它目前不把按应用数字按接口拆——如果你需要那种细粒度,nettop 是工具。
对多数 VPN 用户这没事。你通常想要回答的问题是:
- "我的 VPN 客户端自己用的带宽是不是符合预期?"
- "过去一小时有没有什么尖峰?"
- "现在最重的是哪个应用?"
ova 一眼给你全部三个,加上辅助进程归并,所以 Slack 辅助 PID 不会显示成单独行。VPN 客户端自己(Tailscale、Mullvad、ProtonVPN、NordVPN 等)作为一行出现,它的数字是经过你物理链路出去的封装/加密总量。
检测泄漏
VPN 泄漏是某个应用的流量绕过隧道直接走互联网。原因包括:
- 应用在 VPN 起来之前缓存了路由还在用。
- VPN 不路由某些目的地(局域网、组播、到特定服务器的 DNS)。
- macOS 的"排除本地网络"开关在做它字面写的事。
- VPN 是分流隧道,某个特定应用在旁路名单里。
- IPv6 启用着但 VPN 只路由 IPv4(常见原因)。
诊断回路:
- VPN 连着时跑
nettop -P -m route,看有没有任何你预期被隧道的进程显示 en0 流量。 - 用 ova 交叉核对按进程带宽。如果一个进程在 ova 里显示流量但 nettop 里没有 utun 行,它在漏。
- 在网络层面确认:从浏览器访问
ipleak.net或dnsleaktest.com。报告的 IP 应该是 VPN 出口,不是你家/办公室。 - 特别针对 DNS:跑
scutil --dns | grep nameserver——列出的名字服务器应该是 VPN 的,不是你 ISP 的。
特别针对 IPv6,最安全的设置是要么用显式路由 IPv6 的 VPN,要么连接时全系统禁用 IPv6。按网络禁用:系统设置 → 网络 →(你的网络)→ 详细信息 → TCP/IP → 配置 IPv6 → 仅本地链路。
测量 VPN 开销
VPN 在两个方面增加开销:吞吐量(你拿到比实际线速少)和延迟(每次往返多一跳)。
吞吐量开销
加密税取决于协议:
- WireGuard:在快链路上典型 5 到 10% 开销。Apple Silicon 上有硬件加速。
- OpenVPN:15 到 30% 开销。CPU 受限,高速时比 WireGuard 慢。
- IKEv2/IPsec:10 到 20% 开销。macOS 原生支持。
- 专有协议(Lightway、基于 WireGuard 的 NordLynx 等):约 WireGuard 级效率。
测量方法:VPN 关闭时跑测速,记结果。VPN 开启时对同一都市区的服务器跑同样测试。比例就是开销。两次测试时都用 ova——测速客户端显示的按应用流量应该是应用层吞吐;VPN 测试时系统级速率因为加密封帧而更高。
延迟开销
VPN 关闭时跑 ping 8.8.8.8,记稳态 RTT。连 VPN,再跑 ping 8.8.8.8。差值是加密、走到 VPN 出口、回来的往返成本。典型数字:
- 同城市的 VPN 出口:+5 到 +15 ms。
- 另一国家的 VPN 出口:+50 到 +200 ms,看地理位置。
- 不同大洲的 VPN 出口:+150 到 +400 ms。
这多数情况下是不可避免的物理——你没法隧道到东京而不付往返代价。
识别 VPN 自己的带宽用量
VPN 客户端进程自己作为单独一行出现在 ova 里——"Mullvad VPN"、"Tailscale"、"ProtonVPN" 等。你看到的数字是经你物理链路出去的加密、封装总量。这是回答"VPN 在消耗多少真实互联网带宽"的合适数字。
一个有用的合理性检查:任何时刻,VPN 报告的带宽应该约等于所有其他用它的应用之和,加上一小份加密开销。如果差很多,有别的事在发生——分流、漏、或者 VPN 客户端在做维护工作(密钥轮换、对端发现)。
看 ova 实战
一眼可瞄的菜单栏带宽监控——本地、签名、约 3 MB。
始终在线 VPN:陷阱
几款 VPN 客户端提供"kill switch"或"始终在线"模式,隧道掉时阻止所有流量。有用,但有意外:
- 唤醒后头几秒可能在隧道重建之前有未阻止的流量。一些客户端显式守住;其他不。
- Wi-Fi 网络切换(家到咖啡馆)触发短暂断连。kill switch 应该守住但实现各异。
- 一些应用有激进重连逻辑——隧道断时每 100 ms 重试一次。隧道回来时是一次重连时的带宽尖峰。
VPN 开着从睡眠唤醒后立刻盯 ova。规律通常是:VPN 客户端自己因为重新握手显示一个小涌动,然后 5 到 30 秒内单个应用开始涌动,因为它们在重连自己的 socket。如果你看到唤醒时 200 MB 尖峰,那通常是 Slack/Discord/iMessage 一起追账。
按应用路由与分流隧道
一些 VPN 客户端支持只把特定应用走隧道。用例是"把我的种子客户端通过 Mullvad 发出去,但让 Slack 直走,这样视频通话不增加 VPN 延迟"。
用 nettop 验证分流规则:
sudo nettop -P -m route被分流的应用应该只显示 en0 流量;被隧道的应该只显示 utun。如果同一进程两者都出现,规则没干净执行——通常因为应用持有早于规则变化的长生命周期 socket。重启应用清掉它们。
监控多个 VPN 连接
资深用户有时同时跑两个 VPN——比如 Tailscale 用来访问公司内部服务,加上商业 VPN(Mullvad、Proton)做一般互联网隐私。macOS 通过路由表处理这个:更具体的路由(Tailscale 的 100.64.0.0/10)胜过更宽泛的(商业 VPN 的默认路由)。
ifconfig 里你会看到多个 utun 接口。用 netstat -rn | head -30 读路由表——第一条匹配的路由胜出。ova 显示总按应用带宽不区分哪条隧道;要那个,nettop 的 -m route 视图是参考。
接下来做什么
10 分钟的端到端 Mac VPN 带宽监控审计:
- 连 VPN。
- 打开菜单栏的 ova,记下当前活跃应用。
- 终端里跑
sudo nettop -P -m route。 - 交叉核对:在 ova 里显示有意义带宽的每个应用,连接应该都出现在 nettop 的 utun0(或你 VPN 用的 utun)下。这些进程的任何 en0 流量都是漏的候选。
- 访问
ipleak.net确认 IP 和 DNS 经 VPN 出口。 - 断开,跑测速,重连,再跑一次。算开销。
走完这一遍你会知道你的 VPN 是不是真的在做你以为的事、它的开销实际是多少、以及哪些应用要盯着。这比你 VPN 客户端菜单栏里"已连接"指示器是更强的答案。