BGP(边界网关协议)
BGP:边界网关协议,是在运营商之间使用的。
使用范围:BGP范围,在AS之间使用的协议。
协议的特点(算法):路径矢量型,没有算法;(BGP协议没有算法,只有规则);
普通的IGP协议是router by router之间的协议,而BGP是AS by AS之间的协议;
协议是否传递网络掩码 :传递网络掩码,支持VLSM CIDR 协议消息数据包封装:基于TCP封装,端口号:179 (BGP是基于TCP进行工作的,所以BGP不需要ACK报文进行确认。像OSPF是基于UDP工作的,就需要ACK报文来进行确认)
BGP的端口为179,但只是一个本地的端口。
像rip的端口为520,它们之间是520发往520的。
而bgp则是本地端口为179于其他非179端口进行三次握手和发送数据。
因为:一个router会于好几个router传递bgp路由。
AS: 自治系统 自治系统范围:1-65535 , 公有AS (1-64511) 私有AS(64512-65535)
BGP协议的特点
一.BGP协议特点
1.BGP是一种路径矢量型路由协议;
2.BGP协议版本,当前版本V4(V4+)V1 V2 V3(有类别) V4(无类别 仅仅支持IPV4单 播路由传递) V4+(支持IPV4单播路由、IPV6单播 IPV4 组播 、IPV6组 播、VPNV4 、VPNV6 等,除了IPV4单播路由之外的其他的都称为 MP-BGP---多协议 BGP; 注意:默认仅仅支持传递IPV4单播路由,传递其他方式路由时需要开启(激活))
3.更新地址:单播更新;
4.更新方式:触发更新、增量更新(只要在网络稳定的情况下,BGP永远不会向外发送信息,就算进行了触发更新也只是发送改变的路由信息);
5.BGP协议中存在大量的属性(是一种基于规则的路由协议);
6.BGP协议支持路由认证(一般协议路由认证是做在协议本身,而BGP是做在TCP的可选项里面);
7.支持BGP路由聚合(汇总);
8.BGP是一种非常消耗资源的路由协议;(一个路由器上只能运行一个BGP);
二.适合使用BGP的网络环境
1.传输AS
2.多宿主
3.需要对迚入和离开的流量迚行强大的策略控制时
BGP的邻居关系
BGP邻居分为两种:
IBGP :内部BGP邻居(建立邻居的双方属于同一AS叫IBGP邻居关系)
EBGP:外部BGP邻居(建立邻居的双方属于不同的AS叫EBGP邻居关系)
通过IBGP邻居学习到的路由叫IBGP邻居路由,通过EBGP邻居学习到的路由叫做EBGP邻居路由。
注意:在IGP协议中邻居关系建立和路由传递只能在直连之间进行。而BGP协议可以在非直连之间进行建立邻居和传递路由,因为BGP是基于TCP的,只要双方可以建立TCP连接即可。
IBGP邻居和EBGP邻居的防环机制
IBGP防环:
IBGP邻居的防环机制:IBGP的水平分割机制(通过IBGP邻居学习到的路由不能再传递给其他IBGP邻居)。也可以叫做IBGP的只传一跳规则。
EBGP防环:
EBGP邻居的防环机制:AS-Path AS路径防环,不接收AS-Path中包含自身AS号的路由信息;
BGP的邻居状态机制和消息数据包:
R1和R2之间开始建立邻居关系:
首先BGP是基于TCP进行封装的,也就是说BGP在传递路由之前要先做3次握手。所以在进行邻居关系建立的时候双方需要有一个更新源地址,这个就是双方进行TCP3次握手的地址。所以在BGP邻居关系建立时需要指定一个IP地址,
BGP的邻居状态机制:
BGP的邻居状态机制有:
Idle : 初始化 Connect :连接 Active : 活劢
Opensent:収送open报文 Openconfirm :open报文确认
Established :邻居状态
Idle(初始化状态)
当我一完成BGP的配置之后就会进入到初始化的状态。
在ldle状态中,会尝试进行TCP的三次握手。在这个状态不会发送BGP的消息数据包,仅仅完成TCP的三次握手。
-
在连接的时候可能是R1的高位端口连接R2的179端口,也可能是R1的179端口连接R2的高位端口。
它们在TCP连接时的模型不是(C/S)模型,双方都不是客户端和服务端。而是双方都有可能发起TCP的3次握手。
但是在思科中:一般是IP地址大的一方发起TCP的3次握手。
总结:在ldle状态中开始进行TCP的三次握手,如果进行TCP三次握手的双方没有对方IP路由消息的时候就会卡在ldle状态。
Connect /Active状态
Connect :连接
Active : 活劢
在完成ldle状态后就会进入到该状态。
在TCP的3次握手中总有一方是主动发起,有一方是被动相应的。如果R1向R2发起的,那么R1就是主动的,R2就是被动的。
而主动发起的一方(R1)就会进入到Active状态,被动相应的一方就会进入到Connect状态。
- 进入到Active/Connect状态也就标志着TCP的3次握手完成了。
到了Active/Connect状态,此时还没有发送BGP的消息数据包。
到了该状态之后就会发送open报文,一旦开始发送open报文就会进入Opensent/Openconfirm状态。
Opensen/Openconfirm状态
Opensent:发送open报文 Openconfirm :open报文确认
一旦发送open报文就会进入到该状态。
一般来说,主动进行三次握手的一方先发送open报文。主动发送的一方会率先进入到Opensen状态。被动响应的一方会直接进入到Openconfirm状态。
- 当我收到了open报文并且检测到邻居关系建立条件是匹配的就会发送keepalive报文。
Established状态
Established :邻居状态
一旦收到对方发来的keepalive报文,就会进入到Established状态;
BGP的消息数据包:
BGP的消息数据包:
Open keepalive updata notification
1.open报文
open报文只具备建立邻居关系的作用。通过发送open报文发送一些自己的相关参数。如果open报文里面的参数匹配那么就可以建立邻居,如果不匹配就不能建立邻居。
Marker:标记字段,相当于填充符。
Length:大小,长度。
Type:BGP消息数据包的类型。
Version:运行的BGP的版本。
My AS:自己的as号是多少。
Hold Time:保持时间,这个时间不是说open报文180秒发送一次,而是后续的第二种报文(keepalive报文)的超时时间(死亡时间)。保持时间不影响BGP的邻居关系建立。
keepalive报文默认60秒发送一次。
BGP Identifier:BGP的router id。
BGP的router id选择于ospf中的一致。
BGP中的Router id标识该路由器在BGP网络中的唯一性。
- 因为BGP在建立邻居的时候可以在非直连间建立,所以必须要有router id。
Optional Parameters:中包含的是BGP的几个属性。包含BGP的能力参数。
Capability: Multiprotocol extensions capability----------表示支持多协议的能力;
Capability: Route refresh capability -----------表示支持路由刷新的能力;可以通过一条命令在不断开tcp会话的情况下重新发送路由信息使策略生效。
Capability: Support for 4-octet AS number capability --------表示支持4字节的标识AS号的方法。
BGP邻居关系建立条件:
1.router-id 必须不同 2.BGP认证一致 3.指定正确的AS号 4.建立TCP三次插手的两端路由可达
注意:在BGP中邻居关系建立和路由的传递是分开进行的。
当邻居关系建立完成之后才开始发送路由。
2.keepalive
keepalive :保活报文,用来维持BGP邻居关系;
周期性发送,周期间隔为60s。超时时间默认为180秒。
3.updata
路由通告updata
Network Layer Reachability Information (NLRI) :-------在BGP中传递的是网络层可达信息。包含网络号和网络掩码。对于BGP来说不会携带cost值。有的是属性。
Path attributes :路径属性。
OPUGIN:起源属性,代表该路由的起源是什么。
AS_PATH:代表AS路径属性。
NEXT_HOP:代表下一跳属性。
MYLTI_EXIT_DISC:代表多出口的鉴别属性。
在BGP路由加表的时候,其中的cost值写的就是MYLTI_EXIT_DISC的值。只是该BGP路由的一个属性。
路由撤销updata
在RIP中删除一条路由只需要将cost值调为16,在ospf中删除一条路由可以将LSA的age调整为3600s。而在BGP中删除一条路由需要用专门的updata更新,叫做撤销路由。
下面这个报文就是撤销路由:
Withdrawn Routes Length: 4 --------表示不可达路由长度,这里为4,表示下面的路由为不可达路由。之前为0,表示下面的路由为可达路由。
Withdrawn Routes:表示需要杯撤销的路由。
4.notification
6/3的notification
错误报告;
在BGP协议正常工作的情况下不会发notification报文,如果你的BGP配置或者BGP工作出现了问题的时候才会发送notification报文。
这里,这个notifiaction报文的错误代码为6/3;
Minor error Code (Cease): Peer De-configured (3) ---------表示对端未配置。
2/2的notification
如下,还有一个错误代码为2/2的notification报文:
表示对端不正确。本来R2的AS为200,但是在R1配置的时候配置为了100。所以就会出现2/2的notifcation报文。
BGP的配置:
IBGP:可以使用直连物理接口建立,非直连接口建立(环回接口)
EBGP:可以使用直连物理接口建立,非直连接口建立(环回接口)
在做BGP前要保证AS 200中的可以通信,需要在AS 200中启用一个IGP协议;我们启用一个RIP。
注意: R1和R2之间的12.1.1.0/24网段不能通告到IGP协议中。
R4和R5之间的45.1.1.0/24网段不能通告到IGP协议中。
1.用直连接口建立IBGP邻居:
在AR2和AR3之间建立IBGP:
AR2上:
[r2]bgp ?
INTEGER<1-4294967295> AS number in asplain format (number<1-4294967295>)
STRING<3-11> AS number in asdot format
(number<1-65535>.number<0-65535>)
[r2]bgp 200 -----写自己的AS号
[r2-bgp]router-id 2.2.2.2 ----指定router id,标识唯一性
[r2-bgp]peer 23.1.1.2 as-number 200 ---配置对等体的ip和AS号,表示你要于哪个ip进行TCP的三次握手。
AR3上:
[r3]bgp 200
[r3-bgp]router-id 3.3.3.3
[r3-bgp]peer 23.1.1.1 as-number
[r3-bgp]display bgp peer -----查看BGP的对等体,发现已经建立成功了。
BGP local router ID : 3.3.3.3
Local AS number : 200
Total number of peers : 1 Peers in established state : 1
Peer V AS MsgRcvd MsgSent OutQ Up/Down State Pre
fRcv
23.1.1.1 4 200 3 3 0 00:01:20 Established
0
[r3-bgp]
2.用环回接口建立IBGP邻居:
在AR3和AR4之间建立IBGP:
[r4]bgp 200
[r4-bgp]router-id 4.4.4.4
[r4-bgp]peer 3.3.3.3 as-number 200
[r3]bgp 200
[r3-bgp]router-id 3.3.3.3
[r3-bgp]peer 4.4.4.4 as-number 200
[r3]display bgp peer
BGP local router ID : 3.3.3.3
Local AS number : 200
Total number of peers : 2 Peers in established state : 1
Peer V AS MsgRcvd MsgSent OutQ Up/Down State Pre
fRcv
4.4.4.4 4 200 0 0 0 00:02:13 Active
0
23.1.1.1 4 200 8 8 0 00:06:31 Established
0
此时,我们发现AR3并没有于AR4成功建立邻居关系。
解释:
一个路由器运行BGP那么它的179号端口是开放的。但不是所有的人都可以访问我们的179号端口的。
在AR3上我们配置了,peer 4.4.4.4 as-number 200,表示我要与4.4.4.4这个ip进行tcp的3次握手。同时也隐含了一个信息,只有4.4.4.4这个ip才能访问我的179号端口。同样AR4上也隐含了一个信息只有3.3.3.3这个ip才能访问我的179号端口。
在AR3向AR4发送消息的时候源为34.1.1.1,AR4向AR3发送消息的时候源为34.1.1.2。所以双方都拒绝对方访问我的179号端口。
所以,我们要在AR3和AR4上将我们的源地址改为3.3.3.3/4.4.4.4。
配置:
[r3]bgp 200
[r3-bgp]peer 4.4.4.4 connect-interface LoopBack 0 --将发送消息的源地址改为LoopBack 0的地址
[r4]bgp 200
[r4-bgp]peer 3.3.3.3 connect-interface LoopBack 0
[r3-bgp]display bgp peer -----再次查看就会发现AR3和AR4已经成功建立邻居关系
BGP local router ID : 3.3.3.3
Local AS number : 200
Total number of peers : 2 Peers in established state : 2
Peer V AS MsgRcvd MsgSent OutQ Up/Down State Pre
fRcv
4.4.4.4 4 200 3 5 0 00:01:14 Established
0
23.1.1.1 4 200 26 26 0 00:24:34 Established
0
3.用直连接口建立EBGP邻居:
AR1和AR2之间建立:
在AR1上:
[r1]bgp 100 ---自己的AS号
[r1-bgp]router-id 1.1.1.1
[r1-bgp]peer 12.1.1.2 as-number 200 ---与对端进行tcp会话的ip地址和AS号
在AR2上:
[r2]bgp 200
[r2-bgp]router-id 2.2.2.2
[r2-bgp]peer 12.1.1.1 as-number 100
[r2-bgp]display bgp peer -----查看表就可以发现它们成功建立邻居关系。
BGP local router ID : 2.2.2.2
Local AS number : 200
Total number of peers : 2 Peers in established state : 2
Peer V AS MsgRcvd MsgSent OutQ Up/Down State Pre
fRcv
12.1.1.1 4 100 2 2 0 00:00:38 Established
0
23.1.1.2 4 200 36 37 0 00:34:40 Established
0
[r2-bgp]
4.用环回接口建立EBGP邻居:
在AR4与AR5之间建立:
1.在AR4与AR5之间使用环回建立邻居首先就要保证两个环回可以互通。
互写静态路由使AR4与AR5的环回可以通:
[r4]ip route-static 5.5.5.0 24 45.1.1.2
[r5]ip route-static 4.4.4.0 24 45.1.1.1
注意:使用动态或者静态路由使环回互通都可以,不过不能双方都写缺省;
如果双方都写了缺省,虽然两个环回可以通,但是它们的BGP邻居不能建立。不是说不能用缺省,而是说不能用缺省主动发起tcp的3次握手。也就是说着两个里面至少有一个是明细路由。
如果R4写了一条明细路由,R5写了一条缺省,那么只能R4向R5发起tcp3次握手,R5被动响应。
总结:写了缺省就不能主动发起3次握手,这个只针对BGP;
2.配置
[r4]bgp 200
[r4-bgp]router-id 4.4.4.4
[r4-bgp]peer 5.5.5.5 as-number 300
[r5]bgp 300
[r5-bgp]router-id 5.5.5.5
[r5-bgp]peer 4.4.4.4 as-number 200
[r5]display bgp peer -----此时发现邻居关系并没有成功建立;
BGP local router ID : 5.5.5.5
Local AS number : 300
Total number of peers : 1 Peers in established state : 0
Peer V AS MsgRcvd MsgSent OutQ Up/Down State Pre
fRcv
4.4.4.4 4 200 0 0 0 00:01:48 Active
0
原因1:
更新源地址,AR4允许的是5.5.5.5,AR5允许的4.4.4.4;
我们需要修改发出消息的源地址为双方的环回地址。
[r4-bgp]peer 5.5.5.5 connect-interface LoopBack 0
[r5-bgp]peer 4.4.4.4 connect-interface LoopBack 0
原因2:
在EBGP邻居建立中存在直连检测,默认情况下EBGP只能在直连间建立邻居。我们已经更新源地址改了,当AR4收到AR5的报文时,源地址为5.5.5.5。此时就会发现与AR4的G0/0/0这个接口的ip不在一个网段。就会出现直连检测失败,就不会收TCP的数据包。
在EBGP建立邻居时,其中数据包的TTL值为1。
此时,我们面对这种情况有两种办法:
1.关闭直连检测,在思科中可以关闭,但是在华为中没有这条命令;
2.修改TTL值,改的比1大;当我们修改TTL值后有两个作用:
(1).把直连检测关闭;
(2).把EBGP邻居之间发送open报文的TTL值改了。
总结:在这种情况 只需要去将TTL值修改即可。
[r4-bgp]peer 5.5.5.5 ebgp-max-hop 20
[r5-bgp]peer 4.4.4.4 ebgp-max-hop 20
此时就可以发现EBGP邻居成功建立了:
[r5-bgp]display bgp peer
BGP local router ID : 5.5.5.5
Local AS number : 300
Total number of peers : 1 Peers in established state : 1
Peer V AS MsgRcvd MsgSent OutQ Up/Down State Pre
fRcv
4.4.4.4 4 200 2 3 0 00:00:20 Established
0
[r5-bgp]
总结:
1.使用环回建立EBGP邻居必须保证两个环回可以互通;
2.还要修改更新源地址为环回地址;
[r4-bgp]peer 5.5.5.5 connect-interface LoopBack 0 [r5-bgp]peer 4.4.4.4 connect-interface LoopBack 0
3.修改TTL值;
[r4-bgp]peer 5.5.5.5 ebgp-max-hop 20 [r5-bgp]peer 4.4.4.4 ebgp-max-hop 20
BGP的路由通告
1.通过network进行通告
BGP通过network进行通告路由,可以通告路由表中的所有的路由。
并且BGP通告是非常准确的子网掩码进行通告:
2.通过import引入
通过import来发布路由 [r2-bgp]import-route ospf 1
注意:使用import引入只能学习到该协议接口的路由信息已经通过该协议学习到的信息;
3.通过聚合进行发布
自动聚合:
BGP中的自动聚合有一个限制条件,不是所有的路由信息都能去聚合;它只针对重发布的路由信息可以做聚合。
如上图:AR1上存在两个环回,将两个环回发布到BGP中:因为要使用自动聚合,我们需要将路由import;
自动聚合有两个特点:
1.自动聚合默认关闭需要开启;
2.自动聚合会按照主类网段聚合;
[注意:设备之所以关闭自动聚合功能是因为这样可能会产生路由黑洞]
可以进行重发布直连,但有不能将直连全部发布,所以我们需要抓取感兴趣路由进行发布:
使用前缀列表抓路由信息:
1.抓流量:
[r1]ip ip-prefix aa permit 172.16.0.0 22 greater-equal 24 less-equal 24
2.写路由策略,因为在BGP重发布中只能调用路由策略:
[r1]ip ip-prefix ? -------写前缀列表抓路由
STRING<1-169> Specify prefix-list name
[r1]ip ip-prefix aa permit 172.16.0.0 22 greater-equal 24 less-equal 24
[r1]route-policy aa ? -------写路由策略来调用前缀列表
deny Specify a deny rule
permit Specify a permit rule
[r1]route-policy aa permit node 10
Info: New Sequence of this List.
[r1-route-policy]if-match ip-prefix aa
[r1-route-policy]q
3.开启自动聚合功能
[r1-bgp]summary automatic -----使用该命令开启路由器的BGP自动聚合功能;
4.在重发布过程中调用:
[r1-bgp]import-route direct route-policy aa
自动聚合完后,我们查看BGP路由表会发现:明细路由被抑制,生成一个主类网段的路由。
被抑制的明细路由(S)不能被传递!!!所以在AR2上只会收到一条聚合路由!
手工聚合:
推荐使用手工聚合:
[r1-bgp]aggregate 172.16.0.0 22 ------后面写你聚合后的网段;
手工聚合后查看BGP的路由表:
注意:不管是手工聚合还是自动聚合,都会自动生成一条指向汇总的空接口
手工聚合问题
1.手工聚合不能抑制明细路由(明细路由还是会与聚合路由一起传递)
解决方法:在聚合的时候在命令后面加一个参数来抑制明细路由:
[r4-bgp]aggregate 172.16.0.0 22 detail-suppressed ---后面参数表示在聚合的同时抑制全部明细路由
此时查看路由表就发现明细路由被抑制了:
注意:有些时候我们只需要抑制一部分路由,并不需要将明细路由全部抑制掉。在BGP网络中聚合路由有时起的是备份作用。
当我们需要抑制一部分路由时,需要使用:Suppress-policy --- 抑制策略
抑制策略可以将你抓取到的流量进行抑制;从而只发布聚合的路由和没有被抑制的路由。
现在将172.16.1.0/24网段抑制:
1.使用前缀列表抓流量
[r4]ip ip-prefix aa per
[r4]ip ip-prefix aa permit 172.16.1.0 24
2.因为抑制策略只能匹配路由策略,所以使用路由策略匹配前缀列表
[r4]route-policy ?
[r4]route-policy aa permit node 10
Info: New Sequence of this List.
[r4-route-policy]if-match ip-prefix aa
[r4-route-policy]q
3.在抑制策略中调用路由策略
[r4]bgp 200
[r4-bgp]aggregate 172.16.0.0 22 detail-suppressed ?
as-set Generate the route with AS-SET path-attribute
attribute-policy Set aggregation attributes
origin-policy Filter the originate routes of the aggregate
suppress-policy Filter more detail route from updates through a Routing
policy
<cr> Please press ENTER to execute command
[r4-bgp]aggregate 172.16.0.0 22 detail-suppressed suppress-policy aa
此时查看路由表会发现172.16.1.0/24被抑制,聚合路由和172.16.2.0/24被放通:
2.聚合路由缺失明细路由的部分属性,尤其是AS_PATH属性,则可能导致环路的产生。
解决方法: 我们定义了AS_SET关键字,激活该关键字,则将让聚合路由携带明细路由的AS_PATH属性;
[r4-bgp]aggregate 172.16.0.0 22 detail-suppressed as-set ---定义参数as-set,使聚合路由重新拥有AS_PATH属性。
再次查看路由表就会发现聚合路由重新拥有AS_PATH属性:
聚合的特殊情况:
当需要聚合的两条明细路由来自两个不同的AS时,聚合路由的AS_PATH属性会携带该两个AS的AS号,但是在选路的时候还是被看成一个;(不影响选路)
在AS400中有一条路由:172.16.3.0/24;
在AS100中有一条路由:172.16.2.0/24;
在AR4上聚合后查看路由表:
- 如果明细来源于不同的AS中,则在进行汇总时,我们需要同时继承多个明细的AS号,并且用大括号括起来,在进行防环时,我们将所有明细的AS都不能回传,但是,在进行选路时,我们需要将大括号看作是一个整体。
BGP协议中的3张表:
1.BGP的邻居表
[r1]display bgp peer verbose ----查看BGP的邻居表
BGP Peer is 12.1.1.2, remote AS 200 -------表示我的对等体是谁,对方的AS号是多少。ip地址表示更新源地址
Type:表示与对端的链路类型
BGP version 4, Remote router ID 2.2.2.2 ------对方的版本和对方的router id;
BGP current state: Established, Up for 00h48m15s ------表示BGP的当前状态和建立的时间
BGP Peer Up count: 1 ------表示一共有几个peer;
Received total routes: 0 ------表示收到了几条路由;
Received active routes total: 0 -------表示收到了多少条活动的路由;
Advertised total routes: 0 --------表示我通告了多少条路由。
Port: Local - 179 Remote - 51145 -----表示本地端口和对方端口,(这里表示对端主动跟我发起3次握手)。
Configured: Connect-retry Time: 32 sec ------连接的重传计时器(32s);表示如果我BGP传递数据的时候没有进行ACK的确认,我重传总共的时间是32s,超过32s就不再重传。
Configured: Active Hold Time: 180 sec Keepalive Time:60 sec -------理解:表示hello时间和死亡时间。如果双方的保持时间不一致,那么生效的是较小的那个时间。
Configured: 我自己配置的时间。
Received : 我收到的时间。
Negotiated:最终生效的时间。
当保持时间为较小的那个时,keepalive时间就会进行一个比较:
使用keepalive时间乘以 3,如果比保持时间小,那么就用原来的keepalive时间;
如果比保持时间大,那么keepalive时间就为保持时间除以3;
总结:两个运行BGP的路由器保持时间一定是一样的,但是keepalive时间可能不同。
修改保持时间和keepalive时间:
Address family IPv4 Unicast: advertised and received -------表示我目前只接收和发送ipv4的单播。
Peer supports bgp multi-protocol extension ---表示支持多协议
Peer supports bgp route refresh capability ---表示支持路由刷新
Peer supports bgp 4-byte-as capability ---表示支持4字节的标识AS号的方法。
Received: Total 4 messages -------表示我发送的包的统计;
Sent: Total 6 messages --------表示我收到的包的统计;
Minimum route advertisement interval is 30 seconds ----表示最小路由通告间隔;
- 也就是说,你给我发了一条路由,你想立马改变这条路由是不可能的;你必须要等到30s后才能继续发这条路由,不能频繁发送。
EBGP邻居的间隔为30s;
IBGP邻居的间隔为15s;
2.BGP邻居摘要信息表
[r2]display bgp peer
OutQ:队列,一般情况下该值为0,如果持续性不为0,那么该网络就说明出现了大问题。
PrefRce:表示通过这个邻居学习到了几条路由。
3.BGP的路由表
[r1-bgp]display bgp routing-table
BGP Local router ID is 1.1.1.1 --------表示BGP本地的router id;
Status codes: 状态码,显示这条路由的状态。
*(valid) :代表有效的路由,就是这条路由可以使用;如果一条路由没有*就代表这条路由无效;
> (best) :代表最优的路由;
注意:在BGP的路由传递的过程中只有有效的best(*>)路由才能相互传递;
d :代表惩罚路由,抑制路由摆动;只发生在EBGP邻居之间;不能相互传递(被关小黑屋);
h :带表历史路由,也是在路由惩罚中出现的一种情况;
i :表示同IBGP邻居学习到的路由;
s :代表被抑制的路由,在使用一些策略不想让某些路由传递就可以给它打上s的标记;被抑制的路由本身是(*>)路由;
NextHop ------代表下一跳属性,默认情况下是0.0.0.0;
LocPrf -------代表本地优先级;
Ogn ------起源码,代表路由的来源;像这里的路由后面显示i,表示这条路由来自于IGP协议之间的路由。
i:代表这条路由最早来自于IGP协议的路由;
e:代表这条路由最早来自EGP协议的路由(不过写在基本不使用EGP协议了,几乎不会出现)
?:代表着条路由既不来自IGP也不来自BGP;直接重发布进来的就会显示为?;
如上图:通过EBGP邻居学习到的路由优先级为255
cost值就是MED值;
路由优先级
在华为中规定BGP 路由优先级: EBGP:255 IBGP:255 Local BGP : 255
EBGP:表示通过EBGP邻居学习到的路由的优先级;
IBGP:表示通过IBGP邻居学习到的路由的优先级;
local BGP:表示本地通告(network 引入)路由的优先级;
路由不优的原因:
在AR1上向BGP中通告了1.1.1.0/24网段,在AR3上查看BGP路由表:
前面的i(状态码):代表是通过IBGP邻居学习到了路由;
此时我们发现前面的状态码并没有(*>),代表这条路由不优选,不能加入路由表;查看AR3的路由表会发现并没有这条路由信息:
一般情况下,路由不优选有两个原因:
1.下一跳不可达;
2.IBGP同步 (不过一般情况下不会出现这种情况,一般是关闭的);
解决下一跳不可达问题:
华为下一跳属性规则:
1.network 引入 默认next-hop 属性为0.0.0.0
2.network通告路由传递给IBGP邻居或EBGP邻居时,下一跳默认为更新源地址(即建立TCP三次插手的对方IP地址)
3.IBGP学习路由传递给EBGP邻居时,下一跳为EBGP邻居建立的更新源地址(EBGP邻居路由传递给EBGP邻居时也一样)
4.EBGP学习路由传递给IBGP邻居时,下一跳不发生改变
备注:
在Cisco中默认将IGP协议通告进入BGP时,将原IGP路由的下一跳地址作为BGP路由的下一跳属性,
传递给其他IBGP邻居时,IBGP邻居发现路由的下一跳属性为自己的接口地址,启用下一跳防环机制,阻止
路由加表,下一跳属性具有防环功能。
在华为中,将所有的路由通告进入BGP时,下一跳属性为0.0.0.0 , 并且传递给其他IBGP邻居时下一
跳属性直接变为更新源地址,下一跳属性不存在防环功能,所以在修改优先级的时候可能导致路由环路。
我们查看AR2的BGP路由表会发现它的下一跳属性是12.1.1.1 ,并且AR2上有该条路由:
在AR3查看是会发现它的下一条还是12.1.1.1,但是AR3并没有到达12.1.1.1的路由:
AR2路由器将EBGP邻居路由传递给IBGP邻居的时候下一跳地址没有发生改变,并且AR3上没有去往该地址的路由,导致IBGP邻居(AR3)学到这条路由不能加表;
我们可以通过一条命令修改:
[r2-bgp]peer 23.1.1.2 next-hop-local
- 在一个路由器上如果既有EBGP邻居又有IBGP邻居的时候,我们针对IBGP邻居做了一个命令(下一跳修改为本地);
意思就是说:我在将EBGP邻居路由传递给IBGP邻居是,我会自动的将下一跳属性变为IBGP邻居之间的更新源地址。
我们做了这个操作后,到AR3上查看就会发现这条路由已经优选了:
BGP数据层面的路由黑洞:
<r3>refresh bgp external export ----------BGP路由的软性重置;
AR2与AR3为IBGP邻居关系,AR3与AR4为IBGP邻居关系;
此时,我们在AR3上查看,会优选两条路由:
但是,在AR2上不能学到5.5.5.0/24这条路由;在AR4上不能学到1.1.1.1/24这条路由;因为IBGP的水平分割机制。
(1):我们将AR3于AR2和AR4的邻居干掉(相当于不在AR3上运行BGP协议),使AR2与AR4之间建立IBGP邻居:此时AR1和AR5可以学到对方的路由并可以加表。
此时我们使用AR1上的1.1.1.1去ping AR5上的5.5.5.5:发现不能ping通
原因:在AR3上没有运行BGP,当数据来到AR3之后,发现并没有这两个网段的路由,会直接将该数据包丢弃。此时就会出现路由层面可达,数据层面不可达;(数据层面的路由黑洞)
数据层面路由黑洞的解决方案:
1.在边界设备上将BGP重収布引入IGP卋议(仅仅引入EBGP邻居学习幵加表的路由)
2.在AS内建立全互联的IBGP邻居关系
2.在AS内建立全互联的IBGP邻居关系
3.减少IBGP邻居关系的数量,打破IBGP水平分割
a.路由反射器
b.EBGP 联邦
4.MPLS
路由反射器
路由反射器-----Router Reflector RR(是一种角色)
我们可以在某些条件下将某些设备配置为路由反射器;
路由反射器的应用场景:
- 我们在指定一台设备成为路由反射器的同时,我们需要指定他的一个或者多个IBGP对等体成为他的客户(Client)。客户和RR之间会形成一个团体,我们称为 -- 反射簇。每一个反射簇会使用自己RR的RID作为簇ID。那些不是客户的对等体我们称为非客户。
路由反射器的反射规则:
1,客户发送的信息,将反射给所有的客户以及非客户。
2,非客户发送的信息,将反射给所有的客户。 “非非不传”
3,反射器只会反射可用且优的路由信息。
路由反射器为了防环引入了两个新的属性(只有在经过反射后的路由才会有该属性):
(1):Originator_ID --- 起源者ID
当一台RR收到一条路由信息需要反射时,会给其中添加起源者ID,为发送者的RID。如果收到的路由信息中,已经存在起源者ID了,则将不做更改。当一台设备发现路由中起源者属性是自生的RID,则将不学习,防止路由的回传。
(2):Cluster_list --- 簇列表 ,一个反射簇以RR的router id作为簇id。
如果存在多组反射簇时,仅依靠起源者ID不能完全避免环路的产生,所以,我们引入簇列表属性,在反射的路由中,持续累加放射簇的簇ID,当一台设备接收到一条路由信息时,如果簇列表中有自己所在的簇ID,则将不学习该路由,避免环路的产生。
注意:因为这两个属性是IBGP对等体内部用来防环使用的,所以,在传递给EBGP对等体时,将不会携带。
配置:
如上图:AR2与AR3建立了IBGP邻居,AR4也与AR3建立了IBGP邻居;
我们使用路由反射器将路由传递到AR4上:
在AR3上:
[r3]bgp 200
[r3-bgp]peer 23.1.1.1 reflect-client ---敲了这个命令后AR3会自动变成RR,AR2会变成客户。
此时在AR4上查看路由表:发现路由已经被反射过来了。
查看路由详细信息,里面就会带上这两个属性:
联邦
因为从IBGP邻居学习到的路由不能再传递给其他IBGP邻居,而联邦的思路就是与其他的IBGP邻居建立EBGP邻居,这样路由就可以正常传递了。
在一个大的AS中在建立小的AS,使之成为EBGP邻居。
如上图:AR10和AR11就成为了一种特殊的EBGP对等体,联邦的EBGP对等体。
1.联邦的EBGP对等体和普通的EBGP对等体的传递特性是一样的,还要遵循一个规则(AS BY AS);
2.联邦的EBGP对等体之间防环也靠AS_PATH属性;
- 注意:联邦之间的EBGP中的小AS号只在大的AS内部传递,并且用括号括起来;当传递给其他的大AS时将不会携带小AS号。
配置:
在联邦中BGP起的是小的AS号(启动小号,声明大号)
在AR1上:
[r1]bgp 1
[r1-bgp]router-id 91.1.1.1
[r1-bgp]peer 12.1.1.2 as-number 2
[r1-bgp]peer 12.1.1.2 ebgp-max-hop 10
在AR2上:
[r2]bgp 64512
[r2-bgp]router-id 92.2.2.2
[r2-bgp]confederation id 2 ----在进程中声明自己的大号;
[r2-bgp]peer 12.1.1.1 as-number 1 ---与AR1建立EBGP对等体;
[r2-bgp]peer 3.3.3.3 as-number 64512 ---联邦之间建邻使用小号建邻(与AR3建立IBGP对等体);
[r2-bgp]peer 3.3.3.3 connect-interface LoopBack 0
[r2-bgp]peer 3.3.3.3 next-hop-local
在AR3上:
[r3]bgp 64512
[r3-bgp]router-id 93.3.3.3
[r3-bgp]confederation id 2 ----在进程中声明自己的大号;
[r3-bgp]peer 2.2.2.2 as-number 64512 ----与AR2建立对等体;
[r3-bgp]peer 2.2.2.2 connect-interface LoopBack 0
[r3-bgp]confederation peer-as 64513 ---这条命令只在AR3与AR4上敲,表示与我建立联邦的EBGP对等体对端的AS号为多少。(在需要创建联邦的EBGP对等体的设备上配置)
[r3-bgp]peer 4.4.4.4 as-number 64513
[r3-bgp]peer 4.4.4.4 connect-interface LoopBack 0
注意:在联邦的EBGP中遵循普通的EBGP传递规则,包括其中的TTL值为1;联邦的EBGP对等体之间遵循EBGP对等体的传递特性,所以,需要修改TTL值才能实现非直连建邻。
[r3-bgp]peer 4.4.4.4 ebgp-max-hop 10 ----修改TTL值为10;
在AR4上:
[r4]bgp 64513
[r4-bgp]router-id 94.4.4.4
[r4-bgp]confederation id 2
[r4-bgp]confederation peer-as 64512
[r4-bgp]peer 3.3.3.3 as-number 64512
[r4-bgp]peer 3.3.3.3 connect-interface LoopBack 0
[r4-bgp]peer 5.5.5.5 as-number 64513
[r4-bgp]peer 5.5.5.5 connect-interface LoopBack 0
[r4-bgp]peer 3.3.3.3 ebgp-max-hop 10 ----修改TTL值为10;
在AR5上:
[r5]bgp 64513
[r5-bgp]router-id 95.5.5.5
[r5-bgp]confederation id 2
[r5-bgp]peer 4.4.4.4 as-number 64513
[r5-bgp]peer 4.4.4.4 connect-interface LoopBack 0
[r5-bgp]peer 56.1.1.2 as-number 3
[r5-bgp]peer 56.1.1.2 ebgp-max-hop 10
在AR6上:
[r6]bgp 3
[r6-bgp]router-id 96.6.6.6
[r6-bgp]peer 56.1.1.1 as-number 2
[r6-bgp]peer 56.1.1.1 ebgp-max-hop 10
到此,BGP的所有配置已经完成(在AS2中启用的IGP协议为ospf协议)。我们在AR1上将1.1.1.1/24通告到BGP中:
[r1-bgp]network 1.1.1.0 255.255.255.0;
在AR5上去查看发现该路由可以传递到AR5上且是可用的:
在AR6上查看:
在联邦的EBGP对等体之间,因为也相当于打破了IBGP的水平分割,所以,也存在出现环路的风险,则需要使用AS_PATH来进行防环。但是,需要使用小括号将该属性括起来,仅供AS内部防环使用,当发送给EBGP对等体时,将不会携带该属性。
联邦可以与路由反射器结合使用!!!
BGP的选路原则
BGP选路靠属性来选;
前提条件------丢弃不可用的路由信息;
在华为中的11条选路原则如下:优先级从高到低;
属性名称 | 传播范围 | 默认值 | 评判标准 |
---|---|---|---|
1.PV值 | 不传递,仅本设备生效 | 0(0-255) | 越大越优 |
2.LP值 | 在IBGP对等体之间传递 | 100 | 越大越优 |
3.roter type | 一种规则 | ||
4.AS_PATH | 整个BGP网络 | 越短越优 | |
5.OGN | BGP对等体 | i>e>? | |
6.MED | BGP对等体 | 继承路由表中的开销值 | 越小越优 |
7. | |||
1,优选PV值最大的路由 该属性是华为设备的一个私有属性,是本设备上选路优先级最高的属性,也是在一台设备上最方便干涉选路的属性。(这个属性只在本设备上生效,不传递给其他设备)
2,优选LP值最大的路由 本地优先级属性,在一个AS内部进行选路最优的属性。(这里的本地代表本AS,可以传递,在AS内部传递)
3.定义了一条规则: 本地始发的BGP路由优于从其他对等体学习到的路由;
在本地始发的路由中的优先级又分为:优选手动聚合 > 自动聚合 > network > import > 从对等体学到的路由;
4.优选AS_PATH属性最短的一条;
5.比较OGN(起源)属性,I > e > ?
6.MED值,越小越优
7.EBGP路由优于IBGP路由
实验图:
我们再AR1上通告了一条路由9.9.9.0/24,此时在AR4上会收到两条该路由(但优选AR2发过来的路由):
(1)PV值
修改PV值影响选路,让AR4学习到AR3发过来的路由:
[r4-bgp]peer 34.1.1.1 pre
INTEGER<0-65535> Preference value
[r4-bgp]peer 34.1.1.1 preferred-value 100 ------这条命令表示所有的从AR3发过来的路由的PV值都改为100;
这样存在一个问题,如果这样做那么所有的流量都会走这条链路,该链路压力就会增大。我们需要负载分担,精确控制流量。
再在AR1上通告一条路由10.10.10.0/24,使用路由策略来精确控制;
[r4-bgp]undo peer 34.1.1.1 preferred-value ----删除之前配置的“一刀切”的PV值修改
1.抓流量
[r4]ip ip-prefix PV permit 10.10.10.0 24
2.做路由策略
[r4]route-policy PV permit node 10
Info: New Sequence of this List.
[r4-route-policy]if-match ip-prefix PV ------匹配前缀列表PV
[r4-route-policy]apply preferred-value 100 ----修改路由PV值
[r4-route-policy]q
[r4]route-policy PV permit node 20 ---写一张空表方通后续流量,否则后面调用只能10.10.10.0/24通过
[r4-route-policy]q
[r4]
3.调用
[r4-bgp]peer 34.1.1.1 route-policy PV ?
export Specify export policy
import Specify import policy
[r4-bgp]peer 34.1.1.1 route-policy PV import ---表示AR3传递过来的路由会匹配这个路由策略。
export (出方向):影响其他人
import (入方向):影响自己
此时我们就可以发现:去9.9.9.0/24走的是AR2,去10.10.10.0/24走的是AR3
(2)LP值
在一个AS内部传递,是一个AS内部进行选路最优的属性,越大越优,默认值100;
[r4-bgp]undo peer 34.1.1.1 route-policy PV import -----删除之前的配置;
在AR3上修改:
1.全局修改
[r3]bgp 2
[r3-bgp]default local-preference 200 -----该命令是将所有路由的LP值都修改为200;(全局修改LP)
此时在AR4上查看发现两条路由都走AR3
2.精确修改
[r3-bgp]undo default local-preference ------删除全局修改LP值;
可以在AR2上做:
1.抓流量
[r2]ip ip-prefix LP permit 10.10.10.0 24
2.做路由策略
[r2]route-policy LP permit node 10
Info: New Sequence of this List.
[r2-route-policy]if-match ip-prefix LP -----匹配前缀列表LP
[r2-route-policy]apply local-preference 40 -----------修改匹配到的LP值为40
[r2-route-policy]q
[r2]route-policy LP permit node 20 -------需要写一条来放通所有(路由策略和前缀列表末尾隐含拒绝所有)
Info: New Sequence of this List.
[r2-route-policy]q
[r2]
3.调用
[r2-bgp]peer 24.1.1.2 route-policy LP export -----在BGP进程里面调用
此时查看AR4的BGP路由表:9.9.9.0/24走AR2,10.10.10.0/24走AR3;
(3)规则(router type)
第三条规则:路由类型(router tpye)
手工聚合 > 自动聚合 > network > import > 从对等体处学来的
我们在AR1和AR2上都发布一条11.0.0.0/24路由,在AR2上查看:发现优选的是本地通告的
查看详细信息发现是路由类型不优选:
(4)AS_PATH
优选AS_PATH属性最短的一条;
1,如果AS_path属性存在大括号,则大括号在选路时,需要看作是一个AS。
2,如果AS_PATH属性存在小括号,则选路中不关注小括号
AS号可以进行修改:在修改时,在EBGP对等体上进行修改。
在AR1上存在一条9.9.9.0/24路由,通过修改AS使AR4优选AR3传递过来的路由:
在AR1的出方向上做(也可以在AR2的入方向上做):
1.抓流量
[r1]ip ip-prefix AS permit 9.9.9.0/24 24
2.做路由策略
[r1]route-policy AS permit node 10
Info: New Sequence of this List.
[r1-route-policy]if-match ip-prefix AS -----匹配前缀列表AS
[r1-route-policy]apply as-path 11 22 33 ? ----11 22 33 表示AS号
INTEGER<1-4294967295> AS number in asplain format (number<1-4294967295>)
STRING<3-11> AS number in asdot format
(number<1-65535>.number<0-65535>)
additive Append to original As Number ---表示添加AS号
overwrite Overwrite original As Number ---表示重写AS号
[r1-route-policy]apply as-path 11 22 33 additive ---建议使用additive(防止出环)
[r1]route-policy AS permit node 20 -----还需要写一条空表放通所有
Info: New Sequence of this List.
[r1-route-policy]q
[r1]
3.调用
[r1-bgp]peer 12.1.1.2 route-policy AS export -----在AR1的出方向上调用
做完后查看AR4的路由表发现:由于AS_PATH的原因,优选了AR3的路由.
查看详细路由信息:不优选的原因是AS_PATH属性
当我们在添加AS号的时候可能已经存在这个AS,所以有可能出现环路。
所以:为了避免对AS_PATH属性防环特性的影响,我们可以添加AS_PATH属性中,已有的AS号, 仅改变AS_PATH属性的长短。
比如:9.9.9.0/24在AS 1中,我们在添加AS号的时候就多增加几个该网段所在的AS。
总结:加AS_PATH中已经存在的AS号
[r1]ip ip-prefix AS permit 9.9.9.0 24
[r1]route-policy AS_1 permit node 10
[r1-route-policy]if-match ip-prefix AS
[r1-route-policy]apply as-path 1 1 1 1 additive
[r1]route-policy AS_1 permit node 20
Info: New Sequence of this List.
[r1-route-policy]q
[r1-bgp]peer 12.1.1.2 route-policy AS_1 export
此时我们查看AR4的路由表:
(5)OGN属性
比较OGN(起源)属性,I > e > ?
network和聚合进来的为----------i;
重发布进来的为-------?;
AR1上存在9.9.9.0/24网段,我们可以在它传递给AR2使修改OGN属性;将OGN属性修改为?
1.抓流量
[r1]ip ip-prefix AS permit 9.9.9.0 24
2.做路由策略
[r1]route-policy OGN permit node 10
Info: New Sequence of this List.
[r1-route-policy]if-match ip-prefix AS
[r1-route-policy]apply origin ?
egp Remote EGP
igp Local IGP
incomplete Unknown heritage
[r1-route-policy]apply origin incomplete ----修改起源属性
[r1]route-policy OGN permit node 20 -----放通所有
Info: New Sequence of this List.
[r1-route-policy]q
3.调用
[r1]bgp 1
[r1-bgp]peer 12.1.1.2 route-policy OGN export
做完后在AR4上查看bgp路由表:发现优选AR3的路由
查看路由详细信息:发现不优的原因是OGN
(6)MED值
优选MED值属性最小的路由。
MED--------多出口鉴别属性;它其实反应的是路由信息在所在AS内部的开销值的情况。它将自己的开销值携带出去告诉其他AS,其他AS设备就可以根据内部开销值来做一个参考进行选路。选的一定是开销值小的一条路。
这个属性非常重要,因为它是控制其他人如何进入我这个AS最好用的一个属性。
注意1:从IBGP邻居学习到的路由传递给EBGP邻居时不携带MED值。
总结:
多出口鉴别属性(MED)
-------------- BGP协议在进行宣告时,MED属性将继承路由表中的开销值,便于本地的EBGP对等体所在的AS内部设备选路。若本地通过IBGP对等体学习到BGP路由,之后,再发送给EBGP对等体时,将不会携带MED属性,因为他不能反映自身真实的开销情况,但是,这样设计也会造成选路不佳,所以,建议所有边界设备发布路由都同时发布。
注意:多出口鉴别属性一定需要再多出口环境下使用,我们可以通过比较路由条目AS_PATH属性最左边的AS号来判断是否从同一个AS发出,如果从同一个AS发出,则判定为多出口环境,否则,将不比较第六条,直接 比较后面的规则。
在AR4上存在一条4.4.4.0/24路由,发布到BGP中,在AR1上就会收到两条路由;要求通过修改MED值使AR1走AR3的路由:
1.抓流量
[r2]ip ip-prefix MED permit 4.4.4.0 24
2.做路由策略
[r]route-policy MED permit node 10
Info: New Sequence of this List.
[r2-route-policy]if-match ip-prefix MED ----匹配前缀列表
[r2-route-policy]apply cost 12 ------修改MED值为10
[r2]route-policy MED permit node 20 ---写空表放通所有
Info: New Sequence of this List.
[r2-route-policy]q
[r2]
3.调用
[r2-bgp]peer 12.1.1.1 route-policy MED export
此时在AR1查看路由表发现:去4.4.4.0/24走AR3
查看路由的详细信息:发现不优的原因是MED值。
我们可以使用一条命令,在我们AS内部查看是否是走的AR3:
[r4]ping -r -a 4.4.4.4 1.1.1.1
(7)EBGP优于IBGP
EBGP路由优于IBGP路由------是一种规则
(8)next_hop
优选到NEXT_HOP的IGP度量值最小的路由
其实:比的是下一跳在本地路由表中的开销值;
列如:13.13.13.0/24的下一跳有两个,我们就需要查看本地路由表到达该两个路由的cost值。
可以发现:到达2.2.2.0/24的cost为100,所以优选下一跳为3.3.3.0/24的路由。
查看路由详细信息:发现没有被优选的原因是cost值。
(9)Cluster_List
优选Cluster_List(簇列表)最短的路由。---------是一种规则
(10)Router ID(Orginator_ID)
优选Router ID(Orginator_ID)最小的设备通告的路由
Router ID可以在BGP进程中修改
(11)优选最小IP地址
优选具有最小IP地址的对等体通告的路由:
如在上面这个场景中,Router ID(Orginator_ID)都一样,所以我们比较AR4与AR5通告过来的IP地址,越小越优。
AR4使用46.1.1.1,AR5使用56.1.1.1所以优选AR4过来的路由。
BGP的路由过滤
如上图:在AR1上有该3条路由信息,现在要求AR2上不能收到192.168.1.0/24这条路由信息。
我们就要进行路由过滤:我们可以在AR3的出方向上做,也可以在AR2的入方向上做。
(1):使用前缀列表过滤
1.抓流量
[r1]ip ip-prefix aa deny 192.168.1.0 24
[r1]ip ip-prefix aa permit 0.0.0.0 0 less-equal 32 ----放通所有
2.调用
[r1-bgp]peer 12.1.1.2 ip-prefix aa export ---在AR1的出方向应用。
此时可以发现:192.168.1.0/24路由已被过滤
(2)使用路由策略过滤
1.抓路由
[r2]ip ip-prefix aa permit 192.168.1.0 24
2.做路由策略
[r2]route-policy aa deny node 10 -----拒绝匹配的路由通过
Info: New Sequence of this List.
[r2-route-policy]if-match ip-prefix aa
[r2]route-policy aa permit node 20 ------放通所有
Info: New Sequence of this List.
[r2-route-policy]q
3.调用
[r2-bgp]peer 12.1.1.1 route-policy aa import -----在AR2的入方向上调用
此时可以发现:192.168.1.0/24路由已被过滤
(3)使用过滤列表进行过滤
如下图:由于过滤列表在peer之间时只能调用acl,所以我们使用acl抓取流量。
1.抓流量
[r2]acl 2000
[r2-acl-basic-2000]rule deny source 192.168.1.0 0 ----注意:使用过滤列表时,抓取流量
的列表必须使用拒绝动作
[r2-acl-basic-2000]rule permit source any ----注意:对于不需要过滤的流量,一定要进行
放通
2.调用
[r2-bgp]peer 12.1.1.1 filter-policy ?
INTEGER<2000-2999> Apply basic ACL
acl-name Specify the ACL name for filtering IPv4 routes
[r2-bgp]peer 12.1.1.1 filter-policy 2000 ?
export Filter outgoing routing updates
import Filter incoming routing updates
[r2-bgp]peer 12.1.1.1 filter-policy 2000 import
注意:过滤列表(filter-policy)只能调用acl列表,本身不具备过滤功能。所以在acl末尾需要放通所有
此时可以发现:192.168.1.0/24路由已被过滤
BGP的社团属性
如上:生产区和办公区存在多个网段,将所有网段传递到AS23中后需要对两个不同区的网段做不同的策略;如果一条条抓就很麻烦,此时我们只需在传递过来前给不同区域的网段打上标记,那么在AS23中只需要对标记做不同的策略就可以了。这个标记就是社团属性。
社团属性 --- 32位二进制构成
1,使用十进制表示;
2,AS:NN -------------比如:1:12(1代表自己的AS号,12是自己定义的编号)
一条路由条目可以同时打多个社团属性。
社团属性定义了一些公有的社团属性,当你给某些路由条目打上这些标记后它将会执行定义好的某些动作。
社团公有属性:
公有社团属性一共有4个:
(1): 0X00000000 --- 0 --- “internet” 所有的BGP路由信息默认都打上这个属性(所有的BGP路由默认都打上了名称位“internet”的社团属性。)
(2):0xFFFFFF02 --- “no - advertise” ---- 如果BGP路由打上该社团属性,则代表该路由不允许通告给其他的BGP对等体(IBGP对等体和EBGP对等体)
(3):0xFFFFFF01 --- "no - export" ---- 如果BGP路由打上该社团属性,则将不允许通告给自己的EBGP对等体(不包括联邦的EBGP对等体)。
(4):0xFFFFFF03 --- "no - export - subconfed" --- 如果BGP路由打上该社团属性,则将不允许通告给自己的EBGP对等体(包括联邦的EBGP对等体)。
实验:如下图
在AR1上,在BGP进程中通告1.1.1.0/24这条路由:通过这条路由来研究社团属性
注意:现在大多数厂家默认情况下关闭了社团属性的传递功能,在做社团属性时需要开启。
(1)0xFFFFFF02 --- “no - advertise”
1.抓流量
[r1]ip ip-prefix ST permit 1.1.1.0 24
2.做策略
[r1]route-policy ST permit node 10
Info: New Sequence of this List.
[r1-route-policy]if-match ip-prefix ST
[r1-route-policy]apply community ? ------下面的就是不同社团属性
INTEGER<0-4294967295> Specify community number
STRING<3-11> Specify aa<0-65535>:nn<0-65535>
internet Internet(well-known community attributes)
no-advertise Do not advertise to any peer (well-known community
attributes)
no-export Do not export to external peers(well-known community
attributes)
no-export-subconfed Do not send outside a sub-confederation(well-known
community attributes)
none No community attribute
[r1-route-policy]apply community no-advertise ----表示给匹配到的路由信息添加了社团属性。
[r1-route-policy]q
3.调用
[r1-bgp]peer 12.1.1.2 route-policy ST export
4.开启社团属性传递功能
[r1-bgp]peer 12.1.1.2 advertise-community -------必须要开启这个功能否则社团属性将不会传递。
此时我们在AR3上查看时就会发现已经无法收到1.1.1.0/24路由信息:就是因为社团属性“no - advertise”。
查看路由详细信息:
(2):0xFFFFFF01 --- "no - export"
1.抓流量
[r1]ip ip-prefix ST permit 1.1.1.0 24
2.做路由策略
[r1]route-policy ST permit node 10
Info: New Sequence of this List.
[r1-route-policy]if-match ip-prefix ST
[r1-route-policy]apply community ?
INTEGER<0-4294967295> Specify community number
STRING<3-11> Specify aa<0-65535>:nn<0-65535>
internet Internet(well-known community attributes)
no-advertise Do not advertise to any peer (well-known community
attributes)
no-export Do not export to external peers(well-known community
attributes)
no-export-subconfed Do not send outside a sub-confederation(well-known
community attributes)
none No community attribute
[r1-route-policy]apply community no-export
3.调用
[r1-bgp]peer 12.1.1.2 route-policy ST export
[r1-bgp]peer 12.1.1.2 advertise-community -------必须要开启这个功能否则社团属性将不会传递。
4.在AR2传递给AR3时开启社团属性传递功能,否则路由传递给AR3将没有社团属性
[r2]bgp 64512
[r2-bgp]peer 3.3.3.3 advertise-community
[r2-bgp]
5.在AR3传递给AR4时开启社团属性传递功能,否则路由传递给AR4将没有社团属性
[r3-bgp]peer 4.4.4.4 advertise-community
[r3-bgp]
做完后在AR5上查看路由表发现:此时1.1.1.0/24路由没有传递到AR5上
(3):0xFFFFFF03 --- "no - export - subconfed"
1.抓流量
[r1]ip ip-prefix ST permit 1.1.1.0 24
2.做路由策略
[r1]route-policy ST permit node 10
Info: New Sequence of this List.
[r1-route-policy]if-match ip-prefix ST
[r1-route-policy]apply community ?
INTEGER<0-4294967295> Specify community number
STRING<3-11> Specify aa<0-65535>:nn<0-65535>
internet Internet(well-known community attributes)
no-advertise Do not advertise to any peer (well-known community
attributes)
no-export Do not export to external peers(well-known community
attributes)
no-export-subconfed Do not send outside a sub-confederation(well-known
community attributes)
none No community attribute
[r1-route-policy]apply community no-export-subconfed
[r1-route-policy]
3.调用
[r1-bgp]peer 12.1.1.2 route-policy ST export
此时在AR4上查看发现:此时就不会收到1.1.1.0/24路由信息
社团私有属性:
自己定义的属性。
需求:AS1中分别创建
172.16.0.0/24,172.16.1.0/24,172.16.2.0/24,172.16.3.0/24。之后,0.0和1.0带上1:11的社团属性,2.0和3.0带上1:22的社团属性。要求,1:11社团的路由不传递,1:22的路由no_export。
将172.16.0.0/24和172.16.1.0/24抓出来打上1:11的标签;
将172.16.2.0/24和172.16.3.0/24抓出来打上1:22的标签;
可以peer的时候调用,也可以在AR1上通告的时候调用这样AR1上这几条路由也会有标签。
1.做社团属性的策略
[r1]route-policy com1 permit no
[r1]route-policy com1 permit node 10
Info: New Sequence of this List.
[r1-route-policy]apply community 1:11 ---这里没有写if-match表示匹配所有。给路由打上1:11的标签。
[r1-route-policy]q
[r1]route-policy com2 permit node 10
Info: New Sequence of this List.
[r1-route-policy]apply community 1:22
[r1-route-policy]q
[r1]
2.发布路由,在发布路由时将标签带上
注意:要想使标签可以传递首先要使用peer开启社团属性的传递功能,否则社团属性无法传递。
[r1-bgp]network 172.16.0.0 24 route-policy com1
[r1-bgp]network 172.16.1.0 24 route-policy com1
[r1-bgp]network 172.16.2.0 24 route-policy com2
[r1-bgp]network 172.16.3.0 24 route-policy com2
3.依靠社团属性抓取流量
这时我们需要使用一个新的社团属性的过滤器来抓取流量 ---------- community-filter
[r1]ip community-filter ? ----写编号
INTEGER<1-99> Community-filter number (basic)
INTEGER<100-199> Community-filter number (advanced)
advanced Advanced community-filter
basic Basic community-filter
[r1]ip community-filter 1 ?
deny Specify a deny rule
permit Specify a permit rule
[r1]ip community-filter 1 permit 1:11 ---抓取社团属性为1:11的流量
[r1]ip community-filter 2 permit 1:22 ---抓取社团属性为1:22的流量
4.做路由策略
[r1]route-policy aaa deny node 10
Info: New Sequence of this List.
[r1-route-policy]if-match community-filter 1 ---拒绝匹配到community-filter 1流量通过
[r1-route-policy]q
[r1]route-policy aaa permit node 20
Info: New Sequence of this List.
[r1-route-policy]if-match community-filter 2
[r1-route-policy]apply community no-export ? ---给匹配到的流量再添加一共标签。
INTEGER<0-4294967295> Specify community number
STRING<3-11> Specify aa<0-65535>:nn<0-65535>
additive Add to the existing community
internet Internet(well-known community attributes)
no-advertise Do not advertise to any peer (well-known community
attributes)
no-export Do not export to external peers(well-known community
attributes)
no-export-subconfed Do not send outside a sub-confederation(well-known
community attributes)
<cr> Please press ENTER to execute command
[r1-route-policy]apply community no-export ad
[r1-route-policy]apply community no-export additive ---注意当存在多个标签的时候一定要写additive,否则标签会被覆盖。
[r1-route-policy]q
[r1]route-policy aaa permit node 30 -----放通所有
Info: New Sequence of this List.
[r1-route-policy]q
[r1]
5.调用
[r1]bgp 1
[r1-bgp]peer 12.1.1.2 route-policy aaa export
[r1-bgp]
此时到AR2上查看路由表,会发现没有172.16.0.0/24和172.16.1.0/24路由;172.16.2.0/24和172.16.3.0/24路由将会有两个标签。
总结:社团属性在传递的过程中需要开启,否则社团属性将无法传递,社团属性所对应的功能将无法实现。
peer X.X.X.X advertise-community ------开启社团属性传递功能。