起因
前些天听我邻居介绍了ngrok可以做内网穿透,这样就可以把我家里的那台带了RTX4090的PC用起来。于是我折腾了一通,发现ngrok配置是简单的,但用它自己的server来做转发,网络太慢了,于是就放弃了。昨晚在Github搜索ngrok
的替代品时,发现有人整理了一个非常完整的tunneling工具列表,frp
赫然列在第一位。
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
把文件解开,我们可以发现里面的文件如下:
- frpc:对应的是你家里的电脑;
- frps:对应的是云服务器,公网上的;
- xxxx.ini:这是配置文件,你要做的主要配置仅仅在
frpc.ini
、frps.ini
这两个文件里面。
其实解压好之后,安装其实就算完成了,对于存放的目录其实没太多要求。
frp配置
配置可能是这里面最复杂的了,但是总体上也非常简单,只要你照着我下面的步骤做。
【服务器端】
先来看服务端,在我这里就是那台有公网IP的阿里云服务器。
进入到frp的目录,输入以下命令打开frps.ini:
1 | sudo vim frps.ini |
在这里,我们以配置ssh为例,你可以先看一下官方文档。
教程已经非常清楚了,我无需再详细解读,这里我贴一下我的配置,以便大家可以对照看看如何修改。
1 | [common] |
这里如果大家只是配置ssh的话,只需要上面的bind_port = 7000,注意=两边的空格。下面的vhost_http_port是为了放开家里服务器的web服务的。
然后用命令:
1 | sudo ./frps -c ./frps.ini |
启动服务端的服务。
注意:一般是先启动服务端(也就是公网上的),再启动本地的。
【注册成系统服务】
目前的命令在我们的终端关闭之后就会结束,所以如果你要持续运行,可以将它注册成系统服务。官方也提供了很详细的文档,使用systemd,很简单,在服务端和本地端都可以用,我就不再赘述了。
【本地配置】
好,接下来我们来配置本地这一端,也就是你家里的PC。
本地端的配置是在你自己的电脑上(怕大家弄错了,多啰嗦一下),修改的是frpc.ini
,对,结尾是c
,不是s
。
官方的配置说明已经在图3展示了,你也可以直接进入官方文档进行查看。
我贴一下我的frpc.ini配置:
1 | [common] |
我不仅仅是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云服务器”–>“防火墙/安全组规则”。
结束
OK,我想你应该和我一样可以开心地跑起来了,速度还可以!
如果你有具体的问题,可以邮件咨询我:lxdhzzj@gmail.com
下面是我的ssh附图: