我的学习笔记

土猛的员外

使用frp轻松搞定ssh家里的服务器

起因

前些天听我邻居介绍了ngrok可以做内网穿透,这样就可以把我家里的那台带了RTX4090的PC用起来。于是我折腾了一通,发现ngrok配置是简单的,但用它自己的server来做转发,网络太慢了,于是就放弃了。昨晚在Github搜索ngrok的替代品时,发现有人整理了一个非常完整的tunneling工具列表frp赫然列在第一位。

list

图1:tunneling工具列表(部分)

frp的优势

相比于ngrok,这次的frp更符合我的需求。frp的一些特性优势:

  • 自定义服务端:可以使用自己的云服务器做服务端,速度有保障(确实很快);
  • 类型支持丰富:包括http/https/ssh/ssh2/dns/socket/ftp/xtcp等类型;
  • 文档出色:有中文文档,如果你有高级需求,那文档还是很重要的。

也许ngrok也有这些功能,但我没有耐心继续找下去了,frp更符合我。

frp安装

frp安装其实比较简单。

在介绍安装之前,先介绍一下我的PC配置,你们可以按自己的情况下载和安装:

  • 本地服务器:i7/RTX4090/32G/2TB,Ubuntu Server 22.04.3 LTS,对应的就是你自己家里的电脑;
  • 云服务器:阿里云,轻应用服务器(612元/年,买了一年多了),CentOS,3M带宽。

因为都是linux系统,所以我下载的是frp_0.51.3_linux_amd64.tar.gz,大家可以在这里下载

如果是公众号文章,会无法直接点击跳转,您可以点击左下角的“阅读原文”,原文是我的blog,那里的链接可以直接点击。

我们可以把这个文件分别传到本地服务器和云服务器,然后用tar -xvf frp_0.51.3_linux_amd64.tar.gz把文件解开,我们可以发现里面的文件如下:

frp_folder

图2:frp目录下的文件
  • frpc:对应的是你家里的电脑;
  • frps:对应的是云服务器,公网上的;
  • xxxx.ini:这是配置文件,你要做的主要配置仅仅在frpc.inifrps.ini这两个文件里面。

其实解压好之后,安装其实就算完成了,对于存放的目录其实没太多要求。

frp配置

配置可能是这里面最复杂的了,但是总体上也非常简单,只要你照着我下面的步骤做。

【服务器端】

先来看服务端,在我这里就是那台有公网IP的阿里云服务器。

进入到frp的目录,输入以下命令打开frps.ini:

1
sudo vim frps.ini

在这里,我们以配置ssh为例,你可以先看一下官方文档

guanf

图3:frps的服务端和客户端配置

教程已经非常清楚了,我无需再详细解读,这里我贴一下我的配置,以便大家可以对照看看如何修改。

1
2
3
[common]
bind_port = 7000
vhost_http_port = 8080

这里如果大家只是配置ssh的话,只需要上面的bind_port = 7000,注意=两边的空格。下面的vhost_http_port是为了放开家里服务器的web服务的。

然后用命令:

1
sudo ./frps -c ./frps.ini

启动服务端的服务。

注意:一般是先启动服务端(也就是公网上的),再启动本地的。

【注册成系统服务】

目前的命令在我们的终端关闭之后就会结束,所以如果你要持续运行,可以将它注册成系统服务。官方也提供了很详细的文档,使用systemd,很简单,在服务端和本地端都可以用,我就不再赘述了。

【本地配置】

好,接下来我们来配置本地这一端,也就是你家里的PC。

本地端的配置是在你自己的电脑上(怕大家弄错了,多啰嗦一下),修改的是frpc.ini,对,结尾是c,不是s

官方的配置说明已经在图3展示了,你也可以直接进入官方文档进行查看。

我贴一下我的frpc.ini配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[common]
server_addr = 121.xxx.xx.175
server_port = 7000

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000


[web]
type = http
local_port = 80
custom_domains = www.luxxxxxxxxxxxxxong.com

我不仅仅是ssh,还配置了一个web。

隐去一些具体信息。

然后,启动你的本地PC上的服务:

1
sudo ./frpc -c ./frpc.ini

好了,你试试看。在其他电脑上用下面的命令试试ssh:

1
ssh -oPort=6000 username@x.x.x.x

x.x.x.x是你的公网服务器IP地址。

【无法访问的原因】

如果你的测试过程有问题,那一多半的可能是你的云服务器对外端口未开放。你配置里面涉及的端口,如6000/7000/8080,都需要在阿里云服务器上开通。

一般在“控制台”–>“轻量应用服务器/ECS云服务器”–>“防火墙/安全组规则”。

端口

图4:云服务器的出入站规则

结束

OK,我想你应该和我一样可以开心地跑起来了,速度还可以!

如果你有具体的问题,可以邮件咨询我:lxdhzzj@gmail.com

下面是我的ssh附图:

ssh6000


我们的创业项目已经上线!!!

TorchV AI,帮助企业快速进入AI时代!

具体详情,请点击官网咨询


最新内容,关注“土猛的员外”公众号