分享多出口冗余网络设计方案

发布时间:2025-12-26 点击:2
分享多出口冗余网络设计方案
一、设计目标
设计一个双出口网络,使用bgp做到最优化路由选择,并且当某一个出口故障时,设备能自动将流量切换到剩下的那个出口;内网同样实现网络冗余和设备冗余;实现网关冗余。
二、设计拓扑
三、设计说明
根据前面的设计目标,我给出了如上图所示的拓扑方案。这个方案更多的只是我对已学过知识的梳理,并未在实际工作中应用过。就实际情况而言,它可能更多的也只适用于理论分析。
在这个方案中,我假设了有两个isp提供商isp1和isp2,使用设备r5模拟isp1,使用设备r6模拟isp2。r5和r6建立ebgp邻接关系来模拟internet网络环境(实际的internet就是不同的bgp as连接在一起的)。
除了r5和r6外的其它所有设备都属于企业内网的设备。
r3和r4为放置于出口线路中的防火墙,在本案例中,它们只用于提供nat功能。在本案例中,我使用了172.16.6.0/24和172.16.7.0/24作为nat地址池,而并没有使用公网地址段来作为nat地址池,这里请不要觉得奇怪。我这里只是一个理论上的案例而已,使用公网或私网地址段都是一样的。好吧,其实是我懒得改了。
r1和r2为网络核心层设备,它们也运行bgp协议,分别与r5和r6建立ebgp邻接关系。r1和r2之间则为ibgp邻接关系。r1和r2分别接收来自r5和r6的internet路由,然后r1和r2再彼此之间交互接收的路由,以实现最优路由选择。同时,r1和r2也会分别向r5和r6通告它们各自所在线路的nat地址池。
r7和r8为网络汇聚层设备。r1和r2的所有物理接口,r7和r8的上行接口位于ospfarea 0中。r7和r8的下行接口位于ospf area 1中。
设备iou1为接入层设备。在我这个案例中,我只使用了一台接入层交换机,如果还有其它的接入层交换机,也可如图所示,将它们分别与r7和r8相连,再划入到不同的ospfarea中。在r7和r8的下行接口上,我使用了vrrp,以实现网关的冗余。
这个案例中,各设备接口的ip地址分配方面,对于横向的链路,左边的接口使用xxx.xxx.xxx.1,右边的接口则使用xxx.xxx.xxx.2;对于纵向的链路,上边的接口使用xxx.xxx.xxx.1,下边的接口则使用xxx.xxx.xxx.2。如r5和r6之间的链路,r5一端的接口使用的ip地址为172.16.3.1,r6一端的接口则使用ip地址172.16.3.2,其它链路以此类推。
四、设备配置
1.配置r5和r6,以使用它们来模拟internet和isp的网络。
//给r5配置bgp,使其使用环回口与r6建立ebgp邻接关系。
r5(config)#routerbgp 64513
r5(config-router)#neighbor172.16.2.1 remote-as 64514
r5(config-router)#neighbor172.16.2.1 update-source loopback0
r5(config-router)#neighbor172.16.2.1 ebgp-multihop 2
r5(config)#iproute 172.16.2.1 255.255.255.255 172.16.3.2
//使用静态路由将地址池172.16.6.0/24分配给企业网络。r5广播其环回口地址172.16.1.1/32,以使其在模拟的internet网络中可被访问。
r5(config)#iproute 172.16.6.0 255.255.255.0 172.16.4.2
r5(config)#routerbgp 64513
r5(config-router)#address-familyipv4
r5(config-router-af)#network172.16.1.1 mask 255.255.255.255
//给r6配置bgp,使其使用环回口与r5建立ebgp邻接关系。
r6(config)#routerbgp 64514
r6(config-router)#neighbor172.16.1.1 remote-as 64513
r6(config-router)#neighbor172.16.1.1 update-source loopback0
r6(config-router)#neighbor172.16.1.1 ebgp-multihop 2
r6(config)#iproute 172.16.1.1 255.255.255.255 172.16.3.1
//使用静态路由将地址池172.16.7.0/24分配给企业网络。r6广播其环回口地址172.16.2.1/32,以使其在模拟的internet网络中可被访问。
r6(config)#iproute 172.16.7.0 255.255.255.0 172.16.5.2
r6(config)#routerbgp 64514
r6(config-router)#address-familyipv4
r6(config-router-af)#network172.16.2.1 mask 255.255.255.255
2.配置r5、r3和r1,使r5和r1的环回口之间可以建立ebgp邻接关系。
//配置r5,使其使用环回口与r1建立ebgp邻接关系。同时,r5向r1下发默认路由。
r5(config)#routerbgp 64513
r5(config-router)#neighbor192.168.1.1 remote-as 64512
r5(config-router)#neighbor192.168.1.1 update-source loopback0
r5(config-router)#neighbor192.168.1.1 ebgp-multihop 3
r5(config-router)#address-familyipv4
r5(config-router-af)#neighbor192.168.1.1 default-originate
r5(config)#iproute 192.168.1.1 255.255.255.255 172.16.4.2
//配置r3,使其有去往r1环回口192.168.1.1的路由。r3使用默认路由出网。将地址池172.16.6.0/24指向null0接口以防止路由环路。
r3(config)#iproute 192.168.1.1 255.255.255.255 192.168.2.2
r3(config)#iproute 0.0.0.0 0.0.0.0 172.16.4.1
r3(config)#iproute 172.16.6.0 255.255.255.0 null0
//配置r1,使其使用环回口与r5建立ebgp邻接关系,同时广播地址池172.16.6.0/24。
r1(config)#routerbgp 64512
r1(config-router)#neighbor172.16.1.1 remote-as 64513
r1(config-router)#neighbor172.16.1.1 update-source loopback0
r1(config-router)#neighbor172.16.1.1 ebgp-multihop 3
r1(config-router)#address-familyipv4
r1(config-router-af)#network172.16.6.0 mask 255.255.255.0
r1(config)#iproute 172.16.1.1 255.255.255.255 192.168.2.1
r1(config)#iproute 172.16.6.0 255.255.255.0 null0
//对r1去往r5的路由更新进行过滤,以只允许广播地址池172.16.6.0/24。
r1(config)#ipprefix-list prefixlist1 permit 172.16.6.0/24
r1(config)#routerbgp 64512
r1(config-router)#address-familyipv4
r1(config-router-af)#neighbor172.16.1.1 prefix-list prefixlist1 out
3.配置r6、r4和r2,使r6和r2的环回口之间可以建立ebgp邻接关系。
//配置r6,使其使用环回口与r2建立ebgp邻接关系。同时,r6向r2下发默认路由。
r6(config)#routerbgp 64514
r6(config-router)#neighbor192.168.1.2 remote-as 64512
r6(config-router)#neighbor192.168.1.2 update-source loopback0
r6(config-router)#neighbor192.168.1.2 ebgp-multihop 3
r6(config-router)#address-familyipv4
r6(config-router-af)#neighbor192.168.1.2 default-originate
r6(config)#iproute 192.168.1.2 255.255.255.255 172.16.5.2
//配置r4,使其有去往r2环回口192.168.1.2的路由。r4使用默认路由出网。将地址池172.16.7.0/24指向null0接口以防止路由环路。
r4(config)#iproute 192.168.1.2 255.255.255.255 192.168.3.2
r4(config)#iproute 0.0.0.0 0.0.0.0 172.16.5.1
r4(config)#iproute 172.16.7.0 255.255.255.0 null0
//配置r2,使其使用环回口与r6建立ebgp邻接关系,同时广播地址池172.16.7.0/24。
r2(config)#routerbgp 64512
r2(config-router)#neighbor172.16.2.1 remote-as 64514
r2(config-router)#neighbor172.16.2.1 update-source loopback0
r2(config-router)#neighbor172.16.2.1 ebgp-multihop 3
r2(config-router)#address-familyipv4
r2(config-router-af)#network172.16.7.0 mask 255.255.255.0
r2(config)#iproute 172.16.2.1 255.255.255.255 192.168.3.1
r2(config)#iproute 172.16.7.0 255.255.255.0 null0
//对r2去往r6的路由更新进行过滤,以只允许广播地址池172.16.7.0/24。
r2(config)#ipprefix-list prefixlist1 permit 172.16.7.0/24
r2(config)#routerbgp 64512
r2(config-router)#address-familyipv4
r2(config-router-af)#neighbor172.16.2.1 prefix-list prefixlist1 out
4.配置r1和r2以建立ibgp邻接关系。
r1和r2使用环回口建立ibgp邻接关系。r1和r2去往彼此环回口的路由采用静态路由,而不使用ospf,并且,还需要指定下一跳为自身(next-hop-self)。
r1(config)#routerbgp 64512
r1(config-router)#neighbor192.168.1.2 remote-as 64512
r1(config-router)#neighbor192.168.1.2 update-source loopback0
r1(config-router)#address-familyipv4
r1(config-router-af)#neighbor192.168.1.2 next-hop-self
r1(config)#iproute 192.168.1.2 255.255.255.255 192.168.4.2
!
r2(config)#routerbgp 64512
r2(config-router)#neighbor192.168.1.1 remote-as 64512
r2(config-router)#neighbor192.168.1.1 update-source loopback0
r2(config-router)#address-familyipv4
r2(config-router-af)#neighbor192.168.1.1 next-hop-self
r2(config)#iproute 192.168.1.1 255.255.255.255 192.168.4.1
5.配置r3和r4防火墙。
在实际生产网络中,防火墙应该是担当nat和防***的功能的。但在我这个案例中,我是用路由器来模拟防火墙的(虽然图标也是防火墙的)。所以下面的nat配置还是按照在路由器上配置nat的步骤来的。只是说,在实际生产网络中,一般是使用真正的防火墙来进行nat转换和防***,而不是使用路由器来进行nat(具体原因应该跟设备性能参数有关,我也不是很确定~_~)。
另外,isp分配过来的地址池应该是公网ip地址池,而不是应该图中所示的172.16.6.0/24或172.16.7.0/24这两个私网ip地址段,只不过我这里用了私网地址段来作为地址池,大家知道就好。
还应该注意的是,在下面配置设备时,我并没有使用整个c类的地址段(如172.16.6.0/24),而是去掉了该地址段前面的两个地址和后面的两个地址,这是因为在实际网络中,使用这些地址(如172.16.6.254)作为源地址去访问某些服务器可能会有问题,所以最好把它们去掉。
//需要注意,因为r1要与r5建立ebgp,所以不能对源192.168.1.1进行nat转换
r3(config)#ipaccess-list extended acl1
r3(config-ext-nacl)#denyip host 192.168.1.1 any
r3(config-ext-nacl)#permitip 192.168.0.0 0.0.255.255 any
r3(config)#ipnat pool natpool1 172.16.6.2 172.16.6.253 netmask 255.255.255.0
r3(config)#interfaceg2/0
r3(config-if)#ipnat inside
r3(config)#interfaceg1/0
r3(config-if)#ipnat outside
r3(config)#ipnat inside source list acl1 pool natpool1 overload
//需要注意,因为r2要与r6建立ebgp,所以不能对源192.168.1.2进行nat转换
r4(config)#ipaccess-list extended acl1
r4(config-ext-nacl)#denyip host 192.168.1.2 any
r4(config-ext-nacl)#permitip 192.168.0.0 0.0.255.255 any
r4(config)#ipnat pool natpool1 172.16.7.2 172.16.7.253 netmask 255.255.255.0
r4(config)#interfaceg1/0
r4(config-if)#ipnat inside
r4(config)#interfaceg2/0
r4(config-if)#ipnat outside
r4(config)#ipnat inside source list acl1 pool natpool1 overload
6.查验路由表
上面配置完后,就可以看到r1和r2通过bgp获取到了正确的路由,并且根据bgp选路原则,它们的所选择的路径也是正确的。
到这里,出口的路由就基本做好了。接下来,要解决内网路由问题。
7.设置r3和r4上的回程路由
要给r3和r4添加指向内网的路由(假设内网使用的地址范围为192.168.0.0/16)。
r3(config)#iproute 192.168.0.0 255.255.0.0 192.168.2.2
!
r4(config)#iproute 192.168.0.0 255.255.0.0 192.168.3.2
8.给r1、r2、r7和r8配置ospf
//将r1的所有接口都加入到ospf area 0中,但不包括环回口
r1(config)#routerospf 1
r1(config-router)#network192.168.2.2 0.0.0.0 area 0
r1(config-router)#network192.168.4.1 0.0.0.0 area 0
r1(config-router)#network192.168.5.1 0.0.0.0 area 0
r1(config-router)#network192.168.7.1 0.0.0.0 area 0
//将r2的所有接口都加入到ospf area 0中,但不包括环回口
r2(config)#routerospf 2
r2(config-router)#network192.168.3.2 0.0.0.0 area 0
r2(config-router)#network192.168.4.2 0.0.0.0 area 0
r2(config-router)#network192.168.6.1 0.0.0.0 area 0
r2(config-router)#network192.168.8.1 0.0.0.0 area 0
//将r7与核心层交换机相连的接口都加入到ospf area 0中,与接入层交换机相连的接口则加入到ospf area 1中
r7(config)#routerospf 7
r7(config-router)#network192.168.5.2 0.0.0.0 area 0
r7(config-router)#network192.168.8.2 0.0.0.0 area 0
r7(config-router)#network192.168.9.252 0.0.0.0 area 1
r7(config-router)#passive-interfaceg3/0 //本案例中,该接口与接入层交换机相连
//将r8与核心层交换机相连的接口都加入到ospf area 0中,与接入层交换机相连的接口则加入到ospf area 1中
r8(config)#routerospf 8
r8(config-router)#network192.168.6.2 0.0.0.0 area 0
r8(config-router)#network192.168.7.2 0.0.0.0 area 0
r8(config-router)#network192.168.9.253 0.0.0.0 area 1
r8(config-router)#passive-interfaceg3/0 //本案例中,该接口与接入层交换机相连
9.设置r1和r2下发ospf默认路由
对于r1和r2,都需要设置为下发ospf默认路由。至于这两条默认路由的初始度量值,个人觉得可以不进行修改,让它们保持一样。如果为了排错时能更加简便,也可以将它们的初始度量值修改为不一样,同时设置metric-type为2,这样流量路径就会保持一致,而不会在上行路径间负载均衡。
r1(config)#routerospf 1
r1(config-router)#default-informationoriginate metric-type 1
!
r2(config)#routerospf 2
r2(config-router)#default-informationoriginate metric-type 1
10.配置网关冗余协议vrrp
我将网关设置在汇聚层交换机上,并使用公有网关冗余协议vrrp。就实际配置情况来说,我将r7和r8的g3/0口都加入到vrrp group 1,并修改r7和r8的g3/0接口的vrrp优先级,使r7成为master,r8为backup。
//配置r7的g3/0接口
r7(config)#interfaceg3/0
r7(config-if)#noshutdown
r7(config-if)#ipaddress 192.168.9.252 255.255.255.0
r7(config-if)#vrrp1 ip 192.168.9.254
r7(config-if)#vrrp1 priority 102
//配置r8的g3/0接口
r8(config)#interfaceg3/0
r8(config-if)#noshutdown
r8(config-if)#ipaddress 192.168.9.253 255.255.255.0
r8(config-if)#vrrp1 ip 192.168.9.254
r8(config-if)#vrrp1 priority 101
五、补充说明
配置完上面的一堆后,这个网络基本就实现了故障冗余自动切换的功能了。但实际使用时,还需要进一步深化配置,因为可能会存在因路由协议收敛导致的切换不及时的问题。比如,正常情况下,r8去往172.16.2.1是通过r2那个出口出去,假设此时r2出故障挂掉了,那么r8会把所有流量都发往r1,然而由于r1此时还没有意识到r2挂了,只有等r1和r2之间的bgp会话超时后,r1才会意识到r2挂了。在这之前,r1还是会把r8发过来的流量都转发给r2,但由于r2出故障了,因此这些流量就无法顺利地被转发到172.16.2.1。也就是说,在这段时间内,是会有丢包的。只有当bgp重新收敛后,数据包的转发才能恢复正常。也有一些技术可以加快bgp的收敛速度,不过我没研究过,所以暂时就这样了。
接入层交换机部分,没有什么必须要进行的配置。接入层交换机可以使用傻瓜交换机,也可以是可网管交换机。最好是可网管交换机,就可以部署各种接入控制特性,这样就可以少去很多麻烦。当然,接入层交换机这里其实还是存在单点失效的问题,可能使用具有冗余引擎和冗余电源的设备可以稍微缓解这个问题,但实际上应该没有企业这么有钱吧,也没有这么做的必要吧。
关于dns的设置问题。在我这个设计方案中未涉及到dns的问题,但实际网络中,dns的设置会影响到网络出口的选择,不同出口上流量的多少,及网络的体验问题。一般来说,isp1会给你两个dns地址,isp2也会给你两个dns地址。我个人是认为,要么主用isp1提供的线路,要么主用isp2提供的线路。也就是说,要么只使用isp1提供的dns地址,要么只使用isp2提供的dns地址。如果要让两条出口线路上的流量更加均衡一点,可能可以在一部分区域中使用isp1提供的dns地址,在另一部分区域中使用isp2提供的dns地址,不过因为没有实际这样做过,所以也不确定是否的确可行。


什么样的企业需要选择网络营销外包公司来维护推广
泰州到晋城物流专线
深圳到济宁物流专线
网站优化效果不理想常见四大问题
福州到滦南物流专线
如何掌握seo优化的技巧?
成都到万宁物流专线
伊川县公司网站建设网页设计网站开发多少钱?