如何使用 iptables 将请求转发到在不同机器上运行的 jBoss 服务器?

如何使用 iptables 将请求转发到在不同机器上运行的 jBoss 服务器?

我有 3 台机器,其 IP 地址如下:-

机器 1 :- 10.10.10.20 机器 2 :- 10.10.10.21 机器 3 :- 10.10.10.22

jBoss 服务器在计算机 1 上启动,计算机 3 是客户端。如果我在计算机 3 上的浏览​​器中输入 10.10.10.21(计算机 2 的 IP 地址),我应该被重定向到在计算机 1 上启动的 jBoss 服务器的默认 jBoss 页面。但是,在计算机 3 上的浏览​​器中输入 10.10.10.20(计算机 1 的 IP 地址)应该不起作用。也就是说,计算机 3 上的客户端应该只能通过计算机 2 访问计算机 1 上的 jBoss 服务器,而不能直接访问。

请注意,这 3 台机器是带有防火墙的私有网络的一部分。我原本想在机器 2(安装了 RHEL)上使用 iptables,但无法正常使用它。

有人能建议我如何实现这个设置吗(使用 iptables 或任何其他方式)

我尝试在机器 2 上运行以下 iptables 命令:-

    iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to-destination     10.10.10.20

但我仍然无法从机器 3 通过机器 2 访问机器 1。

谢谢,机器人

答案1

您可以在 machine2 上运行反向 HTTP 代理(Apache、Squid、varnish、nginx)。这实际上是应用服务器中相当常见的配置,其中“前端”代理用于为后端应用程序提供缓存和故障转移。

然后,您将在 machine1 上拥有 iptables 规则,该规则仅允许来自 machine 2 的连接。

答案2

我设法使用 iptables 将发往机器 2 的请求转发到机器 3。请忽略脚本中的注释,因为它们可能不是命令的正确解释。

    #!/bin/bash

    #Execute the following command to enable ip forwarding if it is not already enabled.
    #echo 1 > /proc/sys/net/ipv4/ip_forward

    #nat to forward all requests to specified ports on Machine 2 to specified ports on Machine 1.
    iptables -t nat -A PREROUTING -p tcp -d 10.10.10.21 --dport 80 -j DNAT --to 10.10.10.20:80
    iptables -t nat -A PREROUTING -p tcp -d 10.10.10.21 --dport 1099 -j DNAT --to  10.10.10.20:1099
    iptables -t nat -A PREROUTING -p tcp -d 10.10.10.21 --dport 1098 -j DNAT --to 10.10.10.20:1098

    #Allow response from Machine 1 to Machine 2. 
    iptables -t nat -A POSTROUTING -d 10.10.10.20 -j MASQUERADE

该脚本会导致对机器 2 发出的所有 http、rmi 和命名服务请求转发到机器 1。

相关内容