BGP用户培训材料

 

                                          BGP 用户培训材料
 

 

AS  --  Autonomous System       使用相同路由管理策略的区域 
BGP --  Border Gateway Protocol     Defined in RFC 1771
CIDR   --  Classless Interdomain Routing  无类型的域间选路
EGP --  Exterior Gateway Protocol      Defined in RFC 904
IGP --  Internal Gateway Protocol      AS 内部的路由协议
EGP --  External Gateway Protocol      AS 外部的路由协议,对应于IGP

一、概述

BGP 是一种自治系统间的动态路由发现协议,它的基本功能是在自治系统间自动交换无环路的路由信息。与OSPFRIP等在自治区域内部运行的协议对应,BGP是一类EGP(Edge Gateway Protocol)协议,而OSPFRIP等为IGP(Interior Gateway Protocol)协议。
BGP 是在EGP应用的基础上发展起来的。EGP在此以前已经作为自治区域间的路由发现协议,广泛应用于NFSNET等主干网络上。但是,EGP被路由环路问题所困扰。BGP通过在路由信息中增加自治区域(AS)路径的属性,来构造自治区域的拓扑图,从而消除路由环路并实施用户配置的策略。同时,随着INTERNET的飞速发展,路由表的体积也迅速增加,自治区域间路由信息的交换量越来越大,都影响了网络的性能。BGP 支持无类型的区域间路由 CIDR(Classless Interdomain Routing) 可以有效的减少日益增大的路由表。
BGP 运行时刻分别与本自治区域外和区域内的BGP伙伴建立连接(使用Socket)。与区域内伙伴的连接称为IBGP(Internal BGP)连接,与自治区域外的BGP伙伴的连接称为EBGP(External BGP)连接。本地的BGP协议对IBGPEBGP伙伴使用不同的机制处理。

二、BGP协议分析

1BGP协议的层次位置

 
BGP OSPF RIP TELNET SNMP
SOCKET
TCP UDP
IP IPX
PPP X.25
操作系统
硬件接口及驱动
 
BGP 使用Socket服务建立连接,端口号为179

2BGP的消息结构

BGP 4种类型的消息。分别为OPENUPDATEKEEPALIVENOTIFY。它们有相同的消息头。

OPEN消息结构:

消息头加如下结构:
Version (1字节) 发端BGP版本号
My Autonomous System (2字节无符号整数) 本地AS
Hold Time (2字节无符号整数) 发端建议的保持时间
BGP Identifier (4字节) 发端的路由器标识符
OptParmLen (1字节) 可选的参数的长度
Optional Parameters (变长) 可选的参数

KEEPALIVE消息结构

KEEPALIVE 消息只有一个消息头。

 

NOTIFY消息结构

消息头加如下结构:
0                       1                      2                      3                   4
0 1 2 3 4 5 6 7  0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
Errorcode
Errsubcode
 
Data
 
Errorcode (1字节) 错误代码
错误代码
错误类型
1
消息头错
2
OPEN 消息错
3
UPDATE 消息错
4
保持时间超时
5
状态机错
6
退出
 
Errsubcode (1字节) 辅助错误代码,略。
Data (变长) 依赖于不同的错误代码和辅助错误代码。用于诊断错误原因。
 

UPDATE消息结构

Unfeasible Routes Len (2字节无符号整数) 不可达路由长度
Withdrawn Routes (变长) 退出路由
Path Attribute Len (2字节无符号整数) 路径属性长
Path Attributes (变长) 路径属性(以下详细说明)
Network Layer Reachability Information (变长) 网络可达信息(信宿)
 
其中退出路由和信宿地址的表示方法为一 <lengthprefix> 的二元组。length一个字节,指示地址前缀的长度。prefix为地址前缀,长度14字节。
 
 

3BGP协议路由属性的应用

路由是用信宿地址来标识的。路由的属性即UPDATE消息中的路由属性部分,是用来帮助BGP进行路由选择的。它们在本地BGP选择路由时有不同的作用。当BGP通过不同的路由源收到了相同信宿地址的路由时,需要进行路由选择。

(1)ORIGIN起点属性

起点属性表示路由相对于发出它的自治系统的路由更新起点。
IGP        BGP 把聚合路由和用network定义的路由看成是AS内部的,起点类型设置为IGP
EGP        BGP 把通过EGP得到的路由的起点设置为EGP
INCOMPLETE BGP 把通过其它IGP协议引入的路由的起点设置为INCOMPLETE。这是因为引入的路由可能从任何地方来,如OSPFASE路由。
 
BGP 在其它因素相同的情况下,按IGPEGPINCOMPLETE的顺序选择路由,因为IGP路由的位置更确定,EGP次之,而INCOMPLETE则很不确定。
 

(2)AS路径属性

