如何创建 CentOS 7 基于策略的持久路由规则?

如何创建 CentOS 7 基于策略的持久路由规则?

我的“CentOS 7 Minimal”机器上有 2 个网络接口。我需要设置基于策略的路由,这样如果请求进入一个接口,回复就会从同一接口发送出去。以非持久方式使用 iproute2 执行此操作并不是非常困难:

echo '200 isp2' >> /etc/iproute2/rt_tables
ip route add default via 1.1.1.1 table isp2
ip rule add from 192.168.1.50 table isp2

其中1.1.1.1是我的路由器,192.168.1.50是我的linux的IP。问题是让这种情况持续下去。

据我所知,没有 iproute2 持久性文件 - 使事物持久化的方法是将它们添加到网络启动脚本中。

通常,RedHat 建议创建文件 /etc/sysconfig/network-scripts/route-ethX 来添加路由,但这似乎无法将路由添加到辅助路由表中。

解决方案似乎是将上面的“iproute”和“iprule”行添加到 /etc/sysconfig/network 中。这几乎是有效的,除了一件事:每次网络重新启动时,它都会不断添加重复的“ip 规则”规则,一次有数十个。

使用“systemctl restart network”重新启动网络 2 或 3 次后,我的ip rule输出如下所示:

0: from all lookup local
32670: from 192.168.1.50 lookup isp2
32671: from 192.168.1.50 lookup isp2
...
32764: from 192.168.1.50 lookup isp2
32765: from 192.168.1.50 lookup isp2
32766: from all lookup main
32767: from all lookup default

在 CentOS 7 上添加持久的基于策略的路由规则的正确方法是什么?

附言。正如预期的那样,该ip route list table isp2命令显示单个条目,因此这不是问题。

编辑:根据RedHat 7手册:

在 Red Hat Enterprise Linux 中,不推荐使用全局 /etc/sysconfig/network 文件

这有利于特定于接口的配置文件,它似乎无法将路由添加到不同的路由表,并且无法添加ip rule规则。

答案1

安装 NetworkManager-config-routing-rules 并启用 NetworkManager-dispatcher 似乎已经解决了这个问题:

$ sudo yum install NetworkManager-config-routing-rules
$ sudo systemctl enable NetworkManager-dispatcher.service
$ sudo systemctl start NetworkManager-dispatcher.service

现在我可以将其放入我的 /etc/sysconfig/network-scripts/route-ethX 中:

default via 1.1.1.1 table isp2

这在我的 /etc/sysconfig/network/scripts/rule-ethX 中:

from 192.168.1.50 table isp2

以及我的 /etc/iproute2/rt_tables 中 isp2 的定义:

200 isp2

重新启动网络服务不再创建重复条目。

答案2

/etc/sysconfig/network-scripts/ifup-routes鉴于从行的读取route-(interface)被解析为原样ip route add,因此要在某个表中添加路由,只需添加table XXX到该行即可。但是,您可能需要使用表号而不是名称来rt_tables成功添加路由。

通过规则,您可以使用rule-(interface)文件以及实际当前版本的文件,ifup-routesifdown-routes像路由文件一样处理这些文件。您的脚本集可能不是这种情况,以验证 run grep rule /etc/sysconfig/network-scripts/ifup-routes

您的主要问题实际上是由/etc/sysconfig/network每个 ifup 和 ifdown 脚本的来源引起的,因此该文件中的每个命令都会在每个接口的每次上/下执行一次。这反过来又会使您的系统在每次网络重新启动时添加 2* 个接口(包括lo)IP 规则。

PS:我已经卸载了CentOS网络管理器,所以一切都是通过ifup/ifdown脚本完成的,并且在发布这个答案之前我已经测试了所有这些。

答案3

重新启动网络服务不再创建重复条目。

不幸的是,事实并非如此。如果您只是继续重新启动网络服务而不做任何修改,但如果您编辑现有规则,例如您更改此:

from 10.1.2.0/23 table 300

对此:

from 10.1.2.0/24 table 300

然后你重新启动网络服务,看看会发生什么:

ip rule list table 300
32763:  from 10.1.2.0/23 lookup 300
32764:  from 10.1.2.0/24 lookup 300

重复的规则,如 32763:从 10.1.2.0/23 查找 300 应该已被删除。

此外:如果您注释或完全删除“rule-ifname”文件中的所有规则,并重新启动网络服务,则所有先前的规则仍然会存在。

所以不,这不是一个解决方案。

相关内容