静态路由和策略路由的配置实践
前言
一般在多网卡的网络访问关系中我们通常根据目标IP地址段来添加静态路由(static-routes),在主机系统配置层面这个需求一般都比较简单也不需要使用非常复杂的命令,说实话如果不是因为开发测试中心同事的乱入启发,我也不会发现还有策略路由这样一种灵活通用的配置方法来实现Linux多网卡多路由的设定,灰常感谢。
策略路由的出现在某些业务场景下可能更优于静态路由
更新记录
2019年03月12日 - 更新CentOS 7静态路由添加规则
2016年03月18日 - 更新静态路由配置和建议
2015年12月23日 - 增加Linux添加静态路由最佳实践
2015年12月18日 - 修正动态路由为策略路由描述,完善内容,感谢@extreme
2015年12月17日 - 初稿
阅读原文 - https://wsgzao.github.io/post/static-routes/
扩展阅读
Static Routes and the Default Gateway - https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/networking_guide/ch-configuring_static_routes_and_the_default_gateway
Routing Tables - http://linux-ip.net/html/routing-tables.html
linux配置静态路由 - http://www.361way.com/linux-define-static-route/4053.html
Linux策略性路由应用及分析(iproute2) - http://tilt.lib.tsinghua.edu.cn/node/408
Linux Advanced Routing & Traffic Control - http://lartc.org/
静态路由表和策略路由的区别
通常我们维护静态路由表会手工填写所有IP地址段的路由规则,使用命令或者写入配置文件永久生效,先以Windows/Linux/AIX常用方法为例
1 | #Windows静态路由 |
这种办法针对少量的规则还可以轻松应对,但规则一旦增加麻烦也就接踵而至,网段地址不断变化就必须及时更新路由表,否则其他用户就无法访问。如果可以根据用户访问进来的路径设定策略路由就会方便很多,而rt_tables就是为此而生。
Linux添加静态路由最佳实践
按照RedHat官方介绍有三种方式添加永久静态路由,这里只列举最佳方式
临时路由
以下两种方法可以立即生效,但重启后会消失,切记使用场景
1 |
|
永久路由
该方法需要重启网络会造成短暂的网络服务中断,但重启后优先级大于rc.local方式不会影响nfs
1 | #可以通过临时命令立即生效 |
rt_tables
rt_tables简单来说就是通过给表的命名使得管理简单化
大部分人习惯直接将路由表优先级号码直接作为表的名称来使用,这样做的好处是非常直观和简明的表达了表所在优先级的位置,但是当表的优先级结构出现变动时,我们对巨大的路由表的修改就显得很烦琐和费事了。
在/etc/iproute2/目录下,有这么一个文件rt_tables,只要对它进行改动,我们将很容易的完成路由表优先级结构的变动。(数值越小优先级别越高)
当路由表的优先级发生变化的时候,我们只需要编辑/etc/iproute2/rt_tables这个文件就可以直接改变路由表的优先级次序。
1 | cat /etc/iproute2/rt_tables |
Linux最多可以支持255张路由表,其中有3张表是内置的:
表255 本地路由表(Local table) 本地接口地址,广播地址,已及NAT地址都放在这个表。该路由表由系统自动维护,管理员不能直接修改。
表254 主路由表(Main table) 如果没有指明路由所属的表,所有的路由都默认都放在这个表里,一般来说,旧的路由工具(如route)所添加的路由都会加到这个表。一般是普通的路由。
表253 默认路由表 (Default table) 一般来说默认的路由都放在这张表,但是如果特别指明放的也可以是所有的网关路由。
表 0 保留
策略性路由应用及分析(iproute2)
策略性路由
策略性是指对于IP包的路由是以网络管理员根据需要定下的一些策略为主要依据进行路由的。例如我们可以有这样的策略:“所有来直自网A的包,选择X路径;其他选择Y路径”,或者是“所有TOS为A的包选择路径F;其他选者路径K”。
Cisco 的网络操作系统 (Cisco IOS) 从11.0开始就采用新的策略性路由机制。而Linux是在内核2.1开始采用策略性路由机制的。策略性路由机制与传统的路由算法相比主要是引入了多路由表以及规则的概念。
多路由表(multiple Routing Tables)
传统的路由算法是仅使用一张路由表的。但是在有些情形底下,我们是需要使用多路由表的。例如一个子网通过一个路由器与外界相连,路由器与外界有两条线路相连,其中一条的速度比较快,一条的速度比较慢。对于子网内的大多数用户来说对速度并没有特殊的要求,所以可以让他们用比较慢的路由;但是子网内有一些特殊的用户却是对速度的要求比较苛刻,所以他们需要使用速度比较快的路由。如果使用一张路由表上述要求是无法实现的,而如果根据源地址或其它参数,对不同的用户使用不同的路由表,这样就可以大大提高路由器的性能。
规则(rule)
规则是策略性的关键性的新的概念。我们可以用自然语言这样描述规则,例如我门可以指定这样的规则:
规则一:“所有来自192.16.152.24的IP包,使用路由表10, 本规则的优先级别是1500”
规则二:“所有的包,使用路由表253,本规则的优先级别是32767”
我们可以看到,规则包含3个要素:
什么样的包,将应用本规则(所谓的SELECTOR,可能是filter更能反映其作用);
符合本规则的包将对其采取什么动作(ACTION),例如用那个表;
本规则的优先级别。优先级别越高的规则越先匹配(数值越小优先级别越高)。
环境配置
服务器A和B为双网卡,操作系统为rhel_7.1_64
网卡显示名称 | IP地址 | 子网掩码 | 网关 | 备注 |
---|---|---|---|---|
ens4f0 | 172.31.192.201 | 255.255.255.0 | 172.31.192.254 | 服务器A |
ens9f0 | 172.31.196.1 | 255.255.255.0 | 172.31.196.254 | 服务器A |
ens4f0 | 172.31.192.202 | 255.255.255.0 | 172.31.192.254 | 服务器B |
ens9f0 | 172.31.196.2 | 255.255.255.0 | 172.31.196.254 | 服务器B |
/ | 172.25.168.44 | 255.255.255.0 | 172.25.168.254 | 接入测试 |
网络配置,以服务器A为例,注意注释默认网关
1 | cat /etc/sysconfig/network-scripts/ifcfg-ens4f0 |
策略路由配置
注意配置名称一定要吻合
1 | #编辑rt_tables |