我有两台服务器(均运行 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
再次强调,这只是在前台运行,并且不会在重启后继续存在,但它是一个非常方便的命令,所以我认为它属于本次讨论。