春节已至,回家后不方便登录校园网,但是仍有同学需要访问实验室服务器进行实验等其他任务。
遂通过frp搭建隧道,使外网可以直接SSH连接校园网中的服务器。

参考

  1. frp官网ssh样例,https://gofrp.org/docs/examples/ssh/
  2. tlanyan博客-frp内网穿透教程,https://tlanyan.pp.ua/frp-tunnel-tutorial/

    了解frp的基本概念 如何让frp以服务运行(普通运行,会在SSH连接断开后停止)

  3. 外网连接实验室(内网)服务器, https://www.jianshu.com/p/7209136faa40

    帮我明白了整个流程,公网服务器和实验室服务器、访问者机器的角色

一、准备

  1. 固定IP的公网服务器一台(Azure服务器)
  2. 校园网中可SSH连接的实验室服务器若干台(以下步骤需要重复N次)

    二、步骤

    公网服务器作为fcp服务器,校园网服务器作为frp客户端。部署成功后,访问者主机使用SSH命令可直接访问校园网服务器。
  • 公网服务器操作
    • 在所需目录下,下载frp压缩包并解压
    • 编辑frp公网服务器配置文件frps.ini
    • 开放公网服务器入站端口(frp服务器服务端口和服务端口)
    • 配置环境,以服务运行
    • *网页登录frp管理服务
  • 校园网服务器操作
    • 在所需目录下,下载frp压缩包并解压
    • 编辑frp客户端配置文件frpc.ini
    • 开放公网服务器入站端口(对应每一个frp客户端,frp服务器都需要监听一个对应的端口)
    • 配置环境,以服务运行
    • 网页登录frp管理服务验证

2.1 公网服务器操作

本人选择Azure云服务器作为公网服务器,IP为104.208.104.70,请注意替换。
最好以非root用户进行以下操作,腾讯云添加sudo权限

下载frp并解压

frp下载页面 选择合适版本下载。
在用户目录下创建frp目录,并在其中下载压缩包,并解压进入解压目录。

  1. mkdir ~/frp
  2. cd ~/frp
  3. wget https://github.com/fatedier/frp/releases/download/v0.38.0/frp_0.38.0_linux_amd64.tar.gz
  4. tar -zxvf frp_0.38.0_linux_amd64.tar.gz
  5. cd frp_0.38.0_linux_amd64

解压目录如下,其中frps系列文件主要用于frp服务器,frpc系列文件主要用于frp客户端(校园网服务器)。
稍后我们在校园服务器上也需要下载同样的软件包。

  1. frp_0.38.0_linux_amd64
  2. ├── frpc
  3. ├── frpc_full.ini
  4. ├── frpc.ini
  5. ├── frps
  6. ├── frps_full.ini
  7. ├── frps.ini
  8. ├── LICENSE
  9. └── systemd
  10. ├── frpc.service
  11. ├── frpc@.service
  12. ├── frps.service
  13. └── frps@.service

编辑frp服务器配置文件frps.ini

  1. [common]
  2. # frp监听的端口,默认是7000,可以改成其他的
  3. bind_port = 7000
  4. # 授权码,请改成更复杂的
  5. token = 12345678
  6. # frp管理后台端口,请按自己需求更改
  7. dashboard_port = 7500
  8. # frp管理后台用户名和密码,请改成自己的
  9. dashboard_user = admin
  10. dashboard_pwd = admin
  11. enable_prometheus = true

开放公网服务器入站端口

在云服务器网络设置中,添加以上7000(frp服务器绑定端口)和7500(frp服务管理网页访问端口)TCP协议的入站规则。下图第一个红框。
image.png

配置环境,以服务运行

当前路径下,一般可以通过./frps -c frps.ini直接开启服务,但是SSH连接断开后就会失效,所以需要借助systemd服务运行。

  1. cd ~/frp/frp_0.38.0_linux_amd64/
  2. sudo mkdir -p /etc/frp
  3. sudo cp frps.ini /etc/frp
  4. sudo cp frps /usr/bin
  5. sudo cp systemd/frps.service /usr/lib/systemd/system/
  6. sudo systemctl enable frps
  7. sudo systemctl start frps

网页登录frp管理服务

顺利的话,可以登录公网ip:frp服务管理网页访问端口查看frp的管理界面。下图已经有一个客户端连接。
image.png

2.2 校园网服务器操作

校园网服务器下载frp并配置客户端文件,以服务运行。

下载frp压缩包并解压

同公网服务器。

  1. mkdir ~/frp
  2. cd ~/frp
  3. wget https://github.com/fatedier/frp/releases/download/v0.38.0/frp_0.38.0_linux_amd64.tar.gz
  4. tar -zxvf frp_0.38.0_linux_amd64.tar.gz
  5. cd frp_0.38.0_linux_amd64

编辑frp客户端配置文件frpc.ini

  1. # 服务端配置
  2. [common]
  3. server_addr = 104.208.108.70
  4. # 请换成设置的服务器端口
  5. server_port = 7000
  6. token = 12345678
  7. # 配置ssh服务,ssh9009是frp连接名,每个frp客户端都要设置不一样的
  8. [ssh9018]
  9. type = tcp
  10. local_ip = 127.0.0.1
  11. local_port = 22
  12. remote_port = 9018 #这个端口就对应了一台实验室服务器的SSH连接,这里把端口和校园网服务器编号保持一致方便记忆

开放公网服务器入站端口

见公网服务器网络配置截图第二个红框。
将每台frp客户机在frp服务器上的对应端口也开放。

配置环境,以服务运行

  1. cd ~/frp/frp_0.38.0_linux_amd64/
  2. sudo mkdir -p /etc/frp
  3. sudo cp frpc.ini /etc/frp
  4. sudo cp frpc /usr/bin
  5. sudo mkdir /usr/lib/systemd/system/
  6. sudo cp systemd/frpc.service /usr/lib/systemd/system/
  7. sudo systemctl enable frpc
  8. sudo systemctl start frpc

网页登录frp管理服务验证

如下所示顺利连接
image.png

三、SSH远程登录

现在在在家过年也可以通过外网访问校园内网的实验室服务器了。

要连接上某台服务器,我们只需要记住四个变量就可以,frp服务器监听对应客户端的端口、该客户端服务器登录名和密码、frp服务器公网IP。

  1. # 比如要连接编号9018服务器,使用如下命令即可
  2. ssh -oPort=9018 ouc@104.208.108.70
  3. # 或
  4. ssh -p 9018 ouc@104.208.108.70

成功登录。
image.png