在正确的网关上响应请求

在正确的网关上响应请求

我有一个非常简单的场景。不幸的是,我找不到与此问题匹配的答案。我有两个用于不同 WAN(192.168.0.70 和 192.168.0.80)的 Linux 路由器(=网关)。两者都将端口 50000 转发到 Linux 服务器 192.168.0.60。该服务器只有一个接口,默认网关为 192.168.0.70。如果没有其他配置,您将看到以下行为:

通过 192.168.0.70 传入请求 -> 响应工作正常(因为默认网关)

通过 192.168.0.80 传入请求 -> 不起作用,因为响应需要 192.168.0.70

我如何管理通过 192.168.0.80 的请求并通过 192.168.0.80 发送回来?

答案1

我们必须用标记来标记新连接,然后根据标记区分传出的数据包,并使用两个路由表中的任意一个将它们路由到适当的网关。您可能需要加载 CONNTRACK 模块,

          modprobe ip_conntrack

我们将 MAC70 称为网关 192.168.0.70 的 MAC 地址,将 MAC80 称为 192.168.0.80 的 MAC 地址。那么

       iptables -A INPUT -m state --state NEW -m mac --mac-source MAC70 -p tcp --dport 50000 -j CONNMARK --set-mark 1
       iptables -A INPUT -m state --state NEW -m mac --mac-source MAC80 -p tcp --dport 50000 -j CONNMARK --set-mark 2

这两条规则用两个简单的标记来标记传入的新连接(对于 TCP 协议,如果需要可以修改)。标记适用于整个连接,IE所有属于此初始数据包的后续 ESTABLISHED、RELATED 类型的数据包都将具有相同的标记。

只能根据网关的 MAC 地址进行区分,因为每个数据包的源 IP 地址都是开始连接的客户端的 IP 地址,不是网关的 MAC 地址。因此,这仅适用于以太网连接,因为 wifi 帧不携带 MAC 地址。

现在

       ip rule add fwmark 1 table router70
       ip rule add fwmark 2 table router80

这两个命令根据连接/数据包标记指定使用哪一个路由表(两个中的两个)。

现在我们设置两个路由表:

        echo 200 router70 >> /etc/iproute2/rt_tables
        echo 201 router80 >> /etc/iproute2/rt_tables
        ip route add 192.168.0.0/24 dev eth0 table router70
        ip route add 192.168.0.0/24 dev eth0 table router80
        ip route add default via 192.168.0.70 table router70
        ip route add default via 192.168.0.80 table router80

假设您的以太网 NIC 名为 eth0,否则请相应更改。所有其他端口和/或协议的路由仍与您已有的路由相同,无论它们是什么。

你已经完成了。

相关内容