我有两台服务器(都运行CentOS 5.5 64位)
一台服务器连接到一个公共networking,并有一个公共IP地址,我可以用它远程SSH进入。 另一台服务器通过专用networking连接到服务器1。
我想知道如何将服务器1上的端口(如20222)转发到服务器2上的端口22,以便我可以使用任何SSH客户端通过使用服务器1的公有IP和端口20222连接到服务器2。
服务器1的公网通过eth0接口连接,私网通过eth1连接
非常感谢。
问候,Kalpesh
你可以很容易地做到这一点创build一个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之后,你应该能够使用一个新的ssh会话来启动server_2
ssh -p 20222 localhost
从来没有尝试过,但应该与任何SSH客户端,指向本地和20222。
并阅读
man ssh
所有这一切都在那里解释。
假设服务器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
这些设置都不是永久性的,也就是说,它们在重新启动后将无法存活。 如果他们工作,我们可以讨论如何使他们永久。
您也可以通过运行安装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
MadHatter拥有iptables的答案,如果你想要走这条路线。
对于迁移过程中的快速和脏redirect,我使用了redir
在服务器1上是这样的:
redir --lport=20222 --caddr=$IP_OF_SERVER_2 --cport=22
再次,这只是在前台运行,并将无法在重新启动,但这是一个方便的命令,我认为它属于这个讨论。