linux kernel 2.2 开始支持多个路由表。
routing policy database (RPDB)。

传统路由表,基于目标地址做路由选择。通过多个路由表,kernel支持实施策略路由,这样就可以基于源IP地址等信息做路由选择。

传统的查看路由表命令 route
linux 多网卡多路由表实现策略路由
新的路由表查看命令 ip route
linux 多网卡多路由表实现策略路由
Kernel 可以定义0到255标识路由表。
The file /etc/iproute2/rt_tables need not exist, as the iproute2 tools have a hard-coded entry for the main table. 直接用route或者ip route 查看的就是main这张路由表。

linux 多网卡多路由表实现策略路由_第1张图片

The local routing table这张路由表由kernel自动生成和维护,不应该去改动它。路由表中包含的是本地接口路由和广播路由,以及nat路由。
linux 多网卡多路由表实现策略路由_第2张图片
The main routing table这张路由表也是由kernel自动生成和维护。
linux 多网卡多路由表实现策略路由
Routing Policy database
路由策略数据库控制了kernel搜素多个路由表之间的顺序。每一条rule规则都可以定义一个0到32767之间的优先级,数字越小,优先级越高。
当路由表cache为空,新的数据包到达寻找路由时,kernel开始查找最高优先级的rule0。Kernel重复查找匹配路由规则rule。如果kernel没有在rule中找到路由,那么它会尝试查找剩下的其他rule.
查看路由规则ip rule show
linux 多网卡多路由表实现策略路由
Ip rule add unicast iif eth7 prio 32766 table

删除某条路由规则rule
Ip rule del prio 32766

Ip route flush 10.38.0.0/16 或者某张路由表中所有路由ip route flush table main

ip route show cache
ip route flush cache

 可在 /etc/sysconfig/network-scripts/route-interface 文件中为每个接口保存其静态路由配置。命令提示符后使用 ip 设定的静态路由会在系统关机或重启后丢失。要配置静态路由以便在系统重启后仍可保留,则必须将其放在 /etc/sysconfig/network-scripts/ 目录中。该文件名的格式应为 route-ifname。
route-ifname只是为接口保存的路由配置文件。真正的路由表在rt_tables中定义,定义的路由表各个条目就分散在route-ifname文件中。

Ip rule 也是同样的原理,文件名的格式为rule-XX。

/etc/sysconfig/network-scripts/rule-eth0
/etc/sysconfig/network-scripts/route-eth0