反向代理

前言

师弟们都快回家了,老肖怕大家回家不干活,于是让我把实验室的服务器反向代理一下,让大家在家过年的同时也能开开心心地跑实验!

由于实验室的服务器没有公网地址,只有一个学校的内网地址,因此回家后就无法远程连接服务器。解决思路很简单:只要你够主动,我们就有机会!使用反向代理进行内网穿透就可以解决这个问题,其实也类似于 teamviewer 等远程连接软件的原理。

正向代理

首先来了解一下什么是代理(正向代理),因为有一面防火墙,导致我们无法访问 Google。这个时候我们就可以将请求发送给代理服务器(代理服务器可以访问谷歌),由其代为转发请求和接收响应内容,大致拓扑图如下所示:

以通俗的话讲就是,你想给小明(Google)打电话,由于你爸爸(中国防火墙)与小明性格不合,电话又控制在你爸爸手中,因此他不允许家里任何人给小明打电话。但是小刚(VPN,通常在国外或者香港)的爸爸并不讨厌小明,因此你就可以给小刚打电话,然后他帮你把电话转给小明,最后达到了目的。

我们可以租国外的服务器,然后在服务器上安装 shadowsocks 让其作为代理服务器供我们使用;也可以直接向购买 VPN 服务,即服务商搭建好代理服务器后出租给很多人使用。正向代理代理的对象是客户端,即客户端主动与代理服务器建立连接,然后让其作为代理去访问服务。

反向代理

反向代理代理的对象则是服务器,即服务器主动与反向代理服务器建立连接,然后让其作为代理接收客户端的访问。学校内部的网络都是对内不对外的,但是内部网络可以访问外网,因为内网主机主动连接外网主机,路由器会在内网与外网之间建立映射关系,但是路由器维持的连接可能随时断开,这时就需要内网主机再次向外网发起连接。因此我们可以通过 SSH 隧道进行端口映射来实现外网访问内部网络,大致拓扑图如下所示:

图中红线表示 SSH 隧道,以通俗的话讲就是小红(实验室)的爸爸(学校路由器)很疼小红,因此谁都没有办法通过他联系上小红。但是他又允许小红联系任何人,所以就需要小红足够主动才能与外部建立连接。小红可以直接联系你,但是由于你无法一直在线,连接结束后你又无法再联系小红。因此就需要一个经常在线的小伙伴(反向代理服务器),小红主动联系他后就一直保持连接,当你需要联系小红的时候就直接找你的小伙伴就行了。

接下来就是实现反向代理,一共有三台机器:实验室服务器 A、腾讯云服务器 B 和手机 C。其详细信息如下所示:

名称IP 地址网络角色用户名
A219.xxx.xxx.251内网服务器pengzhendong
B211.xxx.xxx.175外网反向代理服务器ubuntu
Cxxx.xxx.xxx.xxx外网用户xxx

服务器

首先需要在服务器中下载安装 AutoSSH,它可以让服务器自动连接反向代理服务器,其安装命令如下所示:

1
2
3
4
5
$ wget http://www.harding.motd.ca/autossh/autossh-1.4e.tgz
$ tar -xf autossh-1.4e.tgz
$ cd autossh-1.4e
$ ./configure --prefix=$HOME/usr/
$ make & make install

启动 AutoSSH 之前需要使用 ssh-copy-id 命令将服务器的公钥上传到反向代理服务器,避免后续每次连接都需要输入密码。由于腾讯云服务器默认不放通所有端口,所以还需要到安全组中放通需要用到的端口。启动 AutoSSH,与反向代理服务器建立连接:

1
$ autossh -M 7280 -fCNR 7281:localhost:22 ubuntu@211.xxx.xxx.175
  • -M 7280:指定反向代理服务器上的监视端口,用于交换监视 SSH 会话的测试数据,需要保证该端口未被占用,在后续的操作中不会用到该端口
  • 7281:localhost:22:将服务器的 22 端口与反向代理服务器的 7281 端口绑定,相当于远程端口映射

反向代理服务器

服务器中所有操作已经完毕,进入反向代理服务器,使用 netstat 命令查看端口,可以看到用于监视的端口 7280 和用于与服务器绑定的端口 7281 已经被系统监听,如下图所示:

反向代理服务器通过访问自身的 7821 端口即可连接内网中的服务器,用户名密码为服务器中的任意账户,如下图所示:

此时用户还是无法穿透内网,连接时则提示 Connection refused!。因为还需要配置和重启反向代理服务器的 SSH:

1
2
$ echo GatewayPorts yes >> /etc/ssh/sshd_config
$ service sshd restart

接下来就可以使用服务器的账户和反向代理服务器的地址端口进行内网穿透啦!手机使用 4G 访问如下所示:

1
$ ssh -p7281 pengzhendong@211.xxx.xxx.175

对于隐蔽性特别高的组织,如果使用反向代理进行内网穿透,则会导致其端口泄露到公网中,容易带来安全问题。因此还是需要慎用!

疏影横斜水清浅,暗香浮动月黄昏

0%