案例2――关于如何防止绕行建立ebgp邻居

更新时间:2023-12-04 18:14:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

关于如何防止绕行建立ebgp邻居

一、 概述................................................................................................................................... 1

(一)通常ebgp邻居建立的方式 ........................................................................................ 1 (二)ebgp-multihop为2时出现的ebgp邻居绕行问题 .................................................. 2 二、 如何避免绕行建立ebgp邻居的解决方案分析 ............................................................ 6

(一)ttl-security方案 ........................................................................................................... 6 (二)浮动静态路由方案 ....................................................................................................... 8

一、 概述

(一)通常ebgp邻居建立的方式

通常ebgp邻居建立的方式有两种,一种通过直连接口建立邻居,另一种是通过loopback接口建立邻居。

在eBGP的默认配置中由于协议报文的TTL值为1,路由器在向外转发报文时会将TTL减1,因此默认情况下必须使用互联接口来建立ebgp邻居。但在实际应用中,考虑到物理互联接口的不稳定性和不便于流量均衡,通常不使用物理接口来建立ebgp邻居。

实际应用中多采用的方式是通过loopback接口来建立ebgp邻居,该方式有如下优点:

1. 稳定性高,因为loopback接口是一个逻辑虚拟接口,因此不受物理层状态的影响,对bgp这样一个着重于稳定性的路由协议是很有好处的。

2. 有利于做流量的负载均衡。通过loopback地址建立ebgp邻居关系,当两台ebgp路由器间有多条链路互联的时候,流量可以通过互联链路IGP路由迭代,实现负载均衡。避免了bgp路由调整的复杂

工作。

3. 在多链路互联的ebgp peer环境中,使用loopback接口建邻居,可以大大减少BGP通告的报文,减少CPU利用率

通过loopback接口建立ebgp邻居的配置,需要配置ebgp-multihop参数为2,即设置TTL值为2。参考配置如下。

router bgp 100

no synchronization

bgp log-neighbor-changes

neighbor 2.2.2.2 remote-as 200 neighbor 2.2.2.2 ebgp-multihop 2

neighbor 2.2.2.2 update-source Loopback0

(二)ebgp-multihop为2时出现的ebgp邻居绕行问题 然而ebgp-multihop的应用会在一些特殊的情况下存在问题。参考下图所示拓扑:

loopback0R2loopback0R3AS100AS100R1loopback0

这是一个典型的城域网CR和骨干网路由器的ebgp连接拓扑示例。R1与R2、R3分别建立通过loopback接口建立ebgp邻居,ebgp-multihop设为2.

当R1到R2的链路中断时,R1仍可以通过R3学到R2 loopback0

的ebgp路由,同样R2也可以通过R3学习到R1的loopback0的ebgp路由,也就是说R1的loopback0和R2的loopback0之间仍是路由可达的。

同时,由于设置的ebgp-multihop为2,当从R1发出的BGP报文经路径R1-R3-R2到达R2时,R2接受到的报文TTL值减为1,R2仍视该BGP报文是有效报文,因此R1与R2之间的ebgp邻居关系仍是可以建立的。

具体验证如下: R1配置:

interface Loopback0

ip address 1.1.1.1 255.255.255.255 !

interface FastEthernet0/0 description to R2-f0/0

ip address 10.1.1.2 255.255.255.252 shutdown duplex auto speed auto !

interface FastEthernet1/0 description to R3-f0/0

ip address 172.16.1.1 255.255.255.252 duplex auto speed auto ! !

router bgp 100

no synchronization

bgp log-neighbor-changes

network 1.1.1.1 mask 255.255.255.255 neighbor 2.2.2.2 remote-as 200 neighbor 2.2.2.2 ebgp-multihop 2

neighbor 2.2.2.2 update-source Loopback0 neighbor 3.3.3.3 remote-as 200 neighbor 3.3.3.3 ebgp-multihop 2

neighbor 3.3.3.3 update-source Loopback0 no auto-summary !

ip route 2.2.2.2 255.255.255.255 10.1.1.1 ip route 3.3.3.3 255.255.255.255 172.16.1.2 !

R2配置:

interface Loopback0

ip address 2.2.2.2 255.255.255.255 !

interface FastEthernet0/0 description to R1-f0/0

ip address 10.1.1.1 255.255.255.252 shutdown duplex auto speed auto !

interface FastEthernet1/0 description to R3-f1/0

ip address 192.168.1.1 255.255.255.252 duplex auto speed auto !

router ospf 100

log-adjacency-changes

network 2.2.2.2 0.0.0.0 area 0 network 192.168.1.0 0.0.0.3 area 0 ! router bgp 200

no synchronization

bgp log-neighbor-changes

network 2.2.2.2 mask 255.255.255.255 neighbor 1.1.1.1 remote-as 100 neighbor 1.1.1.1 ebgp-multihop 2

neighbor 1.1.1.1 update-source Loopback0 neighbor 3.3.3.3 remote-as 200

neighbor 3.3.3.3 update-source Loopback0 neighbor 3.3.3.3 next-hop-self no auto-summary !

ip route 1.1.1.1 255.255.255.255 10.1.1.2

!

R3配置:

interface Loopback0

ip address 3.3.3.3 255.255.255.255 !

interface FastEthernet0/0 description to R1-f1/0

ip address 172.16.1.2 255.255.255.252 duplex auto speed auto !

interface FastEthernet1/0 description to R2-f1/0

ip address 192.168.1.2 255.255.255.252 duplex auto speed auto !

