思科路由器 BGP 跨 AS 组网配置实例详解


一、前言

去年我写了一篇 EBGP 简单配置的文章。

思科路由器 BGP (EGBP) 路由协议最简单的配置实例详解

之后由于各种原因,一直没研究 IBGP 的配置方法。

最近深入在学习路由知识,又想起这个来了,所以就研究了下。

发现 BGP 这货还挺神奇的,非常值得了解一下。

本文纯属个人学习经验,可能会有点乱,仅供参考!

如有错误请及时提出,谢谢!


二、拓扑图 & 需求

(网络前缀长度均为 /24

如图,整个网络分为两个 AS。要求网络上的所有设备都可以访问所有网段。


三、BGP 协议的一些特点及解决方法

根据上面的拓扑图,如果还是按照纯 EBGP 的配置步骤来配置的话,那是不能成功的。

因为 BGP 协议默认规定了以下两点:

  1. 如果路由器是 AS 的边界,那么它从不同 AS 邻居学习到的路由表项在扩散到同一 AS 邻居的时候,其下一跳地址不会被改变
  2. 路由器从同一 AS 邻居学习到的路由表项不会扩散其他同一 AS 邻居(称为 BGP 水平分割)。

有点拗口对吧,没关系。下面根据上面的拓扑图来举下例子。

第一点:
「R3」告诉「R1」一个路由表项:目的地址:10.0.2.0/24 下一跳:10.0.0.2
现在「R1」要把这个路由表项告诉「R6」。
正常的话,「R1」应该把表项的下一跳修改成它自身(10.0.4.1)然后才告诉「R6」。即:目的地址:10.0.2.0/24 下一跳:10.0.4.1
然而 BGP 协议不对路由表项做任何修改,只是原封不动地告诉「R6」。即:目的地址:10.0.2.0/24 下一跳:10.0.0.2
虽然在这个例子中,「R6」也知道 10.0.0.0/24 该怎么走(先走 10.0.4.1),但如果 BGP 邻居不是直连建立的话,就会造成网络不通。所以应该避免这种情况发生。

第二点:
「R4」从「R2」、「R3」、「R5」那学到了一些路由表项。
然而它学过之后就不愿意再分享出去了……

那怎么解决以上两个问题呢?加点配置就行了。

  1. 告诉「R1」:从不同 AS 邻居学习到并且要发给「R6」(10.0.4.2)的路由表项的下一跳修改为 10.0.4.1(使用 next-hop-self 命令)。
  2. 告诉「R4」:从同一 AS 邻居学习到的路由表项要分享给其他同一 AS 邻居(使用 route-reflector-client 指令,下面详细说)。而且需要修改下一跳地址(使用 next-hop-self all 指令)。

其他路由器的解决方法同理。


四、BGP 路由反射器简介

由于在大型网络中路由环路是绝对不能容忍的,所以 BGP 制定了非常严格的水平分割机制。

BGP 路由反射器可以用来控制从同一 AS 邻居学习到的路由表项向其他同一 AS 邻居扩散的范围。

按我的理解,每台开启了 BGP 且配置了同一 AS 邻居的路由器都是一台路由反射器。

BGP 路由反射器具有以下特性:

  1. 路由反射器可以把同一 AS 邻居分为客户端非客户端两种角色。
  2. 默认情况下,所有同一 AS 邻居都是非客户端角色。
  3. 非客户端角色同一 AS 邻居学习到的路由表项不能扩散到其他非客户端同一 AS 邻居
  4. 同一 AS 邻居学习到的路由表项扩散到其他同一 AS 邻居的时候,其下一跳地址不会被改变

根据这些特性我们不难看出,「R4」不会分享从「R2」、「R3」、「R5」学习到的路由表项。

这时候我们可以在「R4」上把「R5」配置成路由反射器客户端(使用 route-reflector-client 指令)。

这样的话,从「R5」学习到的路由表项就可以扩散到「R2」、「R3」;从「R2」、「R3」学习到的路由表项就可以扩散到「R5」;但从「R2」或「R3」学习到的路由表项不能扩散到「R3」或「R2」。

除此之外,还要修改扩散出去路由表的下一跳地址(使用 next-hop-self all 指令)。

还有,next-hop-self 这个指令只会修改从不同 AS 邻居学习到的路由表项在扩散到其他同一 AS 邻居时的下一跳地址

如果需要修改从同一 AS 邻居学习到的路由表项扩散到其他同一 AS 邻居时的下一跳地址,那么要加上 all


五、配置方法

(所有设备均已恢复默认设置)

5.1 R1

配置接口参数

configure terminal 

interface ethernet 0/0
ip address 10.0.0.1 255.255.255.0
no shutdown 
exit

interface ethernet 0/1
ip address 10.0.4.1 255.255.255.0
no shutdown
exit

配置 BGP 参数

%进入 ASN 1 的 BGP 配置模式
router bgp 1

%公告直连网段
network 10.0.0.0 mask 255.255.255.0
network 10.0.4.0 mask 255.255.255.0

%指定邻居
neighbor 10.0.4.2 remote-as 1
neighbor 10.0.0.2 remote-as 2 

%修改发往 R6 的下一跳
neighbor 10.0.4.2 next-hop-self

exit

exit

5.2 R2

配置接口参数

configure terminal 

interface ethernet 0/0 
ip address 10.0.3.1 255.255.255.0
no shutdown 
exit

interface ethernet 0/1
ip address 10.0.2.2 255.255.255.0
no shutdown 
exit

配置 BGP 参数

%进入 ASN 2 的 BGP 配置模式
router bgp 2

%公告直连网段
network 10.0.2.0 mask 255.255.255.0
network 10.0.3.0 mask 255.255.255.0

%指定邻居
neighbor 10.0.2.1 remote-as 2
neighbor 10.0.3.2 remote-as 2

exit

exit

5.3 R3

配置接口参数

configure terminal 

interface ethernet 0/0
ip address 10.0.0.2 255.255.255.0
no shutdown 
exit  

interface ethernet 0/1 
ip address 10.0.2.1 255.255.255.0
no shutdown 
exit

interface ethernet 0/2
ip address 10.0.1.1 255.255.255.0
no shutdown 
exit

配置 BGP 参数

%进入 ASN 2 的 BGP 配置模式
router bgp 2

%公告直连网段
network 10.0.0.0 mask 255.255.255.0
network 10.0.1.0 mask 255.255.255.0
network 10.0.2.0 mask 255.255.255.0

%指定邻居
neighbor 10.0.0.1 remote-as 1
neighbor 10.0.1.2 remote-as 2
neighbor 10.0.2.2 remote-as 2

%修改发往 R4 的下一跳
neighbor 10.0.1.2 next-hop-self

%修改发往 R2 的下一跳
neighbor 10.0.2.2 next-hop-self

exit

exit

5.4 R4

配置接口参数

configure terminal 

interface ethernet 0/0
ip address 10.0.3.2 255.255.255.0
no shutdown 
exit

interface ethernet 0/1
ip address 10.0.1.2 255.255.255.0
no shutdown 
exit

interface ethernet 0/2           
ip address 10.0.5.1 255.255.255.0
no shutdown 
exit

配置 BGP 参数

%进入 ASN 2 的 BGP 配置模式
router bgp 2

%公告直连网段
network 10.0.1.0 mask 255.255.255.0
network 10.0.3.0 mask 255.255.255.0
network 10.0.5.0 mask 255.255.255.0

%指定邻居
neighbor 10.0.1.1 remote-as 2
neighbor 10.0.3.1 remote-as 2 
neighbor 10.0.5.2 remote-as 2

%修改发往 R3(从 AS 内学习的路由表项)的下一跳
neighbor 10.0.1.1 next-hop-self all

%修改发往 R2(从 AS 内学习的路由表项)的下一跳
neighbor 10.0.3.1 next-hop-self all

%修改发往 R5(从 AS 内学习的路由表项)的下一跳
neighbor 10.0.5.2 next-hop-self all

%指定 R2 为路由反射器客户端
neighbor 10.0.5.2 route-reflector-client 

exit

exit

5.5 R5

配置接口参数

configure terminal 

interface ethernet 0/0
ip address 10.0.5.2 255.255.255.0
no shutdown 
exit

interface ethernet 0/1
ip address 192.168.2.1 255.255.255.0
no shutdown 
exit

配置 BGP 参数

%进入 ASN 2 的 BGP 配置模式
router bgp 2

%公告直连网段
network 10.0.5.0 mask 255.255.255.0
network 192.168.2.0 mask 255.255.255.0

%指定邻居
neighbor 10.0.5.1 remote-as 2

exit

exit

5.6 R6

配置接口参数

configure terminal 

interface ethernet 0/0
ip address 10.0.4.2 255.255.255.0
no shutdown 
exit

interface ethernet 0/1
ip address 192.168.1.1 255.255.255.0
no shutdown 
exit

配置 BGP 参数

%进入 ASN 1 的 BGP 配置模式
router bgp 1 

%公告直连网段
network 10.0.4.0 mask 255.255.255.0
network 192.168.1.0 mask 255.255.255.0

%指定邻居
neighbor 10.0.4.1 remote-as 1

exit

exit

5.7 两台 PC

PC1

  • IP:192.168.1.2/24
  • 网关:192.168.1.1

PC2

  • IP:192.168.2.2/24
  • 网关:192.168.2.1

六、检查结果

这里将检查所有路由器的 BGP 路由表,然后 PC1 对 PC2 进行 ping 和 trace。

6.1 R1 路由表

show ip bgp
BGP table version is 9, local router ID is 10.0.4.1
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, 
              r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, 
              x best-external, a additional-path, c RIB-compressed, 
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
 *   10.0.0.0/24      10.0.0.2                 0             0 2 i
 *>                   0.0.0.0                  0         32768 i
 *>  10.0.1.0/24      10.0.0.2                 0             0 2 i
 *>  10.0.2.0/24      10.0.0.2                 0             0 2 i
 *>  10.0.3.0/24      10.0.0.2                               0 2 i
 * i 10.0.4.0/24      10.0.4.2                 0    100      0 i
 *>                   0.0.0.0                  0         32768 i
 *>  10.0.5.0/24      10.0.0.2                               0 2 i
 *>i 192.168.1.0      10.0.4.2                 0    100      0 i
 *>  192.168.2.0      10.0.0.2                               0 2 i

说明一下,> 这个符号表示当前正在使用(最优)的路由表项。Next Hop0.0.0.0 表示这是一个直连网段。下同。

6.2 R2 路由表

show ip bgp 
BGP table version is 9, local router ID is 10.0.3.1
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, 
              r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, 
              x best-external, a additional-path, c RIB-compressed, 
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
 *>i 10.0.0.0/24      10.0.2.1                 0    100      0 i
 * i 10.0.1.0/24      10.0.3.2                 0    100      0 i
 *>i                  10.0.2.1                 0    100      0 i
 * i 10.0.2.0/24      10.0.2.1                 0    100      0 i
 *>                   0.0.0.0                  0         32768 i
 * i 10.0.3.0/24      10.0.3.2                 0    100      0 i
 *>                   0.0.0.0                  0         32768 i
 *>i 10.0.4.0/24      10.0.2.1                 0    100      0 1 i
 *>i 10.0.5.0/24      10.0.3.2                 0    100      0 i
 *>i 192.168.1.0      10.0.2.1                 0    100      0 1 i
 *>i 192.168.2.0      10.0.3.2                 0    100      0 i

6.3 R3 路由表

show ip bgp 
BGP table version is 9, local router ID is 10.0.2.1
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, 
              r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, 
              x best-external, a additional-path, c RIB-compressed, 
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
 *   10.0.0.0/24      10.0.0.1                 0             0 1 i
 *>                   0.0.0.0                  0         32768 i
 * i 10.0.1.0/24      10.0.1.2                 0    100      0 i
 *>                   0.0.0.0                  0         32768 i
 * i 10.0.2.0/24      10.0.2.2                 0    100      0 i
 *>                   0.0.0.0                  0         32768 i
 * i 10.0.3.0/24      10.0.1.2                 0    100      0 i
 *>i                  10.0.2.2                 0    100      0 i
 *>  10.0.4.0/24      10.0.0.1                 0             0 1 i
 *>i 10.0.5.0/24      10.0.1.2                 0    100      0 i
 *>  192.168.1.0      10.0.0.1                               0 1 i
 *>i 192.168.2.0      10.0.1.2                 0    100      0 i

6.4 R4 路由表

show ip bgp 
BGP table version is 9, local router ID is 10.0.5.1
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, 
              r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, 
              x best-external, a additional-path, c RIB-compressed, 
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
 *>i 10.0.0.0/24      10.0.1.1                 0    100      0 i
 * i 10.0.1.0/24      10.0.1.1                 0    100      0 i
 *>                   0.0.0.0                  0         32768 i
 *>i 10.0.2.0/24      10.0.1.1                 0    100      0 i
 * i                  10.0.3.1                 0    100      0 i
 * i 10.0.3.0/24      10.0.3.1                 0    100      0 i
 *>                   0.0.0.0                  0         32768 i
 *>i 10.0.4.0/24      10.0.1.1                 0    100      0 1 i
 * i 10.0.5.0/24      10.0.5.2                 0    100      0 i
 *>                   0.0.0.0                  0         32768 i
 *>i 192.168.1.0      10.0.1.1                 0    100      0 1 i
 *>i 192.168.2.0      10.0.5.2                 0    100      0 i

6.5 R5 路由表

show ip bgp 
BGP table version is 9, local router ID is 192.168.2.1
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, 
              r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, 
              x best-external, a additional-path, c RIB-compressed, 
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
 *>i 10.0.0.0/24      10.0.5.1                 0    100      0 i
 *>i 10.0.1.0/24      10.0.5.1                 0    100      0 i
 *>i 10.0.2.0/24      10.0.5.1                 0    100      0 i
 *>i 10.0.3.0/24      10.0.5.1                 0    100      0 i
 *>i 10.0.4.0/24      10.0.5.1                 0    100      0 1 i
 * i 10.0.5.0/24      10.0.5.1                 0    100      0 i
 *>                   0.0.0.0                  0         32768 i
 *>i 192.168.1.0      10.0.5.1                 0    100      0 1 i
 *>  192.168.2.0      0.0.0.0                  0         32768 i

6.6 R6 路由表

show ip bgp 
BGP table version is 9, local router ID is 192.168.1.1
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, 
              r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, 
              x best-external, a additional-path, c RIB-compressed, 
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
 *>i 10.0.0.0/24      10.0.4.1                 0    100      0 i
 *>i 10.0.1.0/24      10.0.4.1                 0    100      0 2 i
 *>i 10.0.2.0/24      10.0.4.1                 0    100      0 2 i
 *>i 10.0.3.0/24      10.0.4.1                 0    100      0 2 i
 * i 10.0.4.0/24      10.0.4.1                 0    100      0 i
 *>                   0.0.0.0                  0         32768 i
 *>i 10.0.5.0/24      10.0.4.1                 0    100      0 2 i
 *>  192.168.1.0      0.0.0.0                  0         32768 i
 *>i 192.168.2.0      10.0.4.1                 0    100      0 2 i

6.7 PC1 -> PC2

PC1> ping 192.168.2.2 -c 4
84 bytes from 192.168.2.2 icmp_seq=1 ttl=59 time=1.204 ms
84 bytes from 192.168.2.2 icmp_seq=2 ttl=59 time=0.437 ms
84 bytes from 192.168.2.2 icmp_seq=3 ttl=59 time=0.460 ms
84 bytes from 192.168.2.2 icmp_seq=4 ttl=59 time=1.906 ms
PC1> trace 192.168.2.2 -P 1
trace to 192.168.2.2, 8 hops max (ICMP), press Ctrl+C to stop
 1   192.168.1.1   0.842 ms  0.104 ms  0.127 ms
 2   10.0.4.1   0.742 ms  0.182 ms  0.168 ms
 3   10.0.0.2   0.662 ms  0.161 ms  0.164 ms
 4   10.0.1.2   0.584 ms  0.215 ms  0.217 ms
 5   10.0.5.2   0.644 ms  0.331 ms  0.230 ms
 6   192.168.2.2   0.564 ms  0.228 ms  0.224 ms

七、结果分析及改进

从路由器的 BGP 路由表来看,确实可以做到全网互通。

但是有一点不完美的,那就是没有冗余性。

如果 R3 <-> R4 这条线断了的话,那么 R4 左右两边的网络就不能互访了。

我们来仔细看下 R4 的 BGP 路由表就知道了。

(节选)

 *>i 10.0.0.0/24      10.0.1.1                 0    100      0 i
 *>i 10.0.4.0/24      10.0.1.1                 0    100      0 1 i
 *>i 192.168.1.0      10.0.1.1                 0    100      0 1 i

正常来说,去 10.0.0.0/2410.0.4.0/24192.168.1.0/24 这三个网段有 10.0.1.1 方向和 10.0.3.1 方向两条路可以走。但这里只有一条路,这是为什么呢?

很简单,就是因为 R2 没有把 R3 或 R4 配置为路由反射器客户端,导致 R2 只向 R3 和 R4 通报自己的直连网段。

解决方法就是在 R2 上添加以下 BGP 配置:

neighbor 10.0.2.1 route-reflector-client
neighbor 10.0.2.1 next-hop-self all
neighbor 10.0.3.2 next-hop-self all

neighbor 10.0.3.2 route-reflector-client
neighbor 10.0.3.2 next-hop-self all
neighbor 10.0.2.1 next-hop-self all

添加完之后我们再来看下 R4 的 BGP 路由表:

(节选)

     Network          Next Hop            Metric LocPrf Weight Path
 * i 10.0.0.0/24      10.0.3.1                 0    100      0 i
 *>i                  10.0.1.1                 0    100      0 i
 * i 10.0.4.0/24      10.0.3.1                 0    100      0 1 i
 *>i                  10.0.1.1                 0    100      0 1 i
 * i 192.168.1.0      10.0.3.1                 0    100      0 1 i
 *>i                  10.0.1.1                 0    100      0 1 i

同时也看下 R3 的:

(节选)

     Network          Next Hop            Metric LocPrf Weight Path
 *>i 10.0.3.0/24      10.0.2.2                 0    100      0 i
 * i                  10.0.1.2                 0    100      0 i
 * i 10.0.5.0/24      10.0.2.2                 0    100      0 i
 *>i                  10.0.1.2                 0    100      0 i
 * i 192.168.2.0      10.0.2.2                 0    100      0 i
 *>i                  10.0.1.2                 0    100      0 i

这样的话就完美了!

发表评论