翻入墙内 | 反向SSH Tunnel | Reverse SSH Tunnel

状况 | Case 因为GFW的关系,越来越多的网友熟练掌握了使用SSH Tunnel“翻墙”的方法——这种方法使我们通过墙外一台主机作为代理中转访问国际互联网。网上关于SSH翻墙的文章已经很多,无须赘述,提及此只为特别感谢郭嘉。 少数情况下,我们不仅需要翻出墙,可能还需要从墙外翻回来。比如你交友不慎,某个邪恶国家友人强烈要求感受一下国内的网络环境;你如此勤奋以至于希望在家中仍然能够连接到公司网络开工,公司却出于体恤员工的考虑没有提供VPN,此时就需要手段先“翻”到公司的院子里。反向的SSH Tunnel就是这样的手段。 原理 | Principle 在一般的SSH转发模型中,我们从大中华局域网中的Desktop B去SSH连接外部SSH Server X,将A的Px端口映射到X的SSH Server端口(22)。连接建立后我们就可以在应用中指定127.0.0.1:Px为代理。发往127.0.0.1.Px的请求将通过Tunnel发送到X:22,并根据SSH协议中转发的规定转发到外部网络。(此部分图中未表现)。 在反向SSH Tunnel中,我们由大中华局域网内Desktop B用SSH连接外部主机Desktop A上的SSH Server,并建立一个反向Tunnel,将A:Port1映射到B:Port2。相比于一般的正向Tunnel,反向Tunnel允许SSH连接的被动方A将Port1上的请求通过Tunnel转发到B:Port2上。而B上应有一个应用监听Port2,对Port2上的请求做适宜的处理。对于一般的网络代理而言,此“应用”即为SSH Server。SSH Server监听22端口,并对来自SSH Tunnel的请求通过本地网络转发,起到代理的作用。 实例 | Practice 用到反向SSH Tunnel,是因为之前有这样一个需求:我们有一个开发中的网站,将要在外部Web Server(Host A)上布署测试环境,需要在外部主机上获取代码并持续更新。代码通过公司内部的SVN Server(Host S)进行版本控制,公司外部无法访问。我们不希望在外部主机上通过VPN一类软件登录公司网络,而是在必要的时候由内部网络发起连接。因此我们使用反向SSH Tunnel。 创建反向SSH Tunnel的过程由内网的桌面(Host B)来完成 1root@B#ssh -NfR {PORT_A}:localhost:{PORT_B} {HOST_A} -l {USER@HOST_A} 如 1root@desktop#ssh -Nf$ 8080:localhost:9090 www.example.com -l webadmin 输入密码确认后,一个从desktop:8080到www.example.com:9090的反向Tunnel就建好了。在Host A上用 1netstat -ntl | grep […]

Cross-Domain Magics

Intro As the browser applications get more and more complex in years, some of them are designed to deploy on multiple domains for reusing, maintaining, as well as some special requirements. Also some Internet campanies provide their data (search, medias, user auth.,etc) to the public as web services on their domains. In order to meeting […]