科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网网络频道利用网络负载平衡对抗Dos

利用网络负载平衡对抗Dos

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

网络载量平衡有助于调整你的服务器性能,以跟上不断增长的基于Internet客户的需求。同时NLB提供了动态伸缩功能,即在不影响客户机的情况下。自动适应群集内服务器的添加和删除。

作者:中国IT实验室 2007年9月12日

关键字: 防火墙 网络负载 IP地址 路由 负载均衡 负载平衡

  • 评论
  • 分享微博
  • 分享邮件

  网络负载平衡(NLB)是IP负载平衡技术,它是Windows 2000 Advanced Server和Windows2000 DataCenter的一部分。有了NLB,传入的TCP通信、用户数据报协议(UDP)通信和一般路由封装(GRE)通信请求被分发给各个群集成员。分发的依据是基于服务器负载百分比设置的统计算法。通过使用网络载量平衡创建服务器群集,可增强Internet服务器程序的可用性,这些Internet服务器程序可以是用于Web、代理、域名服务(DNS)、FTP、虚拟专用网(VPN)和流式媒体服务器等程序。同时,网络载量平衡有助于调整你的服务器性能,以跟上不断增长的基于Internet客户的需求。同时NLB提供了动态伸缩功能,即在不影响客户机的情况下。自动适应群集内服务器的添加和删除。NLB是智能的,因为它可以检测到服务器故障,并将其从正运行的群集内悄悄地删除。集群资源从当前不可用的节点切换到可用的节点,重新提供服务叫做故障切换。通常的故障切换有两种类型:

  ★有计划切换:由系统管理员进行系统升级或软件维护而强制进行切换。

  ★故障切换:由于掉电、系统或软件故障而引起的切换。

  

  深入了解群集

  在对网络负载平衡的应用例子讲解之前,我们必须来了解群集这样一个概念。群集就是一组连在一起的计算机,从外部看它是一个系统,各节点可以是不同的操作系统或不同硬件构成的计算机。例如,一个提供Web服务的集群,对外界来看是一个大Web服务器。不过集群的节点也可以单独提供服务,我们来看看一个基本的群集图.

  

 

  实现群集的方法

  

  实现了群集在某种程度上就算是实现了负载均衡。均衡的意思就是要使外部的连接平均地分布到内部的服务器上。一般来说,我们可以通过下面儿种方式进行群集服务。

  1、网络地址转换(NAT)法。这种方法可能大家较熟悉,地址转换器有能被外界访问到的合法IP地址,它修改来自专有网络的流出包的地址,外界看起来包是来自地址转换器本身,当外界包送到转换器时,它能判断出应该将包送到内部网的哪个节点。优点是节省IP地址,能对内部进行伪装;缺点是效率低,因为返回给请求方的流量经过转换器。我们还可以对Nat进行改造,创建多路NAT服务,使多个IP地址和网络通道混合使用。

  2、直接路由(Direct forwarding)法。当参与集群的计算机和作为控制管理的计算机在同一个网段时可以用此法,控制管理的计算机接收到请求包时直接送到参与集群的节点。优点是返回给客户的流量不经过控制主机,速度快、开销少。

  3、隧道技术(Direct forwarding)。这种方式是在集群的节点不在同一个网段时可用的转发机制,是将IP包封装在其他网络流量中的方法,为了安全的考虑,应该使用隧道技术中的VPN,也可使用租用专线。

  总之,集群所能提供的服务是基于TCP/IP的Web服务、Mail服务。News服务、DNS服务、Proxy服务器等等。

  

  应用案例

  

  下面介绍一个用TurboLinux Cluster Server来实现一个负载均衡集群系统,用于提供Web和FTP的服务。其实这个例子在网上很多,大家还可以到网上去找找相应的资料。

  配置为:服务器共有12台,其中11台安装TurbolinuxCluster Server,1台安装Windows2000Sever。我们给外部提供Web和Ftp服务,要求外部的连接始终轮换的请求内部的服务器。具体配置如下:

  1、设置各台服务器的IP地址、子网掩码、路由等,调通网络,将一台TurboLinux服务器设置成DNS服务器,使其能够正向解析和反向解析。服务器名此例为pcl,域为test.com

  2、配置Cluster Server。执行Turbolinux clusteradmin,设置情况如下(注:箭头连接的是选单选项,箭头所指为下级选单,最后冒号后为设置情况)。

  

  

 

  

  网络设置:netmask 255.255.255.0

  

  配置集群各节点:因为TnrhnLinux Cluster Server本身能被工具自动同步,所以只需配置Windows2000 Server:→开始→设置→控制面板→添加新硬件→下一步→添加/排除设备故障→添加新设备→否,从列表选择硬件→其他设备→Microsoft:Microsoft Loopback Adapter→完成。桌面上右键单击"网上邻居"→属性→TCP/IP→设置IP地址、缺省网关、子网掩码(注:先设成:255.255.255.0)。开始→运行→regedit→找到注册表中跟Microsoft Loopback Adapter相关的项,将子网掩码改成:255.255.255.255.

  配置系统以便运行合适的服务、并配置适合控制管理器管理的配置,以便在控制管理器申使用。

  管理选单中执行内容同步:选t1cs_content_sync,输入密码,将复制控制管理计算机中的服务内容。在管理选单中执行设置同步:选tlcs_config_sync,输入密码,将复制控制管理计算机中的设置。现在己经可以进入运行状态,可将客户端连接在服务器的交换机上。客户端可以请求Web和FTP服务,需要查看运行情况可以用控制台从https://coml.blcserver.com:910管理。

  作为防火墙的计算机设备同样也需要负载平衡。通常,防火墙处于外部网和内部网之间,决定了哪些内部网络可以被哪些外部网络访问,以及哪些外部服务可以被内部人员访问。这样就造成了防火墙必定肩负着沉重的负担,而负载平衡恰恰可以缓解外部网络多主于网络带宽的压力,即在防火墙上面增加冗于功能。使用了负载平衡算法的冗余防火墙系统,能监测每个防火墙上的用户数目和流量,平等地动态分配单元进出的流量,保证所有安装的防火墙的性能处在最优化状态,这样整个系统处理数据流量的能力比单个防火墙就有了很大的提高。同时,不论处于备用状态还是负载均衡状态下,每个防火墙还监视其他设备的工作状态,当一个防火墙单元失效时。系统会将所有请求重新分配到其他单元上,并达到新的负载平衡。

  配置上面的防火墙体系,首先需要防火墙自身的支持。这种防火墙可以采用SecureCom 8001防火墙。其次需要对路由器进行设置,对进出外网的数据包进行转发才行。负载平衡应用到网络IDS的原理也和防火墙差不多,大家可以试着去揣摩一下。

  在程序编写上我们也可以用到负载平衡,只是现在的负载平衡很明显是用软件来替代硬件的算法,在速度上可能不是那么快,但效果还是很好的,可以缓解外部对内部服务器的要求。大家都使用过的QQ,其服务器就有很多台。而每次我们登录的服务器可能都不是一样的。尽管如此,也许我们登录的IP也只是一个群集IP地址(即这个IP地址会把我们重新定向到另一台我们所不知道的服务器上面。实现负载均衡)。很多大型的有实力的公司也会在全国各地建立自己的分站点,总不可能大家都去访问一台服务器吧,这样服务器很容易崩溃的。

  接下来,我们来和大家讨论一下如何在ASP程序里实现负载平衡。当我们创建交互式Web页面时最大的挑战之一是维持用户的状态,一个站点也许想记住你是谁、在n页之前你点击了什么。在这最后一次做了些什么、现在马上要向你显示什么。实现这些功能的途径有许多,如查询字符串、提交表单或Cookies,最强大的一种是ASP的Session对象。服务器可以在Session集台中跟踪一整群的变量。通过与用户的Session Cookie相匹配来保持每个用户有一个特定变量。只要用户在服务器上保持活跃,Session变量就维持它的状态。然后在大量用户的使用中跟踪用户会给服务器带来很大的负载。然而对真正的负载平衡来说,每当处于服务器上的用户点击一个连接时;它就转到另一个服务器上面去,从而改变服务器的状态,而每当浏览一个新页面时都潜在地丢失他们的Session信息。如果你发现自己是在这样的环境下编写代码,或者你怀疑你的站点最终是负载平衡的,可能只有4种方法来解决这个问题:完全不使用Session、使用临时Cookies、购买第三方组件来处理Session管理,以及仅对Web范围内的第一次点击进行负载平衡。

  

  1.根本不使用Sessions

  

  显然,绕过Sessions管理这个问题的一个途径就是根本不使用Sessions变量,但是你仍然受困于状态保持的问题。你可以使用最简单的方法跟踪用户,而不用写客户机。"一种不安全的方法是使用浏览器查询字符串,或用隐藏值进行表单置入,以便用户保持活跃状态。这将允许你给他们一个用户id,并将变量存储在一个所有的Web服务器都能到达的地方。比如说,我们保持了变量 Ship To Zip Code.Type Of Customer和 CustomerEmail,可以这样写:

  

 

  这样通过将所有的Session信息存储在数据库中,可以使这3个变量在每一页上都保持活跃,确保用户ID的值很难猜到,这很重要。当访问第一页时,将分配给用户的sessionID存储为用户名。当用户离开这一页时可以考虑清除这个数据,有效地重新生成ASP session对象。这可以手工完成,或者用一个限时程序将数周以上的记录删除。

  

  2.使用临时Cookies

  

  对于特别的非敏感数据,直接向客户机中写入信息是有意义的。比如说,如果我们的站点只使用了一个变量来跟踪用户的ZIP码来得到用户在当地的交通记录,那么以HTTPCookie的形式将用户的ZIP码写入他们的机器应该不会产生什么危害。因为你可以将Cookie论写成浏览器关闭时失效,就可以使它们模仿一个Session变量的功能,也可以使他们是持久的,好在用户下一次访问时记住他。用Request对象Cookie的值可以为服务器所用。请求Cookie的值,然后将值带进来。所以在我们上面的例子中,可以这样做:

  

  你不得不把这些放置在每个页面的顶部,但是如果用户把3个Cookies都设置了,那么每一页都可以存取和使用这些用户特定的变量。你还可以在一个Cookie中设置3个变量,请看Ken Baumbach的文章Cookie Basics with ASP,里面有设置变量的更多

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章