Linux下的策略路由

时间:2024-03-15 17:33:11

策略路由:

    Linux系统可以同时存在256(0-255)个路由表,而且每个路由表都各自独立,互不相关。数据包在传输时是根据RPDB(路由策略数据库)内的策略决定数据包应该用哪个路由表传输的。

/etc/iproute2/rt_tables  下定义了路由表

/etc/iproute2/rt_tables  下定义了路由表

Linux下的策略路由

格式 : 表 名称

表255 本地路由表(Local table) 本地接口地址,广播地址,已及NAT地址都放在这个表。该路由表由系统自动维护,管理员不能直接修改。
表254 主路由表(Main table) 如果没有指明路由所属的表,所有的路由都默认都放在这个表里,一般来说,旧的路由工具(如route)所添加的路由都会加到这个表。一般是普通的路由。
表253 默认路由表 (Default table) 一般来说默认的路由都放在这张表,但是如果特别指明放的也可以是所有的网关路由。

RPDB中的路由表 :ip rule show

  ip rule show查看的只是有哪些路由表,要查看路由表里面的具体路由,则可以使用ip route show/list table ID/name,默认的ip route show查看的是main表的路由条目。

Linux下的策略路由

第一段:冒号之前的数字,表示该路由表被匹配的优先顺序,数字越小,越早被匹配。这个优先级别范围是0~4亿多。默认0、32766、32767三个优先级别已被占用。如果在添加规则时没有定义优先级别,那么默认的优先级别会从32766开始递减,可以通过prio ID参数在设置路由表时添加优先级。

第二段:from关键字,这里显示的是匹配规则,当前表示的是从哪里来的数据包,除了from关键字外,还有to、tos、fwmark、dev等等。

第三段:loacl/main/default 这些都是路由表名称,表示数据包要从那个路由表送出去。local表包含本机路由及广播信息,main表就是我们route -n看到的内容,default表,默认为空。

查看表的路由  ip route show table

Linux下的策略路由


在不能做bond的机器上实现负载均衡可以采用策略路由的方法

gate=`route -n | head -n 3 | grep "eth1" | awk '{printf $2}'`
ip route add default via ${gate} dev eth2 table 200      ######创建一个路由表
eth2=`ifconfig eth2 | grep "inet" |head -n 1 | awk {'printf $2'}`
ip rule add from ${eth2} table 200    #####来自eth2的流量都走路由表200
ip route show table 200


更加详细 https://segmentfault.com/a/1190000004165066