在 IPsec 实验室里维护两份路由台账:底层与受保护
两份台账:一份负责到达对端,一份承载私有前缀。两份都要跟踪,并把重新分发当作策略决策,而不是捷径。
IPsec 实验室里有两个问题纠缠在一起:数据包如何到达对端的外部地址,以及它如何到达该对端背后的私有网络。它们属于不同的台账,因为回答它们的是不同的路由进程,失败时的症状也不同。底层台账记录外部端点及到达它们的下一跳。上层台账记录受保护的前缀、它们的网关,以及穿过隧道的预期路径。实验室里的大部分混乱,都来自把一份台账中合法存在的路由,读成关于另一份台账的证据。
两份台账,两个问题
实验室还小时,台账短到可以用手工维护,而那正是它们最有用的时候。两列就够:条目是什么,以及如何到达。
| Ledger | What it lists |
|---|---|
| Underlay | Each gateway's external address and the next hop that reaches it |
| Protected | Each private prefix, its local gateway and its intended path through the tunnel |
两个方向都要写。一个前缀出现在出向台账、却不在回向台账,就会造出只带请求、丢掉应答的隧道。这种半工作状态是实验室最常见的结果,也最容易被误当成策略问题。
先写目的地,再写协议
从目的地开始,而不是从协议开始。对每个网关,记录外部地址和到达它的下一跳。然后记录每个私有前缀、它的本地网关,以及它应穿过隧道的路径。
在选择路由协议之前做这件事,讨论才诚实。设计带来的是需求,而不是偏好。于是关于跑哪个协议的争论,就变成哪个需求真正困难的问题。
静态还是动态,按台账分别决定
传输侧的静态路由在实验室里通常是对的:两个端点、一个下一跳,没有什么要收敛。私有侧合理地可以是动态的,因为前缀会随练习来去。传输侧跑一种路由协议、私有侧跑另一种,并不迫使你在这两者之间重新分发;把相互重新分发当作 IPsec 的前提,正是实验室开始产出没人能解释的结果的地方。
分别决定两份台账,并记下哪一份是动态的。两侧只有一个答案,通常意味着这两个问题从未真正分开。
重新分发是策略边界
在路由必须交叉的地方,把交叉做成策略:命名前缀、方向、度量处理和一个环路防护。前缀列表和路由映射提供这四样,而标记让被重新分发的路由在失去原有上下文后仍可识别。仔细读语义,因为它们不能互换:匹配子句里的 ACL 拒绝意味着路由不匹配、评估继续;而路由映射里的拒绝序列会彻底阻止该路由被重新分发。重新分发路由映射指南涵盖了这些子句以及随之而来的属性变化。
然后把得到的结果路由表与两份台账对照。在广泛重新分发之后才开始转发的实验室,证明的是可达性,而不是意图。任何在两份台账里都不出现的表项,都说明导出比设计更宽,之后每一条通告都会继承这种含糊。
让安全示例和路由一样保持最新
依赖弱算法或共享演示密钥的旧教程属于历史观察。把它们抄进你打算扩展的实验室,正是弱默认值活到生产环境的方式。使用平台支持的政策,并记下你测试过的版本,因为实验室比教程活得久。
接受一条获批的主机到主机流、它的返回流量,以及一个必须留在保护范围之外的目的地。把路由来源和协商出的选择器随每个结果一起保存,好让记录显示哪一层被证明,而不是哪一层碰巧是通的。
出问题时,台账会告诉你要打开哪一层。没有对端可达性是传输层,没有内部路由是私有路径,而存在却没有匹配选择器的路由是策略。三句话,一个诊断,不猜。