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

问题场景是这样的:我有两套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

[userA@ServerA] $ ssh -NfR2222:localhost:22 me@MyServer

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

[me@MyServer] $ netstat -tnl | grep 127.0.0.1

tcp       0      0 127.0.0.1:2222              0.0.0.0:*                   LISTEN

[me@MyServer] $ ssh userA@127.0.0.1 -p 2222

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

示例2:从MyServer ssh连回ServerB

[userA@ServerA] $ ssh -NfR 2244:192.168.0.125:22me@MyServer

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

[me@MyServer] $ netstat -tnl | grep127.0.0.1

tcp       0      0 127.0.0.1:2244              0.0.0.0:*                   LISTEN

[me@MyServer] $ ssh userB@127.0.0.1 -p 2244

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

示例3:从MyServer远程桌面PC

[userA@ServerA] $ ssh -NfR2266:192.168.0.128:3389 me@MyServer

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

[me@MyServer] $ netstat -tnl | grep127.0.0.1

tcp       0      0 127.0.0.1:2266              0.0.0.0:*                   LISTEN

[me@MyServer] $ rdesktop 127.0.0.1:2266

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

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

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

[userA@ServerA] $ autossh -M 12345-NfR2222:localhost:22 me@MyServer

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

以上的工作也可以通过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 来登录了!

SSH做反向代理的更多相关文章

  1. nginx做反向代理并防盗链

    nginx做反向代理真的非常简单,只需设置location+proxy_pass即可. 防盗链配置有些复杂,需要注意的地方: 在防盗链的location中需要再设置一下proxy_pass(在这里走了 ...

  2. 用nginx做反向代理来访问防外链图片

    用nginx做反向代理来访问防外链图片 女儿的博客从新浪搬到wordpress后,发现原来博客上链接的新浪相册的图片都不能访问了,一年的博客内容,一个个去重新上传图片,修正链接也是个大工程.还是得先想 ...

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

    > 参考的优秀文章 Module ngx_http_proxy_module > 设置等待被代理服务器的最大响应时间 使用Nginx做反向代理时,因被代理服务器因业务确实复杂,需时较久,往 ...

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

    公司使用Nginx做反向代理,以前都挺正常的,最近不知怎么回事总是无端被系统kill,而在nginx错误日志中也没有信息输出. 网上查了很多资料,也没什么靠谱的回答,唯一觉得有点关联的就是linux ...

  5. nginux做反向代理配置文件

    做反向代理的配置文件最好单独创建一个文件,然后在主配置文件中使用 include nginx-test.config;  这样的方式来导入. 配置代码如下: ## Basic reverse prox ...

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

    网络上好多开场的文章就说了好多的原理之类的这里我们直接开始配置.不过也要简单说下win下配置反向代理只有IIS7以上的版本才可以实现这个功能,在这里我们使用WINDOWS2008 R2来做为测试 20 ...

  7. apache做反向代理

    实验目的 通过apache实现反向代理的功能,类似nginx反向代理和haproxy反向代理 环境准备 逻辑架构如下 前端是apche服务器,监听80端口,后端有两台web服务器,分别是node1和n ...

  8. nginx在使用非80端口做反向代理【转】

    设置nginx反向代理,nginx在使用非80端口做反向代理时,浏览器访问发现返回302错误 upstream jboss{ server max_fails= fail_timeout=20s; s ...

  9. 使用nginx做反向代理

    很多同学喜欢用nginx做反向代理访问某些网站,原因大家都懂的,今天老高记录一下如何使用nginx做反向代理以及如何配置和优化nginx的反向代理. 准备工作 首先,你需要一个稳定的国外的便宜的VPS ...

随机推荐

  1. 用go和zk实现一个简单的分布式server

    golang的zk客户端 最近打算写个简单的配置中心,考虑到实现便捷性,语言选择了go,由于其中计划用到zk,就调研了下golang的zk客户端,并实现了个简单的分布式server.最终找到了两个,地 ...

  2. Group Policy Object Editor

    Group Policy Object Editor   The Group Policy Object Editor is a tool that hosts MMC extension snap- ...

  3. VC下如何调用控制台命令以及其他可执行文件

    开始的时候想写一个基于MFC的Wifi开关控制程序,可是不知道VC中如何调用控制台命令,经过网上的学习,发现其实挺挺简单也挺好用.于是制作了一个简单的基于MFC个人助理小软件,可以点击按钮实现Wifi ...

  4. 设计模式之第5章-解释器模式(Java实现)

    设计模式之第5章-解释器模式(Java实现) “开个商店好麻烦,做个收单的系统,发现类的方法好多.”“真是的,不就是简单的四则运算,这都不会!”你说你会啊.来来来,你把以下的方法用代码写出来: a+b ...

  5. 【Remove Duplicates from Sorted Array】cpp

    题目: https://leetcode.com/problems/remove-duplicates-from-sorted-array/ Given a sorted array, remove ...

  6. Windows核心编程小结1

    这本书绝对经典,看看定会增加不少知识.当然这本书有很多东西比<Windows程序设计第五版>中的更加详细. 1.Unicode:宽字节字符集 这是一个国际的字符标准,16位,最大可支持65 ...

  7. mysql数据库增、删、改、查等基本命令

    测试环境:windows7 64位 mysql.exe.Navicat Lite for MySQL.mysql 5.0.18 mysql数据库的基本结构: 数据库(database)包含多个表(ta ...

  8. Codeforces Round #418 (Div. 2) A+B+C!

    终判才知道自己失了智.本场据说是chinese专场,可是请允许我吐槽一下题意! A. An abandoned sentiment from past shabi贪心手残for循环边界写错了竟然还过了 ...

  9. github 客户端总是登录失败,提示密码错误

    把输入法调成英文即可!!

  10. AngularJs 特性 之 双向数据绑定

    <!DOCTYPE html> <html lang="en" ng-app> <head> <meta charset="UT ...