网络-路由交换-IPv4-Cisco-BGP
Posted laixufie2046
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络-路由交换-IPv4-Cisco-BGP相关的知识,希望对你有一定的参考价值。
BGP
报文结构:http://www.023wg.com/message/message/cd_feature_bgp_message.html
基础知识点
1) BGP 用于自身所在的AS 具有多出口,多ISP,并且要优化到ISP 的路由时使用BGP。
2) BGP 是一个用来控制策略的工具。
3) BGP 需要可靠的传输,采用TCP 可以保证传输,减少BGP 的复杂度。
4) BGP 本身收敛速度较慢(分钟级)。
5) BGP 分为IBGP 和EBGP。IBGP 路由器邻居默认不用直接互联,即可以跨路由器建立IBGP 邻居关系,而EBGP 邻居默认必须直接互联。
6) BGP 邻居交互信息是通过TCP 连接,所以首先要能建立TCP 连接,通过TCP 连接发送消息建立邻居关系。
7) BGP 有4 个消息,open(建立关系),notification(故障切断),update(路由更新),keepalive(保活)。
8) BGP 不能通过默认路由发包,必须要有详细路由。
IBGP 的水平分割
EBGP 是通过as_path 防环的,但在一个AS 内部的IBGP 的as_path 相同,防环失效。为了IBGP 也能防环,设置了IBGP 水平分割机制,即通过IBGP 学习到的路由信息不能通告给其他IBGP 邻居。因此IBGP 路由器如果不两两互联的话就不能学习到路由信息,这导致所有IBGP 路由器必须要配置成Full-mesh 的邻居关系(并且关闭同步机制)。要想不配置成Full-mesh 关系,就要用到路由反射器。
BGP 路由判定基准(即进入路由表的判定基准,按优先级由高到低排列)
1) 如果下一跳不可达,则不考虑。(如果BGP 宣告的路由的下一跳为不可达时,则该路由不能进入路由表)
2) 最大Cisco 专有的权重值Weight。只对本路由器起作用,不影响其他路由器。默认值32768。(可以使用neighbor xxxx weight xxx,neighbor xxxx filter-list x weight xxxxx, neighbor xxxx route-map 配置到对等体的指定路由的weight 值)
3) 最高本地优先级local_pref,默认值100,AS 内部传递。(可以使用neighbor xxxx route-map 为从EBGP 邻居进入的路由设置local_pref)
4) 源自本路由器的路由(即下一跳为0.0.0.0)。
5) 最短as_path。(可以使用neighbor xxxx route-map 为去往EBGP 邻居的路由设置as_path)(可以使用命令bgp bestpath as-path ignore 使路由器忽略as_path 属性的影响)
6) 最低起源代码origin(i<e<?)。(可以使用neighbor xxxx route-map 为去往EBGP 邻居的路由设置origin)
7) 最低MED。只用于向EBGP 邻居发送,影响其选路。进入到对端AS 后不会再从该AS 中再发布出去。(可以使用neighbor xxxx route-map 为去往EBGP 邻居的路由设置MED)
基本配置
1) 通常关闭同步(no synchronization),(条件是AS 内所有路由器都要运行IBGP)
2) 通常关闭汇总(no auto-summary),
3) 一台路由器只能启动一个BGP 进程。
4) 在IGP 路由表(本地通常路由表)中存在的路由才能通过BGP 发布出去。(network 会检查)
5) 硬重置与邻居的BGP 连接,clear ip bgp *(清除与所有对端的TCP 连接和BGP 连接后重建TCP 连接和BGP 连接)
6) 软重置与邻居的BGP 连接,clear ip bgp soft in/out(不清除TCP 和BGP 连接,触发BGP 更新操作)
7) EBGP 最基本配置:EBGP 邻居得是直连的
(config)#router bgp 1 (本地AS 号是1)
no synchronization
no auto-summary
neighbor 12.12.12.1 remote-as 2 (邻居IP 地址是12.12.12.1,邻居AS 号是2)
8) 查看/解析命令:
(config)#show ip bgp summary
(config)#show ip bgp neighbor
(config)#show ip bgp
(config)#debug ip bgp events
Update-source
如果到邻居的网络有多条路径,那么用环回接口地址建立TCP 连接和邻接关系,并作为BGP 路由的更新源,会增加BGP 的稳健性。
(config-router)#neighbor 对端IP update-source loopback x
Ebgp-multihop
同上要想在环回接口地址之间建立EBGP 邻居关系,还需要使用多跳命令,因为EBGP 包的TTL 值默认为1,所以默认情况下EBGP 邻居必须是直连的,而从环回接口到链接对端的串行接口为2 跳,因而默认情况下不能在环回接口之间建立EBGP 邻居。ebgp-multihop 命令是改变EBGP 包TTL 值的,可以克服EBGP 的一跳限制。注意IBGP 没有此限制,所以IBGP 在默认情况下可以非直连创建邻居。
(config-router)#neighbor 对端IP ebgp-multihop 2
Next-hop-self
IBGP 配置命令。从EBGP 邻居传入的路由,在通告给IBGP 邻居时,其下一跳即EBGP 邻居地址默认会不变的在IBGP 中传递,而IBGP 邻居会不可达此下一跳,该配置使得路由器通告自己就是发送BGP路由的下一跳而不再是EBGP 邻居,从而解决了可达性问题。只有有EBGP 邻居的路由器才需要此配置。
(config-router)#neighbor 对端IP next-hop-self
地址聚合
(config-router)aggregate-address xxxx xxxx [as-set][summary-only][suppress-map]
1) 执行聚合的路由器成为新聚合路由的创造者,原来的as_path 属性丢失。As_set 参数可以使聚合路由不丢失原来的as_path 属性,有利于避免路由环路。
2) Summary-only 参数将被聚合的明细路由全部抑制,不发送到对等体,只有聚合地址发送出去。
3) Suppress-map 参数将被聚合的明细路由部分抑制,只有未抑制和聚合地址发送出去。(借助ip prefix-list, route-map)
路由反射器(RR)
IBGP 路由器只需要与RR 建立IBGP 邻居关系即可,不用结成Full-mesh,从而降低了IBGP 连接数量。RR 和他的客户端(client)合称一个簇即Cluster,簇通过ClusterID 进行标示,一个簇中可以存在多于一个的RR。ClusterID 可以用来防止簇间的环路。反射器存在的原因是IBGP 必须全互联,RR 为了减少其连接数量,打破了IBGP 水平分割规则。
通常属于某个簇的客户端只与RR 建立IBGP 连接,客户端之间可以没有IBGP 连接,但是客户端仍然可以有其他EBGP 连接。一个AS 可以被划分成多个簇,AS 内的全体RR 之间必须建立IBGP 的全连接,遵循IBGP 规则,RR 之间互相传递ClusterID 属性以防环。另外,RR 还要与簇外的路由器建立全连接关系,否则这些路由器会被丢掉。
RR 和簇的选择及其客户端的组成是受网络拓扑所限制的,通常根据拓扑结构进行合理设计和划分,比如簇位于一个紧密的拓扑范围之内,其中易与各个路由器形成IBGP 连接的路由器可以成为RR。
1) 如果路由是从非客户端IBGP 邻居学来的,则RR 只将其反射给客户端路由器。
2) 如果路由是从客户端IBGP 邻居学来的,则RR 将其反射给所有客户端和非客户端路由器(nonclient),除了发起端外。
3) 如果路由是从EBGP 邻居学来的,则RR 将其反射所有客户端和非客户端路由器。
4) 在簇中配置一个RR:
(config)router bgp AS-NUM
neighbor 客户端IP route-reflector-client (将某个IBGP 邻居指定为RR 客户端,则自己成为RR)
5) 在簇中配置多台RR,以增强冗余能力
(config)router bgp AS-NUM
bgp cluster-id NUM (设置簇ID,为每个同簇的RR 配置相同的簇ID。RR 之间必须要全连接,通过传递ClusterID 属性防环)
neighbor 客户端IP route-reflector-client (将某个IBGP 邻居指定为RR 客户端,则自己成为RR)
联邦(confederation)
一个联邦内部可以分割成多个子AS,子AS 之间采用EBGP 特性。每个子AS 各有其AS 号,大联邦有联邦号。从联邦外部看不到内部子AS,只作为普通AS 看待。在联邦内部发布路由时各子AS 号加入到as_path 属性中(带括号),以避免环路。此带括号的子AS 号不会随路由发布到联邦外部。联邦也是出于缓解IBGP 全互联的连接数多的问题,他是把全互联的规模缩小了。子AS 内部全互联,子AS之间就可以不全互联了。
建立邻居关系时:
1) 联邦内部对端之间使用各自子AS 号;
2) 联邦外部对端之间使用联邦号;
3) 子AS 中的路由器要指明自己的联邦号(bgp confederation identifier xxx);
4) 子AS 中的路由器要指明相同联邦中的其他对等的子AS 号(bgp confederation peer xx xx);
例)R1 在子AS1,R2 在子AS2,R3 在子AS3。R1 和R2 形成一个联邦12。
R1#router bgp 1
bgp confederation identifier 12
bgp confederation peers 2
neighbor 12.12.12.2 remote-as 2
R2#router bgp 2
bgp confederation identifier 12
bgp confederation peers 1
neighbor 12.12.12.1 remote-as 1
neighbor 23.23.23.3 remote-as 3
R3#router bgp 3
neighbor 23.23.23.2 remote-as 12
团体(community)
团体是一种可选可传递的属性,路由器利用路由的团体属性将其路由分成不同的组,以便对不同的组实施不同的路由策略。
团体是影响对端AS 的,需要发送给对端AS。
路由的团体属性的格式为AS 号:团体值(团体值0-65535,4294901760-4294967295,除此之外还定义了周知团体值)
配置团体属性步骤:使用路由映射,标识要设置团体属性的路由(prefix-list,access-list,route-map match),设置团体属性(route-map set community ),指定属性所要发送的邻居(neighbor xxxx send-community,neighbor xxxx route-map xxx out)
1) 周知值:no-export(使得路由只能在本AS 内传递,存在联邦时可以扩大到在联邦内传递)
2) 周知值:no-advertise(使得路由不传递给任何IBGP 和EBGP 对等体)
3) 周知值:local-as(使得路由只能在本AS 内传递,存在联邦时也不能扩大到在联邦内传递)
4) 自定义值(根据自定义值分组,然后对不同路由组实施不同策略)
5) 团体值的格式RFC1997 为AA:NN,Cisco 为NN:AA。AA 是AS 号,NN 是指定值。使用命令ip bgp-community new-format 将Cisco 格式转为RFC 标准格式。
6) 例) router bgp 2000 (限制AS1000 不把AS2000 中传递过去的子网宣告到AS1000 之外)
network 10.2.2.0 mask 255.255.255.0
neighbor 10.1.1.1 remote-as 1000
neighbor 10.1.1.1 send-community
neighbor 10.1.1.1 route-map PEER out
access-list 1 permit 10.2.2.0
route-map PEER permit 10
match ip address 1
set community no-export
route-map PEER permit 20
团体列表(community-list)
用于标识路由的团体值,可以是周知值,也可以是自定义值,和用正则表达式标识团体值。然后对标识出来的路由实施策略。(标识:ip community-list xxx permit 团体值或正则表达式,策略实施:route-map match community,set)
标准团体列表(列表号1-99),扩展团体列表(100-199)。只有扩展列表才能用正则表达式标识团体值。
例1) router bgp 100
neighbor 10.1.1.1 send-community (指定收发团体属性的邻居)
neighbor 10.1.1.1 route-map COMM-PREF in (指定对来自10..1.1.1 的入栈路由进行操作)
ip community-list 1 permit 5 (指定团体值=5 的路由)
route-map COMM-PREF permit 10
match community 1
set local-preference 200 (对团体值=5 的路由设置本地优先级为200)
例2) router bgp 100
neighbor 10.1.1.1 send-community (指定收发团体属性的邻居)
neighbor 10.1.1.1 route-map COMM-PREF in (指定对来自10..1.1.1 的入栈路由进行操作)
ip community-list 101 permit .*:5 (使用扩展团体列表,指定团体值格式为任意AS 号:5 的路由)
route-map COMM-PREF permit 10
match community 101
set local-preference 200 (对团体值为任意AS 号:5 的路由设置本地优先级为200)
对等体组
团体是对一组特定路由实施共同策略的机制,对等体组是对一组特定路由器实施共同策略。当需要对多个EBGP 对等体或IBGP 对等体实施相同的策略时,通过将这些对等体指定为某对等体组的成员,可以极大简化配置工作量,此时路由策略无需为每个邻居单独配置,而只需为对等体组配置一次即可。然后再将各个邻居指定到对等体组中。当某个邻居的策略不同于整个对等体组时,可以单独配置该邻居,因为对单个成员定义的路由策略优先于对整个对等体组配置的路由策略。
(创建组:neighbor 对等体组名 peer-group, 定义组策略:neighbor 对等体组名 组策略, 加入组:neighbor xxxx peer-group 对等体组名)
例)router bgp 100
neighbor CLIENTS peer-group (定义对等体组名)
neighbor CLIENTS ebgp-multihop 2 (定义组策略1)
neighbor CLIENTS update-source lo0 (定义组策略2)
neighbor 10.1.1.1 remote-as 200
neighbor 10.1.1.1 peer-group CLIENTS (加入组)
neighbor 10.1.1.1 remote-as 200
neighbor 10.1.1.1 peer-group CLIENTS (加入组)
路由阻尼
为了减少路由翻动(即某些路由在路由表中频繁重复出现并消失,再出现再消失)的影响,当某条路由每发生一次翻动时,就要被分配惩罚值1000(默认值),当惩罚值超过2000(suppress limit)后,该路由将被抑制,不能再被宣告,直至惩罚值自动衰变,恢复到750(reuse limit)以下后又可以重新被宣告。路由在经过一个maximum suppress limit 的时间后也能被抑制。惩罚值的自动恢复过程是每5s 减少一次,并指数递减,15 分钟(默认值)后递减到原来的一半。
启动路由阻尼:router bgp xxx, bgp dampening
参数修改:bgp dampening halftime reuse suppress max-suppress (halftime:分钟,max-suppress:分钟)
显示翻动次数:show ip bgp flap-statics, 显示被阻尼路由:show ip bgp dampened-paths
例)通过路由阻尼抑制路由抖动的例子
(config)router bgp 100
neighbor 192.208.10.5 remote-as 300
bgp dampening route-map strict-and-tolerant
(config)route-map strict-and-tolerant permit 10
match ip address prefix-list slash24andlonger (通常前缀较长的路由是更具体的路由,其翻动也较多)
set dampening 15 750 2000 60 (定义的衰减时间越长,门限值越宽,阻尼效果越重)
(config)route-map strict-and-tolerant permit 20
match ip address prefix-list slash212223
set dampening 15 750 2000 30
(config)route-map strict-and-tolerant permit 30
match ip address prefix-list slash20andbetter (较短前缀的路由通常也更稳定)
set dampening 5 1500 2000 15 (加了一个较轻的阻尼)
(config)ip prefix-list slash24andlonger seq 5 permit 0.0.0.0/0 ge 24
(config)ip prefix-list slash212223 seq 5 permit 0.0.0.0/0 ge 21 le 23
(config)ip prefix-list slash20andbetter seq 5 permit 0.0.0.0/0 le 20
路由过滤
1) 通过distribute-list 过滤路由
例)router bgp 100
neighbor 10.50.250.1 remote-as 50
neighbor 10.50.250.1 distribute-list 1 in (过滤入站路由)
neighbor 10.50.250.1 distribute-list 2 out (过滤出站路由)
access-list 1 permit 10.20.0.0
access-list 2 deny 192.169.50.0
access-list 2 permit any
2) 通过prefix-list 过滤路由
例) router bgp 64512
neighbor 10.50.250.1 remote-as 50
neighbor 10.50.250.1 prefix-list set_filter out (在出口方向对对端应用前缀列表)
ip prefix-list set_filter seq 5 permit 172.16.0.0/22 ge 25 le 26
(和ACL 一样,默认会有一条拒绝所有)
3) 通过as_path list 过滤路由:ip as-path access-list xx permit/deny 正则表达式,neighbor xxxx filter-list xx in/out
与使用访问控制列表穷举每个网络地址相比,按照AS_PATH 属性里的AS 号进行路由过滤更加简单。正则表达式用于精确匹配AS 号。
例) router bgp 100
neighbor 10.50.250.1 remote-as 50
neighbor 10.50.250.1 ebgp-multihop 2
neighbor 10.50.250.1 update-source lo0
neighbor 10.50.250.1 filter-list 1 out
neighbor 10.200.60.1 remote-as 200
neighbor 10.200.60.1 ebgp-multihop 2
neighbor 10.200.60.1 update-source lo0
neighbor 10.200.60.1 filter-list 2 in
ip as-path access-list 1 deny _50_ (拒绝AS_PATH 中带有50 的所有路由信息,_50_确保匹配50,前后不会有别的字符,不会是500,350 等)
ip as-path access-list 1 permit .* (匹配所有字符,包括0 或多个字符)
ip as-path access-list 2 permit ^50$ (匹配行起始,50,然后是行结束,即匹配AS_PATH 只有50 的路由)
4) 通过route-map 过滤路由,ip as-path access-list or access-list xx permit/deny,route-map xxx permit xx,neighbor xxxx route-map xx in/out
见路由映射route-map 小节
后门路由:在两个指定的EBGP 对等体之间,在既存的EBGP 链路之外,又存在一个专用链路,在该链路上可能运行其他路由协议(例如RIP 等)。该链路可以称为后门,希望某些流量可以通过该专用链路进行AS 间的传递。当然其余大部分流量仍然通过既存的EBGP 链路传送。但是,由于EBGP 的管理距离是20,其他IGP 协议如RIP 是120,都大于此值,因此这条配置了其他IGP 路由协议的后门链路的路由就不能出现在路由表里,也就无法传送数据了。对此,在EBGP 配置中,使用network 命令将本来会通过EBGP 发布过来的指定路由硬性的发布出来,使其属性由本来的EBGP 变为IBGP 路由,实质是改变了指定路由的管理距离,由20 变为200。这样指定路由的管理距离就会大于后门链路的IGP 路由了,因此后门链路路由可以进入路由表。
但是这带来另一个隐患,network 宣告出来的路由,也同时会被这两个EBGP 对等体宣告给它们以外的其他存在的EBGP 邻居,这是情况普遍存在。而其他邻居接收到的该EBGP 路由的origin 属性会是IGP(i),,
因此会被优选。因此导致其他EBGP 邻居也通过后门链路来转发流量。然而,后门链路原本只希望用于传输指定的EBGP 对等体之间的流量,不希望其他邻居的流量通过。
对此,在宣告后门链路的network 命令中增加参数backdoor,就可以了。因为这个参数可以限制后门路由不宣告给其他EBGP 邻居。
router bgp 75
network 172.17.0.0 backdoor (通过宣告后门路由改变其管理距离,同时backdoor 参数限制其发布到其他EBGP 邻居,使得路由只在指定EBGP 对等体之间使用)
限制从邻居接收的路由前缀数量
预防有攻击者通过对等体向本地路由表中注入大量路由,而导致负载过大。当定义的前缀数量超过门限值后,路由器关闭与对端的BGP 连接,直到使用clear ip bgp xxx 硬重置为止。
例)router bgp 100
neighbor 192.168.1.253 maximum-prefix 300 (默认时为超限断开)
neighbor 192.168.1.253 maximum-prefix 300 warning-only (超限不断开,而是设为生成日志)
neighbor 192.168.1.253 maximum-prefix 300 90 warning-only (超限不断开,并且在超限90%时就生成日志,默认值75%)
对等体认证:只有MD5
router bgp AS 号
neighbor REMOTE-AS-IP remote-as AS-NUM
neighbor REMOTE-AS-IP password PASSWORD
以上是关于网络-路由交换-IPv4-Cisco-BGP的主要内容,如果未能解决你的问题,请参考以下文章