带有 DNAT 和多个网关的 iptables:如何将回复路由到正确的网关?

带有 DNAT 和多个网关的 iptables:如何将回复路由到正确的网关?

我在 Linux 客户端上针对具有 DNAT 和多个网关的场景设置 iptables 规则和路由时遇到问题:

我们有两个通往互联网的网关。第一个网关有固定 IP,第二个网关提供更好的带宽。两个网关都对来自我们私有网络的传出流量进行 SNAT。

在具有固定 IP 的第一个网关上,我为端口 22 设置了端口转发,以便所有 SSH 流量都转发到我的 Linux 客户端。

效果很好。

但只有当我使用第一个网关作为 Linux 客户端上的默认路由时才可以。

当我将 Linux 客户端切换到第二个网关作为默认路由时,传入的 SSH 连接不再起作用。

如何设置 Linux 客户端以将与传入 SSH 连接相关的回复数据包发送到第一个网关,但将所有其他流量发送到第二个网关?

答案1

我找到了解决方案接受的答案针对这个问题“根据服务将返回流量路由到正确的网关”

我已经在我的Linux客户端上实现了这些规则:

# Default route is second gateway:
ip route add default via 10.0.0.2

# Create a routing table "FIXED" using our fixed IP gateway
echo "200 FIXED" >>/etc/iproute2/rt_tables
ip route add default table FIXED via 10.0.0.1

# Create a rule to route any packets marked "42" through FIXED:
ip rule add fwmark 42 table FIXED

# Finally, the iptables rule:
# Any outgoing traffic from source port 22 of my Linux client
# that has a destination inside our private network (10.0.0.0/24)
# is marked "42" (and therefore goes to FIXED):
iptables -t mangle -A OUTPUT ! -d 10.0.0.0/24 \
                             -p tcp -m tcp --sport 22 \
                             -j MARK --set-mark 42

相关内容