你正在“设置”里添加 IKEv2 配置,两个栏位却要你没有拿到的文字:Remote ID 和 Local ID。它们都不是你的用户名,也都不是 Server 栏的第二份副本。Remote ID 是网关必须向你的 iPhone 证明的身份,Local ID 是你的 iPhone 向网关声明的身份。填错任何一个,隧道都会在服务器已经应答之后断开,所以这个故障看起来像密码问题,其实不是。

这两个栏位在 iOS 的哪里

打开“设置”>“通用”>“VPN 与设备管理”>“VPN”,添加一份 IKEv2 配置。在“认证”下选择用户名或证书,只有此时 Remote ID 与 Local ID 才会以自由文本栏出现。它们是标识符,不是地址:iOS 在 IKE_AUTH 交换中携带它们,IKEv2 把发起方身份称为 IDi,把响应方身份称为 IDr。

保存之后,iOS 会把配置折叠成一行,不再显示取值。在断定栏位为空之前,点一下信息按钮或重新打开配置文件。通过 MDM 推送的配置可能把它们整栏变灰,这会改变谁有能力修好问题。

Remote ID 是网关的名字

这是你的 iPhone 期待服务器证明的值。用证书认证时,它会与服务器证书中的名字比对,通常是 subject 或 subjectAltName 条目。如果证书是签发给 vpn.example.com 的,那个主机名就是 Remote ID,哪怕你是用光秃秃的 IP 地址连上的。

这种不匹配就是经典故障:数据包到了,服务器也应答了,连接还是断,因为证书里的身份和配置文件要求的对不上。把 Server 栏指向原始 IP 没有用,很多网关上服务器干脆不再回应它匹配不了的身份。

网关上有对应设置。strongSwan 服务器用 leftid 发送自己的身份,并可用 rightid 限制客户端身份;两侧字符串不一致时,IKE_AUTH 双向都会失败。去问运维这个证书签发给了哪个身份,而不是从浏览器地址栏抄 URL。

Apple 在IKEv2 设置参考中把这些载荷键记为 RemoteIdentifier 和 LocalIdentifier。两者都是普通字符串,所以大小写和结尾空格都可能有影响。

Local ID 是你的 iPhone 声明的身份

用用户名认证时,用户名和密码由 EAP 校验,Local ID 是一些网关还会额外要求的独立 IKE 身份。网关可能要求 Local ID 等于用户名、是邮箱地址,或匹配其连接策略中的某条记录;也有网关完全忽略它。只有运维明确这么说,留空才安全。

用证书认证时,Local ID 应当匹配网关为该客户端证书接受的身份,通常是证书的通用名或映射到设备记录的值。复制同事的配置文件,也把他的身份复制了过来。好一点的情况是网关记录了错误的设备,差一点就是按设备下发的策略把你拒之门外。

陷阱在于以为留空就是没有身份。不要因为它看起来没填完,就往空栏里填自己的邮箱。确认应该填的值,然后照原样准确输入。

保存前的五分钟检查

按顺序做,第一个失败的步骤就是该修的地方。

  1. 向运维要三个字符串:服务器证书里的名字、期望的 Local ID、认证方式。
  2. 对齐认证方式。Remote ID 与 Local ID 不能替代用户名和密码,证书配置也不会接受密码。
  3. 准确输入取值,注意大小写,结尾不要带空格。
  4. 保持证书校验开启。为了消掉警告而安装无关的根证书,只是把名字不匹配藏起来,并没有修好。
  5. 用蜂窝数据测试,不要用办公室 Wi-Fi,免得强制门户或分离 DNS 伪装成身份问题。
FieldWhat belongs thereWhat a wrong value looks like
Remote IDThe DNS name in the gateway certificateServer answers, then the tunnel drops with a certificate or identity error
Local IDThe identity the gateway policy expects for youIKE_AUTH or user authentication fails after the server responds
ServerA reachable hostname or IPTimeout with no identity exchange at all

从上往下读表格。Server 那一行超时,说明身份栏根本没被测过,就停在那里。只在服务器应答之后才出现的错误,几乎总是 Remote ID 或 Local ID 不匹配。

指向错误栏位的报错

“User authentication failed”这类消息说的是凭据或 EAP,不是 Remote ID。证书警告说的是证书里的名字,而那里正是 Remote ID 与 Server 栏交汇的地方。“The VPN server did not respond”通常意味着 UDP 500 和 4500 从未完成,或 NAT 穿越失败,压根没有比对过身份。

网关侧的身份失败长得不一样:对端在 IKE_AUTH 期间被拒绝,或者日志点名客户端发来的 ID 并说它与任何连接都不匹配。那行日志是结束争论最快的办法,因为它显示了手机发出去的准确字符串。

重置密码不会修好被期待的服务器身份,改 Remote ID 也不会修好错误的密码。先把阶段分开,再改属于那个阶段的栏位。

配置文件由 MDM 管理时

栏位变灰说明配置来自 MDM,手机不是修它的地方。VPN 载荷携带这些标识符,正确的改动在管理服务器上的配置文件里,然后重新安装到设备。

在“设置”>“通用”>“VPN 与设备管理”里看配置文件是否受管理、由谁签名。如果删不掉,你就无法在本地编辑标识符,再建一份本地配置只会制造互相冲突的配置。

关闭“设置”之前,把你输入的三个字符串和它们的来源记下来。下次隧道再失败,把网关日志收到的 ID 和这条记录比对:不一样的话,你面对的是栏位,不是密码。

相关文章