当今的因特网随着不同网络运营商的诞生,“南电信,北网通”的布局在中国应运而生,如何才能保证您的服务器让南天海北的客户都能快速地访问呢?此时,IDC机房为了满足客户的需求,纷纷刮起了多线路的热潮。
     这里先讲一下什么是多线路?多线路,顾名思义,即多条线路,这也太简单了吧,呵呵,其实就是一台服务器上面同时跑多条线路,这样够明白了吧。知道了这点后,接着我们就应该来了解一下路由表与策略路由了,其实它们可以运用到多种设备上面的,而我们这里仅以服务器为对象来加以阐述。路由表,就是客户在访问您服务器的时候,回包从哪条线路回去;策略路由,就是指定一个策略让数据包来回方向保持一致。所谓没有一件东西会尽善尽美的,下面来讲一下各自缺点,路由表,要统计各运营商的IP地址段,麻烦而且准确性不是非常高,策略路由缺点,如果您要从服务器上访问外界网络,按照默认网关出去,可能走得线路不是您想要的。好了,大致意思明白即可,现在我们还是直入主题吧。
     为了方便起见,这里只用双线路来对路由表与策略路由进行讲述,主要分为二部分来讲,第一部分,用Sniffer抓包来分析多线路,第二部分,用Tcpdump抓包来分析多线路策略路由。
     首先介绍一下大致情景:一个服务器有二块网卡,其中一块网卡上面配置了电信IP(60.191.63.27),另外一块网卡上面配置了网通IP(60.12.226.164)组成了双线路服务器,这里设置的网关为电信网关(60.191.63.1),即默认网关。客户端IP地址为电信。
一、用Sniffer抓包来分析多线路
1、用Sniffer抓包分析单纯多线路(无路由表与策略路由)
     我们这里采用电信客户端IP(122.234.178.201)直接ping服务器的电信IP(60.191.63.27),由于默认网关为电信,所以回包肯定是从电信网关出去的,这一点毋庸置疑的。如果我们现在ping服务器上面的网通IP(60.12.226.164),结果会是怎么样的呢?我们以网通网卡为抓包对象,看我们能抓到什么包,因为这里是抓ping所以产生的包,所以我们这里做下过滤,只抓icmp的包就好了,设置好了,来看一下网通网卡上抓到了什么包了吧?
     发现没有,在网通网卡只抓到了请求包,没有产生应答包,那我们是怎么ping通的呢?能ping通,肯定有回包才是,难道回包来自电信网卡,我们带着好奇对电信网卡进行抓包,结果如下:
     果然不出意料,回包的确来自电信网卡,所以我们可以得出这样一个的结论: 在没有运行路由表的情况下,回包走得都是默认网关,而且,只要在服务器上有一个正确的网关,服务器上的多条线路都应该可以ping通,如果不通,应该是上层路由对不同运营商的IP进行了限制。
2、从Sniffer抓包分析多线路路由表
     正常的情况下,如果我们运行了多线路路由表的话,抓包的话,以某个网卡来作为抓包对象的话,都应该能抓到请求与应答包的,这里就不做实验了。我们这里主要讲一下,如何使我们以电信客户端ping服务器上面的网通IP回包也是从网通网卡回包,这里就要使用到路由表了,标准的路由应该电信ping服务器上的电信IP,回包从电信网卡的,网通ping服务器上的网通IP,回包应该从网通网卡的。我们这里做一个实验,加一条错误的路由(现实中不建议这么做的,但为了使大家更加了解路由表与双线路是如何结合只好免为其难),好了,我们这里加一个路由,为了使服务器的回包是从网通网卡出来,这里,我的电信IP地址(60.191.63.28),网通网关:60.12.226.1,加上这样的一条路由:
