configuration路由使用与入站stream量相同的出站stream量接口

我有一个有两个接口的Linux机器:一个用于数据,另一个用于pipe理目的。 如果两者都在同一个networking上,我为这两个接口添加了一个路由

想象一下,路由表是:

192.168.132.0 255.255.255.0 eth0 192.168.132.0 255.255.255.0 eth1 ( management interface) 

问题是,即使连接启动到mgmt IP(eth1),返回stream量将在eth0上。

我怎样才能确保连接上的返回stream量使用与被阻止的stream量相同的接口?

您可以使用iptables / netfilter与conntrack和(conn-)标记模块以及策略路由的组合来执行此操作。

在iptables的MANGLE表中:

 -PREROUTING -m状态 - 状态ESTABLISHED,RELATED -J CONNMARK --restore-mark
 -A OUTPUT -m状态--state ESTABLISHED,RELATED -j CONNMARK --restore-mark
 -A PREROUTING -i eth0 -m状态 - 状态NEW -j CONNMARK  - 设置标记1
 -A PREROUTING -i eth1 -m state --state NEW -j CONNMARK --set-mark 2
 -A PREROUTING -m connmark  - 标记1 -j MARK  - 设置标记1
 -A PREROUTING -m connmark  - 标记2 -j MARK  - 设置标记2
 -A PREROUTING -m状态--state新-m connmark!  - 标记0 -j CONNMARK  - 保存

我假设你在eth0上有一个默认路由,所以我们只需要为通过eth1进入的这些paket设置一个“魔术”路由。

使用iproute2软件包:

 ip规则添加fwmark 2表eth1
 IP路由添加默认通过192.168.132.1表eth1

这样做的是:通过eth1进入的每个连接都将由iptables标记为“2”,因此连接中的每个连接都有一个标记,可以在iptables代码之外读取。 然后添加一条策略路由,通过具有默认路由的路由表“eth1”路由每个标记为“2”的路由器,但是通过eth1发送出该path。

瞧。

上面的设置假定您在两个接口上都具有相同的IP。 如果两者都有不同的IP地址,则可以通过在源ip上使用策略路由来简化设置(我假设eth1上的IP地址为192.168.132.3):

 ip规则添加从192.168.132.3表eth1
 ip route添加默认通过192.168.132.3表eth1

然后,不需要通过iptables进行标记。

如果您试图使pipe理stream量与其他stream量分开,那么只需让您的pipe理员在服务器上留下不同的端口即可。 在离开服务器之后,您需要保持stream量的分离,而不是通过在同一个子网上传输。

因此,为了分离您的stream量,您需要将networking分成多个子网,使用单独的交换机或VLAN,并使用路由在不同子网之间路由stream量。 然后在您的服务器上有一个单独的pipe理接口,只连接到pipe理子网。 理想情况下,您也可以从仅连接到此子网的主机执行pipe理任务。

这将使你真正得到你想要的东西,并将更容易configuration和理解 – 虽然不一定更便宜的设置。 我假设你有一个明确的业务案例来分离你的pipe理stream量。

如果您只想将服务器上的pipe理任务限制在networking上的特定主机上,则可以通过将iptables设置为仅允许来自这些特定主机IP地址的pipe理types通信(例如通过诸如ssh之类的端口识别)来实现此目的。