我连接到2个BGP对等体。 他们都给了我一个过滤表,其中包括默认+约30K前缀(不是一个完整的表)。 对于我收到的前缀,我只是让BGP使用它的前缀长度algorithm来select最佳路由。 对于我没有收到的前缀(即:“缺省”适用),我倾向于使用BGP对等体1.问题是,对于我没有从任何一个BGP对等体接收到的一个特定的前缀(即:默认会应用),我想倾向于BGP对等体2,而不是通常的对等体1.我知道我可以很容易地使用静态路由来做到这一点,但是听起来不太合适,因为如果我向对等体2的路由器添加静态路由,路由下降,静态路由将“坚持”,我将无法推动任何stream量的前缀。 如果我能find一个BGP机制来做同样的事情,我可以select一条到BGP对等体2的路由,但是如果这条路由不可用,则使用到BGP对等体1的路由。
为了处理我出站的路由,我使用了路由映射,这个路由映射为接收到的前缀设置了出站stream量的相同的本地优先级,所以使用了BGP的默认前缀列表长度algorithm,并且我设置了更高的出站优先级stream量使用BGP对等体1的“默认”路由。
不幸的是,我不知道如何使用路由映射为我的特殊前缀做这件事,因为系统中不存在具有该前缀的对象:就两个BGP对等方而言,它都由“默认”路由处理。
我使用Quagga进行路由,所以BGP不是唯一可用的协议。 思科式的解决scheme也可以,因为我怀疑我缺乏一些基本的知识,任何方向的推动都会帮助我find自己的方向。
这是我的bgpd.conf文件,编辑删除个人信息; 希望我没有这样做:
router bgp 12345 bgp router-id 10.0.0.1 network 10.0.0.0/24 redistribute connected ! neighbor 10.0.1.1 remote-as 22222 neighbor 10.0.1.1 ebgp-multihop 3 neighbor 10.0.1.1 next-hop-self neighbor 10.0.1.1 distribute-list distrib-out out neighbor 10.0.1.1 route-map INBGP1 in ! neighbor 10.0.2.1 remote-as 11111 neighbor 10.0.2.1 ebgp-multihop 10 neighbor 10.0.2.1 next-hop-self neighbor 10.0.2.1 distribute-list distrib-out out neighbor 10.0.2.1 route-map INBGP2 in ! access-list distrib-out permit 10.0.0.0/24 ! access-list is-default permit 0.0.0.0/0 exact-match ! route-map INBGP2 permit 10 set metric 2 set ip next-hop 89.121.231.73 on-match next ! route-map INBGP2 permit 20 match ip address is-default set local-preference 101 on-match goto 1000 ! route-map INRTC permit 30 set local-preference 110 set metric 1 ! route-map INBGP2 permit 10 set metric 1 on-match next ! route-map INBGP1 permit 20 match ip address is-default set local-preference 200 on-match goto 1000 ! route-map INBGP1 permit 30 set local-preference 110 set metric 1
添加一个静态路由,其下一跳到对等体2只是因为有到对等体2的路由。这样,只要你接收到这个路由,静态路由就会指向对等体2.但是第二个失去了那条路由,您现有的故障转移将翻转它。
select到达对等体2的任何路由,但是如果您无法到达对等体2,则该路由将消失。然后为要覆盖的stream量添加一条静态路由,并使用您select的路由覆盖下一跳。 这将导致匹配第二条路线的stream量跟踪第一条路线。
例如,说你要控制stream量的前缀是216.152.32.0/24 。 你制定一个静态路由到216.152.32.0/24 ,你select它的下一跳。 由于这是一个静态路由,到216.152.32.0/24stream量将被路由到下一跳(假设没有更具体的路由,这将不会有)。 这样就减less了select合适的下一跳的问题。
当到对等体2的链路启动时,您希望stream量以一种方式进行,反之,当该链路不工作时。 所以你需要select具有该属性的下一跳。 原则上,从对等体2dynamic接收的路由中的任何IP都可以工作。 当你有这个路由时,这个stream量将进入对等体2,当你没有的时候,它将遵循默认的对等体1。 (假设您的默认设置已正确设置为故障转移。)
理想情况下,select一个“核心”路由到第二点,但不要太靠近你的连接点。 你希望它是“核心”对等2,因为你不希望它翻转到同伴1有史以来。 你不希望它太靠近你,因为如果你的节点被隔离,你想对对方进行故障转移2.如果你对一些随机的站点进行跟踪路由,你可能能够在附近的城市find一个核心路由器,在他们的骨干上。 那会做的。
有一个简单的解决你的问题,不涉及静态路由。 在深入研究之前,我想谈一谈你描述中的一个语义方面。 最长的前缀匹配规则与BGP无关。 您应该考虑BGPpathselectalgorithm。 每个供应商都有自己的调整这个algorithm; 然而,大部分与思科的algorithm非常相似。
您可以完全控制从您的网站到ISP的stream量。 您可以使用本地优先或多出口区分(MED)来影响此方向的路由。 为了简单起见,我build议使用其中之一。 在ISP发送给您的前缀(即入站策略)上实施此策略。
1)本地偏好 – 最好的本地偏好是首选(默认本地偏好是100)。 本地优先权在BGP最佳path解决scheme中较早,并在AS_LENGTH之前进行评估。 您的提供商无法向您发送本地偏好的前缀; 本地偏好不跨越界限。
2)MED – MED最低。 您的提供商可能会发送MED的前缀。 在Cisco路由器上,除非启用bgp bestpath med丢失最差,否则不将MED视为MED = 0。 MED在BGPpathselectalgorithm中的AS_LENGTH之后被评估。
您可能需要阅读思科的BGP案例研究 。 我还强烈推荐Sam Halabi编写的“ Internet Routing Architectures ”一书,详细介绍BGP及其使用方法。