BGP协议
这节主要学习IBGP和IGP之间的区别与联系, BGP 路由信息交互,了解BGP的安全性,BGP协议的基本配置,如何建立IBGP、EBGP对等体,引入与传递路由。
目录
BGP协议
BGP基础概念
IBGP和IGP的不同
BGP 路由信息交互
BGP 安全性
BGP基础实验
一,配置IP地址和OSPF内网
二,配置R1到R2的EBGP邻居
三,配置内网R2和R4之间的IBGP邻居
四,两种BGP的路由信息发布
一,使用 BGP network宣告
二,使用重分布将OSPF的所有路由通告为BGP
五,BGP路由黑洞问题
BGP基础概念
IBGP和IGP的不同
AS内部使用IBGP原因:
- IGP处理路由的条目有限,而目前internet上核心路由器的路由表已经超过10万条。 IGP本身 无法处理这样大的路由数量;
- 路由环路的问题。BGP是靠路由属性来防止路由环路的,例如AS_PATH属性,假如说没有IBGP协议,那么当所有BGP路由重分发到IGP中后,路由属性必然丢失,这就破坏了BGP的路由环路防止机制,产生了路由环路的隐患。
IBGP能够传送所有的路由前缀,为什么还需要IGP?
- IBGP之间是TCP连接,也就意味着IBGP邻居采用的是逻辑连接的方式,两个IBGP连接不一定存在实际的物理链路。所以需要有IGP来提供路由,以完成BGP路由的递归查找。
- 在AS内部,BGP协议本身实际上并不发现路由,BGP将路由发现的工作全部移交给了IGP协议,它本身着重于路由的控制。因此,如果没有IGP,那么BGP也就毫无用处了。
BGP 路由信息交互
BGP本身不会自动产生路由,必须要将IGP的路由引入到BGP路由表中。引入的方式有2种:
BGP可以通过network和重分布方式发布路由
Network方式和ospf的network存在区别,ospf的network是为了告知本地那个接口加入ospf,BGP的network是为了告知本地的那条路由需要通过BGP传递。
因此BGP的network存在两个特点:
- 1:不需要本地直连只要自己的路由表中存在即可
- 2:宣告时掩码必须和本地路由表一致。因为不同的掩码表示不同的路由。
BGP 安全性
BGP 使用认证和 GTSM(Generalized TTL Security Mechanism)两个方法保证 BGP 对等体间的交互安全。
BGP认证
- BGP 认证分为 MD5 认证和 Keychain认证,对 BGP 对等体关系进行认证是提高安全性的有效手段。MD5 认证只能为 TCP 连接设置认证密码,而 Keychain 认证除了可以为 TCP 连接设置认证密码外,还可以对 BGP 协议报文进行认证。
BGP GTSM
- BGP GTSM 检测 IP 报文头中的 TTL(time-to-live)值是否在一个预先设置好的特定范围内,并对不符合 TTL 值范围的报文进行允许通过或丢弃的操作,从而实现了保护 IP 层以上业务,增强系统安全性的目的。
BGP基础实验
一,配置IP地址和OSPF内网
R1:
R1(config)#interface gigabitEthernet 0/0 //进入接口G0/0
R1(config-if-GigabitEthernet 0/0)#no switchport //开启三层功能
R1(config-if-GigabitEthernet 0/0)#ip address 12.1.1.1 24 //配置接口ip地址
R1(config)#interface loopback0 //开启接口loopback口
R1(config-if-Loopback 0)#ip address 1.1.1.1 32 //配置loopback口的IP地址
r2:
R2(config)#interface gigabitEthernet 0/0 //进入接口G0/0
R2(config-if-GigabitEthernet 0/0)#no switchport //开启三层功能
R2(config-if-GigabitEthernet 0/0)#ip address 12.1.1.2 24 //配置接口ip地址
R2(config-if-GigabitEthernet 0/0)#exit //退出接口模式R2(config)#interface gigabitEthernet 0/1 //进入接口G0/1
R2(config-if-GigabitEthernet 0/1)#no switchport //开启三层功能
R2(config-if-GigabitEthernet 0/1)#ip address 23.1.1.2 24 //配置接口ip地址
R2(config-if-GigabitEthernet 0/1)# ip ospf 1 area 0 //配置OSPF 1的区域0R2(config)#interface loopback0 //开启接口loopback口
R2(config-if-Loopback 0)#ip address 2.2.2.2 32 //配置loopback口的IP地址
R2(config-if-Loopback 0)#ip ospf 1 area 0 //配置OSPF 1的区域0
R3:
R3(config)#interface gigabitEthernet 0/0 //进入接口G0/0
R3(config-if-GigabitEthernet 0/0)#no switchport //开启三层功能
R3(config-if-GigabitEthernet 0/0)#ip address 23.1.1.3 24 //配置接口ip地址R3(config-if-GigabitEthernet 0/0)# ip ospf 1 area 0 //配置OSPF 1的区域0
R3(config-if-GigabitEthernet 0/0)#exit //退出接口模式R3(config)#interface gigabitEthernet 0/1 //进入接口G0/1
R3(config-if-GigabitEthernet 0/1)#no switchport //开启三层功能
R3(config-if-GigabitEthernet 0/1)#ip address 34.1.1.3 24 //配置接口ip地址
R3(config-if-GigabitEthernet 0/1)# ip ospf 1 area 0 //配置OSPF 1的区域0R3(config)#interface loopback0 //开启接口loopback口
R3(config-if-Loopback 0)#ip address 3.3.3.3 32 //配置loopback口的IP地址
R3(config-if-Loopback 0)#ip ospf 1 area 0 //配置OSPF 1的区域0
R4:
R4(config)#interface gigabitEthernet 0/0 //进入接口G0/0
R4(config-if-GigabitEthernet 0/0)#no switchport //开启三层功能
R4(config-if-GigabitEthernet 0/0)#ip address 34.1.1.4 24 //配置接口ip地址
R4(config-if-GigabitEthernet 0/0)#ip ospf 1 area 0 //配置OSPF 1的区域0
R4(config)#interface loopback0 //开启接口loopback口
R4(config-if-Loopback 0)#ip address 4.4.4.4 32 //配置loopback口的IP地址
R4(config-if-Loopback 0)#ip ospf 1 area 0 //配置OSPF 1的区域0
二,配置R1到R2的EBGP邻居
EBGP的配置一般情况不涉及跨设备建立邻居
R1:
R1(config)#router bgp 100 //启用BGP协议且本设备的AS号为100,每台设备只能属于一个AS,一旦启用AS,再加入其他AS会报错
R1(config-router)#neighbor 12.1.1.2 remote-as 200 //手工和12.1.1.2建立邻居关系,对端的AS为200
R2:
R2(config)#router bgp 200 //启用BGP协议AS号为200
R2(config-router)#neighbor 12.1.1.1 remote-as 100 //手工配置和12.1.1.1的邻居 ,对端AS为100
EBGP配置完成,查看BGP邻居表
当发现EBGP邻居建立失败,排错方式:
1.查看双方AS号是否写反,或者写错,遇到这个问题会报:
2.查看邻居ip地址是否配置有误,查看邻居表,会发现邻居在connect状态
三,配置内网R2和R4之间的IBGP邻居
IBGP邻居通常使用Loopback接口建立邻居关系,使用loopback建立更加稳定,但需要注意配置update-source命令 用于强制修改源地址。
此时可以看到R2和R4之间配置了OSPF是互通的
配置R2和R4的IBGP邻居
R4
R4(config)#router bgp 200 // 启用BGP协议AS号为200
R4(config-router)#neighbor 2.2.2.2 remote-as 200 //手工和2.2.2.2建立邻居关系,对端的AS为200
R2:
R2(config)#router bgp 200 //启用BGP协议AS号为200
R2(config-router)#neighbor 4.4.4.4 remote-as 200 //手工配置和4.4.4.4的邻居 ,对端AS为200
此时查看BGP邻居表,发现邻居状态为active
此时IBGP未配置完成,需要配置update-source
R2(config-router)#neighbor 4.4.4.4 update-source loopback 0 //和邻居4.4.4.4进行信息发送时使用loopback0的地址作为源地址,
R4(config-router)#neighbor 2.2.2.2 update-source loopback 0 //和邻居2.2.2.2进行信息发送时使用loopback0的地址作为源地址,两边只需要配置一边即可建立邻居,但是推荐都配置。
此时查看邻居表可以发现邻居建立成功
四,两种BGP的路由信息发布
一,使用 BGP network宣告
在R2上做network宣告
查看R2的路由表,路由表存在的才可以network宣告【注意掩码一致】
R2(config)#router bgp 200 //启用BGP协议AS号为200
R2(config-router)#network 4.4.4.4 mask 255.255.255.255 //宣告4.4.4.4/32条目
R2(config-router)#network 3.3.3.0 mask 255.255.255.0 //宣告3.3.3.0/24条目,注意这条路由信息的掩码不对
此时发现R1学习到的BGP表里只有4.4.4.4/32,因为3.3.3.0/24不在路由表里所以就算写 它的network在BGP表里不会出现
二,使用重分布将OSPF的所有路由通告为BGP
R2(config)#router bgp 200 //启用BGP协议AS号为200
R2(config-router)#redistribute ospf 1 //重分布OSPF1的路由进入BGP
配置完成后发现所有OSPF的路由全部进入BGP被R1学习
重分布配置完成,查看BGP路由表
在R1上network自身的loopback接口
R1(config)#router bgp 100 //启用BGP协议AS号为100
R1(config-router)#network 1.1.1.1 mask 255.255.255.255 //宣告1.1.1.1/32条目
此时查看 R2和R4可以看到到达R1的路由,可以看到R2到R4的IBGP传递下一跳不变,R4的下一跳不可达,路由不可用
R4需要通过手工的方式强制修改下一跳。
R2(config)#router bgp 200 //启用BGP协议AS号为200
R2(config-router)#neighbor 4.4.4.4 next-hop-self //向4.4.4.4发送路由时将下一跳修改自身的地址。
配置完成查看 BGP的路由信息
此时R1和R4仍然不可通信
五,BGP路由黑洞问题
在数据发送的过程中R4需要先将数据发送给R3,R3由于没有路由不知道怎么转发,所以直接丢弃。造成了路由黑洞。因此路由黑洞产生是因为BGP跨越多跳路由器建立邻居,中间设备没有学习BGP的相关路由,但是转发仍然需要经过这些设备造成的丢包现象。
解决方法:
同步规则【不建议】:将BGP和IGP路由信息同步,双向引入,将BGP重分布进OSPF里面
R2(config)#router ospf 1 //进入OPSF 1
R2(config-router)#redistribute bgp subnets //将BGP路由重分布到OSPF
此时 ,R1和R4之间可以进行通信
有问题大家可以留言讨论,关注IT其他方面的小伙伴们可以参考尚文网络其他老师文章,也可以微信搜索尚文网络公众号,有详细资讯发布,认准尚文网络成为一名优秀的IT人。