在多套 VPN 之间工作而不混乱的三种方式
按顺序切换、每个客户一个工作区、共享网关,需要的协调成本各不相同。选定一种,然后把交接写下来。
两个客户隧道、一台笔记本,以及一个仍在不该登录的地方保持登录的浏览器标签页。在多套私有网络之间工作,难的不是连接,而是在切换时知道某个窗口属于哪个上下文。工作区回答的正是这个问题:一个身份、一组应用、一套解析器策略,以及出问题时可以查看的一个地方。糟糕的一天里,这就是五分钟修好与一次数据泄露之间的差别。
先判断工作是否并发
如果答案是否定的,就此打住,采用现有最简单的安排。一次只保留一条获批连接,用拥有该配置文件的客户端连接和断开,就能在任何一种失败发生之前消除整整一类问题。
抬高成本的是并发:重叠的前缀、两套解析器策略和两组应用状态,都必须有意分开,而不是靠时间错开。
诚实写下需求,因为“想避免重连”和“同时需要两套网络”并不是一回事。
顺序处理是最便宜的安排
顺序工作不需要额外基础设施,它的失败方式是会话过期,而不是路由冲突。纪律体现在交接上:完成操作、关闭仍持有连接的东西、断开,并在开始工作前确认下一条连接。
一直开着的浏览器标签页或终端,不会把它的网络上下文一起带走。它的下一个请求会发往机器当前路由的地方,而那可能是另一个客户。
按客户而不是按协议给配置文件命名,并让凭据所有人显示在配置文件名里。一个叫 work2 的配置文件,在匆忙切换的那一刻对谁都没有说明作用。
这种安排的好处是可审计。任何时刻都只有一个网络上下文,日志会显示它何时改变。
每个客户一个工作区要付出隔离成本
每个客户一台虚拟机或一个远程开发环境,把客户端、应用和名称放在同一个地方。切换变成换窗口而不是换网络,两个上下文也无法通过一条走错的路由互相泄漏。
这并不免费。你现在要维护两三个系统、给它们打补丁,并决定文件和凭据放在哪里。虚拟机还要通过宿主机上网,所以它的外部路径仍然是你笔记本的路径。
在围绕它养成习惯之前,先确认客户端和任何设备姿态策略都允许这种环境。拒绝在虚拟机里运行的客户端,是一个应当尽早发现的事实。
共享网关属于基础设施
一台承载所选流量的独立路由器,把问题变成网络设计。当多个人需要同一个客户网络时它工作良好,而当有人把它当成让每个客户彼此隔离的魔法盒子时,它就会失败。
一台在活动隧道之间切换的网关,是一个带队列的共享上下文,而不是几个独立网络。要写明谁可以修改它、它为哪些来源服务,以及两个人同时需要不同客户时会发生什么。没有这个答案,网关就会变成没人负责的中断来源。它也会变成有人为了赶截止日期而悄悄关掉检查的地方。
把交接写进记录
记录不必复杂,但要具体到别人能照着做。在 Linux 中,命名空间是同一想法的技术版本,有它自己的接口和路由表。
下面这些命令会创建一个命名空间、在其中运行命令,并显示桌面客户端当前持有哪些连接:
sudo ip netns add customer-a
sudo ip netns exec customer-a ip route
nmcli connection show --active
应用仍必须在命名空间内部启动,其中的解析器配置是单独的文件。隔离接口并不会隔离剪贴板、SSH 代理或已挂载的共享,而这些正是人们会忘记的泄漏点。
选择能保住你真正需要的那种隔离的最小安排,并让过渡保持可见:窗口标题、终端提示符、配置文件名和凭据所有人都应当一致,然后才发送任何私有请求。