SSH做反向代理

说实话,我对反向代理这个概念并不熟悉,只是感觉以下要做的事是一个代理的逆向过程,故借此名词一用。

问题场景是这样的:我有两套Linux集群的访问权限,分别为A和B,它们互相独立。其中A、B集群均能访问外网,但只有A集群有公网IP,所以从外网直接登录B就不行。要解决的问题就是从外网能登录到B集群。

我对代理的理解是:一台不能访问外网的机器,通过局域网内一台可以访问外网的机器代理服务,就能实现访问外网的目的。

而我以为的反向代理就是以上的逆向过程,这个肯定是可以做到的,比如:我们在外网要对某台局域网内的Windows进行远程桌面控制时就面临IP地址非公网的问题,但QQ能远程桌面却能完成这样的需求,区别就在于一个是被动受控,一个是主动请求受控;木马什么的,其实都是主动请求受控。

那么,在Linux集群之间,我该如何解决碰到的问题呢?以下是从http://portable.easylife.tw/entry/Reverse-SSH-Tunnel整理的部分内容,该内容正好能处理对应的需求。

通常用SSH Tunnel是用来完成类似代理的功能,如图:

红色区域可通过SSHTunnel访问原本受限的绿色部分,这一招通常用来FQ。

反向Tunnel可以解决我实际碰到的问题:

通过反向的Tunnel就可以做到了,具体步骤如下(以下内容转载而来,欢迎转载而去):

示例环境:

局域网主机:

ServerA / Linux / user userA / ip192.168.0.123 / ssh port 22

ServerB / Linux / user userB / ip192.168.0.125 / ssh port 22

PC / Windows / ip 192.168.0.128 / 远程桌面 port3389

远程主机:

MyServer / Linux / user me / ip 1.2.3.4 /ssh port 22

ssh参数:

-N:不执行何指令

-f:后台执行

-R:建立reverse tunnel

示例1:从MyServer ssh连回ServerA

[[email protected]] $ ssh -NfR2222:localhost:22 [email protected]

--------------------------------------------------------------

[[email protected]] $ netstat -tnl | grep 127.0.0.1

tcp       0      0 127.0.0.1:2222              0.0.0.0:*                   LISTEN

[[email protected]] $ ssh [email protected] -p 2222

MyServer连到2222 port会转向ServerA的ssh port,成功连接到ServerA

示例2:从MyServer ssh连回ServerB

[[email protected]] $ ssh -NfR 2244:192.168.0.125:[email protected]

--------------------------------------------------------------

[[email protected]] $ netstat -tnl | grep127.0.0.1

tcp       0      0 127.0.0.1:2244              0.0.0.0:*                   LISTEN

[[email protected]] $ ssh [email protected] -p 2244

MyServer连接到本机的2244 port会转向到ServerB的ssh port,成功连接到ServerB

示例3:从MyServer远程桌面PC

[[email protected]] $ ssh -NfR2266:192.168.0.128:3389 [email protected]

--------------------------------------------------------------

[[email protected]] $ netstat -tnl | grep127.0.0.1

tcp       0      0 127.0.0.1:2266              0.0.0.0:*                   LISTEN

[[email protected]] $ rdesktop 127.0.0.1:2266

若你在Linux的桌面环境则可以直接display远程桌面PC,不然就export DISPLAY到其他主机。

此外,为了防止反向的Tunnel断开,还需要一个autossh工具,它可以帮助断线后自动重连。这个对我相当的重要,事实上我现在很少去B集群所在的地方。

对示例一做autossh可以如此做:

[[email protected]] $ autossh -M 12345-NfR2222:localhost:22 [email protected]

当然,为了防止集群重启或断电等问题,可以将上语句写到开机启动脚本里。

以上的工作也可以通过putty完成,如示例3可以如下设置:

xshell也能干同样的事:

赶紧试试吧~~~~

今天看到个好东西,补充一下。

再上文中做反向隧道后,只能在本机ssh localhost -p 来登录,想要从其他IP来却不行,因为SSH本地端口转发绑定的是 lookback 接口。看网上博文http://blog.csdn.net/xyyangkun/article/details/7025854 说建立隧道时加-g参数可以实现,但我没有成功。不过看完https://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/ 后灵机一动,再建立个本机公网到本机localhost的隧道就OK了:

ssh -g -L 9099:localhost:2222 localhost

这样就可以通过ssh 公网 -p 9099 来登录了!

时间: 2024-11-03 05:42:59

SSH做反向代理的相关文章

Squid做反向代理缓存

环境介绍: 主机名 角色 IP地址 squid.contoso.com squid代理服务器 192.168.49.135 image01.contoso.com 图片服务器(web) 192.168.49.139 一.准备工作 以其中一台为例: [[email protected] etc]# iptables -L Chain INPUT (policy ACCEPT) target     prot opt source               destination Chain FO

【Nginx】使用Nginx做反向代理时,关于被代理服务器相应的超时设置

阅读目录 > 参考的优秀文章 > 设置等待被代理服务器的最大响应时间 > 参考的优秀文章 Module ngx_http_proxy_module > 设置等待被代理服务器的最大响应时间 使用Nginx做反向代理时,因被代理服务器因业务确实复杂,需时较久,往往超过60秒.而Nginx默认设置超时时间为60秒. 针对这一情况,需修改默认配置.因配置项中涉及超时的选项太多,这里记录一下. 等待被代理服务器的最大响应时间为120秒,需加如下配置: proxy_read_timeout 1

CentOS 7 安装Nginx做反向代理

题记 须要使用nginx的反向代理功能,測试环境为centos+NGINX 1.8.0. 跳过一些繁琐的问题,直接记录核心 步骤 (1)centos 安装在VM中.因此须要注意网络连接问题 (2)安装nginx使用的是具有网络的yum功能 (3)配置centos防火墙,须要开启80 port (4)nginx 反向代理配置 (5)性能优化设置(兴许工作...) 实现 一. yum安装nginx 先加入nginx源,測试使用最新的nginx 1.8.0 rpm -ivh http://nginx.

nginx做反向代理+apache

先上个规划图,自己随便画的,大家也随便看看 192.168.1.119为nginx做反向代理并处理静态页面,apache处理动态页面,nfs共享网站家目录,svn代码管理. 192.168.101为apache处理动态页面,挂载192.168.1.119的共享目录. 192.168.1.96为mysql数据库,允许两台web服务的连接权限. 系统使用centos6.5 一,配置192.168.1.119 1.首先在192.168.1.119上安装nginx+apache+php+nfs+svn

生产环境中nginx既做web服务又做反向代理

一.写对于初入博客园的感想 众所周知,nginx是一个高性能的HTTP和反向代理服务器,在以前工作中要么实现http要么做反向代理或者负载均衡.尚未在同一台nginx或者集群上同时既实现HTTP又实现反向代理. 那么到底nginx能否既实现HTTP又实现反向代理呢? 答案是肯定的 刚好前段时间在实际项目中有一个类似的情况出现,由此与大伙分享,由于以前没有写博文的习惯,只习惯于自己记录操作实现步骤及稳定,在以前常遇见问题都是百度.谷歌,众位网友的博文帮助自己见解决了很多问题. 由此可见技术分享的重

Nginx做反向代理总是被系统kill

公司使用Nginx做反向代理,以前都挺正常的,最近不知怎么回事总是无端被系统kill,而在nginx错误日志中也没有信息输出. 网上查了很多资料,也没什么靠谱的回答,唯一觉得有点关联的就是linux OOM Killer了,这篇文章感觉有点关系:理解和配置 Linux 下的 OOM Killer.也给出了相应的解决办法. 但我还是不太放心,万一最后还是被kill了怎么办,想来想去,最后还是决定写一个脚本来进行监控. 脚本功能: 每隔5秒检查一次,查看Nginx进程是否存在,如果不存在,就重新启动

iis7.5做反向代理配置方法实例图文教程

网络上好多开场的文章就说了好多的原理之类的这里我们直接开始配置.不过也要简单说下win下配置反向代理只有IIS7以上的版本才可以实现这个功能,在这里我们使用WINDOWS2008 R2来做为测试 2008R2上安装的是IIS 7.5 ,我们需要通过Application Request Routing模块来实现反向代理.接下来我们来说下Application Request Routing模块的安装方法首先前往http://www.iis.net/extensions/ApplicationRe

nginx做反向代理时出现302错误

现象:nginx在使用非80端口做反向代理时,浏览器访问发现返回302错误 详细现象如下: 浏览器请求登录页: 输入账号密码点击登录: 很明显登录后跳转的地址少了端口号. 原因:proxy.conf文件中定义的proxy_set_header Host $host; 意思是nginx接收到浏览器请求后修改请求头中的host信息,然后再把请求转发给后端真实服务节点,服务节点响应后把返回信息传送给nginx,而由于nginx是使用的非80端口做代理,后端服务节点却依然以为nginx是80端口,所以响

SSH 正向/反向代理小记

上周因为玩耍Minecraft的原因,折腾了下ssh的正向.反向代理,不得不说,科技改变命运..了解了基础的用法之后,很多跨域的事情都可以通过代理解决,而且只需要ssh帐号权限即可. 那么就简单来介绍下吧,常见的SSH代理介绍文章都会上来先描述场景,例如ABC三个域,怎么样访问之类,看完头就晕了,我换个说法: 1.  minecraft ssh代理 ssh -fCNR 9977:localhost:25565 [email protected] -p 6666 -o TCPKeepAlive=y