三个承诺装在同一个广域报价里,买下一个并不等于买下其余两个。有人转发你的数据包,有人让你的路由与其他租户隔开,还有人决定载荷在传输途中是否可读。这些承诺可以归属不同各方,却仍能描述一套可行的设计。把它们拆开才是决策;挑一个技术名字不是。

同一个广域报价里的三个承诺

第一个承诺是传输:哪些站点连通、经哪些接入线路、由谁在它们之间转发数据包。第二个是路由:哪些前缀可以互相到达、谁批准变更、你的流量如何与其他租户隔开。第三个是保护:什么被加密、在哪两个端点之间、谁持有密钥。每一项都要书面确认,因为每个答案都住在不同的文件里。

运营商的报价往往给第一项定价,把第二项当成默认,把第三项留给你。这不是不诚实;这三项由不同团队出售。设计评审发现安全团队假定已有加密、网络团队假定运营商已经处理时,问题就出现了。把这句话拆成三份只需一小时,却能避免那场会议。

标签描述的是转发,不是接入点上的服务

多协议标签交换说明数据包在运营商网络内部如何行走。它却不说客户接入的是什么,也不说客户与运营商边缘交换什么。运营商可以基于 MPLS 构建路由型 IP VPN,也可以提供连接模型完全不同的第 2 层服务,两者都可能以“MPLS 连接”的名义送到你面前。

IETF 的运营商提供型 VPN 术语正是为此定义词汇:客户边缘、运营商边缘,以及两者之间构建的服务模型。当报价把层次搅浑时用它,并追问交接在物理上究竟是什么。

路由型服务让你与运营商边缘建立路由关系,于是增加一个前缀变成两个组织之间的变更请求。第 2 层的交接承载你自己的路由,把运维负担移到你这一侧。两者在抽象层面没有优劣;答案取决于你的拓扑多久变一次、凌晨三点你希望谁来接电话。

加密是一份无法顺手转交的承诺

私有传输并不会让载荷不可读。运营商隔离只是在运营上把租户分开,并不是关于谁能检查路径上字节的声明。如果要求是运营商读不到流量,这项要求就需要一个你掌控的机制,而 IPsec 是通常的选择。

IPsec 跑在私有传输上和跑在互联网接入上一样容易,所以当你同时需要受管可达性和自己的信任边界时,“MPLS 还是 IPsec”是个假选择。先决定隧道在哪终止,因为终止在路由器上的隧道会让该路由器之后的网段留在明文里。再决定每个对等体由谁管理,因为第三方持有的密钥不是你拥有的边界。

给每个承诺一个名字和一条可测量的边界

为每个承诺写一行,写明负责人和可测量的边界。接入线路的可用性属于供应商,骨干网时延属于运营商,隧道存活属于运行端点的人。一个没人测量的端到端数字,就是没人欠你的数字。

服务级别协议来自合同及其范围,而不是技术名字里的字母。IPsec 并不要求尽力而为的互联网传输,MPLS 本身也不携带时延保证;两者都取决于底层网络和你选择的端点。

测试你画出的路径,包括它的故障

接口宽裕的私有传输,在叠加层加上报头后仍可能失败,症状是会话建立起来、却在较大响应上卡住。不要空想,去测可用尺寸,并记下能端到端通过的最大数据包。先做这件事再争论带宽,因为丢大包路径看起来像应用问题。这个数字应当写进设计文档,放在每条接入线路的 MTU 旁边。

ping -M do -s 1400 -c 3 <vpn-gateway>
traceroute -n <vpn-gateway>

这些命令来自一个站点上的 Linux 主机;其他平台写同样的测试会不一样。如果某个站点需要更小的值,那是要记录的设计约束,不是要上报的故障。同样的纪律适用于吞吐量,因为加密要耗费处理能力,端点也成为容量计算的一部分。

签字前画两张图:一张正常路径,标出每个负责人;一张故障路径,用同样的标注。第二张会暴露那些纸面上看似冗余、实际却依赖单台设备的设计。故障来临时,正是这张图把混乱的早晨变成简短的排查。

相关文章