input, output.

iBGP中“network”使用的注意事项

最近,我在参考《TCP/IP 路由技术》(第二卷)自学BGP方面的内容。其中在讨论无IGP的IBGP环境的实验当中,遇到了一个可能容易出问题的地方。

实验拓扑图如下:

重点关注Vail/Aspen/Telluride这三台路由器,他们都属于AS100,其中Vail/Telluride都属于边界网关路由器,连接不同的其他AS。在AS100中,没有运行IGP,因此作为中转AS,AS100中的路由器将建立全连接的IBGP。

3台路由器的BGP相关配置如下:
    Vail:
        router bgp 100
            network 192.168.1.208 mask 255.255.255.252
            network 192.168.1.224 mask 255.255.255.252
            neighbor 192.168.1.197 remote-as 100
            neighbor 192.168.1.210 remote-as 300
            neighbor 192.168.1.222 remote-as 100
            neighbor 192.168.1.225 remote-as 200
    Aspen:
        router bgp 100
            network 192.168.1.196 mask 255.255.255.252
            network 192.168.1.220 mask 255.255.255.252
            neighbor 192.168.1.197 remote-as 100
            neighbor 192.168.1.221 remote-as 100
    Telluride
        router bgp 100
            network 192.168.1.204 mask 255.255.255.252
            neighbor 192.168.1.198 remote-as 100
            neighbor 192.168.1.205 remote-as 100
            neighbor 192.168.1.221 remote-as 100

如上述配置之后,我们关注从Tahoe上ping 192.168.1.205的数据包。因为Telluride上的BGP进程已经将网络192.168.1.204/30添加到AS100当中进行宣告,所有Tahoe上会学习到一条EBGP路由:

192.168.1.204/30 192.168.1.209(AS100)

而在Vail上,由于Vail月Telluride的iBGP对等体已经建立,也有一条路由:

192.168.1.204/30 192.168.1.197

我们注意到,这条路由的下一条地址是192.168.1.197,在没有IGP的情况下,Vail如何处理去往192.168.1.197的数据包呢?答案是递归查询。Aspen亦为Vail的一个iBGP对等体,并且Aspen将网络192.168.1.196/30添加到了AS100的BGP进程当中,所以Vail上也会有这样一条路由:

192.168.1.196/30 192.168.1.222

通过这两条路由的递归,Vail上,去往192.168.1.205的数据包可以经由Aspen交给Telluride,最后交给Alta。

到这里为止,没有问题,数据包可以正常的被传送。但是,如果我们在Telluride的BGP进程中也把网络192.168.1.196/30添加进去,会出现什么情况?

    Telluride
        router bgp 100
            network 192.168.1.196 mask 255.255.255.252
            network 192.168.1.204 mask 255.255.255.252
            neighbor 192.168.1.198 remote-as 100
            neighbor 192.168.1.205 remote-as 100
            neighbor 192.168.1.221 remote-as 100

实验表明,Tahoe无法ping通192.168.1.205(或者Alta所在AS的其他网络)。为什么会出现这种情况?

在关注IGP时,特别是OSPF协议时,“network”这条命令的作用是将所匹配的接口添加到OSPF进程当中,让这个接口可以产生OSPF相关报文,与其他路由器协商。而在BGP当中,“network”命令的作用发生了改变,作用是将添加进来的网络加入到BGP通告的NLRI(网络层可达信息)当中去,即高速其他BGP对等体可以经由通告者到达所通告的网络。对于本例来讲,Telluride会向它的BGP对等体宣称,经由它可以到达192.168.1.196/30这个网络。直接受影响的是Vail(Aspen上是直连路由,无影响)。Vail上会产生一条BGP路由:

192.168.1.196/30 192.168.1.197

那么对于Vail,去往192.168.1.220/30将会有两条BGP路由:

192.168.1.196/30 192.168.1.222
192.168.1.196/30 192.168.1.197

Vail会如何去处理并行等价路径?iBGP只能使用一条路径,无法负载均衡。那么会选择哪一条呢?此处的关键在于BGP路由的选路优先排序:

  1. 先比较权值WEIGHT属性,此属性cisco私有,不可传递给别的路由器,一般改这个属性就在要实现选路的本机上操作。

  2. 如1一致则比较LP,值越大越优先,默认100,此属性影响出AS流量。在AS边界路由器连其他AS的路由器的接口上做入流向的操作,抓取路由,设置LP,然后传给自己的所在AS内的IBGP邻居,告知其关于哪条路由该走哪条路径。只能在一个AS内传,所以不能在EBGP邻居上改让其传到另外一个AS内生效。

  3. 如果2一致,当一个路由器既通过本地学到这条路由,又通过BGP邻居学到这条路由,那么优先选用本地的路由。

  4. 比AP长度,越短越优先。如果要实现忽略这步骤,直接不比较AP,那么可输入命令“BGP BEST-PATH AS-PATH IGNORE”。如若要限制收到的路由关于AP的长度 可使用“BGP MAXAS-LIMIT 100”,收到的路由的AP长度达到100就会直接从BGP表中删除,IOS还会出提示信息。如果要让ROUTER忽略此属性,可在要比较AP长度的路由器上输入“BGP BESTPATH AS-PATH IGNORE”,要限制收到的路由所携带的AP的长度可输入“BGP MAXAS-LIMIT 3”此命令会把BGP表中携带AP长度超过3的路由条目都删除掉。

  5. 比起源,I优于E优于INCOM(?)。

  6. 比MED,越低越好。

  7. 通过EBGP邻居和IBGP各自收到一条一样的路由的话,那么优选EBGP收到的路由。

  8. 离传路由的上跳的距离,前提是有IGP,就比IGP的METRIC,如果是RIP要注意跳数一致就比不出这点了;如果是EIGRP或者OSPF之类的就比METRICI  COST了!如果没有起IGP就比下一步。

  9. 比较发言者RID,越小越优。

  10. 比较发言者更新源地址,越小越好。

本例中,应该关注第9条。

可以看到,Aspen的RID为192.168.1.222;Telluride的RID为192.168.1.206。Telluride的RID更低,来自它的路由更新优先级更高,会被认为是最佳路径:

那么,Vail最终的路由表如下:

可以看到,Vail已经丢失了去往192.168.1.204/30的路由,因为无法完成递归(去往192.168.1.204/30要交给192.168.1.197,而去往192.168.1.196/30依然是交给192.168.1.197)。所以通信失败了。为了验证上述路由优先,接下来我们将Aspen的RID改得比Telluride更低,可以观察到,路由更新到了期望情况:

通过这个实验我们注意到,在进行iBGP部署之时,一定要注意“network”命令的使用,尽量使用IGP完成AS内部的路由学习。

评论

© Sy's Log | Powered by LOFTER