EBGP是不同的AS间建立的邻居关系,通常EBGP通过直连建立邻居关系
IBGP是相同的AS内的建立的BGP关系,邻居之间不必要通过直连建立邻居关系,一般通过loopback建立邻居关系。
R2 R3 R4属于AS200 , 我们配置IBGP邻居:
R2到R4,完成IGP-EIGRP(目标使环回口路由可达)
R2和R4建立IBGP邻居关系,此处使用sopf,建立完成后R2和R4互相学到loopback地址,我们R2和R4建立IBGP邻居关系:
R2(config)#router bgp 200
R2(config-router)#neighbor 44.1.1.1 remote-as 200
R4(config)#router bgp 200
R4(config-router)#neighbor 22.1.1.1 remote-as 200
配置完后我们发现BGP邻居关系为IDLE状态,debug查看默认R2用的物理之间出接口与R4 lo 建立邻居关系无法建立重置。
我们需要配置R2的建立BGP邻居关系的源为lo0
同时我们也需要把R4配置lo0 为源,否则某种场景下也会出现问题。
R4(config)#router bgp 200
R4(config-router)#neighbor 22.1.1.1 update-source lo 0
我们在R2可以学到R1的11.1.1.1 的路由:
我们在R4无法学到R1的11.1.1.1 的路由,我们对比下R2和R4的BGP数据库。
R4没有>最优的路由
最优(没有过滤):
下一跳: 必须可达(即在路由表中出现)
同步: 和IGP的同步,此条件默认满足
此时我们发现R4没有到下一跳12.1.1.1 的路由,因此BGP路由表没有学到11.1.1.1的路由
此时我们可以R2的ospf引入直连路由,让R4学到12.1.1.1的路由
R2(config)#route-map conn
R2(config-route-map)#match interface serial 1/0
R2(config)#router ospf 110
R2(config-router)#redistribute connected route-map conn
此时我们可以在R4路由表学到12.1.1.1的路由,BGP路由表可以学到11.1.1.1的有效路由:
以上这种方法不常用,我们常用的是下面这种方法next-hop-self,下一跳为自己,R2进行配置改完后我们R4查看路由表下一跳为R2自己22.1.1.1
R2(config)#router ospf 110
R2(config-router)#no redistribute connected route-map conn
R2(config-router)#no redistribute connected subnets
R2(config)#router bgp 200
R2(config-router)#neighbor 44.1.1.1 next-hop-self ---针对IBGP邻居把下一跳改为本设备的更新源
同时路由表下一跳变为22.1.1.1:
查看CEF:
我们再把R5配置下:
R5#show run | s bgp
router bgp 300
bgp log-neighbor-changes
network 55.1.1.1 mask 255.255.255.255 -----BGP network精准匹配掩码
neighbor 45.1.1.4 remote-as 200
R4查看BGP数据库:
此时下一跳也是45.1.1.5,因此在R2同样是学不到这条路由,因此我们需要针对R4的IBGP邻居改变下一跳为本设备R4。
R4(config)#router bgp 200
R4(config-router)#neighbor 22.1.1.1 next-hop-self
我们在R2查看到达55.1.1.1的下一跳变为44.1.1.1(R4 lo)
此时我们在R5和R1 都能通过BGP学到对方的lo0 路由,但是我们发现R5 ping R1 是没法ping通的,此时R3出现了路由黑洞,R3之前我们没有配置任何的BGP。
R5#ping 11.1.1.1 source lo 0
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 11.1.1.1, timeout is 2 seconds:
Packet sent with a source address of 55.1.1.1
.....
R5数据到达R4,R4到达了R3(通过CEF查看下一跳到达R3)
R4#show ip cef 11.1.1.1 detail
11.1.1.1/32, epoch 0, flags [rib only nolabel, rib defined all labels]
recursive via 22.1.1.1
nexthop 34.1.1.3 Ethernet0/2
然后我们在R3查看路由表没有发现到11.1.1.1的路由:
为了使R3得到11.1.1.1 的路由,我们使用之前学过的路由重分布,R2通过EBGP已经学到11.1.1.1的路由R2上bgp引入ospf就可让R3学到11.1.1.1的路由:
R2(config)#router ospf 110
R2(config-router)#redistribute bgp 200 subnets
此时我们在R3可以学到11.1.1.1的路由:
虽然R3学到路由但是我们从R5ping 11.1.1.1是仍然没法ping通的,因为R3没有55.1.1.1的路由。
R5#ping 11.1.1.1 source lo 0
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 11.1.1.1, timeout is 2 seconds:
Packet sent with a source address of 55.1.1.1
.....
Success rate is 0 percent (0/5)
我们在R4上也进行重分布:
R4(config)#router os 110
R4(config-router)#redistribute bgp 200 subnets
此时我们在R3都能学到R1 和 R5 lo0 路由:
此时我们可以在R5 ping通R1的lo0 11.1.1.1:
路由黑洞:我们可以跨设备更新路由表,但是R3没有运行BGP,R3是路由黑洞(没有得到路由)。
IP 逐跳转发(hop-by-hop),每台设备都需要有路由表。