路由的AS路径属性记录了此路由所穿过的所有AS区域,它可以避免路由环路的出现,即当BGP把一条路由通告给一个此路由曾穿越过的AS自治区域时,此AS又把这条路由当作新路由来处理了,这也正是困扰EGP问题。
在加入了AS路径属性后,BGP可以根据AS路径属性中的信息来消除路由环路。BGP不会接受AS路径属性中包含了本AS自治区域号的路由,因为此路由已经被本自治区域处理过了,从而避免了生成路由环路的可能。为此,BGP在向EBGP对端,即向本AS外部通告一条路由时,要把本AS自治区域的AS号加入的AS路径属性中,以记录此路由通过的AS区域信息。
同时,AS路径属性也在影响路由选择。显然,在其它因素相同的情况下,应该选择AS路径较短的路由,因为它穿过了较少的自治区域。这一点并不一定精确,因为穿过了的3个由高速网络构成的AS区域的路由,有可能比穿过了2个低速网络的AS区域的路由更好。这种情况要求恰当的配置,以在其它的因素中影响路由的选择。
协议不可能自动完成一切,有经验的工程师的合理的配置对优化网络更重要。
AS路径属性中,AS_SEQUENCE属性的AS路径值表示此AS路径是有顺序关系的。通过它可以在本生成AS自治区域的拓扑结构图。当路由被发送到AS自治区域外时,一般要把本区域AS号加入到AS_SEQUENCE序列后。AS_SET属性是用于路由聚合的,它的AS路径信息无顺序关系,无法生成拓扑结构图,但用于检测AS路由环路是足够用的。

(3)NEXTHOP下一跳属性

对于EBGP,下一跳属性是本地BGP与对端连接的端口地址。如上图,RTCRTA通过EBGP通告路由170.10.0.0时,下一跳属性为170.10.20.2RTARTC通告150.10.0.0的路由时,下一跳为170.10.20.1
对于IBGP,本地BGP将从EBGP得到的路由的下一跳属性,直接注入IBGPUPDATE路由更新消息。上图中,RTA通过IBGPRTB通告路由170.10.0.0时,下一跳仍然为EBGP中的170.10.20.2,而不是150.10.30.1。对于RTB,此下一跳信息最终应该通过IGP得到。
对于可以多路访问的网络,下一跳情况有所不同。
在上图中,RTARTC运行BGPAS300IGPOSPFOSPF通告RTC通过下一跳170.10.20.3可以到达网络180.20.0.0RTC在通过EBGP通告RTA路由180.20.0.0时,发现本地端口170.10.20.2和此路由的下一跳170.10.20.3为同一共享子网,因此使用170.10.20.3作为EBGP通告路由的下一跳,而非170.10.20.2
这种情况,对于NBMA非广播多点可达网络不适用。
将以太网替换为FrameRelay桢中继网和其它NBMA网络,箭头指示方向有PVC永久虚电路。此时,RTC也发送下一跳为170.10.20.3180.20.0.0路由给RTA,就会出现问题:RTARTD无可达链路!
为了避免此问题,请使用Next-hop-self命令,强制RTA将路由180.20.0.0的下一跳设置为本地BGP端口地址170.10.20.2

(4)MED属性

MULTI_EXIT_DISCRIMINATOR 就是一条路由的Metric。当某AS自治区域有多个人口点时,此属性用来帮助选择一个较好的人口点。即,选择MED较小的人口点。
如上图,网络路由180.10.0.0RTCRTDRTB出发,通过EBGP通告给RTA。其中RTCMED120RTDMED200RTBMED50。缺省情况下,BGP只比较同一AS区域发送的MED,这是因为不同AS自治区域的度量Metric的方法可能不同,只有相同AS区域的Metric才有可比性。因此RTA选择MED较小的RTC发送的路由,将 2.2.2 .1作为路由180.10.0.0的下一跳(RTBMED更小,但AS路径较长)MED属性不会通过AS区域传播,因此,RTA发送路由180.10.0.0时的MED设置为其缺省的0
也可以使用always-compare-med命令来强制比较同一路由的所有的MED。上例中,最终会选择RTB作为路由180.10.0.0的下一跳,因为它具有最小的MED
总之,MED可以帮助本地BGP选择到达某一个AS区域的人口点。

(5)LOCALPREFERENCE本地优先级属性

本地优先级属性用来帮助AS区域内部的路由器,选择到AS区域外部使用的较好的出口。
如上图例,当路由170.10.0.0通过RTCRTD发送到AS256内部时,RTC将本地优先级设置为150RTD将本地优先级设置为200。这可能是因为RTC连接的AS区域具有较高的速度或收费较低。因此,AS256内部的路由器选择本地优先级较高的RTC作为得到网络170.10.0.0的下一跳。
MED相反,较高的本地优先级的路由被选择。
MED对应,本地优先级用来帮助本地BGP在不同的相邻AS区域中选择较好的退出路由。
在一个自治区域中的所有BGP路由器必须使用IBGP连通起来,已相互通过比较某条路由的本地优先级来就到达此信宿的AS出口点达成一致。

(6)ATOMIC_AGGREGATE元聚合属性

