BGP的邻居建立有两个情况,一种是两个AS之间的EBGP建邻,还有一种是IBGP之间的邻居建邻
1.EBGP对等体直连建邻
①启动BGP进程
②配置RID
③手工建邻(指定邻居和邻居所在AS的编号)
//EBGP建立邻居关系
[ebgp 1]bgp 1
[ebgp 1-bgp]router-id 1.1.1.1
[ebgp 1-bgp]peer 12.0.0.2 as-number 2
//EBGP邻居的配置
[ebgp 2]bgp 2
[ebgp 2-bgp]router-id 2.2.2.2
[ebgp 2-bgp]peer 12.0.0.1 as-number 1
2.EBGP对等体非直连建邻
因为EBGP对等体之间一般采用直连建邻的方法。所以EBGP对等体之间的数据包中的TTL值默认值数为1,同时加入了直连检测(检测源目IP是否在同一个网段)。
因为华为设备并没有直接关闭直连检测的方法,但是可以通过修改TTL值来让EBGP邻居间可以正常非直连建邻,直连检测将会自动失效。
[IBGP2]bgp 4
[IBGP2]router-id 4.4.4.4
[IBGP2-bgp]peer 5.5.5.5 connect-interface LoopBack 0
[IBGP2-bgp]peer 5.5.5.5 ebgp-max-hop 2
[EBGP2]bgp 5
[EBGP2-bgp]router-id 5.5.5.5
[EBGP2-bgp]peer 4.4.4.4 connect-interface LoopBack 0
[EBGP2-bgp]peer 4.4.4.4 ebgp-max-hop
#后面不加数字,相当于将TTL值改为最大值255
由于IBGP的邻居处于同一个AS域中,正常一个AS中存在大量的备份路径,若使用物理接口建立邻居关系,将浪费这些备份的流量
①启动BGP进程
②配置RID
③手工建邻(指定邻居的环回接口和邻居所在AS的编号)
[IBGP-bgp]peer X.X.X.X as-number 3
#指定邻居的RID和区域
[IBGP-bgp]peer X.X.X.X connect-interface LoopBack 0
#指定给邻居发送数据包的连接接口是环回接口
// X.X.X.X是建立的对端的loopback
BGP可以将所有路由表中存在的路由条目通过network命令进行发布(发布的路由信息必须是路由表中有的,不然无法发布)
而当对等体收到来自EBGP另一端对等体发送的路由信息,并正常加表后该路由的协议类型为EBGP,优先级为255
[r1-bgp]]network 192.168.1.0 24
display bgp routing-table
BGP Local router ID is 2.2.2.2
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Total Number of Routes: 4
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 192.168.1.0 12.0.0.1 0 0 1i
因为BGP存在AS-BY-AS的特性,所以IBGP邻居之间传递路由时,默认不会修改下一跳(此时,边界IBGP的下一跳为EBGP的直连地址,但是这个IBGP的对等体没有到达EBGP的直连地址),导致EBGP传递的路由信息在IBGP邻居处不可达。此时需要在IBGP设置下一跳RID(EBGP对等体由于存在下一跳机制,所以需要在和EBGP直连的IBGP上设置IBGP对等体的下一跳RID)
[r2-bgp]peer 3.3.3.3 next-hop-local
//此时R3可以刷出BGP表
display bgp routing-table
BGP Local router ID is 3.3.3.3
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Total Number of Routes: 4
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 192.168.1.0 2.2.2.2 0 100 0 1i
手工宣告这里存在一个悖论:当使用环回/直连网段建邻,并且宣告这个BGP的网段的信息时,这个BGP网段将无法刷新到EBGP表上(但是如果宣告的BGP网段地址的子网掩码大于使用来建邻的子网掩码时,将不会出现这个情况),意思就是建邻时使用的网段地址,不要用来宣告,不然可能会存在悖论。
[r4-bgp]display bgp routing-table
BGP Local router ID is 4.4.4.4
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Total Number of Routes: 5
Network NextHop MED LocPrf PrefVal Path/Ogn
45.0.0.0/30 45.0.0.2 0 0 3?
//此时R4和R5之间的直连网段为45.0.0.0/30,此时宣告了这个网段,发现没有状态码
//这个就是
当通告的路由数量较大的时候,可以使用重发布来进行批量的宣告
[r5-bgp]import-route direct
#重发布R5的直连路由信息(直连包括环回)
display bgp routing-table
BGP Local router ID is 5.5.5.5
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Total Number of Routes: 11
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 45.0.0.0/24 0.0.0.0 0 0 i
* 0.0.0.0 0 0 ?
*> 45.0.0.2/32 0.0.0.0 0 0 ?
*> 127.0.0.0 0.0.0.0 0 0 ?
*> 127.0.0.1/32 0.0.0.0 0 0 ?
*> 192.168.1.0 45.0.0.1 0 2 1i
*> 192.168.2.0 45.0.0.1 0 2 1i
*> 192.169.1.0 0.0.0.0 0 0 ?
*> 192.169.1.1/32 0.0.0.0 0 0 ?
*> 192.169.2.0 0.0.0.0 0 0 ?
*> 192.169.2.1/32 0.0.0.0 0 0 ?
NextHop(下一跳):属于BGP的路由属性。谁通告谁就是下一跳;如果是自己发布,则下一跳属性为0.0.0.0
在Network前面出现的符号称为这条路由的状态码:
①*代表可用:BGP设备每收到一条路由信息,都会检查其下一跳属性的可达性(通过路由查询)。如果下一跳的地址是可达的,则代表该路由可用;不可达则不可用,不可用则该路由信息将不被接纳不参与选择
②>代表优选:当收到多条到达相同网段的路由信息时,BGP会根据路由属性选择最好的最优的加到路由表中,并且传递给其他的BGP对等体。(不优选的则不传递,不加表)
③s代表抑制:一旦路由前面的状态码中添加s标记,则代表该路由不再传递,不再加表
④i代表不可达:该信息是从IBGP对等体学习来的路由
在BGP表最后出现的符号Ogn称为这条路由的起源码(起源码主要有3种):
①network发布的路由 i(i代表路由起源于IGP协议,包括静态和直连路由)
②EGP协议发布的路由 e (指的是BGP协议之前的外部网关协议,EGP协议目前已经不使用了,所以e标签很少见)
③除了以上两种方式发布的路由 ? (重发布路由的起源码标记就是?)
BGP的路由聚合方式:自动聚合和手工聚合(自动聚合仅针对重发布)
自动聚合就是在重发布过程中使用路由策略,对要聚合的流量进行抓取操作,再导入到bgp进程中
过程:
①路由抓取,抓取要汇总的路由段
②路由策略匹配(if-match)
③在重发布过程中导入实施路由策略
自动聚合存在的问题:
①只能聚合到主类,导致产生巨大的路由黑洞
②只能对重发布的路由生效
自动聚合完成后会自动在本地路由表上生成一个空接口路由
//在R5上汇总172.16.0.0信息
display ip interface brief
*down: administratively down
^down: standby
(l): loopback
(s): spoofing
The number of interface that is UP in Physical is 4
The number of interface that is DOWN in Physical is 2
The number of interface that is UP in Protocol is 4
The number of interface that is DOWN in Protocol is 2
Interface IP Address/Mask Physical Protocol
GigabitEthernet0/0/0 45.0.0.2/24 up up
GigabitEthernet0/0/1 unassigned down down
GigabitEthernet0/0/2 unassigned down down
LoopBack0 172.16.1.1/24 up up(s)
LoopBack1 172.16.2.1/24 up up(s)
NULL0 unassigned up up(s)
//首先流量抓住
[r5]ip ip-prefix lxb permit 172.16.0.0 16 greater-equal 24 less-equal 24
//设置路由策略
[r5]route-policy lxb permit node 10
Info: You are overwriting this sequence.
[r5-route-policy]if-match ip-prefix lxb
[r5-route-policy]q
//在重发布中导入策略
[r5]bgp 3
[r5-bgp]import-route direct route-policy lxb
//此时在R4上查看bgp路由表,此时已经重发布了两个环回信息
display bgp routing-table
BGP Local router ID is 4.4.4.4
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Total Number of Routes: 5
Network NextHop MED LocPrf PrefVal Path/Ogn
45.0.0.0/24 45.0.0.2 0 0 3i
*> 172.16.1.0/24 45.0.0.2 0 0 3?
*> 172.16.2.0/24 45.0.0.2 0 0 3?
//此时再在R5的bgp上进行自动汇总操作
[r5-bgp]summary automatic
Info: Automatic summarization is valid only for the routes imported through the
import-route command.
//再去R4的bgp表上查看信息,此时已经汇总完成
display bgp routing-table
BGP Local router ID is 4.4.4.4
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Total Number of Routes: 4
Network NextHop MED LocPrf PrefVal Path/Ogn
45.0.0.0/24 45.0.0.2 0 0 3i
*> 172.16.0.0 45.0.0.2 0 3?
//此时R5的路由表上已经自动生成一个空接口用来防环
[r5]display ip routing-table protocol bgp
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Public routing table : BGP
Destinations : 3 Routes : 3
BGP routing table status :
Destinations : 3 Routes : 3
Destination/Mask Proto Pre Cost Flags NextHop Interface
172.16.0.0/16 IBGP 255 0 D 127.0.0.1 NULL0
192.168.1.0/24 EBGP 255 0 D 45.0.0.1 GigabitEthernet
0/0/0
192.168.2.0/24 EBGP 255 0 D 45.0.0.1 GigabitEthernet
0/0/0
BGP routing table status :
Destinations : 0 Routes : 0
因为自动汇总的问题,所以需要对路由汇总进行精准把握时,手工聚合将是更理想的方案
手工汇总的问题:
①手工聚合没有抑制明细路由,导致路由条目没有减少,反而增加
②手工汇总的路由条目存在路由属性缺失的问题,尤其是AS_PATH属性的缺失(AS_PATH是用来区域防环的,如果传递路由信息时不携带会产生环路)
//此时汇总的是192.168.1.0和192.168.2.0
[r1]display ip interface brief
*down: administratively down
^down: standby
(l): loopback
(s): spoofing
The number of interface that is UP in Physical is 4
The number of interface that is DOWN in Physical is 2
The number of interface that is UP in Protocol is 4
The number of interface that is DOWN in Protocol is 2
Interface IP Address/Mask Physical Protocol
GigabitEthernet0/0/0 12.0.0.1/30 up up
GigabitEthernet0/0/1 unassigned down down
GigabitEthernet0/0/2 unassigned down down
LoopBack0 192.168.1.1/24 up up(s)
LoopBack1 192.168.2.1/24 up up(s)
NULL0 unassigned up up(s)
//首先宣告要汇总的网段
[r1-bgp]network 192.168.1.0
[r1-bgp]network 192.168.2.0
//手工汇总需要敲aggregate这个指令
[r1-bgp]aggregate 192.168.0.0 22
//此时去R2上查看BGP路由信息 此时已经生成了一个汇总网段
display bgp routing-table
BGP Local router ID is 2.2.2.2
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Total Number of Routes: 4
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 192.168.0.0/22 12.0.0.1 0 1i
*> 192.168.1.0 12.0.0.1 0 0 1i
*> 192.168.2.0 12.0.0.1 0 0 1i
//在手工汇总后加入抑制明细路由的要求
[r1-bgp]aggregate 192.168.0.0 22 detail-suppressed
//此时再去R2上查看BGP路由表 已经抑制了明细路由
display bgp routing-table
BGP Local router ID is 2.2.2.2
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Total Number of Routes: 2
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 192.168.0.0/22 12.0.0.1 0 1i
因为BGP协议的特殊性,导致在一些环境下,往往不能将所有明细路由全部抑制。所以在做BGP的聚合时,往往仅抑制一部分路由信息,需要用到抑制策略(suppress Policy),来实现这个效果(抑制列表是抑制某些流量的进入)
//抑制列表需要使用路由策略进行流量抓取
[r1]ip ip-prefix lsp permit 192.168.1.0 24
//此时抓取的是192.168.1.0/24的流量信息
[r1]route-policy lsp permit node 10
Info: New Sequence of this List.
[r1-route-policy]if-match ip-prefix lsp
[r1-route-policy]q
//在BGP中使用抑制列表lsp(注意此时是抑制列表,代表不显示什么路由信息)
[r1]bgp 1
[r1-bgp]aggregate 192.168.0.0 22 suppress-policy lsp
//此时查看R2的BGP表
display bgp routing-table
BGP Local router ID is 2.2.2.2
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Total Number of Routes: 3
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 192.168.0.0/22 12.0.0.1 0 1i
*> 192.168.2.0 12.0.0.1 0 0 1i
因为我之前是在R1上就继续汇总的这个时候看不到问题,这个时候我在R2上做路由汇总,此时在R4上会发现失去了AS_PATH的属性。
因为聚合后路由存在属性丢失的情况,所以在汇总路由后需要格外关注。为此,BGP专门设计了两个聚合相关的属性(ATOMIC_AGGREGATTE,AGGRGATOR)
ATOMIC_AGGREGATTE是预警属性,聚合路由将会携带(只有将所有明细路由都全部被抑制的汇总路由才会携带),目的是提醒该路由为聚合路由,可能存在属性丢失问题
AGGRGATOR将会记录执行汇总路由器所在的AS号及RID
//首先在R6上宣告192.168.3.0/24这个网段的信息
[R6]bgp 4
[R6-bgp]network 192.168.3.0 24
//再在R2上汇总R1和R6的信息为192.168.0.0/22
[r2-bgp]aggregate 192.168.0.0 22 detail-suppressed
//此时在R4上查看汇总网段信息
display bgp routing-table
BGP Local router ID is 4.4.4.4
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Total Number of Routes: 3
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 192.168.0.0/22 2.2.2.2 100 0 i
//此时已经失去了192.168.0.0/22这个网段的AS_PATH信息
明细路由来自不同AS时的解决方案,在进行防环时,大括号中的AS号都需要考虑,但在进行选路时,大括号将被看作是一个整体,当作一个AS号(主要是用来区域防环的)
//在r2汇总时加入as_set
[r2-bgp]aggregate 192.168.0.0 22 detail-suppressed as-set
//此时去R4上查看BGP表格(会发现携带AS信息)
display bgp routing-table
BGP Local router ID is 4.4.4.4
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Total Number of Routes: 3
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 192.168.0.0/22 2.2.2.2 100 0 {1 4}i
//此时打开192.168.0.0信息查看具体的信息
display bgp routing-table 192.168.0.0
BGP local router ID : 4.4.4.4
Local AS number : 2
Paths: 1 available, 1 best, 1 select
BGP routing table entry information of 192.168.0.0/22:
From: 2.2.2.2 (2.2.2.2)
Route Duration: 00h02m47s
Relay IP Nexthop: 34.0.0.1
Relay IP Out-Interface: GigabitEthernet0/0/0
Original nexthop: 2.2.2.2
Qos information : 0x0
AS-path {1 4}, origin igp, localpref 100, pref-val 0, valid, internal, best, se
lect, active, pre 255, IGP cost 2
Aggregator: AS 2, Aggregator ID 2.2.2.2, Atomic-aggregate #查看聚合的信息提示
Advertised to such 1 peers:
45.0.0.2
由于BGP协议可以允许非直连建邻(AS区域内的IBGP),可能会出现在AS区域内部建立了BGP协议的两个路由器(IBGP)进行数据交互时会跨越未运行BGP协议的路由器。
导致BGP协议建立后,在控制层面上可达;但是在数据层面时,流量经过未运行BGP协议的路由器时无法传输转发通过,从而形成路由黑洞。
①让AS内所有的设备都运行BGP协议(对设备要求高,相当于区域内路由两两建立IBGP关系,会占用大量的链路资源)
②在AS内部运行BGP的设备像AS内部使用的IGP协议中进行重发布(对设备要求高)
③使用MPLS技术(多协议标签交换技术)解决路由黑洞问题(MPLS是目前工程中主要使用的解决BGP路由黑洞的方案)
而BGP为了防止BGP路由黑洞的产生,提出了BGP同步机制(当一台路由器从自己的IBGP对等体中学习到一条BGP路由时,他不能将这条路由通告给自己的EBGP对等体,除非他又从IGP协议中(包括静态路由)学习到这条路由。也要求IBGP路由和IGP路由同步)
华为设备默认关闭BGP的同步机制
BGP防环机制使用的是水平分割机制,而在BGP中的水平分割分为两种:
①EGBP水平分割,专门解决EBGP对等体之间可能出现的环路问题
②IBGP水平分割,专门解决IBGP对等体之间可能出现的环路问题
BGP协议在路由条目中记录所经过的AS编号:AS_PATH
AS_PATH数据的传输过程:BGP在传输本地数据时会携带上本地AS X 的AS_PATH信息属性(AS_PATH X)。
在传递到下一个AS Y 时会AS_PATH 会显示AS_PATH X信息。
当这个信息传输到下一个AS Z 区域时,则又叠加上AS Y 的属性到AS_PATH信息中,发送给下一个AS区域。
而在AS Z 中AS_PATH的属性为为AS_PATH Y X 。
防环:如果一个AS区域接受到的BGP信息中携带的AS_PATH信息包含有本地的AS_PATH的AS号,则将拒绝接受,避免环路产生
此时AS1的两个环回192.168.1.0/24从AS1传递到AS3 (则R5的PA_PATH为 2 1)
因为BGP协议的AS-BY-AS的特性,导致AS内部为一个整体,默认情况下,路由属性是不会发生变化的。所以无法通过查看修改属性来进行AS内部的BGP的防环操作。
IBGP的水平分割做法:当一个路由器从一个IBGP对等体学习到某一条BGP路由时,它将不再把这条路由信息通告给在这个区域内的其他IBGP对等体。
IGBP水平分割可以有效的解决IBGP对等体之间的路由回传造成的环路问题,但是也会引发路由信息传递障碍问题(比如一个区域内的多个对等体无法进行信息交互)。
而想要避免IBGP水平分割带来的问题,则可以让所有AS内部所有运行BGP协议的路由器均互相建立IBGP对等体关系(这种AS区域内建立全连的IBGP对等体方案也存在问题,并不是最佳解决方案。当一个AS内运行BGP协议的路由器数量较多时,建立全连的邻居关系将造成大量的资源浪费,降低网络的可扩展性)。BGP协议是使用TCP进行数据传输的,而TCP协议的建立占用链路资源大。