2008年12月28日星期日

电信网通互联互通问题

由于电信和网通之间互联互通的问题,很多人选择双线路机房,所谓双线路机房就是拥有两条出口,一条电信一条网通。最近在一个双线路机房测试一台服务器,打算作为论坛的数据库服务器使用,服务器操作系统为Linux。计划配置为双IP,单域名,使得浏览者通过电信和网通两条线路都能正常访问服务器,而且各走各的,互不影响。在配置网络的时候遇到了问题,由于Linux默认只有一个网关,在网络上查询了很久,找到一个解决方案,因此整理了一下。感谢原文作者jac003ke



这个解决方案主要依赖一个技术: 策略路由.




策略性路由

  策略性是指对于IP包的路由是以网络管理员根据需要定下的一些策略为主要依据进行路由的。例如我们可以有这样的策略:“所有来直自网A的包,选择X路径;其他选择Y路径”,或者是“所有TOS为A的包选择路径F;其他选者路径K”。

  Cisco 的网络操作系统 (Cisco IOS) 从11.0开始就采用新的策略性路由机制。而Linux是在内核2.1开始采用策略性路由机制的。策略性路由机制与传统的路由算法相比主要是引入了多路由表以及规则的概念。








于是,我们需要定义一个策略, 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也是可以的.呵呵




没有评论: