Mac Mail、两个账户与一条拆不开它们的 VPN 规则
应用级规则指向的是 Mail,而不是它的某一个账户。在要求隧道跟随工作邮箱之前,先分清应用、服务器与登录身份。
Mail 打开后,工作收件箱同步正常,个人收件箱却开始超时。或者两个都能同步,但工作服务器只在隧道在线时才响应,而 Mail 并不知道哪个账户是哪个。症状的形态始终相同:一个应用、两个账户,以及一条识别应用的规则。修复的起点是承认应用只是容器,不是边界。
这里涉及三个选择器,它们不能互相替代。一个是发起连接的进程,一个是它到达的主机,第三个是 通过该主机登录时使用的身份。策略能点名的那个,才是你真正能建立的边界。
为什么应用是错误的单位
Mail 是服务所有已配置账户的单一进程。针对应用写规则会捕获它的全部连接,于是个人账户继承了工作隧道及其默认路由。这也许可以接受,但这是一个决定,而不是可以放着不查的副作用。
在动手修复之前,先弄清用户到底在抱怨什么。能同步却发不出邮件,通常指向发信服务器而不是收件箱,而两者可能位于同一私有网段的不同地址。问清故障发生在收信、发信还是两者都有。答案决定规则必须覆盖哪个端点,也能省下一次与服务器管理员的来回。
当两个账户使用不同服务器时
如果工作邮件与公司网段内的主机通信,而个人邮件与公共服务商通信,基于目的地的安排就能表达这一需求。它需要邮件服务器的真实地址、解析这些地址的 DNS,以及随同一服务出现的任何发信或认证端点。写策略前把这三样都收集齐,因为只覆盖收件箱的规则会在第一次发信时失败。
用地址,而不是 @ 符号后面的部分。邮件地址里的域名不是路由声明,把它当成路由声明只会得到一条对错误主机生效、或者根本不生效的规则。请从账户设置或管理员那里确认实际端点。
当两个账户共用一个服务器时
同一主机地址上的两个账户会让基于目的地的选择完全失效。通往该地址的路由服务于任何连接者,它无法检查之后登录的是哪个邮箱。移动路由就等于移动两个账户的路径,而这正是用户想避免的结果。
到这一步,诚实的选项是:若平台与客户端支持,采用能识别账户的策略;为工作账户单独使用一个获批的邮件客户端,让应用边界成为真实边界;或者接受两个账户一起走。请有意识地选一个,并说明选了哪个。
触发隧道不等于覆盖隧道
Apple 的 App Layer VPN 负载记录了 MailDomains 设置:在受支持的受管部署中,列出的域会让 Mail 触发 VPN 连接。这是一项有用的能力,但比听起来更窄。它只在 Mail 与这些域通信时启动隧道;它并不描述每条路由、每个应用关联,也不描述隧道断开时会发生什么。
它同样是受管功能,而不是 Mail 界面里每个账户的复选框。如果部署不受管,这个设置对你不可用,改多少配置文件也变不出来。
用全新同步验证,而不是缓存的收件箱
验收测试是在既定策略下为每个账户做一次全新同步,再加上受保护账户的不可用状态。缓存的收件箱不能证明下一次请求会怎样,已连接的 VPN 图标也只能说明某个隧道存在。
把工作账户的端点和你希望个人邮件具有的行为交给管理员,然后问哪一种受支持的、能识别账户、基于域或基于应用的策略能实现它。观察两个账户在每种条件下的同步情况,才是你所设计的边界就是机器所执行的边界这一点的唯一证据。