此属性用来表示一条路由是在某处被聚合形成的,丢失了部分信息。

(7)AGGREGATOR聚合者属性

此属性记录了一条路由被聚合的路由器的AS号和IP地址。
 
综合起来,本地BGP路由选择的过程为:
(1) 如果此路由的下一跳不可达,忽略此路由;
(2) 选择本地优先级较大的路由;
(3) 选择本地路由器始发的路由(本地优先级相同)
(4) 选择AS路径较短的路由;
(5) 依次选择起点类型为IGPEGPINCOMPLETE类型的路由;
(6) 选择MED较低的路由;
(7) 选择RouterID较低的路由。

4BGP协议的特点

BGP 是一种AS(自治区域)外部路由协议,主要负责本自治区域和外部的自治区域间的路由可达信息的交换。因此,它所关心的拓扑结构是AS(自治区域)的拓扑结构,BGP通过UPDATE消息中路由的AS属性来构造AS的拓扑结构图,进一步通过此结构图来选择路由。
OSPFRIPIGP协议相比,BGP的拓扑图要更抽象和粗略一些。因为IGP协议构造的是AS内部的路由器的拓扑结构图。IGP把路由器抽象成若干端点,把路由器之间的链路抽象成边,根据链路的状态等参数和一定的度量标准,每条边配以一定的权值,生成拓扑图。根据此拓扑图选择代价(两点间经过的边的权值和)最小的路由。这里有一个假设,即路由器(端点)转发数据包是没有的代价的。而在BGP中,拓扑图的端点是一个AS区域,边是AS之间的链路。此时,数据包经过一个端点(AS自治区域)时的代价就不能假设为0了,此代价要由IGP来负责计算。这体现了EGPIGP是分层的关系。即IGP负责在AS内部选择花费最小的路由,EGP负责选择AS间花费最小的路由。
BGP 作为EGP的一种,选择路由时考虑的是AS间的链路花费,AS区域内的花费(BGP路由器配置)等因素。
如上所述,内部网关协议IGP需引入AS自治区域内部网络拓扑图其它各点的路由,同时向其它端点发送本端点(路由器)所知的路由,如直接路由、静态路由等。作为外部网关协议,BGP发送和引入路由的单位是整个AS自治区域,即BGP要发送本地路由器所在的AS内部的所有路由,引入其它AS自治区域的所有路由(假设不使用路由策略控制发送和引入)。其路由数量显然要远远大于IGP发送和引入的路由数量。因此,类似于IGP那样定时对外广播路由信息是不可取的。BGP采用发送路由增量(Incremental)的方法,完成全部路由信息的通告和维护:初始化时发送所有的路由给BGP对端(BGP Peer),同时在本地保存了已经发送给BGP对端的路由信息。当本地的BGP收到了一条新路由时(如通过IGP注入了新路由或加入了新的静态路由),与保存的已发送信息进行比较,如未发送过,则发送,如已发送过则与已经发送的路由进行比较,如新路由花费更小,则发送此新路由,同时更新已发送信息,反之则不发送。当本地BGP发现一条路由失效时(如对应端口失效),如此路由已发送过,则向BGP对端发送一个退出路由消息。
总之,BGP不是每次都广播所有的路由信息,而是在初始化全部路由信息后只发送路由的变化量(增量)。这样保证了BGP和对端的最小通信量,但同时增加了BGP的复杂程度。因为对于IGP,本地路由协议只需发送发送时刻所知的全部路由,而不保存任何已发送信息,路由选择的工作由对端来完成;而BGP必须为每个BGP对端保存已经发送的路由信息,以便发送一条新路由前确认其是否真的应该发送。
为了减小路由表的体积和发送路由的通信量,BGP还支持CIDR(Classless InterDomain Routing)。它使用带有较短的掩码(相对于自然掩码)的路由来在一条路由中表达更多的路由信息。如从202.112.1.0/24202.112.254.0/24可以使用202.112.0.0/16表示,从而减小了路由表的体积和发送路由信息时的网络流量。
同时,作为AS自治区域间的路由协议,由于政治的、经济的等原因,BGP需要按照不同的路由的属性控制路由的发送和引入。因此,BGP有丰富的路由策略控制手断。
在本地BGP路由变化时,也使用UPDATE消息修正对端BGP的路由表。
经过一段时间的路由信息交换后,本地BGP和对端BGP都无新路由通告,趋于稳定了。此时要定时发送KEEPALIVE消息以保持BGP连接的有效性。对于本地BGP,如果在超过保持时间的时间内,还未收到任何对端BGP消息,就认为此BGP连接已经无效,将此BGP连接断开。
当本地BGP在运行中发现错误时,要发送NOTIFY消息通告BGP对端。如对端BGP版本本地不支持,本地BGP收到了结构非法的UPDATE消息等。本地BGP退出BGP连接时也要发送NOTIFY消息。BGP收到NOTIFY消息后,要作相应处理。

三、BGP配置任务列表

