一,前言
高校校园网是高校发展的重要基础设施,是提高学校教学和科研水平不可缺少的支撑环境。校园网一方面为学校提供各种本地网络应用,另一方面是沟通学校内外部网络的桥梁。建立起可运营、可管理的校园网可以保证教学、科研、管理和服务等重要业务稳定地运行,可以让广大教职员工和学生充分享受校园网带来的便利。
随着校园网信息化建设的开展,教学、科研、办公、生活对于校园网平台的依赖性越来越强。国内众多高校校园网经过多年持续不断的基础设施建设和应用提升,已经形成了较为稳定的基础架构和相对丰富的应用平台。在师生们利用校园网获得更多更及时的教育资源的时候,一些网络管理方面和应用方面的问题被暴露了出来,严重影响了校园网络的健康发展。
二,常见问题
相信所有的大学在出口上或多或少都会碰到以下几个困惑:
1、出口带宽大,需要设备的NAT性能强
一般按照传统,客户都习惯在出口部署防火墙或者路由器。但是不管是防火墙或者路由器,其核心作用都不是用来做NAT的。
防火墙本身的核心作用是用来做内网安全区域的划分,所以其硬、软件设计也是围绕这个核心思路来的。防火墙处理并发连接数等性能并不算太强,往往100万级就不算小了,并且因为其自身的硬件,软件架构,NAT会大量消耗设备的性能。所以NAT后的吞吐量和平时标称吞吐量相差甚远。
路由器本身的核心作用是用来处理各种路由协议,根据路由表进行高速的3层数据包转发,所以其软,硬件设计也为了以上目的,NAT同样会大量消耗其资源,且路由器也无法提供高效的NAT体验和众多的NAT功能。
2、出口提供商众多,出口环境复杂
基本上,所有的大学出口链路都不止一条,除了教育网出口以外,可能还有电信,联通,移动等多家运营商。所以将外向访问请求如何在大量的链路出口之间进行优化选路,让各个链路能够充分利用又互相备份就是一个问题。
3、需要对外发布的应用很多,占用了大量的公网IP
学校内部不同的部门,大量不同的应用系统网站需要对外进行发布。但是,随着2012年2月份,全球公网Ipv4地址分配完毕,国内的公网Ipv4地址越来越紧张了。各大运营商随着自身地址的资源的匮乏,对用户分配IP地址也越来越“小气”了。这样一来,紧张的Ipv4地址和越来越多需要发布的应用网站就行程了矛盾。
4、出口设备需要能够与内部ipv6网络的无缝结合,便于未来的发展
随着大学校园里Ipv6网络的日益成熟与扩大,出口设备也迫切需要能够与内部校园网的Ipv6网络互联,这充分要求出口设备能同时支持Ipv4和Ipv6网络,且能实现相互之间的互访:比如能实现Ipv4的访问请求到Ipv6服务器的映射,或者反之。
5、在多条出口链路上发布相同的应用,实现智能域名解析
许多大学在对外发布应用的时候,都会碰到一个问题:出口链路有多个提供商,电信、联通,移动等,如果在每个出口链路上都对同一个的应用做映射IP,那在公网dns上设置域名解析的时候,应该解析到哪条链路出口上的映射IP呢?而如果只使用一个运营商的IP,那造成其他运营商用户访问缓慢如何解决?
6、在大学里对外发布的的应用中,如何实现应用的冗余性,稳定性,动态扩展性
大学对外发布了诸多应用,但是许多应用都是部署在一台服务器上,缺乏冗余性,一旦该服务器出现问题,则部署在上面的应用就会中断;而另一些部署在一台服务器上的应用,当应用负载增高,服务器满负荷工作的时候,却无法动态扩展。
三,解决方案
我们接下来会以如何解决以上6点为主线,详细介绍我们针对对大学出口的详细解决方案。
一、大流量的出口NAT问题
相信在说起出口设备的时候,大家首先都会想到防火墙,路由器,这算是一个约定俗成的共识了,因为大家都这么做。但是说起来,防火墙做NAT却有几个缺点:
A、防火墙普遍并发数比较低,100万,200万都算不低的了。
这个其实不算缺点,因为防火墙本身的本质工作是进行安全区域的划分,外网,内网,DMZ之间的互访,而这种互访对并发连接数要求其实并不算大。因此防火墙的软件设计注定了其并发性能不会太高。而NAT对防火墙而言,只能算一个附带功能,所以其NAT性能是也不会是防火墙主要关心的目标。这样一来,一个NAT性能一般,一个并发连接数不大,如果将防火墙放在出口做NAT,一来碰到异常的大流量,大并发(***,病毒),都可能会导致防火墙出现问题。
B、用防火墙在出口做安全防护,本身没有太大的意义
把防火墙用在出口,通常想法是在NAT的同时保护安全,但是这样真的有用吗?
防火墙用在出口主要有2个作用:从内到外流量的NAT转换和从外到内访问的映射。从内到外的正常访问通常不存在安全问题,因为这个只是单向的访问,只能从内网主动访问外网(不包括中毒机器主动向外发起连接),而通常的***类型的访问,都是从外网向内网发起的。而在防火墙上,从外向内的途径只有一种,就是公网到内网的映射。通常防火墙上做的映射,都是4层映射,结果就是所有的4层访问请求统统转发到内网服务器,当然也包含了***的请求。从这个层面来说,防火墙放在出口,如果是以安全为目的,其实是无效的。
同理,路由器本来是用来处理各种动态静态路由协议,同时进行3层数据包的转发的,用路由器来做NAT,即便是加上特制的NAT板卡,也算是牛头不对马嘴的使用了。所以从以上分析可以看出,路由器和防火墙,其实都不适合用来做出口NAT设备。
那么,理想的出口NAT设备应该具备那些方面的性能特性呢?
1、并发连接性能要非常强。
对于高校而言,除了带宽大以外,用户数也是非常多的,而大部分学生都会运行众多的P2P类应用(视频,下载),这些P2P应用会产生大量的连接。从而导致并发连接数几十倍甚至上百倍于实际上网用户数。所以,出口设备的并发连接数至少需要达到千万级,越高越好。
2、4层新建连接数
并发连接数这个参数,同样是一个重要的指标。这标志了设备同时能处理的新建连接的上限,在面对ddos类的***时,该参数越大越表示设备能抗住的异常流量的能力越大。
3、吞吐量
吞吐量这个概念,通常是指非NAT的流量,所以如果是专门部署在出口做NAT设备,则这个数字不能简单的等同于出口带宽,而应该起码10倍于出口带宽,这样才能为NAT消耗资源预留下足够的空间
二、出口提供商众多,出口环境复杂。
各大学的出口结构都类似,一般都为1条或者多条运营商的链路加上教育网出口。大部分的高校外出流量策略都比较简单,可能采用源地址选路,或者简单的靠路由表区分外出流量。但是这些都不能让流量最优化的利用带宽。有如下几个问题:
DNS问题
通常各条链路出口的带宽利用率和dns解析息息相关。即便有1条电信和1条联通,两条带宽相等的链路,如果内网采用了电信的dns服务器,则会出现电信链路上带宽利用率远高于联通链路的情况,这是因为很多ICP(新浪,搜狐类型的网站)会根据发起域名解析的源地址进行判断,如果是电信的地址,则只会返回电信的IP。所以如果只采用某一个运营商的dns,则必然会出现这个问题,从而导致某条出口链路负载很高,而其他链路很低。有些用户会考虑用设置链路阀值的方式来进行流量处理:既当某一条链路的带宽利用率超过阀值以后,就将原本该分配到该链路的流量分配到其他链路上去。但是这样处理会导致访问的问题:比如电信链路上的带宽大,就将原本就该走电信的流量分配到联通的出口,但是这样一来,访问电信的目标地址却从联通链路出去,能否可达都是一个问题了,更别说提高访问速度了。所以这种方式在不同运营商的链路出口的环境下,不觉得实际操作的价值。还有一种部分用户觉得在出口设备上
选路问题
如何为外出流量选择合适的出口链路,这是一个很复杂的问题。简单的有根据目标地址选路,比如电信走电信,联通走联通。即便是这种最简单的处理方式,也会遇到诸如如何快速安全更新路由表的问题。而其他的是否能根据源端口,目标端口,源IP,目标IP,协议等各种方式来选路,都是各个不同情况下可能会遇到的需求。所以灵活的选路策略是对高校出口的很大的挑战。
NAT地址池转换问题
通常,由于高校用户众多,出口链路带宽大,所以不同链路上用来做NAT的地址肯定不止一个,通常会是一个地址池的方式来提供。但是这个时候就会出现问题了,如果同一个用户外出的对同一个应用的访问请求,被分别NAT成不同的地址,则一些应用或者网站的访问就会出现问题。比如淘宝,当登录认证的时候,会记录访问者的源IP地址,如果在访问过程中发生了改变,则会提示重新登录。一般如果用一个公网IP地址来做转换,不会有什么问题。不过基本上所有的高校,因为上网用户多,都不可能只用一个公网IP来做转换,通常都会用有多个IP组成的地址池。这个时候如果在访问过程中,NAT的源IP发生了改变,就会出现问题。而如果单独为这些应用分配IP来做源NAT,又会出现资源浪费的情况。
理想的出口设备在多运营商出口方面应该具备如下的基本功能特性:
1、能够对DNS包进行拦截和重分发的处理
理想状态下,出口设备应该能够拦截所有发往外网的dns包请求,并根据不同运营商链路的带宽比例,将dns请求包的目的dns服务器的IP地址进行修改,发往指定的dns服务器。例如,电信100兆,联通50兆,则将所有dns请求包的3分支2修改后发往电信的dns服务器进行解析,将剩下的3分之一发往联通进行解析,这样所有的http,https类型的流量就能够大概的按照2比1的方式发往电信及联通出口链路。
2、灵活的选路策略
通常,高校的外出流量不能只是简单的电信走电信,联通走联通或者诸如之类的简单处理。各种不同的协议或者流量,很有可能需要分门别类的处理。一般来说,我们可能需要出口设备能同时支持以下各类策略处理方式:
1、设备应该内置各个运营商的IP地址库,且可以通过tftp或者ftp的方式按照设定的频率进行自动更新,并且不能中断设备正常的对上网流量的处理,以避免需要更新路由表时候,还需要冒着断网的风险进行操作。
2、要能够根据内置的各个运营商的IP地址库,将不同的外出流量根据目标IP所属的不同运营商,分别分配到不同的链路上去,并进行匹配的NAT,既是说,从哪个链路出去,就要用那条链路上的地址池来进行NAT。
3、要能够根据协议及目标端口进行选路。我们经常碰到p2p等应用占用了大量出口带宽的情况,而p2p协议的数据连接通常都是使用的udp协议,在未使用专业流量设备的情况下,我们可能需要将所有udp协议数据包或者指定端口的udp包只从一条链路上发送出去,这样一来,即限制了p2p类型流量占用主要的链路带宽。
4、要能够根据源IP方式进行选路。高校内通常都是大量使用教育网公网ip的服务器,而这些服务器的外出请求只能从教育网出口出去,所以简单快捷的源IP方式选路也是必需的。
5、能自动实现链路备份功能。当某条链路出现问题的时候,设备应能够根据事先配置的优先级,将原本该发往该链路的数据发往较低优先级的链路出口,并实现NAT,从而避免正常上网流量的中断。
3、NAT地址转换的粘连性
要避免采用地址池的时候,出现访问某些网站或者应用的过程中出现源地址变化,需要出口设备具备NAT地址粘连×××,既同一个用户的所有访问都会采用同一个公网IP地址来进行转换,这样就避免出现特殊应用的访问问题。
三、需要对外发布的应用很多,占用了大量的公网IP
随着2012年2月份,全球ipv4公网地址正式分配完,公网IP资源变得越来越紧张。国内的运营商在分配IP地址的时候越发“小气”,但是高校内部的应用却越来越多,需要发布的引用,尤其是网站也是越来越多,所以和公网IP越来越少产生了矛盾。对于通常的防火墙或者路由器上做映射,一个公网IP的80端口只还能做一个网站的映射,这样一来就会大大浪费高校有限的公网IP资源。
理想的出口设备应能够识别各个常用应用的应用层信息,例如对于web网站服务器而言,出口设备应该能够理解用户从外向内发起的http访问的header里的内容,能够从所有访问一个相同公网IP的80端口的请求中,根据不同的http header里访问的url不同,而将这些请求分发到不同的网站服务器上去,这样一来,就能在一个公网IP的80端口上发布个网站,从而提高校大大节省有限的公网IP资源。
四、出口设备需要与内部Ipv6网络无缝结合,便于未来发展。
现在各大高校都在兴建自己的Ipv6网络,以后也会有越来越多的应用跑在Ipv6网络上。但是现在的情况是,通常Ipv6都有自己单独的网络和出口,而学校的出口设备仍然在使用Ipv4的设备。这样的情况会造成内网Ipv6和Ipv6的互联互通问题,也不利于Ipv6用户访问学校内网上Ipv4服务器上的资源,也不能通过学校的多互联网出口对外发起访问。
理想的出口设备在Ipv4和Ipv6共存的情况下,应该具备如下功能:
1、双栈功能
双协议栈(RFC4213),是指在终端设备和网络节点上同时运行IPv4和IPv6两种协议栈,从而在网络中形成逻辑上相互独立的两个网络:IPv4网络和IPv6网络。采用双栈技术部署IPv6,可以在不取消IPv4的同时增加IPv6业务。这种方式的最大优势在于部署简单,在不改变现网网络架构的前提下,通过直接升级现网设备支持IPv6即可。因此,双栈技术目前被认为是部署IPv6网络的最简单的方法,也被国内外运营商广泛采用。
2、NAT64功能
NAT64是由UC3M、Alcatel-Lucent和IMDEA网络公司提出的一种基于地址翻译的过渡方案,目前在IETF正在对该标准进行标准化工作。它主要解决在IPv6接入网环境下,IPv6-only终端访问IPv4-only应用服务的问题。NAT64/DNS64的基本部署方式如下图所示。
NAT64/DNS64技术有两部分构成,NAT64负责进行IPv6到IPv4网络的数据包协议转换;DNS64负责IPv4的DNS A记录解析结果向IPv6的AAAA DNS解析记录的转换。
NAT64是部署在IPv6和IPv4网络之间的双栈路由器,负责IPv6数据包与IPv4数据包之间的翻译。因此,NAT64拥有至少一个IPv6前缀和一个IPv4公有地址池。NAT64收到终端发来的IPv6数据包后,从IPv4公有地址池中选择一个IPv4地址及未使用的端口与源主机IPv6地址作映射,从而实现IPv6到IPv4的源地址翻译;目的地址的翻译则是直接去掉特定的IPv6前缀。接着,NAT64使用SIIT(statelessIP and ICMP translation,RFC2765)翻译算法将IPv6包头翻译为IPv4包头,翻译后的IPv4数据包便从NAT64的IPv4接口转发到外部IPv4网络中,从而实现对IPv4服务的访问。
IPv6主机获得目的IPv4主机对应的IPv6地址需要借助于DNS64服务。DNS64也工作于双栈模式,当源主机进行AAAA查询时,它会向所在网络的DNS64服务器发送AAAA查询请求,如果DNS64收到的是A记录,那么它会通过添加特定IPv6网络前缀的方法将其合成为AAAA记录,并返回给源主机。如果查询结果为AAAA记录,则直接通过IPv6网络进行访问。
NAT64 克服了NAT-PT的缺点,实现了DNS-ALG和NAT地址翻译模块的解耦合,只需改动网络侧,即可实现IPv6终端对IPv4网络的访问。但它不能解决IPv4主机发起的到IPv6主机的通信问题。
2、SLB-PT功能
SLB-PT用于应用内容服务商或企业,在不改变原有应用部署方式的前提下,将Ipv5应用服务器平滑的迁移到IPv6网络中来。
通过在服务器前SLB-PT的设备,可以将IPv4应用服务或IPv4/IPv6混合部署的应用服务转换到IPv6网络中来,为这些企业和内容提供商提供一个快速迁移到IPv6网络的简便方法。
SLB-PT仅解决应用服务迁移到IPv6网络的问题。采用SLB-PT可以帮助应用服务提供商将应用服务快速迁移到IPv6网络中来。SLB-PT的部署方式比较简单,可以在应用服务比较集中的地方统一部署。
五、在多条出口链路上发布相同的应用,实现智能域名解析
在有多条运营商出口链路的情况下,不可避免的一个问题,就是域名IP的关联问题。对外发布一个网站,在有3条链路出口的情况下,最多可以在3个出口链路上各配置一个公网IP做映射,但是在域名供应商那里应该为该域名注册哪一个公网IP呢?如果这个关联IP配置不当,比如注册了电信出口的公网IP,则联通用户来访问的时候,就会访问到电信出口的映射IP,结果可想而知,会非常慢,这样就大大影响了用户体验。
理想的出口设备,在这种网络结构下,应该具备域名智能解析的功能:
1、能够根据用户dns请求的源IP进行判断,假设有3条出口链路(电信和联通和移动)如果发起dns查询的是电信的用户,则将电信出口的映射IP返回给用户;同理,对于联通用户发起的查询,则将联通出口的映射IP返回给用户,对于移动用户也是这样处理。
2、假设某一条链路出现故障,则能够按照事先设置的优先级进行解析。比如电信用户发起的访问,正常情况下应该访问到电信出口映射的IP,但是由于临时电信线路出现故障,则如果事先的优先级移动比电信低,而比联通高,这个时候设备就会将移动出口的映射IP返回给客户,这样,虽然用户访问起来没有电信快,但是可能会比访问联通快。
六、在大学里对外发布的的应用中,如何实现应用的冗余性,稳定性,动态扩展性
通常的防火墙或者路由器做映射,都只能将一个公网IP(或者端口)与一个私网IP(或者端口)相关联。但是这样却存在几个问题:
1、单点故障:假如这个私网IP对应的服务器出现故障,或者其上部署的应用down掉,则该映射自然就失效了。如果应用比较重要,用户可能会部署双机来保障其冗余可靠性,
2、双机只能解决冗余性问题,却无法扩容性能。用双机不得不面对的一个尴尬的问题是,同时运行2台服务器,却只有一台的性能。如果当一台的性能无法满足的时候,只能同时升级2台服务器,并继续使用一台。
3、当某个应用所在服务器性能无法满足需求的时候,必须从单台转变为多台同时运行的模式,这个时候就必须单独花钱购买1台服务器负载均衡设备。而考虑到单点故障,又不得不再买一台来做HA,大大增加了成本。
理想的出口设备,应当同时具备服务器负载均衡的功能,这样,当用户需要的时候,可以直接将单台服务器扩展为一个服务资源组,而对外发布的IP和端口却不需要做任何改变,实现了应用的无缝扩展。
转载于:https://blog.51cto.com/virtualadc/1297556