在 macOS 里,VPN 这个名字承担着两件不同的事,而设置面板只处理其中一件。如果你想让这台 Mac 的流量通过服务商或远程网关出去,一个客户端条目就够了。如果你想在酒店房间里访问家庭网络中的打印机、NAS 或管理页面,那么那个网络上必须有某样东西接受来自外部的连接,而如今的 Mac 默认并不是那样东西。三个问题可以判定你属于哪种情况,值得在往输入框里敲地址之前先回答它们。

客户端条目命名的是目的地,而不是监听

在 macOS Ventura 及更高版本的系统设置 > 网络 > VPN 中,旧版本放在网络偏好设置里的那些字段描述的是如何到达别人的端点:服务器地址、远程 ID、账户或证书,以及可选的按需连接规则。保存该条目只是把一条连接存进 Mac 的网络配置。整个过程中没有任何环节去绑定端口、打开监听或登记远程用户。

你可以从 shell 验证。在你怀疑正在提供服务的 Mac 上运行 sudo lsof -nP -iUDP,查看所用协议对应的端口:IKEv2 是 500 和 4500,OpenVPN 默认是 1194,WireGuard 是 51820。只作客户端的机器显示的是与远程地址和端口配对的套接字,而不是互联网上任何东西都能连到的通配绑定。跑在 Network Extension 里的隧道可能对 lsof 隐身,所以无论如何也要看应用自己的状态面板;你不会找到的是某个能把这台 Mac 变成网关的 Apple 偏好设置。

三个问题把两种角色分开

按顺序过一遍。第一个通常决定其余的全部,第三个则是多数针对 Mac 的规划出错的环节。

1. 谁先发起对话? 如果你的 Mac 向外拨号、对方应答,你需要客户端。如果互联网上的设备必须向里拨号才能到达你的网络,你需要一台带公网入口的网关,而 Mac 可以继续做那台网关的客户端。

2. 隧道建立期间必须能访问什么? 一台主机上的一个服务属于端口转发决策。整段子网、包括名称解析,则属于路由与 DNS 决策,它改变的是网关必须转发什么,而不是客户端条目怎么写。

3. 接受端跑的是哪个系统版本? 对 Mac 来说这个问题有一个硬答案。Apple 把 VPN 列为已从 macOS Server 5.7.1 移除,macOS Server 应用本身也在 2022 年四月 21 日停止提供;服务历史说明 就是当旧教程带你走过一个早已不存在的 VPN 服务勾选框时该读的那一页。

当第一个答案是“由外部某人发起”时,就别再在 Mac 的客户端面板里找开关,而要去挑那台负责终结隧道的网关主机。

网关还可以住在哪里

四种安排覆盖了多数家庭和小型办公室情况。带真正服务器模式(而不是换了标签的客户端模式)的路由器在边缘终结隧道,主机数量最少,代价是被那套固件的协议支持绑死。NAS 或常开的小主机运行厂商的服务器套件,还能给你可读的日志。小型云主机给你一个自己掌控的公网地址,并通过第二条隧道回家。基于 WireGuard 的网状覆盖,或在节点之间中转的托管服务,通过让两端都向外拨号来绕开入站端口转发。

这些选项之间的分界线通常是你的宽带接入,而不是软件。如果运营商把你放在运营商级 NAT 后面,再多的路由器端口转发也造不出可达的入口,此时中继或网状方案才是诚实的答案。把路由器报告的 WAN 地址与外部世界看到的地址比一比;两者不一致,且路由器的值落在私有或共享网段里,就按中继的情况来规划。

无论选哪台主机,都只在单个端口上转发一种协议而不是一段端口,并且让 Mac 留在入站路径之外——除非那个具体产品明确为你所运行的 macOS 版本记载了服务器角色。

先把角色确认清楚,再分发配置

在候选网关上,去证明监听确实存在,而不是相信安装程序一定建了它。在 macOS 上这意味着把 sudo lsof -nP -iUDP 过滤到上面那些端口,若包过滤规则是设计的一部分,还要加上 sudo pfctl -s nat。在 Linux 上,ss -lunp 会毫不含糊地显示同样的事实。

接着从网络外部、用协议本身去测。Ping 证明不了什么:ICMP 常被过滤,也完全说不出 UDP 51820 的情况。带详细日志的客户端握手,从使用蜂窝数据的手机上发起,是最便宜的真实测试,因为它走的是远程同事会走的同一条路径。

到这一步才去动客户端配置。在 Mac 上,scutil --nc list 会打印系统已知的 VPN 服务;如果刚建好的网关不在其中,你配置的就不是你测试过的那台机器。如果握手在局域网成功、从外部却失败,问题在入站路径上:NAT 规则、运营商 CGNAT 或网关上的防火墙,按这个顺序排查。

动手之前,先把四点定下来:

  • 连接由哪一侧发起,是你的 Mac 还是远程设备。
  • 接受端主机的系统版本与产品是否真的支持服务器角色。
  • 你的运营商到底给不给可达的公网地址。
  • 网关只接受哪一个端口与协议,背后又是哪个服务应答。

下一步很具体:选定网关主机,从外部确认它的监听,然后才在 Mac 上创建指向它的客户端条目。

相关文章