Pages

Friday, 23 December 2011

让双网卡(或多IP)同时工作在不同的网络

阅读以下文章你需要懂得什么是IP地址和子网掩码的基础知识。其他的词汇解释,需要你认真读完文章就能明白。
相关拓扑我就不画了,设想一下有这样的网络,一台PC机上面有2个网卡,各连接一个不同的网络(这里可以是单一网卡,设置了多个IP的情况)。一个网卡的IPA=10.1.1.5 网关GA=10.1.1.1  另一个网卡IPB(或单一网卡上的第二个IP)=192.168.5.5,网关GB=192.168.5.1 他们的子网掩码都为255.255.255.0 。10网段为外网段,192段为内网段。当他们访问不同网络的时候,自动选择相应的网卡。在Windows的网卡上设定的第二个默认网关是给冗余使用的,要先删除了内网的默认网关,保留外网的默认网关,否则你会收到Windows的警告信息并发现网络断断续续。无论你有几个网卡,都只需要在外网的网卡上设定默认网关,其他网卡就算你知道网关也不要自作聪明去设置,多IP的时候保留指向外网路由器的默认网关即可。
接下来我们将修改windows的路由表,以使得每个IP在出去的时候能自动选择通过网关。先看route命令的用法:

route /?  (系统自带的是英文解释,我自己翻译的)

ROUTE [-f] [-p] [命令] [目的地][MASK空格+子网掩码] [网关] [计量标准] [接口]

-f    清除现在所有的路由信息
-p   这个参数一般用在add命令前,使得系统自动加载和使用。不使用这个参数将导致路由表是临时的,重启会丢失。Windows95下不支持-p参数。如果你忘记了-p,可以使用bat文件放在启动组。以下是各项命令参数
命令:
PRINT       列举当前路由信息
ADD          添加一条路由信息
DELETE    删除一条路由信息
CHANGE   修改一条当前的路由信息
目的地       目标网络,即将发往的地址段
MASK        子网掩码标识,不能缺少
子网掩码    目标网络的子网掩码,不指定将使用255.255.255.255
网关           发往目标网络的中转地址,即下一跳地址。例如,我们开车的时候需要看地图,也需要看路面上的方向引导标识,例如,去广州是南方向,去北京是北方向,而去南宁是西方向。网关的角色就相当于地图或者引导标识,当有数据包过来的时候,检查他们的目的地址,将数据包引导到它们想去往的方向。
接口           指定的下一跳接口
计量标准    用于矢量路由协议的路径计算和选择,一般不写。相关详细见下方**内描述的部分:


metric是路由算法用以确定到达目的地的最佳路径的计量标准,如路径长度。
常用的metric
路由算法使用了许多不同的metric以确定最佳路径。复杂的路由算法可以基于多个metric选择路由,并把它们结合成一个复合的metric。常用的metric如下:
路径长度:
路径长度是最常用的路由metric。一些路由协议允许网管给每个网络链接人工赋以代价值,这种情况下,路由长度是所经过各个链接的代价总和。其它路由协议定义了跳数,即分组在从源到目的的路途中必须经过的网络产品,如路由器的个数。
可靠性:
可靠性,在路由算法中指网络链接的可依赖性(通常以位误率描述),有些网络链接可能比其它的失效更多,网路失效后,一些网络链接可能比其它的更易或更快修复。任何可靠性因素都可以在给可靠率赋值时计算在内,通常是由网管给网络链接赋以metric值。
延迟:
路由延迟指分组从源通过网络到达目的所花时间。很多因素影响到延迟,包括中间的网络链接的带宽、经过的每个路由器的端口队列、所有中间网络链接的拥塞程度以及物理距离。因为延迟是多个重要变量的混合体,它是个比较常用且有效的metric。
带宽:
带宽指链接可用的流通容量。在其它所有条件都相等时,10Mbps的以太网链接比64kbps的专线更可取。虽然带宽是链接可获得的最大吞吐量,但是通过具有较大带宽的链接做路由不一定比经过较慢链接路由更好。例如,如果一条快速链路很忙,分组到达目的所花时间可能要更长。
负载:
负载指网络资源,如路由器的繁忙程度。负载可以用很多方面计算,包括CPU使用情况和每秒处理分组数。持续地监视这些参数本身也是很耗费资源的。
通信代价:
通信代价是另一种重要的metric,尤其是有一些公司可能关系运作费用甚于性能。即使线路延迟可能较长,他们也宁愿通过自己的线路发送数据而不采用昂贵的公用线路。


看了上面的命令说明,我想大家已经清楚这个命令的参数意思。首先举一个实例来解释下,用route print看一个截图和路由信息:

这个图显示的单一网卡的情况。有红色方框框住的地方,就是我们即将修改的对象。一头雾水吧?先来明白图中的英文和定义:
Network destination:目标地址或目标网段。
Netmask:子网掩码
Gateway:网关
Interface:接口,即到达Gateway的接口或者地址。如果你的二个网卡均为同一个网段而网关又不一样的时候,你就需要注意这个地方了。
Metric:参阅上面的解释

在上面的图中Gateway为192.168.1.1就是默认的网关,也就是我们修改tcp/ip协议的时候填写的默认网关。图中的最后一行,Default gateway也清楚的标识了这个网关的属性。什么叫默认网关?就是发往任何不知道如何路由的下一跳地址,简单的说,外网有很多路由,当然我们都不知道,所以就通过这个网关扔出去,就不管了。在路由表上,以0.0.0.0的网段表示默认路由。如果现在我们要访问内部网段,就通过这个红框:192.168.1.97去往内网的目标网段192.168.1.0。因为Windows已经知道了如何到达1.0段,所以我们的数据包就不会通过默认网关扔出去,记住了,默认网关是给不知道如何路由的数据包使用的。看明白了这个,你已经成功了70%了。

回顾最前面举的例子,我们假设的例子是,10网段为外网段,192段为内网段。
操作如下:

添加一条去往192.168.5.0网段的路由,这个路由的网关是192.168.5.1:
route -p add 192.168.5.0 MASK 255.255.255.0 192.168.5.1
**该条目注意,添加的是网段,所以是5.0而不是具体的地址。**

如果你喜欢接口形式的命令,那么可以这么写:
route -p add 192.168.5.0 MASK 255.255.255.0 IF Y
**Y=在route print看到的0xY后面的大Y**
同理,添加一条发往外网0.0.0.0网段的路由:
route -p add 0.0.0.0 MASK 0.0.0.0 10.1.1.1
**默认(缺省)网络所有的ip和子网掩码均为0。很多情况下,因为保留了外网的默认网关,所以我们不需要设置该条目**
如果默认网关不是10.1.1.1这个正确地址,那么需要修改为正确的网关。实际情况根据个人的地址修改。命令是:
route change 0.0.0.0 MASK 0.0.0.0 10.1.1.1
**change条目列举的是修改默认路由的命令,请勿吃豆拉豆照抄。很多时候,我们仅需添加指向其他网段的路由即可。**
如果你有N个网络N个网卡,可以依藤画葫芦,自己更改路由表,有任何问题,跟帖或者PM。应用区技术档案有个校园网的双线方案,其实也是用的route命令。由于路由表经常更新,这里不再作为附件,大家可以到这个地址查阅,有电信,网通和教育网的,比较全。(地址不大稳定,有时候可以看到,有时候不行。可以自己去搜索下电信网通路由表会有很多)

No comments:

Post a Comment