一、原理说明
1、路由表(table)从0到255进行编号,每个编号可以对应一个别名,编号和别名的对应关系在linux下放在/etc/iproute2/rt_tables这个文件里,一般0编号的table对应的别名为upspec,255编号对应的别名为local,254和253对应的别名分别为main和default。
表255 本地路由表(Local table) 本地接口地址,广播地址,已及NAT地址都放在这个表。该路由表由系统自动维护,管理员不能直接修改。
表254 主路由表(Main table) 如果没有指明路由所属的表,所有的路由都默认都放在这个表里,一般来说,旧的路由工具(如route)所添加的路由都会加到这个表。一般是普通的路由。
表253 默认路由表 (Default table) 一般来说默认的路由都放在这张表,但是如果特别指明放的也可以是所有的网关路由。
2、传统的路由算法是仅使用一张路由表的。但是在有些情形底下,我们是需要使用多路由表的。例如一个子网通过一个路由器与外界相连,路由器与外界有两条线路相连,其中一条的速度比较快,一条的速度比较慢。策略性路由的路由规则负责定义路由策略,它定义来源哪里的IP需要查询哪个路由表(使用别名)。路由规则的查看使用ip rule sh路由规则也从0开始编号,可以自由添加,来源相同IP的路由规则选择根据规则编号的大小确定优先级,编号越小优先级越高。
规则包含3个要素:
什么样的包,将应用本规则(所谓的SELECTOR,可能是filter更能反映其作用);
符合本规则的包将对其采取什么动作(ACTION),例如用那个表;
本规则的优先级别。优先级别越高的规则越先匹配(数值越小优先级别越高)。
# ip rule sh
0:from all lookup local
32766:from all lookup main
32767:from all lookup default
优先级最高的规则是0,要查询的路由表名称是local,其次是32766,要查询的路由表名称是main,后面依此类推。
3、操作系统在选路时首先根据路由规则选取table,然后再从table里选取相应路由,如果同一table里不同接口使用相同的网关,选路时会默认选择第一条路由,所以当有两个网络接口卡时,如果目标网络在同一网段,那么由于选路时按第一条路由出口出去,所以会导致所有的流量都会从第一个网卡上出去。
二、配置
1、查看路由表配置,默认为main的路由表,通常的格式如下:
route [-nNvee] [-FC] [] : 用来列出路由表记录
route [-v] [-FC] {add|del|flush} ... : 用来修改路由表记录
示例:
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.2 0.0.0.0 UG 100 0 0 ens33
192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
其它命令:
route del default 删除main路由表里的默认路由
route add default gw 192.168.1.1 在main路由表里添加默认路由记录192.168.1.1
2、添加其他编号的路由table时,我们需要使用ip route命令,通常的格式为:
ip route { list | flush | show } SELECTOR: 用来显示指定table的路由表记录
ip route { add | del | change | append | replace | monitor } ROUTE:用来修改指定table的路由表记录
3、示例
3.1.网卡绑定地址
ip addr add 192.168.1.2/24 dev ens33
ip addr add 172.16.1.2/24 dev ens32
3.2. 修改 /etc/iproute2/rt_tables,增加联通和电信两个路由表
电信路由表
# echo "192 telecom" >> /etc/iproute2/rt_tables
联通路由表
# echo "172 unicom" >> /etc/iproute2/rt_tables
3.3. 电信网络
#清空 telecom 路由表
ip route flush table telecom
# 添加一个路由规则到 telecom 表
ip route add 192.168.1.0/24 via 192.168.1.1 dev ens33 table telecom
# 电信网络默认网关地址
ip route add default via 192.168.1.1 dev ens33 table telecom
# 内部回环网络
ip route add 127.0.0.0/8 dev lo table telecom
# 让192.168.1.2的回应数据包走电信的路由表路由
ip rule add from 192.168.1.1 table telecom
3.4.联通网络
# 清空 unicom 路由表
ip route flush table unicom
# 添加一个路由规则到 unicom 表
ip route add 172.16.1.0/24 via 172.16.1.1 dev ens32 table unicom
# 联通网络默认网关地址
ip route add default via 172.16.1.1 dev ens32 table unicom
# 内部回环网络
ip route add 127.0.0.0/8 dev lo table unicom
# 让172.16.1.2的回应数据包走电信的路由表路由
ip rule add from 172.16.1.1 table unicom