BGP 配置任务主要包括:
Ÿ       启动和关闭 BGP
Ÿ       配置 BGP 本地参数
Ÿ       复位 BGP 连接
Ÿ       定义访问列表、 AS 路径列表和路由映射
Ÿ       配置 neighbor
Ÿ       配置 BGP 同伴组
Ÿ       BGP IGP 交互
以下各节中引用的参数范围如下表所示:
 
7-59  BGP 配置参数范围
参数名称
参数范围
as-number
0 65535
metirc
0 4294967295
perference
�C 2147483648 2147483647
holdtime
60 65535
asp-list-number
1 200
list-number
1 200
version-number
2 4
seq-number
0 65535
as-regular-expression
参见 RFC1164 section 4.2
names
字符串(有效长度 32 位)
 

3.  启动和关闭BGP

启动 BGP 协议时应指定本地的自治区域号( AS 号)。启动 BGP 后,本地路由器不接收相邻路由器的 BGP 连接请求。要使本地路由器主动向相邻路由器发出 BGP 连接请求,请参照 Neighbor 的配置。
关闭 BGP 协议时, BGP 协议将切断所有已经建立的 BGP 连接。
 
 
 
7-60  启动和关闭 BGP
操作
命令
启动 BGP ,并进入 BGP 协议配置模式
router bgp as-number
退出 BGP 协议配置模式
exit
关闭 BGP
no router bgp
 

4.  配置BGP本地参数

BGP 协议完成的主要任务之一是向其它的自治区域( AS )广播本自治区域中的网络可达信息。为了完成此任务, BGP 需要和内部网关协议( IGP ,如 RIP OSPF 等)协同工作。一个简单的方法是将特定的 IGP 协议发现的网络路由全部注入到 BGP 的路由表中,再由 BGP 发送出去(请参见 BGP IGP 交互 )。
1 )定义和取消本地网络
但有时只需要发送部分网络路由。此时,用 network 命令指定要发送的网络,同时也可以指定此网络路由的掩码和路由映射。
 
7-61   定义和取消本地网络
操作
命令
定义本地网络
network   ip-address  [mask mask]  [routemap map-name]
取消本地网络的定义
no network ip-address
 
2 )配置本地优先级
当一个运行 BGP 的路由器通过不同的内部伙伴( Internal Peer )得到目的地相同、下一跳不同的路由时,将根据不同路由的本地优先级进行选择,选取本地优先级最高的路由为到达此目的地的路由。用户可以使用以下命令配置 BGP 路由的本地优先级:
7-62   配置本地优先级
操作
命令
配置本地优先级
bgp default local-preference   preference
使用缺省的本地优先级
no bgp default local-preference
3 )指定是否允许 BGP 生成默认路由
7-63  允许或禁止 BGP 生成默认路由
操作
命令
允许 BGP 生成默认路由
default-information  originate
禁止 BGP 生成默认路由
no default-information  originate
 
4 )配置 MED
当一个运行 BGP 的路由器通过不同的外部部伙伴( External Peer )得到目的地址相同、下一跳不同的路由时,将根据不同路由的 MED Multi-Exit Discriminator )进行选择,选取 MED 最低的路由为到达此目的地的路由。
7-64   配置 MED
操作
命令
配置 MED
default-metric metric
使用缺省的 MED
no default-metric
 
5 )配置 BGP 定时器
当一台路由器与对端路由器建立了 BGP 连接后,定时向对端发送 Keepalive 消息,以指示连接通路正常,可以保持连接。路由器在一定的时间内没有收到对端的 Keepalive 消息(或其它类型的消息)即认为此 BGP 连接已经被中断,从而退出此 BGP 连接,并对从此 BGP 连接收到的路由进行相应的处理。因此, RFC 中规定的 Keepalive 消息的间隔时间和 BGP 连接保持时间是 BGP 协议机制中比较重要的参数。用户可通过以下命令配置这些参数。
7-65  配置 BGP 定时器
操作
命令
配置 BGP 定时器
timers bgp keepalive-interval  holdtime
使用缺省的定时器值
no timers bgp
 

5.  复位BGP连接

BGP 有关的参数被用户改变时,由于相关信息已经发送或是在 BGP 建立连接时由 BGP 连接的双方协商的,因此须切断当前的 BGP 连接,待重新建立起连接后才能生效。用户可以使用以下命令了达到此目的:
7-66  复位 BGP 连接
操作
命令
复位一个 neighbor
clear ip bgp ip-address
复位全部 neighbor
clear ip bgp *
 

6.  定义访问列表、AS路径列表和路由映射

本节描述的访问列表( Access List )、 AS 路径列表和路由映射( Routemap )是为以下的 Neighbor 配置做准备。
1 定义访问列表
请参见防火墙的配置。
2 )定义 AS 路径列表
每个 AS 路径列表是用数字来标识的。
7-67  定义 AS 路径列表
操作
命令
定义 AS 路径列表
ip as-path access-list list-number {permit | deny} as-regular-expression
删除指定的 AS 列表
no ip as-path access-list list-number
             
