iptables 规则不起作用

iptables 规则不起作用

我面临 iptables 规则的问题。

要求是将来自服务器 A 的端口 9443 上的传入请求 nat 到服务器 B 的 443。

在我的场景中,

  • 服务器A 10.10.8.33 - - 这里配置了iptables。
  • 服务器 B 10.21.2.31 - - Web 服务器。

我已经配置了这些规则

iptables -t nat -A PREROUTING -p tcp --dport 9443 -j DNAT --to-destination10.21.2.31:443

iptables -t nat -A POSTROUTING -p tcp -d 10.21.2.31 --dport 9443 -j SNAT --to-source 10.10.8.33:9443

哪个不起作用?

我正在尝试浏览https://10.10.8.33:9443来自我的本地 Windows 10 机器 C.. IP 10.21.2.93。

详细说明我的请求... 9443 上对服务器 A 的传入请求应该通过 NAT 到服务器 B 上的 443,并且 C 将能够获取该页面。

请求帮助。

答案1

如果您只需要执行 DNAT,则不需要在 POSTROUTING 中放置的规则(因此您可以将其删除),在完全 NAT 的情况下需要 SNAT 规则。关于 DNAT 规则,这是错误的,因为在参数 --dport 中,您需要放置从服务器 A 外部调用的端口 (9443)。所以正确的规则是这样的:

iptables -t nat -A PREROUTING -d 10.10.8.33/32 -p tcp -m tcp --dport 9443 -j DNAT --to-destination 10.21.2.31:443

编辑:

@Sandy你的问题不太清楚..所以我希望能够正确理解你想要完成的任务。

只是回顾一下您想要什么以及存在什么问题:

  • 通过在端口 TCP 9443 上调用 PC C 通过服务器 A 到达服务器 B(DNAT 规则从 9443 到 443)
  • 服务器 B 和 PC C 在同一子网中
  • 由于服务器 B 和 PC C 位于同一子网中,DNAT 本身不起作用,因为服务器 B 直接回复 PC C,这就是您需要 SNAT 规则的原因

因此,我之前提出的 DNAT 应该是正确的,但您还需要使用服务器 A 的 IP 来伪装(使用 SNAT)来自 PC C 的请求。伪装来自 PC C 的请求的 SNAT 规则应该是:

iptables -t nat -A POSTROUTING -s 10.21.2.93/32 -d 10.21.2.31/32 -p tcp -m tcp --dport 443 -j SNAT --to-source 10.10.8.33

网络拓扑是图中那个吗?如果这是拓扑(或非常相似),那么使用 iptables 而不是实现 Apache、nginx 或 HAProxy 作为反向代理有一个特殊的原因吗? 网络方案

相关内容