BGP over IPsec:会话抖动

网络工程 思科 路由 虚拟专用网 bgp 网络安全
2021-08-01 10:40:32

我们有两个 IPsec VPN 隧道(通过公共网络)到 AWS 中的 VPC。每个隧道有一个 BGP 会话。我们的路由器是 Cisco 3925E。

在负载(不一定过多)下,BGP 会话经常抖动(保持时间已过期)。我已经尝试使用 keepalive / hold time 参数但没有任何成功......解决这个问题的最佳方法是什么?

当前 BGP 配置:

router bgp 65000
 neighbor 169.254.26.225 remote-as 10124
 neighbor 169.254.34.93  timers 5 30 30

日志:

Apr 25 10:30:09.897: %BGP-3-NOTIFICATION: sent to neighbor 169.254.34.93 4/0 (hold time expired) 0 bytes 
Apr 25 10:30:09.899: %BGP-5-NBR_RESET: Neighbor 169.254.34.93 reset (BGP Notification sent)
Apr 25 10:30:09.899: %BGP-5-ADJCHANGE: neighbor 169.254.34.93 Down BGP Notification sent
Apr 25 10:30:09.899: %BGP_SESSION-5-ADJCHANGE: neighbor 169.254.34.93 IPv4 Unicast topology base removed from session  BGP Notification sent
Apr 25 10:30:13.023: %LINEPROTO-5-UPDOWN: Line protocol on Interface Tunnel21, changed state to down
2个回答

正如评论部分中的其他人所提到的,您丢失了足够多的 BGP 保持活动数据包,导致会话失败。当会话断开时,所有流量可能会停止,直到 BGP 重新建立其会话(至少需要 60 秒,通常更长)。

所以 - 你有两个选择:要么找到一种机制来确定 BGP 流量的优先级,要么让 BGP 对数据包丢失不那么敏感。

前者(优先级排序)可能不可行,因为正如您所指出的,您依赖于公共网络,而会话的另一端不在您的控制范围内。当然,您当然可以对实际传输的数据包进行优先级排序和保护,但这并不能保证在您管理的路由器之外的一跳中得到尊重。

后一种方法(BGP 不那么敏感)可能是更实用的选择。在这种情况下,我建议让你的死定时器更长。目前,您每 5 秒发送一次数据包,如果在 30 秒内未收到响应,则会话超时。尝试将后一个值增加到 60 或 90(也可以考虑增加第三个数字,因为它是您的最小值)将允许协商,我们不知道同行的信息)。这使您可以更好地在突发期间保持活动状态。

为 keep-alive 寻找最佳值始终是稳定性和检测速度之间的折衷。不过,我要补充一点,如果这是您通往 AWS 的唯一途径——或者如果替代途径实际上不太理想——那么在缓慢的故障检测方面犯错实际上很有意义。

在邻居上禁用 path-mtu-discovery。