3 )定义路由映射( Routemap
路由映射是 BGP 实施路由策略的重要部分。它根据路由属性的匹配结果,决定对路由属性的操作。即完成用户指定的将特定条件的路由集合的属性修改的任务。每个路由映射中可以有若干映射规则,用序列号标识。在进行路由映射时,按序列号从小到大的顺序进行匹配,遇到第一个匹配的映射规则,就完成此次的路由映射过程。如未匹配任何一条映射规则,则此路由的发送和接收等操作被取消。
 
 
7-68  定义路由映射( Routemap
操作
命令
进入路由映射配置模式
route-map map-name { permit | deny } seq-number
退出 路由映射配置模式
exit
删除指定的路由映射
no route-map map-name
 
定义匹配规则。
7-69  定义匹配规则
操作
命令
匹配 AS 路径正则表达式
match  as-path  [asp-list-num]
取消 AS 路径表达式匹配
no match as-path
匹配端口
match  interface { Ethernet | Serial | Null } [interface-number]
取消端口匹配
no match interface
匹配地址
match ip address [ access-list-num  ]
取消地址匹配
no match ip address
匹配 metric
match  metric  [ metric ]
取消 metric 匹配
no match metric
 
定义赋值规则。
7-70  定义赋值规则
操作
命令
设置 AS
set as-path prepend as-number
取消 AS 号的设置
no set as-path
设置下一跳
set  ip  next-hop  ip-address
取消下一跳的设置
no set ip next-hop
设置本地优先级
set  local-preference [preference]
取消本地优先级的设置
no set local-preference
设置 metric
set  metric   [metric]
取消 metric 的设置
no set metric
设置路由源
set  origin  { igp | egp | incomplete }
取消路由源的设置
no set origin
 

7.  配置neighbor

1 )启动和关闭 neighbor
在启动 BGP 协议后,本地路由器就不再接收 BGP 连接请求。 neighbor 命令是用来向指定的对端路由器连接的。
7-71  启动和关闭 neighbor
操作
命令
定义 neighbor
neighbor neighbor-address remote-as  as-number
取消 neighbor 的定义
no neighbor neighbor-address remote-as   as-number
 
2 neighbor 的策略
在本地 BGP neighbor 上,可以施加若干策略,来控制 BGP 路由的输入输出。策略可以过滤掉指定目的地址且含有指定 AS 路径属性的路由,同时也可以对指定的路由进行路由映射。
使用以下命令,可以使用存取列表( Access List )来指定 BGP 对目的地址的要求。其中, in ou t 指明是输入还是输出时使用此策略。
7-72    配置 neighbor 的前缀过滤器
操作
命令
配置 neighbor 的前缀过滤器
[no] neighbor neighbor-address distribute-list
list-num { in | out }
 
使用以下命令,可以指定 BGP 过滤掉(或过滤出)含有指定 AS 路径属性的路由。
 
 
7-73   配置 neighbor AS 路径过滤器
操作
命令
配置 neighbor AS 路径过滤器
[no] neighbor neighbor-address filter-list asp-list-num { in | out }
 
以下命令,指定某 Neighbor Peer 伙伴),在输入或输出时所使用的路由映射。
7-74   配置 neighbor 的路由映射
操作
命令
配置 neighbor 的路由映射
[no] neighbor neighbor-address route-map map-name { in | out }
 
使用以下命令,可以设置此 neighbor 是否可以引入缺省路由。
7-75  允许或禁止引入默认路由
操作
命令
允许或禁止引入默认路由
[no] neighbor neighbor-address default-originate
[ route-map map-name ]
 
3 neighbor 其它属性的配置
7-76  neighbor 其它属性的配置
操作
命令
定义广告时间间隔
neighbor neighbor-address advertisement-interval  adv-interval
定义 keepalive 时间间隔
neighbor neighbor-address timers  interval
指定版本号
neighbor neighbor-address version version-number
 

8.  配置BGP同伴组

在配置 BGP 时,可能有很多 neighbor 的配置是相同的。对每一个 neighbor 都配置一次工作量较大。此时,可以使用 BGP 同伴组, BGP 同伴组是一个有相同配置的所有同伴的集合。在配置好同伴组后,将一个同伴加入到此同伴组中,就赋予了此同伴所有同伴组拥有的属性。
1 )创建同伴组
7-78  创建同伴组
操作
命令
创建或取消同伴组
[no] neighbor group-name  peer-group
 
2 )配置同伴组的策略
7-79   配置同伴组的策略
操作
命令
配置同伴组的前缀过滤器
[no] neighbor group-name distribute-list
{ list-num | list-name } { in | out }
配置同伴组的 AS 路径过滤器
[no] neighbor group-name filter-list
as-list-num { in | out }
配置同伴组的路由映射
[no] neighbor group-name route-map
map-name { in | out }
引入默认路由
[no] neighbor group-name default-originate
[ route-map map-name ]
 
