我在尝试使用第二台服务器设置反向代理时遇到了一些麻烦。我的想法是让防火墙将 https 转发到反向代理,并将端口 29418 (gerrit ssh) 转发到第二台服务器。现在我的合作 IT 人员说:不能!要么两个端口都去服务器 1,要么两个端口都去服务器 2。
好的,作为解决方法,我尝试在端口 29418 -> server2:29418 的反向代理上设置端口转发
细节:
现在 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 Chain PREROUTING(策略接受) 目标 prot opt 源目标 DNAT tcp -- 任何地方 dev.example.com tcp dpt:29418 to:10.0.0.133 链输入(政策接受) 目标 prot opt 源目标 链输出(政策接受) 目标 prot opt 源目标 链POSTROUTING(策略接受) 目标 prot opt 源目标 root@dev:/root# cat /proc/sys/net/ipv4/ip_forward 1
小智 39
以防其他人正在寻找一种实际有效的方法。尽管@HorsePunchKid 在他的建议中是正确的,但我发现这个演练填补了缺失的步骤:
http://www.debuntu.org/how-to-redirecting-network-traffic-to-a-new-ip-using-iptables/
在本质上:
启用 IP 转发:
sysctl net.ipv4.ip_forward=1
Run Code Online (Sandbox Code Playgroud)
添加您的转发规则(使用 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
Run Code Online (Sandbox Code Playgroud)
要求 IPtables 伪装:
iptables -t nat -A POSTROUTING -j MASQUERADE
Run Code Online (Sandbox Code Playgroud)
就是这样!无论如何它对我有用:)
小智 12
如果有人在寻找临时方法,请尝试以下解决方案。
ssh -L 192.168.0.10:8080:10.0.0.10:80 root@10.0.0.10
Run Code Online (Sandbox Code Playgroud)
上面的命令将所有连接到主机上的端口 8080 重定向到虚拟机的 80 端口。您可以通过访问网页http://192.168.0.10:8080来测试工作,它会在来宾机器上显示网页。
这适用于所有端口:)
小智 7
如果您在 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
Run Code Online (Sandbox Code Playgroud)
这表示在 10.0.0.132 可能尝试执行的任何其他路由之前,将在端口 29418 上进入 10.0.0.132 的流量发送到 10.0.0.133,而不是在同一端口上。如果您运行此命令并遇到问题,请将 -A 标志替换为 -D 以将其删除。
如果您希望在 10.0.0.132 启动时自动运行此规则,请考虑将上述命令添加为 /etc/network/interfaces 中的“post-up”规则。