Linux ,c/c++, web,前端,php,js
分类: LINUX
2013-01-21 17:51:53
原文地址:ip route + ip rule实现双ISP接入网络配置 作者:zzjlzx
2013-01-09 11:44:06| 分类: 基本命令 | 标签: |字号大中小
本文所述仅为解决方案之一,欢迎留言探讨其他解决方案。
公司新增一条ISP接入,直接光电转换成以太口接入,现有Cisco 3750和若干Cisco 2960,另外有PC机一台做NAT+Router,DHCP/DNS等功能均不用Cisco 3750干,其实我也不知道为啥,曹某人说不用就不用了,哈哈~
OK,既然新增一条线路,而原先的NAT主机网卡也不够了,于是新增一台NAT2,功能还是地址转换和软路由,Linux实现,这些都很容易
线路很容易调通,后来遇到了两个难点,一个是两台NAT不能互通(这不胡扯么?),其实是我自己白痴了,NAT上没有做静态路由将192.168.0.0/16的地址都指向3750,默认网关是指向Internet的,当然不通啦~后面一个问题,其实也跟这个也有一点点关系,就是策略路由本地不同Vlan使用不同的ISP出口。经过曹某人指点使用ip rule就可以搞定。
具体配置如下:
NAT1: eth2 192.168.254.1/24 LINK TO Cisco 3750 VLAN 2,eth1配置ISP1的互联IP
NAT2: eth0配置ISP2的互联IP,eth1配置192.168.254.11/24 LINK TO Cisco 3750 VLAN 2
两台NAT均做好静态路由保证互通,NAT1作为主NAT,使用ip route + ip rule做策略路由,默认走本机网关即采用ISP,特殊VLAN/IP通过策略路由到NAT2,走ISP2
ip route add 192.168.20.0/24 dev eth2 src 192.168.254.1 table cnc
ip route add default via 192.168.254.11 table cnc
ip rule add from 192.168.20.0/24 pref 10000 table cnc
其他配置都相对很容易,主要是静态路由需要多配置几个,反正静态路由也不耗费什么系统资源:D
1:添加多个路由表(其中系统默认的为main表)
可以通过
ip route add xxx.xxx.xxx.xxx via xxx table adsl
ip route add xxx.xxx.xxx.xxx via xxx table ddn
来向不同的路由表中添加路由
可以通过
ip route list table main
ip route list table adsl
ip route list table ddn
可以分别查看不同策略的路由表
2:为不同的ip分配不同的路由表及规则
可以通过
ip rule add from xx.xx.xx.xxx(内网) table adsl
ip rule add from xx.xx.xx.xxx(内网) table ddn
ip rule list
未加入规则的ip则使用默认的路由策略(main)
这个问题一直困扰我,看到这个帖子可以设置下,还是没有问题的。特此贴出来,留备以后查看
两个不在一段的IP看成一个电信一个网通来设置 就可以了。centos无问题
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、分别设置电信和网通的路由表
电信路由表:
#确保找到本地子网
ip route add 192.168.0..0/24 via 192.168.0.2 dev eth0 table tel
#内部回环网络
ip route add 127.0.0.0/8 dev lo table tel
#192.168.0.1为电信网络默认网关地址
ip route add default via 192.168.0.1 dev eth0 table tel
网通线路路由表:
#确保找到本地子网
ip route add 10.0.0.0/24 via 10.0.0.2 dev eth1 table cnc
#内部回环网络
ip route add 127.0.0.0/8 dev lo table cnc
#10.0.0.1是网通的默认网关
ip route add default via 10.0.0.1 dev eth1 table cnc
4、电信和网通各有自己的路由表,制定策略,让192.168.0.2的回应数据包走电信的路由表路由,10.0.0.2的回应数据包走网通的路由表路由
ip rule add from 192.168.0.1 table tel
ip rule add from 10.0.0.1 table cnc
最后考虑特殊情况的网管需要批量添加IP到路由才能过,简化一下
ip rule del from 192.168.0.0/24 table tel
ip rule del from 10.0.0.0/24 table cnc
添加删除主机路由:
windows:
主机:route add/delete 192.168.6.6 mask 255.255.255.255 192.168.6.254 -p (-p代表永久)
网段:route add/delete 192.168.6.0 mask 255.255.255.0 192.168.6.254
默认网关:route add/delete 0.0.0.0 mask 0 0.0.0.0 192.168.6.254
linux:
命令添加,重启后会消失
主机:route add/del -host 192.168.6.6 gw 192.168.6.254 dev eth1
网段:route add/del -net 192.168.6.0/24 gw 192.168.6.254
默认网关:route add/del default gw 192.168.0.61 dev eth0
写入到配置文件,永久生效
/etc/sysconfig/network-scripts/route-eth1
192.168.6.6/32 via 192.168.6.254
192.168.6.0/24 via 192.168.6.254
定义一个网卡别名
ifconfig eth1:2 192.168.6.19 up
绑定和删除IP
ip addr add 192.168.6.8/22 dev eth1
ip addr del 192.168.6.8/22 dev eth1
查看:ip addr
添加一个策略表
echo -e "100\tf5" >> /etc/iproute2/rt_tables;
查看策略路由:ip rule
添加删除策略路由:
命令:
/sbin/ip rule add from 192.168.6.6 table f5 pre 1000(pre 后面的数字1000是优先级别,越小优先级别越高)
/sbin/ip rule del from 192.168.6.6 table f5
写入到开机启动文件中:echo "/sbin/ip rule add from 192.168.6.6 table f5 pre 1000">>/etc/rc.local
查看路由信息
看配置文件:/etc/sysconfig/network-scripts/route-eth1
命令:ip route ls table f5
命令添加和删除table 表里面的配置:
ip route add 192.168.6.0/24 table f5 dev eth1
ip route add default via 192.168.6.254 table f5 dev eth1
ip route del 192.168.6.0/24 table f5 dev eth1
ip route del default via 192.168.6.254 table f5 dev eth1
直接写到文件里面:
echo "192.168.6/24 dev eth1 table f5
default via 192.168.6.3 table f5">/etc/sysconfig/network-scripts/route-eth1
网通:ip:11.22.33.44 gw:11.22.33.1 eth1
电信:ip:55.66.77.88 gw:55.66.77.1 eth1:1
私网:ip:10.10.10.10 gw:10.10.10.1 eth0
1.设置服务器默认网关,因为服务器在北方,属于网通的势力范围,所以我们选择网通作为默认的网关
[root@xxx ~]# ip route replace table main default via 11.22.33.1 dev eth1
添加内网,电信,网通3个路由表
[root@xxx ~]# cat /etc/iproute2/rt_tables
50 private
100 tel
200 cnc
分别为eth0,eth1,eth1:1设置路由条目
##############
# add routing for private route table
ip route add table private 10.10.10.0/24 dev eth0 proto kernel scope link src 10.10.10.10
ip route add table private default via 10.10.10.1 dev eth0 src 10.10.10.10
# using private table ,if the package src ip is 10.10.10.10
ip rule add from 10.10.10.10 table private prio 500
##############
# add routing for telcom route table
ip route add table tel 11.22.33.0/24 dev eth1 proto kernel scope link src 11.22.33.44
ip route add table tel default via 11.22.33.1 dev eth1 src 11.22.33.44
# using tel table ,if the package src ip is 11.22.33.44
ip rule add from 11.22.33.44 table tel prio 1000
##############
# add routing for netcom route table
ip route add table cnc 55.66.77.0/24 dev eth1:1 proto kernel scope link src 55.66.77.88
ip route add table cnc default via 55.66.77.1 dev eth1:1 src 55.66.77.88
# using cnc table ,if the package src ip is 55.66.77.88
ip rule add from 55.66.77.88 table cnc prio 500
测试:我们可以在服务器上用tcpdump来测试我们设置是否正确
3.设置从外面访问服务器的流量如何走首先你要有一份完整的电信网段ip,你自己可以去收集或者花钱买都可以
比如说我把所有电信的ip都放在了/opt/scripts/telecom_ip_list里面,写个简单的脚步去批量添加这些路由规则
for subnet in `cat /opt/scripts/telecom_ip_list`; do
if ip rule | grep "from $subnet lookup tel" >/dev/null; then
:
else
ip rule add to $subnet table tel prio 5000
fi
done
测试:
ip route get xxx.xxx.xxx.xxx(电信)
ip route get xxx.xxx.xxx.xxx(网通)
查看返回的信息是否正确
为了能够让联通和电信用户都可以快速的访问网站,公司服务器托管到了双线双ip机房。服务器使用双线双ip需要对路由表做一些特殊的配置,IDC提供的解决方案是填写静态路由表。方法是使用电信网关做默认的路由,然后自己手工填写所有网通IP地址段的路由规则。
此方法弊端较大:
1、添加规则太多太麻烦,如果漏掉一些网段,那这些网段的用户就访问不了网站。
2、dns智能解析的来路与填写的静态路由网段不同时,用户就会访问不了我们的网站。
3、网段地址的分布总是在不断变化的,必须定期更新路由表。
解决方法:
使用动态路由,服根据用户访问进来的路径设定动态路由,如果用户是通过电信IP地址访问过来的话,那么使用电信网关做路由,返回内容走电信网关;如果用户通过联通IP地址访问过来的话,那么使用联通网关做路由,返回内容走联通的网关。
经过在网站备份服务器上的测试,使用动态路由表的方法可以解决静态路由表的弊病。
具体方法如下:
假如服务器分配的ip地址如下
电信网关:59.83.100.1 ;电信ip:59.83.100.10。
联通网关:221.214.100.1;联通ip:221.214.100.10 。
1、编辑rt_tables文件,添加电信联通路由表
1 |
# vi /etc/iproute2/rt_tables # (增加电信和联通两个路由表) |
添加电信联通路由表
252 tel
251 cnc
2、编辑rc.local文件,设置电信和网通路由表内容。
|
# vi /etc/rc.d/rc.local #(设置电信和网通路由表内容) |
添加如下内容
|
ip route replace default via 59.83.100.1 dev eth0 #默认路由线路
ip route flush table tel #刷新tel路由表
ip route add default via 59.83.100.1 dev eth0 src 59.83.100.10 table tel #添加回环地址
ip rule add from 59.83.100.10 table tel #从59.83.100.10过来的,走tel路由
ip route flush table cnc #刷新cnc路由表
ip route add default via 221.214.100.1 dev eth1 src 221.214.100.10 table cnc
ip rule add from 221.214.100.10 table cnc #从221.214.100.10过来的走cnc路由 |
reboot服务器测试下效果吧!