3 配置同伴组的其它选项
 
7-80   配置同伴组的其它选项
操作
命令
定义广告时间间隔
neighbor group-name advertisement-interval  adv-interval
定义 keepalive 时间间隔
neighbor group-name timers  interval
指定版本号
neighbor group-name version   version-number
 
4 )定义同伴组的成员
将一个同伴加入到另一个同伴组中,等价于配置了一个有此同伴组所有属性的同伴,并启动它。
 
7-81   配置同伴组的其它选项
操作
命令
定义同伴组的成员
[no] neighbor ip-address  peer-group  group-name
 

9 BGPIGP交互

1 )引入其它 IGP 协议的路由
BGP 协议还可以向其它的自治区域发送本区域的内部网络的信息。为了达到此目的,可以将本地路由器通过 IGP 路由协议得到的关于本区域内部的网络信息通过 BGP 发送出去。使用下列命令可以将指定的 IGP 协议的路由通过 BGP 发送。用 network 命令也可以达到类似的目的。
7-82  引入静态路由
操作
命令
引入静态路由
[no] redistribute  static
引入静态路由 并设置 metric
redistribute  static  metric  metric
引入静态路由 并设置路由映射
redistribute  static  route-map map-name
 
 
 
7-83  引入 RIP 路由
操作
命令
引入 RIP 路由
[no] redistribute  rip
引入 RIP 路由 并设置 metric
redistribute  rip  metric  metric
引入 RIP 路由 并设置路由映射
redistribute  rip  route-map map-name
 
7-84  引入 OSPF 路由
操作
命令
引入 OSPF 路由
redistribute  ospf
取消引入 OSPF 路由
no redistribute ospf
引入 OSPF external 路由
redistribute  ospf  match  external
引入 OSPF external1 路由
redistribute  ospf  match  external 1
引入 OSPF external2 路由
redistribute  ospf  match  external 2
引入 OSPF internal 路由
redistribute  ospf  match  internal
引入 OSPF 路由 并设置 metric
redistribute  ospf  metric metric
引入 OSPF 路由 并设置路由映射
redistribute  ospf  route-map map-name
 
2 BGP IBGP 的同步
关于 BGP 同步的描述较繁琐,此处略,请参考 RFC 文档及相关资料。
7-85   配置与 IBGP 的同步
操作
命令
配置同步
[no] synchronization
 

10.  BGP监控和维护

通过执行 show 命令可以显示 BGP 的当前运行状态。
 
 
7-86  显示 BGP 运行状态
操作
命令
显示 BGP 路由表中指定 ip 地址的路由信息。
show ip bgp A.B.C.D
显示 cidr 路由信息
show ip bgp CIDR
显示与指定 Access-list 号相匹配的 BGP 路由信息
show ip bgp filter-list
显示 BGP 同伴连接的详细信息
show ip bgp neighbors
显示 AS 路径信息
show ip bgp paths
显示 AS 伙伴组信息
show ip bgp peer-group
显示匹配 AS 正则表达式的 AS 路径信息
show ip bgp regexp
显示 BGP 同伴状态的综合信息
show ip bgp summary
显示 BGP 路由信息
show ip bgp
 

四、BGP的应用

1基本配置

以下给出一简单的配置:
配置以上拓扑结构的 BGP 协议的命令为:
RTA 的配置:
!RTA
router bgp 100
neighbor 10.0.0 .2 remote-as 200
neighbor 10.0.0 .3 remote-as 200
redistribute rip
neighbor 129.102.1.2 remote-as 100
!
RTB 的配置:
!RTB
router bgp 100
neighbor 129.102.1.1 remote-as 100
!
RTC 的配置:
!RTC
router bgp 200
neighbor 10.0.0 .1 remote-as 100
neighbor 139.102.1.2 remote-as 200
no redistribute rip
!
RTD 的配置:
!RTD
router bgp 200
neighbor 10.0.0 .1 remote-as 100
neighbor 139.102.1.1 remote-as 200
no redistribute rip
!
 

2BGP同步

本地 BGP 在收到一条路由时,要检查此路由的下一跳是否可达。在同步状态下,此 BGP 路由直到 IGP 也通告了此路由, BGP 路由才被加入到路由表中。在非同步状态下, BGP 路由被直接加入到路由表。
BGP 在通过 EBGP 收到其它 AS 自治区域 BGP 对端的 UPDATE 消息后,将此消息中的路由不加修改 (< 信宿地址,下一跳 > 不变 ) 地通过 IBGP 发送给 IBGP 同伴。对于 IBGP 对端,在此路由的下一跳不可达的情况下,路由是应该是无效的;同时,在 IGP 通告此路由前,此路由也应该是无效的,因为此时此路由还未在 AS 区域内由 IGP 收敛,此信宿的 IP 包会因为只运行 IGP 的路由器无此路由而被丢弃。
如何判断下一跳是否可达呢? BGP 在路由表中递归查找,直到找到一个直接相连的接口,从而确认此下一跳可达,否则不可达;同时,到达此下一跳的路径上的所有路由器必须也被通告了此路由,即 AS 区域内此路由已经由 IGP 扩散。由于 IBGP 是通过 TCP 连接的,其间可能经过若干路由器, IBGP 消息中路由的下一跳的可达信息不能通过 BGP 来通告给途径的路由器,而必须通过 IGP IBGP 的发端通过引入 BGP 路由来完成。 AS 自治区域内部的路由可达信息的传播应该由 IGP 完成, AS 自治区域间的路由可达信息的传播则由 BGP 完成。 " 同步 " 在这里指的是 IGP BGP 的同步。
以下举例说明同步。
RTC 通过 EBGP 通告 RTA 路由 170.10.0.0 ,下一跳为 2.2.2 .1 RTA 将此路由通过 IBGP 通告给 RTB ,下一跳不变,也是 2.2.2.1 RTB 知道为了到达 2.2.2.1 ,应该将 IP 包发送到 RTE ,而 RTE 如果并不知到网络路由 170.10.0.0 ,则会把丢弃此 IP 包。同时, RTB 通过 EBGP 将路由 170.10.0.0 通告给 RTD ,结果, AS400 到网络 170.10.0.0 的流量在 RTE 出全被丢弃了。
为了避免此情况, RTA 处的 IGP 应该引入 BGP 的路由 170.10.0.0 并通告给 RTE RTB 在收到 IGP 通告的网络路由 170.10.0.0 时,说明 RTA RTB 之间至少有一条通路上的路由器全部被通告了 170.10.0.0 的路由,因此可以安全地把路由加入到路由表中,并可以通告 RTD
如果把 AS 自治区域视为一个大的 AS 路由器, AS 路由器组成了 Internet 网络。则 BGP 就成为了这个由 AS 路由器组成的更高一级的自治区域的 IGP 了,只不过这个更高一级的自治区域只有一个,即因特网本身。在 AS 路由器内部, BGP 运行于各个端口上 (AS 边界的与其它 AS 连通的路由器 ) 。当 AS 从一个端口上得到了一条其它 AS 的路由时,它通告给所有其它的端口 ( 收到 EBGP 消息后通过 IBGP 通告 AS 内部的所有 BGP 同伴 ) 。而此 AS 路由器是分布式的,端口之间的可达信息是由 AS 内部的 IGP(RIP OSPF) 保证的,只有这条 IBGP 通告的路由的下一跳的可达信息通过 IGP 到达本地后,此 IBGP 通告的路由才加入本地路由表。之所以有 " 同步 " 问题,是因为 IGP 的收敛需要一定时间,而 IBGP 通过 TCP 连接直接发送无收敛时间,如果未等 IGP 收敛,就将 IBGP 通告的路由加入路由表,会造成 " 黑洞 "
在路由器中, BGP 缺省处于同步状态。通过上例可以看出,在 IBGP 同步直接相连的情况下,不需要同步。

3、路由的过滤

(1) 定义访问列表

请参见防火墙的配置

(2) 定义AS路径列表

每个 AS 路径列表是用数字来标识的。在配置模式下使用命令:
ip  as-path  access-list  list-num  permit|deny  AS 正则表达式
可以配置一条 AS 路径访问列表。
其中, AS 正则表达式规定了路由 AS 属性的模式,用于指定符合此模式的路由集合。 可以参考 RFC1164 Section4.2
CISCO 正则表达式的符号意义:
 
字符
符号
特殊意义
句号
.
匹配任意单字符
星号
*
匹配模式中 0 或更多的序列
加号
+
匹配模式中 1 或更多的序列
问号
?
匹配模式 0 1 次出现
加字符
^
匹配输入字符串的开始
美元符
$
匹配输入字符串的结束
下划线
_
匹配逗号,括号,字符串的开始和结束,空格
方括号
[ 范围 ]
表示一个单字符模式的范围
连字符
-
把一个范围的结束点分开
 
例如:
"100 200 300"         匹配 _300$           "AS300 始发的路径 "
"300 400 100"         匹配 ^300_           "AS300 为相邻的 AS 自治区域 "
所有 AS 路径       匹配 .*          " 所有 AS 路径 "
"300 100 200 400"   匹配 _100_           " 经过 AS100 的路径 "

(3)指定对路由的过滤

