需求

因为实验室小服务器没有公网ip,所以只有在学校局域网中才能访问和使用服务器。寒假又刚好遇上新型流感病毒,不能去学校,但是工作不能落下。幸好回家前做了内网映射,在家也可以使用实验室服务器,顺便还解决了 Rstudio server的使用问题。

前提条件

  1. 有个有公网ip的服务器,国内的例如阿里云、疼腾讯云等
  2. 如果要使用Rstudio server,则前提在本地服务器上已经开启了服务,本文不讲

使用到的软件

frp https://github.com/fatedier/frp

模式如下图,其中bind port 和 server port 相同,映射关系则为 local_ip:local_port <==> remote_ip:remote_port 。所有的端口都需要放入放行白名单。

image.png

通过 ssh 访问公司内网机器

根据对应的操作系统及架构,从releases 页面下载最新版本的程序。

将 frps 及 frps.ini 放到具有公网 IP 的机器上。

将 frpc 及 frpc.ini 放到处于内网环境的机器上。

修改 frps.ini 文件,这里使用了最简化的配置:

  1. [common]
  2. bind_port = 7000
  • 启动 frps:
  1. ./frps -c ./frps.ini
  • 修改 frpc.ini 文件,假设 frps 所在服务器的公网 IP 为 x.x.x.x;
  1. [common]
  2. server_addr = x.x.x.x
  3. server_port = 7000
  4. [ssh]
  5. type = tcp
  6. local_ip = 127.0.0.1
  7. local_port = 22
  8. remote_port = 6000
  • 启动 frpc:
  1. ./frpc -c ./frpc.ini

所有完成后,访问内网机器就可以通过各种软件访问 x.x.x.x:6000 来完成。

Rstudio server 端口转发

Rstudio server 默认服务端口为8787,开始以为端口类型监听类型为 http,因为平时都是通过web在使用,后来发现也是tcp类型。所以和上面的方法一样就行,直接在frpc.ini 文件中追加如下内容

  1. [Rstudio_server]
  2. type = tcp
  3. local_ip = 127.0.0.1
  4. local_port = 8787
  5. remote_port = 8787

开启服务后,在浏览器中输入 x.x.x.x:8787 就能打开Rstudio了。