如果我们有两条上网线路可以使用,那么策略路由就是个好的选择了。

基本概念:

  • 策略路由表(Policy routing tables): Linux 缺省有3个表, local (不能改也不能删), main, 和 default。添加路由的时候如果不指定,缺省是添加到main路由表里的。
  • 策略路由规则(Policy routing rules): Linux 缺省也有三套路由规则,对应三个缺省路由表。

查看一下就可以看到三个表:

# ip rule list
0:    from all lookup local  
32766:    from all lookup main  
32767:    from all lookup default  

查local表的路由规则:

# ip route list table local
local 10.10.0.1 dev tun0  proto kernel  scope host  src 10.10.0.1  
broadcast 127.255.255.255 dev lo  proto kernel  scope link  src 127.0.0.1  
local 192.168.122.1 dev virbr0  proto kernel  scope host  src 192.168.122.1  
local 172.16.8.1 dev br0  proto kernel  scope host  src 172.16.8.1  
broadcast 192.168.122.0 dev virbr0  proto kernel  scope link  src 192.168.122.1  
broadcast 172.16.8.0 dev br0  proto kernel  scope link  src 172.16.8.1  
broadcast 172.16.9.255 dev br0  proto kernel  scope link  src 172.16.8.1  
broadcast 127.0.0.0 dev lo  proto kernel  scope link  src 127.0.0.1  
broadcast 192.168.122.255 dev virbr0  proto kernel  scope link  src 192.168.122.1  
local 127.0.0.1 dev lo  proto kernel  scope host  src 127.0.0.1  
local 127.0.0.0/8 dev lo  proto kernel  scope host  src 127.0.0.1  

使用策略路由的方法也很简单,1、定义一个路由表,2、定义路由规则,3、应用路由规则。

一、先建立一个自定义的路由表,ID 是 10000 ,名字叫做mygod(注意,ID从0-32766之间随你便起,3万多个可选):

echo 10000 mygod >> /etc/iproute2/rt_tables  

二、建立路由规则

ip rule add from <source address> lookup <table name>  

假设我们机器上连了两条线路,两块网卡,分配了2个ip,第一个线路是eth0,ip是192.168.1.1,第二个线路是eth1,ip是192.168.2.1。我们添加一下策略路由规则,从192.168.2.1过来的走mygod规则。

ip rule add from 192.168.2.1 lookup mygod  

三、应用路由规则

ip route add default via 192.168.2.1 dev eth1 table mygod  

注意,这里是应用了缺省路由,当然你也可以弄其他的。比如,一台机器一个网卡,N个IP,每个ip对应不同的专线。你就可以添加不同的非缺省路由。另外,也是支持vlan的。

ip route add default via 192.168.2.1 dev eth0.30 table vlan30  

如果想把策略路由固定下来,不用每次都执行shell脚本,生成下面两个文件:

# vi /etc/sysconfig/network-scripts/route-eth1
192.168.2.0/24 dev eth1 table mygod  
default via 192.168.2.1 dev eth1 table mygod

# vi /etc/sysconfig/network-scripts/rule-eth1
from 192.168.2.0/24 lookup mygod  
comments powered by Disqus