InBlock.gifroute add 60.191.63.28 mask 255.255.255.255 60.12.226.1
     路由加好了,那我们现在来看抓包的结果,它是不是让我们如愿以偿了呢?
     确实如愿以偿了。那我们从上面也可以得出这样一个结论: 服务器的回包是根据路由表来的,从哪条线路(网卡)回包主要看路由表中客户端的IP属于哪条路由中的地址段对应的网关来决定的,如果找不到,即从默认网关的线路(网卡)去。    
    有的好学的同胞们,可能会问,既然这样,既然回包都根据路由表来的,我服务器上面直接把电信线路拔了,只用网通线路,只要保证服务器上存在对应我IP地址的路由表,那我是不是一样可以ping通网通IP,如果您是网通,答案是肯定的,如果电信就不行了,因为电信线路拔了,默认网关没有了,您的路由在服务器中也没有,肯定不行的了,不过,您可以运行一下电信运行商的总路由表,让其网关都改走网通线路网关就可以了,或者,您手下留情,不拔网线,如果你的默认网关是正常的——通的,那网通也应该可以ping通的,不过回包却是来自您的电信线路(网卡)。有一点可以表明的,就是您网关都不配,只要线路正常,服务器都可以接收到包的,就是没有路由,回不了包的,导致您ping不通的。总之,一句话总结: 回包要看路由表。
二、用Tcpdump抓包来分析多线路策略路由
     首先,我们来下载一个Linux下的策略路由软件,下载地址为: http://www.dnsng.com/software/nbprsetup_linux.tar.gz,下载好了,我们只要运行
# 首先看一下nbpr的用法
[root@localhost nbpr]# ./nbpr_install
Usage: ./nbpr_install {ip1 ip1_gateway ip2 ip2_gateway ip3 ip3_gateway ip4 ip4_gateway ip5 ip5_gateway}
# 从上面的用法来看,依次写上服务器上配置的所有IP及其网关即可
[root@localhost nbpr]# ./nbpr_install 60.191.63.27 60.191.63.1 60.12.226.164 60.12.226.1
     好了,启动一下策略路由服务:
InBlock.gif[root@localhost nbpr]# service nbpr start
InBlock.gif启动 nbpr:[OK]
     如何检验策略路由到底有没有运行成功呢?我们以一个最简单的方法——ping,因为我是电信客户端,我直接ping电信的,本来回包就应该从默认网关的,肯定看不出来,那我们ping网通地址吧,我们想一想,运行与不运行策略路由,ping值应该是怎么样的一个情况,再来加以ping。先讲一下不运行与运行策略路由,他们各自走得路线情况:
     没有运行策略路由的走向:我(电信)——>服务器网通网关——>服务器网通IP ——>服务器电信网关——>我(电信)
     运行策略路由后的走向:我(电信)——>服务器网通网关——>服务器网通IP ——>服务器网通网关——>我(电信)
     从上面可以发现回包的时候选择服务器上的路线是不一样,按常理来讲,因为我是电信客户端,如果回包从电信回来肯定要快些!我们直接ping一下,看一下结果是不是这样的?
     从上面ping的结果图上看,上面的红框中的值是没有运行策略路由时的ping的结果,下面的红框中的值是运行过策略路由后ping的结果,从ping来看,运行了策略路由确实比没有运行时延迟要大一些,这表明了策略路由成功运行了,同时也证明了策略路由的宗旨:从哪条线路进,同时也从这条线路出。
     回包是不是也是从哪条线路进,也从哪条线路出呢?按照策略路由的宗旨应该是这样的,我们来用Tcpdump来抓包尝试,这里由于我们ping的是网通IP(60.12.226.164),我们就以eth1(此网卡上面配置的是网通IP)为抓包对象来看一下接收包与应答包是不是都是来自于此网卡?
     从抓包结果来看,请求与应答的包都是在eth1上面,确实证实了策略路由的宗旨:进出一致。
     这个怎么去实现的呢?难道增加了路由,我们来查看一下路由表是不是这样的?
     没有路由的,这就是路由表与策略路由的根本区别之所在的了。路由表通过增加路由来实现,而策略路由根据客户端访问服务器上面的哪个IP来决定从哪个IP的网关回包而设计的。
     说到这里,或许还有些好奇的朋友会问,既然策略路由在安装时,要输入服务器上面配置的多线路的IP与网关,竟然有这么个对应表,是不是我可以断掉其中一条线路,另外一条线路也是通的呢?回答结果:是的。
     好了,写了这么多,基本上能想到的,都写出来了,如果您对此有什么看法或者指示,敬请提出。