大家好,本期案例中,强叔将为大家介绍企业出口BGP的技术案例,希望能给大家带来一定的收获。
大家都知道,防火墙在企业网络中所处的位置一般是在出口,也就是作为出口网关来使用。对于一般的中小企业,在出口防火墙上配置静态路由就能保证企业内网与Internet之间的访问,但对于大型企业来说静态路由缺乏灵活性和可维护性,是不建议使用的。这里,强叔和大家一起探讨下BGP路由在大型企业出口的基本配置,这里强调是基本配置,就是不包括各种BGP属性等高级配置的。可能大家觉得很简单,但是在实际配置的时候往往会出现这样和那样的问题。当然很熟悉BGP路由的小伙伴们除外。
言归正传,首先我们来看一个组网,左侧是以防火墙为出口的实际组网,右侧为使用eNSP模拟的组网环境。如下图。
网络环境描述如下:
两台防火墙作为企业的网关,通过主备备份的方式部署在企业的出口。
企业内网通过OSPF协议学习内网路由。
两台防火墙分别通过BGP协议与外网两个ISP建立EBGP邻居关系。
防火墙上配置NAT,保证私网用户能够访问Internet。(用于从ISP1访问Internet的地址池:110.1.1.1~110.1.1.254;用于从ISP2访问Internet的地址池:210.1.1.1~210.1.1.254)
这里说明一下,由于图比较小,一个图无法标出全部地址,只能在两个图中给出。模拟环境中R5的Loopback 1地址代表外网服务器,CLIENT1代表用户区1中的一个用户。现给出基本配置如下(说明:这里只给出一条(左侧)线路的路由设备的相关配置,其它的配置部分请参见《USG9000V3R1C20典型配置案例》的路由-企业BGP部分)。
FW1
bgp 10
peer 100.1.1.2 as-number 20
peer 200.1.1.2 as-number 30
#
ipv4-family unicast
undo synchronization
peer 100.1.1.2 enable
peer 200.1.1.2 enable
ospf 1
default-route-advertise always
area 0.0.0.0
network 10.1.1.0 0.0.0.255
R3
bgp 20
peer 100.1.1.1 as-number 10
peer 101.1.1.1 as-number 10
peer 102.1.1.2 as-number 40
#
ipv4-family unicast
undo synchronization
peer 100.1.1.1 enable
peer 101.1.1.1 enable
peer 102.1.1.2 enable
R5
bgp 40
peer 102.1.1.1 as-number 20
peer 202.1.1.1 as-number 30
#
ipv4-family unicast
undo synchronization
network 220.1.1.1 32
peer 102.1.1.1 enable
peer 202.1.1.1 enable
按照如上配置,我们在FW1上使用display bgp peer命令查看BGP的邻居建立情况,显示都为Established,说明成功建立邻居关系。
使用display bgp routing-table命令查看BGP路由表,能够看到外网220.1.1.1网段的路由。
此时,查看IP路由表,你也能看到这条路由
然而你在FW1上ping 220.1.1.1,却发现无法ping通。大家知道为什么吗?这个问题针对部分初学路由的人来说可能是个困惑,“路由都学习到了,为什么还ping不通” 年轻时的强叔也有过这个疑问。
其实答案很简单:路由是双向的,有去的路由,就要有回的路由。这个时候,你在R5上查看路由表,发现是没有到FW1的路由。
如果你要在FW1上ping通220.1.1.1,你就需要在FW1上把自己的接口网段通告到BGP路由中,怎么通告,方法很多。
2 可以引入直连路由:[FW1-bgp] import-route direct
2 可以通过network命令发布接口的网段(推荐使用方法):[FW1-bgp] network 100.1.1.1 24
然后你再在R5上查看BGP路由表,会发现如下路由,并且能够ping通220.1.1.1。
但是针对本场景,我们是需要内网用户能够访问外网,也就是模拟环境中的CLIENT1访问R5的loopback1地址220.1.1.1,这个时候我们应用怎么配置呢?
企业内部网络是通过OSPF协议学习路由,现在要想让外部网络学习到内部网络的路由,很多初学者,很自然的想到在出口网关FW1上把两种路由互相引入,如:
[FW1-bgp] import-route ospf
这种方法在实际网络中是非常不可取的,这样会把大量的内网路由引入到Internet中,像本例一样就更不可行,因为内部网络是私网地址。实际的做法是,把内网需要对外发布的路由在BGP中network通告出去,本例中是把地址池的地址网段对外通告,如下:
[FW1-bgp] network 110.1.1.0 255.255.255.0
[FW1-bgp] network 210.1.1.0 255.255.255.0
此时,我们在R5上通过display bgp routing-table命令查看BGP路由表。
发现BGP路由表中,路由根本没有变化,对于这个问题大家考虑下是为什么(1分钟)?
答案是:地址池中是地址的集合,而在BGP中对外通告的是路由,问题就在这,BGP要通过路由,但地址池中是地址,如何让地址变成路由就是关键,具体的做法是把地址池中的地址网段先配置成黑洞路由,如:
这时,再在R5上通过display bgp routing-table命令查看BGP路由表。发现地址池网段的路由都已经存在。
路由都有,现在可以验证CLIENT1能否访问R5的loopback1地址220.1.1.1了,很显然只要其它配置没有问题,肯定是可以访问的。
【拍案惊奇】
此案例的惊奇在于实际的配置都是非常的简单,但是还是容易出错,所以案例的写作不是凭空想象,必须是来自于实际且要经过验证。总结本案例,其实就是告诉大家三条内容:
1. 路由是双向的,有去的路由,必须有回的路由。
2. 两种路由协议在同一个设备上出现时,要谨慎互相引入。
3. NAT地址池中的地址要在路由协议中发布出去,需要提前把地址池地址变成路由,然后才能够发布去。
【强叔问答】
本例中虽然主要是说BGP,但FW1配置的部分有OSPF相关的内容,如下:
ospf 1
default-route-advertise always
area 0.0.0.0
network 10.1.1.0 0.0.0.255
强叔的问题是,为什么要配置default-route-advertise always命令?如果配置default-route-advertise命令(去掉always)是否可行,为什么?