BGP路由黑洞,大多是由于BGP设计存在问题导致转发设备上没有路由造成的。很简单的一句话,却很少有人能在各类网工面试中把它讲清楚。我将从路由控制平面和数据转发平面这两个角度入手,帮助大家更好的理解BGP路由黑洞产生的原因。  实验环境如图:各AS内部设备运行OSPF,将lo0口宣告进OSPF进程。  现R1新增业务端口lo1:11.1.1.1/32,R5新增业务端口lo1:55.1.1.1/32。要求:R1和R5的业务端口完成通信。  为了完成不同AS设备之间的通信,我们需要部署BGP: 1、AS100和AS200之间:为了确保AS100和200之间的内部路由可以相互传递,R3和R4通过直连接口建立了EBGP邻居。 2、AS100内部:为了确保R1可以学习从AS200传递过来的业务路由,R1和R3通过环回口0建立了IBGP邻居。 3、AS200内部:为了确保R5可以学习到从AS100传递过来的业务路由,R4和R5通过环回口0建立了IBGP邻居。 4、R1和R5在各自的BGP进程下通告自己的业务端口lo1。 从控制平面入手,检查R1和R5路由表:  可以看到R1和R5都通过BGP学习到了对方业务端口的有效最优路由。

从转发平面入手,测试R1和R5业务端口连通性:  奇怪的现象出现了:R1的业务端口无法与R5的业务端口完成通信。此时,你可能会产生这样的疑问:R1和R5明明通过BGP学到了对方的有效最优路由,为什么二者无法通信呢?  这里我们特别要注意。在处理业务数据无法通信的问题时,一定要从控制平面和转发平面这两个角度入手。R1和R5学习到对方的业务端口路由仅仅解决了源设备和目的设备控制平面的问题。IP转发是一种hop by hop的转发,数据传送沿途的所有设备都必须逐跳来查找路由表进行转发。在确保源设备和目的设备控制平面没有问题的情况下,我们要从转发路径发现问题。  我们分别在R1和R5 traceroute一下: R1发往R5的包到了R2就被丢弃。 R5发往R1的包可以到达R3,到了R2就被丢弃。  看来问题出在R2上,查看R2路由表:  通过查看R2的路由表可知,R2既没有学习到R1的业务路由11.1.1.1/32,也没有学习到R5的业务路由55.1.1.1/32。当业务流量转发到R2时,由于没有去往目的地的路由,流量将在R2上被丢弃。此时,R2上产生了BGP路由黑洞。  想要解决这个问题,归根结底就是要让R2拥有去往11.1.1.1/32的55.1.1.1/32的路由,解决的方法非常之多: 1、最为简单的,就是在R2上创建两条去往R1和R5业务端口的静态路由。然而在路由规模庞大的现网中,这显然是不可行的。 2、除此以外,我们还可以将BGP路由重分布进OSPF使得R2通过OSPF学习到业务路由。然而这种方式,处理不好也会造成环路问题。(涉及的问题很多需要单独一篇说明,包括IBGP重分发进BGP、重分发时挂载route-map、OSPF五类LSA的FA地址等等。) 3、在AS100中,实行BGP的Full-mesh(全互联)。R1、R2、R3之间两两建立BGP邻居关系。