始终将流量从其发起的接口转发出去

始终将流量从其发起的接口转发出去

是最初的问题,但我最终的解决方案与我最初提出问题的方式有很大不同,因此我将其作为新问题发布。)

背景:

我有一个具有三个不同接口的虚拟机:管理 (eth0)、生产 (eth1) 和备份 (eth2)。管理用于 RDP 和 SSH 流量。生产是为了大部分流量。备份用于与同一子网上的备份服务进行通信。每个网络都仅限于其自己的用途,任何看起来应该由其他网络之一承载的流量都将被丢弃(例如,tcp/22在生产网络上被丢弃)。

问题:

SSH 流量通过管理端口进入服务器,但在生产接口上离开:

执行 -j LOG 的 syslog 输出显示输出接口是 eth1(生产)

这会导致流量被丢弃,因为数据包将tcp/22发送到生产网络。

如果我更改默认路由以指向管理网关,数据包会从正确的接口发出,因此 ssh 可以工作,但所有生产流量都会停止工作。我可以保留指向 PROD 的默认路由,只要我从同一子网上的计算机进行连接,它仍然可以工作。

我需要内核根据流量源自哪个接口来设置默认网关。

答案1

任何高级路由(例如设置多个默认网关)都将涉及基于策略的路由

已经发布了多种基于标记发往特定端口的数据包进行转发的解决方案,但我在红帽客户门户上找到的解决方案事实证明要容易得多,并且可能会更广泛地适用。

添加到/etc/rc.local

  1. 设置备用路由表,我已经打电话给我的了2

    /sbin/ip 路由添加表 2 默认通过 <管理网关>

  2. 将来自管理 IP 的流量设置为使用已设置管理网关的备用路由表。

    /sbin/ip 规则从 <管理 IP 地址> 表 2 添加

上面的工作原理是让我的主网关(在默认路由表中)指向生产环境(eth1)。将为源自与 eth0 关联的 IP 地址的任何流量选择步骤 2 中的网关。

在我的特定情况下,备份网络对网关设置不敏感,因为所有流量都位于同一子网上。不过,如果备份网络确实有多个子网,我可以设置第三个路由表并ip rule add对该路由表执行类似的操作。

如果没有基于策略的路由,内核将参考默认路由表来决定将流量推出的接口。这意味着如果另一个节点与所连接的接口之一位于同一子网上,则将选择正确的接口,否则流量将通过默认路由发送。如果网络继续路由数据包(尽管来自“错误”的接口),则这种行为将不可见,但在我的情况下导致流量被丢弃。

执行基于策略的路由后,生产和管理/SSH 流量开始按预期运行。

相关内容