由于电信和网通之间互联互通的问题,很多人选择双线路机房,所谓双线路机房就是拥有两条出口,一条电信一条网通。最近在一个双线路机房测试一台服务器,打算作为论坛的数据库服务器使用,服务器操作系统为Linux。计划配置为双IP,单域名,使得浏览者通过电信和网通两条线路都能正常访问服务器,而且各走各的,互不影响。在配置网络的时候遇到了问题,由于Linux默认只有一个网关,在网络上查询了很久,找到一个解决方案,因此整理了一下。感谢原文作者jac003ke。
这个解决方案主要依赖一个技术: 策略路由.
于是,我们需要定义一个策略, ip从哪个网卡进来,就从哪个网卡回去.
服务器操作系统RedHat linux as4,设置两张路由表
1. vi /etc/iproute2/rt_tables,增加网通和电信两个路由表
251 tel #电信路由表
252 cnc #网通路由表
2. 给网卡绑定两个地址用于电信和网通两个线路
ip addr add 192.168.0.2/24 dev eth0 #网通
ip addr add 10.0.0.2/24 dev eth1 #电信
3、分别设置电信和网通的路由表
l 增加设置策略路由函数
cat >> /etc/sysconfig/network-scripts/network-functions
policy_route() {
IP=/sbin/ip
IF1=eth1
IP1_NET=`$IP addr show $IF1 | grep 'inet ' | grep "global $IF1$" |awk '{print $2}'`
[ -n "$IP1_NET" ] || return 1;
IP1=`echo "$IP1_NET" | cut -d/ -f 1`
GW1=`grep GATEWAY /etc/sysconfig/network-scripts/ifcfg-$IF1 | cut -d= -f 2`
IF2=eth0
IP2_NET=`$IP addr show $IF2 | grep 'inet ' | grep "global $IF2$" | awk '{print $2}'`
[ -n "$IP2_NET" ] || return 1;
IP2=`echo "$IP2_NET" | cut -d/ -f 1`
GW2=`grep GATEWAY /etc/sysconfig/network-scripts/ifcfg-$IF2 | cut -d= -f 2`
NETWORK1=`ipcalc -n $IP1_NET|cut -d= -f2`
NETWORK2=`ipcalc -n $IP2_NET|cut -d= -f2`
echo "dev:$IF1 ip:$IP1_NET net:$NETWORK1 gateway:$GW1"
echo "dev:$IF2 ip:$IP2_NET net:$NETWORK2 gateway:$GW2"
echo
echo "setting route via table cnc"
$IP route replace $NETWORK1 dev $IF1 via $IP1 table cnc
$IP route replace default dev $IF1 via $GW1 table cnc
echo "setting route via table tel"
$IP route replace $NETWORK2 dev $IF2 via $IP2 table tel
$IP route replace default dev $IF2 via $GW2 table tel
echo "setting default gateway"
$IP route replace default via $GW1
echo "setting ip rule"
$IP rule del from $IP1
$IP rule add from $IP1 table cnc
$IP rule del from $IP2
$IP rule add from $IP2 table tel
}
以上script作用是,分别 获取两个网卡的ip, netmask, gateway. 然后定义一个电信的路由表,一个网通的路由表.最后一步非常重要, 配置从哪里进来就哪里回去的策略路由.
l 修改 /etc/sysconfig/network-scripts/ifup-post, 使其在网卡启动时自动执行策略路由函数
以下粗体字部分为新增
#add route policy
policy_route
# Notify programs that have requested notification
do_netreport
l 设置电信部分固定路由
由于本机设置缺省网关为网通网关, 部分需要主动向外的电信访问要设置固定路由.
cat >> /etc/sysconfig/network-scripts/route-eth0
61.143.210.0/24 dev eth0 via $GW2
202.96.128.0/24 dev eth0 via $GW2
60.190.167.0/24 dev eth0 via $GW2
61.143.224.0/24 dev eth0 via $GW2
125.90.204.0/24 dev eth0 via $GW2
59.32.232.0/24 dev eth0 via $GW2
218.71.140.0/24 dev eth0 via $GW2
l 最后确保新增/修改过 文件有可执行属性
chmod +x /etc/sysconfig/network-scripts/*
以上步骤都完成之后就可以重启网络( /etc/init.d/network restart ) ,当然了,reboot也是可以的.呵呵