Mac 上的 vpn 开关
更新于 · 作者 Anton Shakirov
hop 不是 vpn,也不卖 vpn。它把你的 Mac 已经知道的那些连接列出来——无论出自哪一家——每一个配一个开关,于是打开一个 vpn,不再意味着去开一个你一周才碰两次的应用。

| what it is | vpn switcher inside hop, a menu bar app for macOS |
|---|---|
| price | free — no trial, no pro tier, no account |
| licence | MIT, source on GitHub |
| requires | macOS 14 or later, Apple silicon or Intel |
| works offline | yes |
| data sent anywhere | none |
vpn 开关是什么,hop 又不是什么
hop 不是 vpn。它没有服务器,不卖订阅,不转发流量,也没法让你匿名。如果你要找的是一项 vpn 服务,这里没有,应用的任何部分也不会变成那个。
它做的事,是切换你的 Mac 已经知道的那些连接。隧道由 macOS 维持,和你在系统设置里把它打开时一模一样。
这张列表是从哪儿来的
列表直接来自系统设置:一个是你自己配的,一个是某个客户端装上的,一个来自你付费的服务。只要 macOS 知道它,它就带着开关出现在这里;你删掉一个,它自己就消失——没有什么要添加,也不用等谁来支持你这一家供应商。
你的流量一点都不经过 hop。这不是一句关于我们服务器的承诺,因为根本没有服务器。
免费路径:macOS 的 vpn 菜单和 scutil
在说 hop 之前:macOS 本来就能做到这里的大部分,一分钱不花,装作不是这样,也撑不过你打开系统设置的那一刻。免费的办法有两个,而且不管你最后用哪一个,它们都有用。
内置的 vpn 菜单给你什么
macOS 自己有一个 vpn 状态菜单。把它显示出来之后,菜单栏里就有一项能连接、断开,并在系统持有的那些服务之间切换——用不着第三个应用。
Apple 用一句话说完了它,而这句话就是这个功能的全部(英文页面): 在 Mac 上连接到 vpn
所以你只有一个配置、又想要一个菜单的话,就停在这里:把那个菜单打开,事情就办完了。它不做的事,是告诉你关于这条隧道的任何超出「已连接」的信息;而且它管的是系统自己管着的那些服务——一个自带菜单栏图标的客户端照样自带着它,于是你要读的是两个图标,而不是一个。
用命令行切换 vpn
第二种免费办法是 scutil,它值得比现在更多的注意。scutil --nc list 会把当前集合里的每一个连接都打印出来——在核对这一页的那台 Mac 上打出了五个,其中两个是作为网络扩展装上的客户端,还有一条没人清理过的旧调制解调器记录。每一行都带着你要传给下一条命令的名字:scutil --nc start「名称」把它拉起来,scutil --nc stop「名称」把它放下。不用 sudo,大约五秒钟。把它塞进一个快捷指令,你就有了一个白来的开关。
代价还是老一套:得知道有这么一条命令,还得知道那个服务确切的名字——包括客户端给它起的名字,以及它用的是哪种语言。
那你到底需要哪一个
只有一个配置,一天开关两次:用内置菜单,别的都不用。简单的情况止于第二个客户端出现的时候,或者止于问题不再是「它开着吗」、而是「有东西在里面走吗」的时候——第二个问题,两条免费路径都答不上来。
| 你手上的情况 | 免费路径 | 用 hop |
|---|---|---|
| macOS 自己持有的一个 vpn 配置 | 把内置的 vpn 菜单打开——点两下,什么都不用装 | 用不上,留着那个菜单 |
| 来自三个不同客户端的四个配置 | 每个客户端各带一个菜单栏图标,否则你得为 scutil 记住每一个名字 | 一张列表,每个一个开关,无论出自哪一家 |
| 不打开任何东西,就想看到隧道是通的 | 内置菜单管系统持有的那些,各家客户端各管各的 | 一个图标上的一个圆点,同时代表所有的 |
| 你想知道流量是真的在走 | 隔一会儿跑两次 scutil --nc statistics——而且你得先起疑心才会去跑 | 圆点自己变成橙色,那会儿你正在读别的东西 |
| 为一个一周碰两次的开关,客户端整天待在程序坞里 | 退出它,它的菜单栏图标也跟着没了 | 需要它的窗口时点一下名称,关掉窗口 hop 就把这个应用退出 |
怎么从菜单栏切换 vpn
Mac 知道的每一个连接都在同一张列表里,旁边一个开关,不管是谁配的;菜单栏图标上的一个圆点说明有没有隧道立着。没有厂商窗口要开,不用去系统设置跑一趟,也不会半小时之后还在琢磨那东西是不是还开着。
圆点的颜色各是什么意思,包括隧道立着却什么都不通的那一种——说明书这一头的内容,你自己语言的版本: 说明里的 vpn 开关
这一行显示的是客户端自己报上来的:它的名称,以及括号里配置附带的东西,通常是国家。hop 从不根据服务器地址去猜国家——地址注册信息说的是一段地址登记在哪儿,不是那台机器站在哪儿,而一个说得斩钉截铁的错国家,比什么都不说更糟。
一条连着、却什么都不通的 vpn
值得抓住的是那种不声不响的故障。一条死了却没断开的隧道,会让一切看上去都正常:客户端说已连接,图标说已连接,而什么都过不去。你是十分钟之后、某个页面打不开时才发现的。
菜单栏图标上的圆点,在流量正从隧道里走时是绿色的,隧道开着而什么都回不来时变成橙色。面板会标出它说的是哪一行,所以有好几个配置时,你知道是哪一个死了。连着但不通流量,和连着是两种状态,这里也就照两种来显示。这个圆点可以在设置里关掉,开关照常好用。
为什么「已连接」不是关于流量的答案
这不是客户端的缺陷。直接问系统,你得到的是同样的答非所问:对一条活着的隧道跑 scutil --nc status,它打出「Connected」,然后是上百行细节——dns 服务器、地址、排除的路由、连过多少次——却没有任何一个字段说最近有没有一个包动过。一条死掉的隧道打出来的是同一个词。
唯一答得上来的是 scutil --nc statistics,而它的答法是数字节和包。这些计数是累计的,所以跑一次什么也说明不了:你跑一次,等一会儿,再跑一次,然后比较。为这一页做的核对里,字节计数在四秒钟内动了大约 130 万——一条活着的隧道。死掉的那条会把同一个数重复一遍。
橙色圆点的全部依据就是这个:两次你本来得动手去做的测量,被连续地做着,而答案被放在你本来就在看的地方。
隧道活着、只是慢,而不是死了的时候,问题是另一个,测法也是另一套: 网速测试
这些协议本身就是有意这么造的——WireGuard 在没人使用时什么都不发,它的保活默认是关着的(英文页面): WireGuard 快速上手:持续保活
供应商自己的应用,只在你需要的时候
有时候你确实需要那个真正的客户端——挑一个国家,或者改一项设置。点一下这个连接的名称,它的窗口就打开。关掉窗口,hop 会替你把这个应用退出,于是它不再为了一个你一周碰两次的开关,一直住在你的程序坞里。
连接不会断,而这正是人们以为有诈的地方:并没有。第三方客户端是通过 Apple 的网络扩展框架装上它的隧道的,所以跑它的是系统,不是那个应用的窗口。退出 hop 同样不会让你的连接掉线。
Apple 自己说明了第三方 vpn 客户端在 macOS 上住在哪里(英文页面): vpn 概述,Apple 平台部署
这个 vpn 开关修不了什么
hop 不修 dns,不改路由,不跟你的供应商打交道,也不会替你把一条隧道重新连上。一个声称能让 vpn 熬过睡眠的应用,声称的是系统根本没提供的东西。
变的是你不明就里的那段时间有多长。修起来横竖都是免费的;能省掉的,是你在怀疑到隧道之前,花在浏览器、Wi-Fi 和路由器上的那二十分钟。
frequently asked questions
- hop 是 vpn 吗?
- 不是。它不转发流量,不卖服务,也没有服务器。它切换的是你的 Mac 已经知道的那些连接。
- 有没有免费的办法从菜单栏切换 vpn?
- 有,两个。macOS 自己有一个 vpn 状态菜单,而 scutil --nc start 和 stop 能在命令行里做到,不用 sudo。两者都不会告诉你的,是里面有没有东西在走。
- 它支持我的供应商吗?
- 只要这个连接出现在 macOS 的系统设置里,它就出现在这里。列表来自系统,所以是哪一家并不要紧。
- 它能管好几个 vpn 配置吗?
- 能——你的 Mac 知道的每一个连接都是一行,各有各的开关,不管是哪个客户端装上的。这一行显示名称,以及括号里配置附带的东西。
- 我怎么知道 vpn 是真的在工作?
- 连着不等于在工作。用手做,得隔一会儿跑两次 scutil --nc statistics 再比较。在 hop 里,隧道立着而什么都回不来时,圆点会变成橙色。
- 橙色的圆点是什么意思?
- 隧道立着,但流量过不去——就是那种不声不响的故障,否则要等到某个页面打不开时才被发现。
- 我的流量会经过 hop 吗?
- 不会。这个连接由 macOS 持有,和你在系统设置里把它打开时一模一样。
other tools in hop
- app firewallsee which programs go online, and where — block any of them with one click.
- window layoutseighteen zones, one click or one hotkey.
- draw on screena transparent layer over the live screen, seen by everyone on the call.
关于作者

Anton Shakirov开发 hop
开发 hop,也编写本站的每一页。十九个工具收在一个菜单栏图标下,MIT 许可,源码公开。issue 和邮件都由他本人阅读和回复。