简单端口转发

简单端口转发

我遇到了一点麻烦,因为我正在尝试设置反向代理和第二台服务器。我的想法是让防火墙将 https 转发到反向代理,并将端口 29418(gerrit ssh)转发到第二台服务器。现在我的合作 IT 人员说:不行!要么两个端口都转到服务器 1,要么两个端口都转到服务器 2。

好的,为了解决这个问题,我尝试在端口 29418 的反向代理上设置端口转发 -> server2:29418

细节:

  • 服务器 1 IP:Ubuntu 12.04.2 LTS 上的 10.0.0.132 和 192.168.10.2
  • 服务器 2 IP:Ubuntu 12.04.2 LTS 上的 10.0.0.133 和 192.168.10.3

现在 https 和端口 29418 都从防火墙转到 10.0.0.132,IT 说这是唯一的方法。:(

所以请告诉我如何从 10.0.0.132:29418 转发 -> 192.168.10.3:29418 或 10.0.0.133:29418

当我在 10.0.0.132 上工作时,我可以同时连接到 10.0.0.133:29418 和 192.168.10.3:29418,因此端口是打开的。

- 更新 -

我的 iptables -t nat -L 看起来像这样:

root@dev:/root# iptables -t nat -L
链 PREROUTING(策略接受)
目标 保护 优化 源 目标
DNAT tcp -- 任何地方 dev.example.com tcp dpt:29418 到:10.0.0.133

链输入(策略接受)
目标 保护 优化 源 目标

链输出(策略接受)
目标 保护 优化 源 目标

链 POSTROUTING(策略接受)
目标 保护 优化 源 目标
root @ dev:/root#cat /proc/sys/net/ipv4/ip_forward
1

答案1

以防其他人正在寻找一种真正有效的方法。尽管@HorsePunchKid 的建议是正确的,但我发现这个演练填补了缺失的步骤:

http://www.debuntu.org/how-to-redirecting-network-traffic-to-a-new-ip-using-iptables/

在本质上:

启用 IP 转发:

sysctl net.ipv4.ip_forward=1

添加您的转发规则(使用 nnnn:port):

iptables -t nat -A PREROUTING -p tcp -d 10.0.0.132 --dport 29418 -j DNAT --to-destination 10.0.0.133:29418

要求 IPtables 进行伪装:

iptables -t nat -A POSTROUTING ! -s 127.0.0.1 -j MASQUERADE

就这样!无论如何,它对我来说都有效 :)

答案2

如果有人正在寻找临时方法,请尝试以下解决方案。

ssh -L 192.168.0.10:8080:10.0.0.10:80 [email protected]

上述命令将基础计算机上所有到端口 8080 的连接重定向到虚拟机的 80 端口。您可以通过访问网页来测试它是否有效http://192.168.0.10:8080,它会在客户机上显示网页。

这适用于所有端口:)

答案3

如果您在 10.0.0.132 上安装了 iptables,我认为这将非常简单:

iptables -t nat -A PREROUTING -j DNAT -d 10.0.0.132 -p tcp --dport 29418 --to 10.0.0.133

这表示将进入 10.0.0.132 端口 29418 的流量发送到 10.0.0.133,而不是在同一端口,在 10.0.0.132 可能尝试执行的任何其他路由之前。如果您运行此命令并遇到问题,请将 -A 标志替换为 -D 以将其删除。

如果您希望在 10.0.0.132 启动时自动运行此规则,请考虑将上述命令作为“post-up”规则添加到 /etc/network/interfaces 中。

答案4

最后,我不得不在 ESXi 服务器内安装 pfSense 作为路由器,以将流量路由到不同的 VM,因为我无法让它在 Ubuntu 中工作。

相关内容