Total Pageviews

Sunday, 28 October 2012

Linux实现双线双IP的方法

实现双线(接口)双IP,一般基于两种需求:
1. 允分利用多接口,提高服务器的网络吞吐能力。在两个网卡上分别接上网络,分别配置一个IP地址,想像着可以突破服务器本身网卡速度的限制。比如下载服务器,接两根网线,配置两个IP,于是便有了两个网卡上的带宽可以使用。
2. 经典的双线双IP,借助于“智能DNS系统”,解决网通、电信网络之间访问的网络瓶颈。
想象很美好,但是实际上,并不是那么容易实现的。
一般情况下,一台主机的网络参数里有一个“默认网关”。所谓默认网关的意义就是:凡是路由表中没有明确指明应该发往哪里(接口)的数据包,通通发往“默认网关”(接口)
那么,当有两个接口(需要分别配置一个IP)的时候,该怎么配置“默认网关”呢?姑且先不管能不能配上两个“默认网关”,对于系统来说,系统是不是会犯迷糊?“两个默认网关,我到底将包发往哪儿?”
所以,并不是想当然的,给系统的两个接口上配置两个IP,然后就可以想当然的实现“双IP了”。
在Windows 2003上,是不允许配两个不在同一网络(IP不在同一子网——可以简单的认为不在同一网段)的两个默认网关的。并且Windows 2003的双接口双默认网关配置是用来提供网络链路冗余的。
实现双线双IP的最常用的方式,是配一个默认网关,另一个接口不配置默认网关,使用添加静态路由的方式使用第二个接口。其实整个网络上的数据包转发都是由“路由表”决定的。正确的理解路由表,就不会想当然的认为可以随意的配置多接口了。
使用静态路由的方式,显然不够方便。假如是电信、网通的双线,那么将会要维护大量的路由表信息,几乎是不可维护的。
Linux提供了一个“Advanced IP routing and network device configuration tools”,iproute,系统自带,网方网址:http://linux-net.osdl.org/index.php/Iproute2。
使用iproute解决问题的思路是:从哪个接口进,就从哪个接口出。
举例说明:
系统环境:CentOS Linux
网络环境: 两个IP地址,192.168.2.10和192.168.3.10,掩码是255.255.255.0,这两个子网的网关地址分别是192.168.2.1和192.168.3.1。
1. 为网卡eth0配置ip地址192.168.2.10,为网卡eth1配置ip地址为192.168.3.10
配置文件为:
/etc/sysconfig/network-scripts/ifcfg-eth0
/etc/sysconfig/network-scripts/ifcfg-eth1
2. 配置默认网关为任意一个,比如192.168.2.1。这个默认网关,决定了系统主动去使用网络时,使用的接口。
配置文件:/etc/sysconfig/network
3. 编辑路由表
修改/etc/iproute2/rt_tables,添加内容:
252   net2
251  net3
#添加原路返回路由
ip route flush table net2
ip route add default via 192.168.2.1 dev eth0 src 192.168.2.10 table net2
ip rule add from 192.168.2.10 table net2
ip route flush table net3
ip route add default via 192.168.3.1 dev eth1 src 192.168.3.10 table net3
ip rule add from 192.168.3.10 table net3
4. 第3步中的设置路由的命令需要系统启动后自动运行,需要写进/etc/rc.local中。