我有 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。