一、BGP协议基础
1、路由的分类
1)直连路由
2)非直连路由(间接路由)
&:静态路由
&:动态路由
@:IGP: 内网网关路由协议(在企业内部或数据中心内部使用)
DV:距离矢量路由协议
-RIP(v1/v2)
-IGRP—网络直径:100—255(思科的私有协议)
-EIGRP—思科的私有
LS: 链路状态路由协议
-ISIS- 中间系统到中间系统
-OSPF —开放式最短路径优先
@: EGP : 外部网关路由协议:在不同公司之间使用,在不同的城市之间
BGP:边界网关协议 (路径矢量路由协议)
2、为什么要使用BGP协议
我们要在不同AS之间实现网络通信,需要使用EGP-BGP协议,当然我们还看重BGP的一些优势
1)非常稳定
2)可以传输大量的路由,支持大规模网络
3)具有非常丰富的路由控制策略,可以实现灵活的选路
3、BGP概述
-BGP:边界网关协议
-BGP是公有协议,任何厂商的设备都支持BGP
-BGP位于OSI的第7层 (应用层)
备注:
OSPF基于IP协议,为了可靠性,数据库同步:协商主从关系,序列号、有确认机制
4、AS号
-AS号(Autonomous System Number):自治系统:
-是互联网中的一种标识符,用于标识一个自治系统(AS)的唯一数字。自治系统是指由一组网络和路由器组成的网络。
-AS号可以帮助互联网中的路由器找到要到达目的地的IP地址的最短路径。
-AS号由互联网分配机构IANA(互联网分配号码管理局)分配。
-AS号的范围被划分为两类:公共AS号和私有AS号。
-公共AS号是指由IANA分配的AS号,可用于在全球范围内标识自治系统。
-私有AS号是指由互联网注册机构(IR)分配的AS号,用于在私有互联网中标识自治系统。
-AS通常使用“数字”来表示,称为AS号
-AS号的范围是从0到65535,其中0被保留不使用
-AS编号取值范围
&:之前—2字节表示,取值范围:1-65535
#私有AS号:64512-65534,可以用于在私有互联网中标识自治系统,但不会在公共互联网中出现。这些私有AS号通常用于连接组织的内部网络。
&:目前是4个字节:1-4294967295
4字节AS号的范围是从0到4294967295,其中0号AS被保留不使用
私有AS号范围是4200000000至4294967294
4字节AS号由IANA管理,并由全球RIR(区域互联网注册局)负责分配
在国内,中国的运营商通常将AS号按照不同的地理区域划分。
例如,中国电信在各省市设立了不同的自治系统,每个自治系统都有自己独立的AS号。而中国联通则将其网络划分为北方、南方、西南、东北、华东、华中六个区域,每个区域都分配了不同的AS号
AS号的划分方式取决于运营商的具体管理需求和网络架构,可以按照城市、区域、网络、子网等不同的维度进行划分。
截止2021年9月,中国共分配了超过37,000个AS号。要查询中国已分配的AS号,可以使用以下方法:
访问CNNIC官网:CNNIC是中国国家互联网信息中心
二、BGP协议概述
1、场景
场景一:遍布全国大型政企单位之间, 或大型数据中心
场景二:运营商骨干网
2、作用
在AS之间动态的交互路由信息,实现公司与公司之间的互访
3、优势
1)稳定,基于TCP协议建立的,使用端口号TCP179,所以非常稳定
2)传递大量路由,可以跨多跳建立邻居关系
3)路由控制策略丰富
4、BGP邻居类型
EBGP: 运行于不同的AS
IBGP: 运行于同一AS内部
5、BGP特征
•BGP使用传输层协议为TCP,TCP端口号179。路由器之间的BGP会话基于TCP连接而建立。
•运行BGP的路由器被称为BGP发言者(BGP Speaker),或BGP路由器。
•两个建立BGP会话的路由器互为对等体(Peer),说人话,就是BGP邻居
•BGP对等体之间交换BGP路由信息 , 说人话,BGP在邻居之间传递路由
•BGP路由器只发送增量的BGP路由更新,或进行触发式更新(不会周期性更新)。
•BGP能够传递大批量的路由,可在大规模网络中应用。
6、BGP报文类型
-open : 用于建立邻居关系 (类似于hello报文)
-keep alive : 用于维护邻居关系,周期性发送,保持BGP连接 (类似于hello)
-update : 用于传递路由和撤销路由 (类似于LSU报文)
-notification : 通知报文,用于通知BGP邻居之间的报错信息,用于断开BGP连接
-router-refresh : 重传报文,请求邻居重新发送路由信息
报文名称 | 作用 | 发送时刻 |
Open | 协商BGP对等体参数,建立对等体关系 | BGP TCP连接建立成功之后 |
Update | 发送BGP路由更新 | BGP邻居关系建立之后有路由需要发送或路由变化时向邻居发送Update报文 |
Notification | 报告错误信息,中止邻居关系 | 当BGP在运行中发现错误时,发送Notification报文将错误通告给BGP邻居 |
Keepalive | 标志邻居建立,维持BGP邻居关系 | BGP路由器收到对端发送的Keepalive报文,将邻居状态置为已建立,同时后续定期发送keepalive报文用于保持连接 |
Route-refresh | 用于在改变路由策略后请求对等体重新发送路由信息。只有支持路由刷新能力的BGP设备会发送和响应此报文 | 当路由策略发生变化时,触发请求对等体重新通告路由 |
7、BGP工作过程
8、BGP状态
1)idle :初始化状态
-tcp未连接状态,邻居的状态为idle , 当bgp设备和邻居进行tcp 连接时,会从当前的状态转为connect 状态
2)connect 状态: tcp 连接状态
-如果tcp 建立连接成功,bgp 设备会向邻居发送open报文,状态也会转为opensent 状态
-如果tcp 建立连接失败,bgp设备的状态会转为active 状态
3)active 状态:活跃状态
- 在当前状态下,bgp 设备依然没有放弃希望,依然试图继续建立tcp 连接,如果成功,状态依然可以转为opensent 状态
-如果依然失败,bgp会停留在active 状态
备注:如果重传计时器超时,依然没有收到邻居回应,bgp设备会心灰意冷的返回上一个状态,上一个是connect 状态
4)opensent 状态: open报文已发送状态,已向邻居发送open报文
-如果bgp设备给邻居发送open报文后,如果收到来自邻居的回复,并且回复的报文是正确的,bgp 设备会继续发送报文,发送什么报文呢? 发送keep alive 报文,状态转为 open comfirm 状态
-如果bgp设备给邻居发送open报文后,如果收到来自邻居的回复,但是回复的报文有错误,bgp 设备会向邻居发送notification 报文(用于断开bgp连接状态),断开后会跳转到最初的idle 状态
5)open comfirm : open报文确认状态
-如果收到邻居发来的keep alive 报文,状态会转为established 建立状态
-如果收到邻居发来的notification 报文,状态会跳转为 idle 状态
6)established : 连接已建立状态
-如果收到邻居发来的正确的update 报文或者keepalive 报文,bgp就会认为邻居是正常的
- 如果收到邻居发来的错误的update 报文或者keepalive 报文,bgp设备会发送notification 报文,通知邻居,我们分手把,不做邻居了,会回到idle 初始化状态
9、BGP的工作原理
建立邻居
传递路由
10、BGP路由默认优先级为255
IBGP路由的默认优先级为255
EBGP路由的默认优先级为255
11、BGP邻居关系建立的完整流程
三、BGP基础配置案例
BGP实验
拓扑
需求
1)配置EBGP邻居关系
2)实现网络互通
配置步骤
1)配置接口IP地址
2)配置EBGP邻居
-开启BGP功能,进入AS号
-配置router-id
-指定邻居地址,指定邻居AS号
3)注入路由
配置命令
sysname R1 # interface GigabitEthernet0/0/0 ip address 192.168.1.254 255.255.255.0 # interface GigabitEthernet0/0/1 ip address 192.168.12.1 255.255.255.0 # bgp 100 router-id 1.1.1.1 peer 192.168.12.2 as-number 200 network 192.168.1.0 sysname R2 # interface GigabitEthernet0/0/0 ip address 192.168.12.2 255.255.255.0 # interface GigabitEthernet0/0/1 ip address 192.168.2.254 255.255.255.0 # bgp 200 router-id 2.2.2.2 peer 192.168.12.1 as-number 100 network 192.168.2.0 验证:查看邻居表 <R1>display bgp peer BGP local router ID : 1.1.1.1 Local AS number : 100 Total number of peers : 1 Peers in established state : 1 Peer V AS MsgRcvd MsgSent OutQ Up/Down State PrefRcv 192.168.12.2 4 200 45 46 0 00:42:35 Established 1 验证:查看路由表 <R1>display bgp routing-table BGP Local router ID is 1.1.1.1 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.1.0 0.0.0.0 0 0 i *> 192.168.2.0 192.168.12.2 0 0 200i 验证:PC1和PC2 可以ping通
邻居表解析
<R1>display bgp peer BGP local router ID : 1.1.1.1 Local AS number : 100 Total number of peers : 1 Peers in established state : 1 Peer V AS MsgRcvd MsgSent OutQ Up/Down State PrefRcv 192.168.12.2 4 200 45 46 0 00:42:35 Established 1 邻居表字段详细解析: -BGP local router ID : //表示的BGP给当前这台设备分配的名字 -Local AS number : //表示的是当前这个设备所属的AS号 -Total number of peers : //表示当前设备一共有多少邻居 -Peers in established state : //表示当前设备有效的邻居 -Peer : //表示的是对端邻居的IP地址 - V : //表示的是版本 -AS: //表示的是邻居设备所在的AS号 -MsgRcvd: //表示的是从邻居设备收到的消息数目 -MsgSent: //表示的是向邻居设备发送的消息数目 -OutQ: //表示的是 出向队列 (等待发往指定邻居的消息—出向数据—排队的数据) bgp要求稳定,所以如果邻居设备无法向对端发送一个稳定的报文,那么这个报文就会被要求重新传输, 哪些需要重传的报文,就会放到这个出向队列中,所以正常情况下,这个参数的值是0, 如果这个参数不是0,说明和邻居之间的链路非常不稳定,容易出现网络拥塞和丢包 -State: //表示的是邻居的状态,最完美的状态,就是established (建立) -PrefRcv: //表示的是从邻居设备所接受过来的路由条目的数量 目前这个值为0,就代表对端设备还没有给我们传递路由信息,就是没有给我们发路由 也可以这样表述:本段从对端设备上收到的路由前缀的数目(接收到的路由的数量)
BGP路由表解析
<R1>display bgp routing-table BGP Local router ID is 1.1.1.1 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.1.0 0.0.0.0 0 0 i *> 192.168.2.0 192.168.12.2 0 0 200i 路由表字段解析: BGP Local router ID : 标识的BGP路由器自己的Router-id Status codes : 状态代码 * - valid : 表示BGP路由是有效的,能用 > - best : 表示BGP路由是最优的,自己可以用,别人也可以用 Origin : 起源代码,表示该BGP路由是通过什么方式宣告进BGP协议的 i - IGP :最优的 (通过network注入) e - EGP :次优的 ? - incomplete :最差的 (import 引入) Network :表示BGP路由网段和掩码 NextHop :表示BGP路由的下一跳地址(如果是0.0.0.0 表示该路由是自己产生的) @:接下来的这些,都是BGP路由条目的属性(后面讲BGP选路规则时还会详细分析和讲解这几个属性) MED : 路由度量值,表示去往一个BGP路由的距离,类似于其他协议的cost LocPrf : 本地优先级,表明路由器的BGP本地优先级 PrefVal :协议首选值,表示的是一个BGP路由的优选值,最高的路由 协议首选值(PrefVal)是华为设备的特有属性,该属性仅在本地有效 Path:AS路径,表示的是一个BGP路由AS_Path属性, AS_Path属性按顺序记录了一个BGP路由从本地到目的地址所要经过的所有AS编号 Ogn:表示的是一个BGP路由的起源属性,主要用来定义路径信息的来源 标记一条路由是怎么成为BGP路由的。它有以下3种类型: IGP:具有最高的优先级。通过network命令注入到BGP路由表的路由,其Origin属性为IGP。 EGP:优先级次之,通过EGP得到的路由信息,其Origin属性为EGP。 Incomplete:优先级最低。通过其他方式学习到的路由信息。 比如BGP通过import-route命令引入的路由
四、IBGP全互联案例:
1、IBGP全互联实验
拓扑
需求:实现AS100内R4的10.10.4.4 和AS300内R5的10.10.5.5互通
思路:
思路1:R4和R1建立EBGP邻居 (外部的EBGP邻居)--完成
思路2:R3和R5建立EBGP邻居 (外部的EBGP邻居)
思路3:AS200内部的R1-R2-R3配置ospf-建立ospf邻居关系
思路4:R1和R3建立IBGP邻居 :BGP可以跨越路由器建立邻居
思路5:在R4和R5中注入路由
配置步骤
1)配置路由器的接口IP地址
2)在AS200内部配置OSPF
3)配置BGP邻居关系
-开启BGP功能,进入AS
-配置Router-id
-配置邻居关系,指定邻居IP地址,指定邻居的AS号
4)在R4 和R5中注入路由
配置命令
R4的配置: 1)R4的接口配置: [R4]int g0/0/0 [R4-G0/0/0]ip add 192.168.14.4 24 [R4-G0/0/0]int lo0 [R4-LoopBack0]ip add 10.10.4.4 32 2)R4的BGP配置: [R4]bgp 100 [R4-bgp]router-id 4.4.4.4 [R4-bgp]peer 192.168.14.1 as 200 //和R1建立外部邻居 [R4-bgp]network 10.10.4.4 32 //注入路由 R1的配置: 1)R1的接口配置: [R1]int g0/0/0 [R1-G0/0/0]ip add 192.168.12.1 24 [R1-G0/0/0]int g0/0/1 [R1-G0/0/1]ip add 192.168.14.1 24 2)R1的OSPF配置: [R1]ospf 1 router-id 1.1.1.1 [R1-ospf-1]area 0 [R1-ospf-1-area-0.0.0.0]network 192.168.12.0 0.0.0.255 [R1-ospf-1-area-0.0.0.0]quit [R1-ospf-1]quit 3)R1的BGP配置: [R1]bgp 200 //开启BGP,配置AS200 [R1-bgp]router-id 1.1.1.1 [R1-bgp]peer 192.168.14.4 as 100 //和R4建立外部邻居 [R1-bgp]peer 192.168.23.3 as 200 //和R3建立内部邻居 [R1-bgp]peer 192.168.23.3 next-hop-local //修改下一跳 R2的配置: 1)R2的接口配置: [R2]int g0/0/0 [R2-G0/0/0]ip add 192.168.12.2 24 [R2-G0/0/0]int g0/0/1 [R2-G0/0/1]ip add 192.168.23.2 24 2)R2的ospf配置: [R2]ospf 1 router-id 2.2.2.2 [R2-ospf-1]area 0 [R2-ospf-1-area-0.0.0.0]network 192.168.12.0 0.0.0.255 [R2-ospf-1-area-0.0.0.0]network 192.168.23.0 0.0.0.255 [R2-ospf-1-area-0.0.0.0]quit R3的配置: 1)R3的接口配置: [R3]int g0/0/0 [R3-G0/0/0]ip add 192.168.23.3 24 [R3-G0/0/0]int g0/0/1 [R3-G0/0/1]ip add 192.168.35.3 24 2)R3的OSPF配置 [R3]ospf 1 router-id 3.3.3.3 [R3-ospf-1]area 0 [R3-ospf-1-area-0.0.0.0]network 192.168.23.0 0.0.0.255 [R3-ospf-1-area-0.0.0.0]quit [R3-ospf-1]quit 3)R3的BGP配置: [R3]bgp 200 [R3-bgp]router-id 3.3.3.3 [R3-bgp]peer 192.168.12.1 as 200 //和R1建立内部邻居 [R3-bgp]peer 192.168.12.1 next-hop-local //修改下一跳 [R3-bgp]peer 192.168.35.5 as 300 //和R5建立外部邻居 R5的配置: 1)R5的接口配置: [R5]int g0/0/0 [R5-G0/0/0]ip add 192.168.35.5 24 [R5-G0/0/0]int lo0 [R5-LoopBack0]ip add 10.10.5.5 32 2)R5的BGP配置: [R5]bgp 300 [R5-bgp]router-id 5.5.5.5 [R5-bgp]peer 192.168.35.3 as 200 //和R3建立外部邻居 [R5-bgp]network 10.10.5.5 32 //注入路由 验证方法: 1) dis ospf peer br :查看ospf 邻居 2)dis bgp peer :查看bgp邻居关系 3)dis bgp routing-table :查看BGP路由表 4)dis ip routing-table :查看IP核心路由表 5)在R4中 ping -a 10.10.4.4 10.10.5.5 不通 备注:R4中有去往10.10.5.5/32的路由 R5中有去往10.10.4.4/32的路由 有路由,但是网络不通? 为什么? 查找数据转发路径 第一步:在R4中查看去往10.10.5.5的路由 display ip routing-table 10.10.5.5 发现有路由,下一跳为192.168.14.1 --R1 第二步:在R1中查看去往10.10.5.5的路由 发现有路由,下一跳为192.168.23.3 --R3 备注:由于R1到达10.10.5.5 的路由下一跳,非直连下一跳,所以出向迭代路由 R1去往10.10.5.5的路由下一跳时R3,但是数据包总是要沿着真实的物理链路去传输的 所以R1依然会把数据包转发给R2这个设备,由R2在转发给R3 但是R2中并没有配置BGP路由协议,所以根本没有去往10.10.5.5的路由 所以R1发给R2的流量,R2由于没有路由,无法转发,所以会销毁数据 所以R2设备会出现“流量黑洞”, 所以数据无法转发 如何解决这个问题呢? 流量黑洞的解决方案: 1、第一个解决方案:在出现流量黑洞的路由器中,手写静态路由 1)在R2中手写静态路由 [R2]ip route-static 10.10.5.5 32 192.168.23.3 [R2]ip route-static 10.10.4.4 32 192.168.12.1 2)在R4中验证测试: <R4> ping -a 10.10.4.4 10.10.5.5 --可以实现互通 3)备注:静态路由的不足 在R2中配置静态路由,可以实现10.10.4.4 和10.10.5.5 的互通 但是不建议使用静态路由,因为当网络中设备过多时, 静态路由配置工作量大,当网络拓扑变更的时候,维护成本非常的高 4)删除静态路由,恢复配置 [R2]undo ip route-static all //删除所有静态路由 2、第二个解决方案:在ospf中引入外部路由BGP 1)在R1和R3中的ospf中引入BGP [R1]ospf 1 [R1-ospf-1]import-route bgp [R3]ospf 1 [R3-ospf-1]import-route bgp 2)在R4中验证测试: <R4> ping -a 10.10.4.4 10.10.5.5 --可以实现互通 3)备注:在OSPF中引入BGP路由的潜在风险 为什么不建议在OSPF中引入BGP路由 因为BGP传递路由,会传递大量的路由,假设50W条路由 如果把BGP路由传递给ospf ,那么就会瞬间产生50W个5类的LSA,而且全域泛洪 所有的OSPF路由器,都要学习这些5类的LSA 所以同步数据库非常慢,设备压力非常大,可能导致大量内网路由器宕机 4)删除配置,恢复配置 [R1-ospf-1]undo import-route bgp [R3-ospf-1]undo import-route bgp 3、第三个解决方案;IBGP全互联 1)配置IBGP全互联:在原有的基础上配置 [R2]bgp 200 [R2-bgp]router-id 2.2.2.2 [R2-bgp]peer 192.168.12.1 as 200 [R2-bgp]peer 192.168.23.3 as 200 [R1]bgp 200 [R1-bgp]peer 192.168.12.2 as 200 [R1-bgp]peer 192.168.12.2 next-hop-local [R3]bgp 200 [R3-bgp]peer 192.168.23.2 as 200 [R3-bgp]peer 192.168.23.2 next-hop-local 2)在R4中验证测试: <R4> ping -a 10.10.4.4 10.10.5.5 --可以实现互通 3)备注:配置IBGP全互联的不足 要建立N*(n-1)/2的邻居关系 配置工作量非常大, 维护非常难 ====================================================================== ====================================================================== ====================================================================== IBGP全互联完整配置: 1)R4的接口配置: [R4]int g0/0/0 [R4-G0/0/0]ip add 192.168.14.4 24 [R4-G0/0/0]int lo0 [R4-LoopBack0]ip add 10.10.4.4 32 2)R4的BGP配置: [R4]bgp 100 [R4-bgp]router-id 4.4.4.4 [R4-bgp]peer 192.168.14.1 as 200 //和R1建立外部邻居 [R4-bgp]network 10.10.4.4 32 //注入路由 **R1的配置:** 1)R1的接口配置: [R1]int g0/0/0 [R1-G0/0/0]ip add 192.168.12.1 24 [R1-G0/0/0]int g0/0/1 [R1-G0/0/1]ip add 192.168.14.1 24 2)R1的OSPF配置: [R1]ospf 1 router-id 1.1.1.1 [R1-ospf-1]area 0 [R1-ospf-1-area-0.0.0.0]network 192.168.12.0 0.0.0.255 [R1-ospf-1-area-0.0.0.0]quit [R1-ospf-1]quit 3)R1的BGP配置: [R1]bgp 200 //开启BGP,配置AS200 [R1-bgp]router-id 1.1.1.1 [R1-bgp]peer 192.168.14.4 as 100 //和R4建立外部邻居 [R1-bgp]peer 192.168.12.2 as 200 //和R2建立内部邻居 [R1-bgp]peer 192.168.12.2 next-hop-local //修改下一跳 [R1-bgp]peer 192.168.23.3 as 200 //和R3建立内部邻居 [R1-bgp]peer 192.168.23.3 next-hop-local //修改下一跳 **R2的配置:** 1)R2的接口配置: [R2]int g0/0/0 [R2-G0/0/0]ip add 192.168.12.2 24 [R2-G0/0/0]int g0/0/1 [R2-G0/0/1]ip add 192.168.23.2 24 2)R2的ospf配置: [R2]ospf 1 router-id 2.2.2.2 [R2-ospf-1]area 0 [R2-ospf-1-area-0.0.0.0]network 192.168.12.0 0.0.0.255 [R2-ospf-1-area-0.0.0.0]network 192.168.23.0 0.0.0.255 [R2-ospf-1-area-0.0.0.0]quit 3)R2的BGP配置: [R2]bgp 200 [R2-bgp]router-id 2.2.2.2 [R2-bgp]peer 192.168.12.1 as 200 //和R1建立内部邻居 [R2-bgp]peer 192.168.23.3 as 200 //和R3建立内部邻居 **R3的配置:** 1)R3的接口配置: [R3]int g0/0/0 [R3-G0/0/0]ip add 192.168.23.3 24 [R3-G0/0/0]int g0/0/1 [R3-G0/0/1]ip add 192.168.35.3 24 2)R3的OSPF配置 [R3]ospf 1 router-id 3.3.3.3 [R3-ospf-1]area 0 [R3-ospf-1-area-0.0.0.0]network 192.168.23.0 0.0.0.255 [R3-ospf-1-area-0.0.0.0]quit [R3-ospf-1]quit 3)R3的BGP配置: [R3]bgp 200 [R3-bgp]router-id 3.3.3.3 [R3-bgp]peer 192.168.23.2 as 200 //和R2建立内部邻居 [R3-bgp]peer 192.168.23.2 next-hop-local //修改下一跳 [R3-bgp]peer 192.168.12.1 as 200 //和R1建立内部邻居 [R3-bgp]peer 192.168.12.1 next-hop-local //修改下一跳 [R3-bgp]peer 192.168.35.5 as 300 //和R5建立外部邻居 **R5的配置:** 1)R5的接口配置: [R5]int g0/0/0 [R5-G0/0/0]ip add 192.168.35.5 24 [R5-G0/0/0]int lo0 [R5-LoopBack0]ip add 10.10.5.5 32 2)R5的BGP配置: [R5]bgp 300 [R5-bgp]router-id 5.5.5.5 [R5-bgp]peer 192.168.35.3 as 200 //和R3建立外部邻居 [R5-bgp]network 10.10.5.5 32 //注入路由 **验证方法:** 1)<R2>dis ospf peer br //在R2中查看ospf 邻居 2)<R1>ping 192.168.23.3 //在R1 ping R3 通 3)<R1>dis bgp peer //R1和R2 R3 R4 都是BGP邻居 Peer V AS MsgRcvd MsgSent OutQ Up/Down State PrefRcv 192.168.12.2 4 200 47 50 0 00:45:22 Established 0 192.168.14.4 4 100 57 57 0 00:54:20 Established 1 192.168.23.3 4 200 42 44 0 00:39:58 Established 1 <R3>dis bgp peer //R3和R1 R2 R5 都是BGP邻居 Peer V AS MsgRcvd MsgSent OutQ Up/Down State PrefRcv 192.168.12.1 4 200 48 48 0 00:45:14 Established 1 192.168.23.2 4 200 47 48 0 00:45:42 Established 0 192.168.35.5 4 300 42 43 0 00:39:08 Established 1 <R4>dis bgp routing-table //所有的路由器都有这两条路由 *> 10.10.4.4/32 0.0.0.0 0 0 i *> 10.10.5.5/32 192.168.14.1 0 200 300i <R4>ping -a 10.10.4.4 10.10.5.5 //可以通
2、解析:修改下一跳: Next_Hop
1)始发路由器在给邻居传递BGP路由时,默认修改下一跳地址
1)在R4的始发路由器上注入路由10.10.4.4 下一跳为0.0.0.0 <R4>dis bgp routing-table Network NextHop MED LocPrf PrefVal Path/Ogn *> 10.10.4.4/32 0.0.0.0 0 0 i 2)R1查看路由表,发现10.10.4.4的这条路由下一跳地址改为192.168.14.4 <R1>display bgp routing-table Network NextHop MED LocPrf PrefVal Path/Ogn *> 10.10.4.4/32 192.168.14.4 0 0 100 i 备注:始发路由器在给邻居传递BGP路由时,默认修改下一跳地址, 修改为和对端设备建立邻居的那个接口的IP地址
2)从外部邻居哪里学来的路由,在传递给自己的内部邻居时,默认不修改下一跳地址
3)在R3中查看路由表,发现10.10.4.4的这条路由下一跳地址改为192.168.14.4 <R3>display bgp routing-table Network NextHop MED LocPrf PrefVal Path/Ogn i 10.10.4.4/32 192.168.14.4 0 100 0 100 i 备注:在R3中,我认为10.10.4.4 这条路由不是最优的,也不是有效的路由 为什么? 因为下一跳不可达,R3和下一跳地址192.168.14.4之间网络不可达 为什么会出现这个问题? 因为BGP路由器从外部邻居哪里学来的路由,在传递给自己的内部邻居时,默认不修改下一跳地址 因为R1从外部邻居R4哪里学来的路由,在传递给内部邻居R3时,默认不修改下一跳地址 如何解决这个问题: [R1]bgp 200 [R1-bgp]peer 192.168.23.3 next-hop-local //修改下一跳
3)外部邻居在传递路由的时候,默认修改下一跳地址
====================以下是参考图示案例======================
====================以下是参考图示案例======================
====================以下是参考图示案例======================
1)始发路由器在给邻居传递BGP路由时,默认修改下一跳地址
R4将BGP路由传递给EBGP邻居R1时,将该路由的下一跳地址设置为自己和R1建立邻居的那个接口IP地址:192.168.14.1
2)BGP路由器从外部邻居-EBGP邻居哪里学来的路由,在传递给自己的内部邻居-IBGP邻居时,默认不修改下一跳地址,会保持路由的下一跳地址不变
备注:所以R3收到R1发来的:10.10.4.0 这条路由后,发现这条路由不是有效的,为什么?
因为R3无法访问192.168.14.4 ,R3发现下一跳不可达,所以认为这条路由是无效的
解决方案:
[R1]bgp 200 [R1-bgp]peer 10.10.3.3 next-hop-local //R1在给R3传递路由的时候会修改路由的下一跳地址为R1的本地地址(也就是10.10.1.1)
- 需求实现AS100内R4的10.10.4.4 和AS300内R5的10.10.5.5互通思路:思路1:R4和R1建立EBGP邻居 (外部的EBGP邻居)--完成思路2:R3和R5建立EBGP邻居 (外部的EBGP邻居)思路3:AS200内部的R1-R2-R3配置ospf-建立ospf邻居关系思路4:R1和R3建立IBGP邻居 (内部的IBGP邻居)
---------------------------------------------------------
思路5:R1和R2建立IBGP邻居 (内部的IBGP邻居)
思路6:R2和R3建立IBGP邻居 (内部的IBGP邻居)
思路7:在R4和R5中注入路由