根据配置的地址访问列表和 AS 路径列表可以指定对特定的路由集合进行过滤。此过滤可以施加于所有的同伴或特定的同伴。在 BGP 中,使用 distribute-list 指定地址访问列表,使用 filter-list 指定 AS 路由列表。
以下分别举例说明地址过滤和路径过滤:
如图,由于各种原因,网络路由 160.10.0.0 不能经过 RTC 通告给 AS100 中的 RTA ,但要通告本 AS 区域的网络路由 170.10.0.0 ,此时应使用基于地址访问列表的路由过滤。
路由器 RTC 的匹配为:
RTC
router bgp 300
network 170.10.0.0
neighbor 3.3.3 .3 remote-as 200
neighbor 2.2.2 .2 remote-as 100
neighbor 2.2.2 .2 distribute-list 1 out
access-list 1 deny 160.10.0.0 0.0.255.255
access-list 1 permit 0.0.0 .0 255.255.255.255
路由器 RTC 在向 RTA 通告路由时,要通过地址访问列表 1 ,如果一条路由的信宿地址被地址访问列表拒绝,则不发送此路由。从而完成过滤路由 160.10.0.0 的目的。
用上图说明基于 AS 路径属性的过滤。
此时也要 RTC 过滤掉所有发自 AS200 的路由。 RTC 使用的配置:
RTC
router bgp 300
neighbor 3.3.3 .3 remote-as 200
neighbor 2.2.2 .2 remote-as 100
neighbor 2.2.2 .2 filter-list 1 out
ip as-path access-list 1 deny ^200$
ip as-path access-list 1 permit .*
路径访问列表 1 定义了只有 AS 200 的路径属性的路由集合,属于此集合的路由将在 RTC 发送给 RTA UPDATE 消息中过滤掉。从 AS400 始发的路由被 RTC 正常的通告。

4、路由属性控制和策略

路由的过滤也属于路由策略。但路由策略的灵活性主要体现于 BGP 对于路由属性的控制。 BGP 通过 Route-map 完成路由属性的控制,从而施加 BGP 的路由策略。
Route-map 定义了若干序列,每个序列中定义了一种匹配路由和的路由属性赋值的集合。 路由通过一个 Route-map 时,按序列号从小到大依次匹配各序列。当路由属性匹配某序列的匹配条件时,根据此序列的赋值属性对此路由的指定的路由属性进行操作,同时中断匹配操作,路由通过此 Route-map 若路由未匹配任何一序列,则路由未通过此 Route-map ,之后的操作被终止。
在一个序列中,可以根据一条路由的信宿地址、 AS 路径、 Metric 花费、 BGP 路由的源类型等对路由进行匹配;同时,可以设置路由的下一跳、 AS 路径、 Metric 花费、源类型、本地优先级等路由属性。
可以看出, Route-map 也可以用作路由过滤,但更灵活一些。同时 Route-map 通过修改路由属性来影响对端 BGP 的路由选择。
以下举例说明 Route-map 的应用:
例一:使用 Route-map RTC RTB 引入 AS200 区域中的路由,并将其 Metric 设置为 20 ,而丢弃其它 AS 区域的路由。配置如下:
RTC
router bgp 300
network 170.10.0.0
neighbor 3.3.3 .3 remote-as 200
neighbor 3.3.3 .3 route-map stamp in
route-map stamp permit 10
match as-path 1
set metric 20
ip as-path access-list 1 permit ^200$
其中使用的 AS 路径列表 1 匹配 AS200 发出的路由。 Route-map 的序列 10 ,使用 AS 路径列表 1 作为匹配规则,如匹配,将匹配路由的 Metric 设置为 20 。对于其它 AS 属性的路由,由于未匹配任何一条 Route-map 序列,即未匹配此 Route-map ,则拒绝引入此路由。
例二:要求引入 AS200 发送的路由,并设置此路由的 Metric 属性为 20 ,丢弃 AS400 发送的路由,引入其它 AS 区域发送的路由,并匹配此路由的 Metirc 10
路由器的配置为:
RTC
router bgp 300
network 170.10.0.0
neighbor 3.3.3 .3 remote-as 200
neighbor 3.3.3 .3 route-map stamp in
route-map stamp permit 10
match as-path 1
set metric 20
route-map stamp deny 20
match as-path 2
!
route-map stamp permit 30
set metric 10
ip as-path access-list 1 permit ^200$
ip as-path access-list 2 permit ^400 .*
匹配 AS 路径列表 1 的路由 metric 被设置为 20 ,匹配 AS 路径列表 2 的路由被拒绝引入,其余的路由 metric 被设置为 10
使用上图说明 Route-map set as-path prepend 的作用:
AS600 中的路由器通过 2 条路径收到了网络路由 170.10.0.0 AS 路径属性分别为 (100 300) (400 200 300) 。在其它因素相同的情况下, AS600 会选择 AS100 发送的路由,因为它具有较短的 AS 路径。为了影响这种选择,可以使用 set as-path prepend 功能。
RTC
router bgp 300
network 170.10.0.0
neighbor 2.2.2 .2 remote-as 100
neighbor 2.2.2 .2 route-map SETPATH out
route-map SETPATH
set as-path prepend 300 300            ;一般使用本 AS 区域的 AS
此配置将向 AS100 发送的路由的 AS 路径属性设置为 (300 300 300) ,因此,通过 AS100 到达 AS600 的路由的 AS 路径属性为 (100 300 300 300) ,从而影响 AS600 路由选择,使其选择从 AS400 发送来的路由,而不是 AS100 发送来的。

你可能感兴趣的:(网络,职场,休闲)