我有一个多宿主网络设置。我使用 Cisco 7200 向提供商 A 和 B 进行 BGP 通告。对于每个提供商,我都有一个单独的 /24。我使用 AS 前置来影响提供商 A 的块 A,以及提供商 B 的块 B。这很好用。如果任何一个提供商出现故障,故障转移效果很好。
但是,我还想以同样的方式影响出站流量流向每个提供商。也就是说,当流量进入我的路由器时,我想根据源 IP 地址将其流出与提供商关联起来。实际上,每个提供商只向我通告一个默认路由。
我相信我可以使用路由策略来实现这一点,但我不想在策略中对 IP 地址进行硬编码,因为它们可能会动态变化。
那么,我可以通过哪些选项来影响出站路由?
答案1
据我所知,您希望来自 ProviderA 的流量返回到 ProviderA,并且来自 ProviderB 的流量返回到 ProviderB。
我不太明白“我不想对 IP 地址进行硬编码”,因为 /24 不是动态的。所以我会根据源地址做一个路由图。这不是 100% 好,因为即使 AS 前置,您也可能从 ProviderB 链接接收到 ProviderA IP 上的流量,并且您会将流量发送回 ProviderA 而不是 ProviderB,但大多数情况下都会没问题。
access-list 101 permit ip PROVIDER_A_SUBNET 0.0.0.255 any
access-list 102 permit ip PROVIDER_B_SUBNET 0.0.0.255 any
route-map SOURCE_ROUTING permit 10
match ip address 101
set ip next-hop PROVIDER_A_ROUTER
route-map SOURCE_ROUTING permit 20
match ip address 102
set ip next-hop PROVIDER_B_ROUTER
然后policy route-map SOURCE_ROUTING
在接收需要出去的数据的接口上进行应用。
答案2
离散直接对等体之间的出站流量路径通常通过使用本地偏好属性,并且可以通过邻居、ASN 或前缀选择性地应用于接收的路由。
但是,如果您只从每个提供商接收默认路由,那么您的选择将非常有限。您没有无默认运行的原因是什么,例如路由器容量?
答案3
Radius 似乎已经实现了您想要的功能。另一个选择是 Cisco性能路由 (PfR)。PfR 是一个更为复杂的解决方案,但确实允许您根据 Cisco 的指标选择使用哪个提供商IP SLA以及其他因素。如果路由图和其他标准 BGP 控制不够,则需要在未来进行研究。
答案4
更好的方法是只对出站流量进行负载平衡。虽然您可以按照建议进行操作并设置特定于提供商的下一跳,但如果其中一个链接发生故障,则该提供商的出站流量将中断,因为下一跳是硬设置的。
因此您要做的就是将两个提供商的本地首选项标记为相同。
router bgp xxxx
neighbor <provider A peer IP> route-map DEFAULT-ROUTE-ONLY in
neighbor <provider B peer IP> route-map DEFAULT-ROUTE-ONLY in
! just an example
ip prefix-list DEFAULT-ONLY seq 10 permit 0.0.0.0/0
! match only the default route, don't allow anything else
route-map DEFAULT-ROUTE-ONLY
match ip address prefix-list DEFAULT-ONLY
set local-preference 150
! this sets the local pref for the default routes the same and load balances outbound
让提供商 A 的出站流量流出提供商 B 的链接并不是什么大问题,因为互联网流量在多条路径下不会出现问题。此外,您还可以获得自动故障转移的优势。