4、BGP
4.1BGP简介
BGP(Border Gateway Protocol,边界网关协议)是一种既可以用于不同 AS(Autonomous System,自治系统)之间,又可以用于同一 AS 内部的动态路由协议。当 BGP 运行于同一 AS 内部时,被称为 IBGP(Internal BGP);当 BGP 运行于不同 AS 之间时,称为 EBGP(External BGP)。AS 是拥有同一选路策略,属于同一技术管理部门的一组路由器。
当前使用的 BGP 版本是 BGP-4。BGP-4 作为 Internet 外部路由协议标准,被 ISP(Internet Service Provider,互联网服务提供商)广泛应用。
BGP 具有如下特点:
• BGP 是一种 EGP(Exterior Gateway Protocol,外部网关协议),与 OSPF、RIP 等 IGP
(Interior Gateway Protocol,内部网关协议)不同,其着眼点不在于发现和计算路由,而在
于控制路由的传播和选择最佳路由。
• BGP 使用 TCP 作为其传输层协议(端口号 179),提高了协议的可靠性。
• BGP 是一种路径矢量(Path-Vector)路由协议,它采用到达目的地址所经过的 AS 列表来衡量到达目的地址的距离。
• BGP 支持 CIDR(Classless Inter-Domain Routing,无类域间路由)。
• 路由更新时,BGP 只发送更新的路由,大大减少了 BGP 传播路由所占用的带宽,适用于在Internet 上传播大量的路由信息。
• BGP 路由通过携带 AS 路径信息彻底解决路由环路问题。
• BGP 提供了丰富的路由策略,能够对路由实现灵活的过滤和选择。
• BGP 易于扩展,能够适应网络新的发展。
4.2BGP发言者和BGP对等体
运行 BGP 协议的路由器称为 BGP 发言者。BGP 发言者接收或产生路由信息,并将路由信息发布给其它 BGP 发言者。
相互之间存在 TCP 连接、相互交换路由信息的 BGP 发言者互为 BGP 对等体。根据对等体所在的AS,对等体分为以下几种:
• IBGP 对等体:对等体与本地路由器位于同一 AS。
• EBGP 对等体:对等体与本地路由器位于不同 AS。
4.3BGP的消息类型
BGP 定义了以下几种消息类型:
• Open:TCP 连接建立后发送的第一个消息,用于在 BGP 对等体之间建立会话。
• Update:用于在对等体之间交换路由信息。一条 Update 消息可以发布具有相同路径属性的多条可达路由,也可以同时撤销多条不可达路由。
• Keepalive:BGP 周期性地向对等体发送 Keepalive 消息,以保持会话的有效性。
• Route-refresh:用来要求对等体重新发送指定地址族的路由信息。
• Notification:当 BGP 检测到错误状态时,就向对等体发出 Notification 消息,之后 BGP 会话会立即中断。
4.4BGP的路由属性
BGP 路由属性是跟随路由一起发布出去的一组参数。它对特定的路由进行了进一步的描述,使得路由接收者能够根据路由属性值对路由进行过滤和选择。下面将介绍几种常见的路由属性。
(1)源(ORIGIN)属性
ORIGIN 属性定义了路由信息的来源,标记一条 BGP 路由是怎么生成的。它有以下三种类型:
• IGP:优先级最高,表示路由产生于本 AS 内。
• EGP:优先级次之,表示路由通过 EGP 学到。
• Incomplete:优先级最低,表示路由的来源无法确定。例如,从其它路由协议引入的路由信息。
(2)AS路径(AS_PATH)属性
AS_PATH 属性记录了某条路由从本地到目的地址所要经过的所有 AS 号。当 BGP 路由器将一条路由通告到其他 AS 时,会把本地 AS 号添加在 AS_PATH 列表中。收到此路由的 BGP 路由器根据AS_PATH 属性就可以知道到达目的地址所要经过的 AS。
AS_PATH 属性有以下两种类型:
• AS_SEQUENCE:AS号按照一定的顺序排列。离本地AS最近的相邻AS号排在前面,其他AS号按顺序依次排列。
• AS_SET:AS 号只是经过的 AS 的简单罗列,没有顺序要求。
(3)下一跳(NEXT_HOP)属性
BGP的NEXT_HOP属性取值不一定是邻居路由器的IP地址。NEXT_HOP属性取值
情况分为几种:
• BGP 发言者把自己产生的路由发给所有邻居时,将该路由信息的 NEXT_HOP 属性设置为自己与对端连接的接口地址;
• BGP 发言者把接收到的路由发送给 EBGP 对等体时,将该路由信息的 NEXT_HOP 属性设置为自己与对端连接的接口地址;
• BGP发言者把从EBGP邻居得到的路由发给IBGP邻居时,并不改变该路由信息的NEXT_HOP
属性。如果配置了负载分担,等价路由被发给IBGP邻居时则会修改NEXT_HOP属性。
(4)MED(Multi-Exit Discriminator,多出口区分)属性
MED 属性仅在相邻两个 AS 之间交换,收到此属性的 AS 不会再将其通告给其它 AS。
MED属性相当于IGP使用的度量值(metrics),它用于判断流量进入AS时的最佳路由。当一个BGP路由器通过不同的EBGP对等体得到目的地址相同但下一跳不同的多条路由时,在其它条件相同的情况下,将优先选择MED值较小者作为最佳路由。
(5)本地优先(LOCAL_PREF)属性
LOCAL_PREF 属性仅在 IBGP 对等体之间交换,不通告给其他 AS。它表明 BGP 路由器的优先级。LOCAL_PREF属性用于判断流量离开AS时的最佳路由。当BGP路由器通过不同的IBGP对等体得到目的地址相同但下一跳不同的多条路由时,将优先选择LOCAL_PREF属性值较高的路由。
(6) 团体(COMMUNITY)属性
BGP 将具有相同特征的路由归为一组,称为一个团体,通过在路由中携带团体属性标识路由所属的团体。团体没有物理上的边界,不同 AS 的路由可以属于同一个团体。
根据需要,一条路由可以携带一个或多个团体属性值(每个团体属性值用一个四字节的整数表示)。接收到该路由的路由器可以通过比较团体属性值对路由作出适当的处理(比如决定是否发布该路由、在什么范围发布等),而不需要匹配复杂的过滤规则(如 ACL),从而简化路由策略的应用和降低维护管理的难度。
公认的团体属性有:
• INTERNET:缺省情况下,所有的路由都属于 INTERNET 团体。具有此属性的路由可以被通
告给所有的 BGP 对等体。
• NO_EXPORT:具有此属性的路由在收到后,不能被发布到本地AS之外。如果使用了联盟,
则不能被发布到联盟之外,但可以发布给联盟中的其他子AS。
• NO_ADVERTISE:具有此属性的路由被接收后,不能被通告给任何其他的 BGP 对等体。
• NO_EXPORT_SUBCONFED:具有此属性的路由被接收后,不能被发布到本地 AS 之外,
也不能发布到联盟中的其他子 AS。
4.6 BGP的选路规则
目前,BGP 选择路由的过程为:
(1) 丢弃下一跳(NEXT_HOP)不可达的路由;
(2) 优选首选值(Preferred-value)最大的路由;
(3) 优选本地优先级(LOCAL_PREF)最高的路由;
(4) 依次选择 network 命令生成的路由、import-route 命令引入的路由、聚合路由;
(5) 优选 AS 路径(AS_PATH)最短的路由;
(6) 依次选择 ORIGIN 类型为 IGP、EGP、Incomplete 的路由;
(7) 优选 MED 值最低的路由;
(8) 依次选择从 EBGP、联盟 EBGP、联盟 IBGP、IBGP 学来的路由;
(9) 优选下一跳 Cost 值最低的路由;
(10) 优选 CLUSTER_LIST 长度最短的路由;
(11) 优选 ORIGINATOR_ID 最小的路由;
(12) 优选 Router ID 最小的路由器发布的路由;
(13) 优选 IP 地址最小的对等体发布的路由。
4.7 BGP发布路由的策略
BGP 发布路由时采用如下策略:
• 存在多条有效路由时,BGP 发言者只将最优路由发布给对等体。如果配置了
advertise-rib-active 命令,则 BGP 发布 IP 路由表中的最优路由;否则,发布 BGP 路由表中的最优路由。
• BGP 发言者只把自己使用的路由发布给对等体。
• BGP 发言者会将从 EBGP 获得的路由发布给它的所有 BGP 对等体(包括 EBGP 对等体和
IBGP 对等体)。
• BGP 发言者会将从 IBGP 获得的路由发布给它的 EBGP 对等体,但不会发布给它的 IBGP 对等体。
• 会话一旦建立,BGP 发言者将把满足上述条件的所有 BGP 路由发布给新对等体。之后,BGP发言者只在路由变化时,向对等体发布更新的路由。
4.8大规模BGP网络遇到的问题和解决办法
(1)路由聚合
在大规模的网络中,BGP 路由表十分庞大,使用路由聚合(Routes Aggregation)可以大大减小BGP 路由表的规模。
路由聚合实际上是将多条路由合并的过程。这样 BGP 在向对等体通告路由时,可以只通告聚合后的路由,而不是将所有的具体路由都通告出去。
目前系统支持自动聚合和手动聚合方式。使用后者还可以控制聚合路由的属性,以及决定是否发布具体路由。
(2)路由衰减
路由发生变化时,路由协议会向邻居发布路由更新,收到路由更新的路由器需要重新计算路由并修改路由表。如果发生路由振荡,即路由不稳定,路由表中的某条路由反复消失和重现,则会消耗大量的带宽资源和 CPU 资源,严重时会影响到网络的正常工作。
在多数情况下,BGP 协议都应用于复杂的网络环境中,路由变化十分频繁。为了防止持续的路由振荡带来的不利影响,BGP 使用衰减来抑制不稳定的路由。
BGP衰减使用惩罚值来衡量一条路由的稳定性,惩罚值越高说明路由越不稳定。如 图 1-6 所示,路由每次从可达状态变为不可达状态,或者可达路由的属性每次发生变化时,BGP给此路由增加一定的惩罚值(系统固定为 1000,不可修改)。当惩罚值超过抑制阈值时,此路由被抑制,不参与路由选择。惩罚值达到设置的上限后,不再继续增加。
发生振荡的路由如果没有再次振荡,则路由的惩罚值会逐渐减少。每经过一段时间,惩罚值便会减少一半,这个时间称为半衰期(Half-life)。当惩罚值低于再使用阈值时,此路由变为可用路由,参与路由选择。
(3)对等体组
在大规模 BGP 网络中,对等体的数量很多,其中很多对等体具有相同的策略,在配置时会重复使用一些命令。此时,将这些对等体加入一个对等体组,可以简化配置。
对等体组是具有某些相同属性的对等体的集合。当一个对等体加入对等体组时,此对等体将获得与所在对等体组相同的配置。当对等体组的配置改变时,组内成员的配置也相应改变。
(4)团体
在大规模的网络中,如果通过地址前缀列表、ACL、AS_PATH等实现对路由的控制,不仅配置复杂,而且不方便维护。利用团体属性和扩展团体属性,可以提高路由策略配置的灵活度,简化路由策略的管理,从而降低维护管理的难度。
(5) 路由反射器
为保证 IBGP 对等体之间的连通性,需要在 IBGP 对等体之间建立全连接关系。假设在一个 AS 内部有 n 台路由器,那么应该建立的 IBGP 连接数就为 n(n-1)/2。当 IBGP 对等体数目很多时,对网络资源和 CPU 资源的消耗都很大利用路由反射可以解决这一问题。在一个 AS 内,其中一台路由器作为 RR(Route Reflector,路由反射器),作为客户机(Client)的路由器与路由反射器之间建立 IBGP 连接。路由反射器从客户
机接收到路由后,将其传递(反射)给所有其他的客户机,从而保证客户机之间不需要建立 BGP连接,就可以学习到彼此的路由。
既不是路由反射器也不是客户机的BGP路由器被称为非客户机(Non-client)。非客户机与路由反射器之间,以及所有的非客户机之间仍然必须建立全连接关系。
(6)联盟
联盟(Confederation)是处理自治系统内部的IBGP网络连接激增的另一种方法,它将一个自治系统划分为若干个子自治系统,每个子自治系统内部的IBGP对等体建立全连接关系,子自治系统之间建立联盟内部EBGP连接关系。
4.9MP-BGP
BGP-4 只能传递 IPv4 单播的路由信息,不能传递其它网络层协议(如 IPv6 等)的路由信息。为了提供对多种网络层协议的支持,IETF 对 BGP-4 进行了扩展,形成 MP-BGP(Multiprotocol Border Gateway Protocol,多协议边界网关协议)。MP-BGP 可以为多种网络层协议传递路由信息,如 IPv6 单播、IPv4 组播、IPv6 组播、VPNv4、VPNv6、L2VPN、IPv4 MDT 等。
4.10BGP视图
system-view
bgp 100
address-family ipv4 unicast //IPv4单播地址族视图
address-family ipv6 unicast //IPv6单播地址族视图
address-family ipv4 multicast //IPv4组播地址族视图
address-family ipv6 multicast //IPv6组播地址族视图
address-family vpnv4 //VPNv4地址族视图
address-family vpnv6 //VPNv6地址族视图
address-family l2vpn //L2VPN地址族视图
ip vpn-instance vpn1 //BGP-VPN实例
4.11BGP配置
bgp 65009
router-id 2.2.2.2 //配置router-id
peer 3.3.3.3 as-number 65009
peer 3.3.3.3 connect-interface loopback 0 //指定邻居互联地址源端口
peer 5.5.5.5 as-number 100
peer 5.5.5.5 connect-interface loopback 0
peer 5.5.5.5 ebgp-max-hop 2 //配置EBGP最大条数,缺省配置为255
address-family ipv4 unicast
peer 3.3.3.3 enable
network 2.2.2.2 32 //宣告路由表中的路由条目
import-route direct //引入直连路由
import-route ospf 100 //引入OSPF路由
aggregate 192.168.64.0 18 detail-suppressed //配置路由聚合,并抑制发布具体路由
balance 2 //配置负载分担数
default med med-value //配置med缺省值
compare-different-as-med //配置允许比较来自不同AS路由的MED属性值
peer 3.3.3.3 next-hop-local //缺省情况下,向EBGP对等体/对等体
组发布路由时,将下一跳属性修改为自身的地址;向IBGP对等体/对等体组发布路由时,不修改下一跳属性,AS边界对等体对IBGP对等体需要手动配置将下一跳地址属性修改为自身的地址。
团体属性配置:
route-policy comm_policy permit node 0
apply community no-export
quit
bgp 10
address-family ipv4 unicast
peer 200.1.2.2 route-policy comm_policy export
peer 200.1.2.2 advertise-community
路由反射器配置:
bgp 200
address-family ipv4 unicast
peer 193.1.1.2 reflect-client //在路由反射器上配置反射器客户端
BGP联盟配置:
bgp 65001
confederation id 200 //配置联盟AS号
confederation peer-as 65002 65003 //配置联盟内其他AS号
peer 10.1.1.2 as-number 65002
peer 10.1.2.2 as-number 65003
5策略路由
5.1策略路由简介
与单纯依照 IP 报文的目的地址查找路由表进行转发不同,策略路由是一种依据用户制定的策略进行路由转发的机制。策略路由可以对于满足一定条件(ACL 规则、报文长度等)的报文,执行指定的操作(设置报文的下一跳、出接口、缺省下一跳和缺省出接口等)。
报文到达后,其后续的转发流程如下:
• 首先根据配置的策略路由转发。
• 若找不到匹配的节点或虽然找到了匹配的节点,但指导报文转发失败时,再根据路由表中除缺省路由之外的路由来转发报文。
• 若转发失败,则根据策略路由中配置的缺省下一跳和缺省出接口指导报文转发。
• 若转发失败,则再根据缺省路由来转发报文。
根据作用对象的不同,策略路由可分为本地策略路由和转发策略路由:
• 本地策略路由:对设备本身产生的报文(比如本地发出的 ping 报文)起作用,指导其发送。
• 转发策略路由:对接口接收的报文起作用,指导其转发。
5.2策略
策略用来定义报文的匹配规则,以及对报文执行的操作。策略由节点组成。
一个策略可以包含一个或者多个节点。节点的构成如下:
• 每个节点由节点编号来标识。节点编号越小节点的优先级越高,优先级高的节点优先被执行。
• 每个节点的具体内容由 if-match 子句和 apply 子句来指定。if-match 子句定义该节点的匹配规则,apply 子句定义该节点的动作。
• 每个节点对报文的处理方式由匹配模式决定。匹配模式分为 permit(允许)和 deny(拒绝)两种。
应用策略后,系统将根据策略中定义的匹配规则和操作,对报文进行处理:系统按照优先级从高到低的顺序依次匹配各节点,如果报文满足这个节点的匹配规则,就执行该节点的动作;如果报文不满足这个节点的匹配规则,就继续匹配下一个节点;如果报文不能满足策略中任何一个节点的匹配规则,则根据路由表来转发报文。
5.3策略路由配置
(1)指定所有 TCP 报文的下一跳为 1.1.2.2;其它报文仍然按照查找路由表的方式进行转发。
acl number 3001
rule permit tcp
quit
policy-based-route aaa permit node 5
if-match acl 3001
apply next-hop 1.1.2.2
quit
ip local policy-based-route aaa //应用本地策略路由,全局生效
interface g1/0/1
ip policy-based-route aaa //在端口应用本地策略路由,端口生效
quit
(2)源地址为 192.168.10.2 的报文以 4.1.1.2/24 作为下一跳 IP 地址;其它源地址的报文以 5.1.1.2/24 作为下一跳 IP 地址。
acl 2000
rule permit source 192.168.10.2 0
quit
policy-based-route aaa permit node 0
if-match acl 2000
apply next-hop 4.1.1.2
quit
6、路由策略
6.1路由策略简介
路由策略的应用灵活广泛,主要有下面几种方式:
• 控制路由的发布
路由协议在发布路由信息时,通过路由策略对路由信息进行过滤,只发布满足条件的路由信息。
• 控制路由的接收
路由协议在接收路由信息时,通过路由策略对路由信息进行过滤,只接收满足条件的路由信息,可以控制路由表项的数量,提高网络的安全性。
• 管理引入的路由
路由协议在引入其它路由协议发现的路由时,通过路由策略只引入满足条件的路由信息,并控制所引入的路由信息的某些属性,以使其满足本协议的要求。
• 设置路由的属性
对通过路由策略的路由设置相应的属性。
路由策略的实现步骤如下:
(1) 首先要定义将要实施路由策略的路由信息的特征,即定义一组匹配规则。可以用路由信息中
的不同属性作为匹配依据进行设置,如目的地址、发布路由信息的路由器地址等。
(2) 然后再将匹配规则应用于路由的发布、接收和引入等过程的路由策略中。
6.2过滤器
(1)访问控制列表
访问控制列表包括针对IPv4报文的ACL和针对IPv6报文的ACL。用户在定义ACL时可以指定IP(v6)地址和子网范围,用于匹配路由信息的目的网段地址或下一跳地址。
(2)地址前缀列表
地址前缀列表包括 IPv4 地址前缀列表和 IPv6 地址前缀列表。地址前缀列表的作用类似于 ACL,但比它更为灵活,且更易于用户理解。使用地址前缀列表过滤路由信息时,其匹配对象为路由信息的目的地址信息域。
(3)AS路径访问列表(as-path)
as-path 仅用于 BGP 路由的过滤。BGP 的路由信息中,包含有自治系统路径域。as-path 就是针对自治系统路径域指定匹配条件。
(4)团体属性列表(community-list)
community-list 仅用于 BGP 路由的过滤。BGP 的路由信息包中,包含一个 community 属性域,用来标识一个团体。community-list 就是针对团体属性域指定匹配条件。
(5)扩展团体属性列表(extcommunity-list)
extcommunity-list 仅用于 BGP 路由的过滤。BGP 扩展团体属性有两种,一种是用于 VPN 的 RT(Route Target,路由目标)扩展团体,另一种则是 SoO(Site of Origin,源站点)扩展团体。扩展团体属性列表就是针对这两种属性指定匹配条件。
(6)路由策略
路由策略是一种比较复杂的过滤器,它不仅可以匹配路由信息的某些属性,还可以在条件满足时改变路由信息的属性。路由策略可以使用前面几种过滤器定义自己的匹配规则。
6.3配置举例
acl number 2001
rule permit source 172.17.2.0 0.0.0.255
quit
ip refix-list prefix-a index 10 permit 172.16.1.0 24
route-policy isis2ospf permit node 10
if-match ip address prefix-list prefix-a
apply cost 100
quit
route-policy isis2ospf permit node 20
if-match ip address acl 2001
apply tag 20
route-policy isis2ospf permit node 30
quit
ospf 100
import-route isis 1 route-policy isis2ospf
qui