router ospf 100

log-adjacency-changes

network 3.3.3.3 0.0.0.0 area 0 network 192.168.1.0 0.0.0.3 area 0 !

router bgp 200

no synchronization

bgp log-neighbor-changes

network 3.3.3.3 mask 255.255.255.255 neighbor 1.1.1.1 remote-as 100 neighbor 1.1.1.1 ebgp-multihop 2

neighbor 1.1.1.1 update-source Loopback0 neighbor 2.2.2.2 remote-as 200

neighbor 2.2.2.2 update-source Loopback0 neighbor 2.2.2.2 next-hop-self no auto-summary !

ip route 1.1.1.1 255.255.255.255 172.16.1.1

当R1与R2连接的链路中断时,R1可以通过R3学习到R2 loopback接口的BGP路由,查看路由表如下:

R1# sh ip route 2.2.2.2

Routing entry for 2.2.2.2/32

Known via \

Tag 200, type external

Last update from 3.3.3.3 00:52:30 ago Routing Descriptor Blocks:

* 3.3.3.3, from 3.3.3.3, 00:52:30 ago

Route metric is 0, traffic share count is 1 AS Hops 1 Route tag 200

在R2上也可以看到同样结果:

R2#sh ip route 1.1.1.1

Routing entry for 1.1.1.1/32

Known via \ Tag 100, type internal

Last update from 3.3.3.3 00:00:03 ago Routing Descriptor Blocks:

* 3.3.3.3, from 3.3.3.3, 00:00:03 ago

Route metric is 0, traffic share count is 1 AS Hops 1 Route tag 100

R1、R2的loopback接口可以互相ping通,结果是导致R1、R2的ebgp邻居关系仍然是可以建立的:

R1#sh ip bgp summary

BGP router identifier 1.1.1.1, local AS number 100 ……

Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd 2.2.2.2 4 200 94 92 7 0 0 00:55:42 2 3.3.3.3 4 200 78 79 7 0 0 01:13:35 2

这样的结果显然不是我们期望看到的。R1、R2通过ebgp路由建立ebgp邻居,可能造成的后果是路由环路、bgp 邻居状态的不稳定、消耗系统资源等。这是一种不稳定的、容易造成混乱的状态,因此需要尽量避免这种状态的出现。

二、 如何避免绕行建立ebgp邻居的解决方案分析 (一)ttl-security方案

对于以上问题,有文档建议可以采取eBGP的GSTM机制(该机制原本是用于防止用户伪造BGP peer 对bgp路由器发动攻击的,具体机制暂不详述 ),即使用ttl-security hop来替代ebgp-multihop。

该命令格式为neighbor 2.2.2.2 ttl-security hops N ,此时bgp进程发出报文的TTL值为255,期待从邻居接收到的TTL值大于或等于255-N,从而限制ebgp邻居建立的跳数半径。

文档建议对loopback建立ebgp邻居的2台直连路由器(例如上例中的R1-R2)使用如下配置来限制ebgp的跳数范围:

neighbor 2.2.2.2 ttl-security hops 1

但如果只有这条命令ttl-security hops设置为1时,R1-R2的loopback接口 ebgp邻居却建立不起来。此时需要配置:

neighbor 2.2.2.2 disable-connected-check

忽略掉直连链路跳数检查,这样就可以在路由器直连的情况下,设置TTL=1,来限制BGP报文跨越多跳转发。达到限制绕行建立ebgp邻居的目的。但该方式不是所有厂家设备都支持,目前来说通用性有待考证。

注:经测试,事实上采用

neighbor 2.2.2.2 update-source Loopback0 neighbor 2.2.2.2 ebgp-multihop 1 neighbor 2.2.2.2 disable-connected-check

两者配合使用也可以达到防止绕行建立ebgp邻居的目的,但ebgp-multihop无法防止伪造bgp peer攻击。

(二)浮动静态路由方案

除了以上思科的ttl-security的方案,我们还可以采取其他非TTL方式的思路来避免路由器通过迂回的路由建立ebgp 邻居的问题。

loopback0R2loopback0R3AS100ebgp peerdownAS100R1loopback0

还是用前面的案例进行说明,实际上我们的需求是当R1-R2的链路down时,R1至R2通过loopback接口建立的ebgp邻居也down掉。 因此,只要能使链路中断情况下,R1 、R2间loopback接口的路由不可达,就可以达到ebgp邻居建立不起来目的。

我们可以在R1、R2上对对方的loopback地址各配置一条优先级介于普通静态路由和ebgp路由之间的指向NULL0的静态路由。

以R1为例(R2类似):

ip route 2.2.2.2 255.255.255.255 10.1.1.1 // 正常情况到R2 loopback的路由,优先级为1 ip route 2.2.2.2 255.255.255.255 null 0 15 // 路由优先级为15的浮动路由

当R1-R2链路中断时,R1通过ebgp从R3学到R2 loopback的路由,但ebgp路由优先级为20(思科路由器),小于静态浮动路由的优先级15。因此,指向NULL0的静态浮动路由被选择进入路由表。

从R1到R2 loopback接口ip 2.2.2.2的报文匹配该NULL 0路由后被丢弃, R1、R2之间loopback ip不能互通,最终实现了R1-R2之间不再通过R3绕行建立ebgp邻居的目标。

通过浮动静态路由指向NULL0的方式避免ebgp邻居绕行,具有通用性较强,易于实施的优点。有利于提高城域网路由的稳定性。

本文来源:https://www.bwwdw.com/article/p1bt.html

Top