两个 CentOS 服务器之间的端口转发

两个 CentOS 服务器之间的端口转发

我有两台服务器(均运行 CentOS 5.5 64 位)

一台服务器连接到公用网络,并具有公用 IP 地址,我可以使用该地址通过 SSH 远程登录。另一台服务器通过专用网络连接到服务器 1。

我想知道如何将服务器 1 上的端口(比如 20222)转发到服务器 2 上的端口 22,以便我可以使用服务器 1 的公共 IP 和端口 20222 使用任何 SSH 客户端连接到服务器 2。

服务器1的公网通过接口eth0连接,私网通过eth1连接

多谢。

问候,卡尔佩什

答案1

你可以通过创建 ssh 隧道轻松完成此操作:

ssh -L 20222:server_2_private_IP_address:22 server_1_public_IP_address

您也可以将其添加到您的 ~/.ssh/config 中(如果有):

Host foo
  Hostname server_1_public_IP_address
  User ...
  ...
  LocalForward 20222 server_2_private_IP_address:22

在启动 ssh 到 server_1_public_IP_address 后,您应该能够使用以下命令启动到 server_2 的新 ssh 会话

ssh -p 20222 localhost

从未尝试过,但应该可以与任何 ssh 客户端一起使用,将其指向 localhost 和 por 20222。

并阅读

man ssh

所有这些都在那里解释。

答案2

假设服务器 1 的外部地址为 1.2.3.4,内部地址为 10.0.0.1,服务器 2 的内部地址为 10.0.0.2,并且没有现有的默认路由:

在服务器 1 上:

iptables -t nat -A PREROUTING -p tcp --dport 20222 -i eth0 -j DNAT --to-destination 10.0.0.2:22
echo 1 > /proc/sys/net/ipv4/ip_forward

在服务器2上:

route add default gw 10.0.0.1

这些设置都不是永久的,也就是说,它们在重启后将不复存在。如果它们有效,我们可以讨论如何使它们永久存在。

答案3

您还可以通过运行来安装 stone(tcp/udp 开源隧道软件),然后以 root 身份运行以下命令


wget http://www.gcd.org/sengoku/stone/stone-2.3e.tar.gz
tar xzf ./stone-2.3e.tar.gz
cd ./stone-2.3d-2.3.2.7
make linux
cp ./stone /usr/bin/
cd ../
rm -Rf ./stone-2.3d-2.3.2.7

然后以用户身份运行以下命令


stone -D server1:20222/tcp server2:22/tcp

答案4

如果您想走这条路,MadHatter 可以为您提供 iptables 答案。

对于在迁移和其他过程中进行快速而肮脏的重定向,我使用了 redir

服务器 1 上的情况如下:

  redir --lport=20222 --caddr=$IP_OF_SERVER_2 --cport=22

再次强调,这只是在前台运行,并且不会在重启后继续存在,但它是一个非常方便的命令,所以我认为它属于本次讨论。

相关内容