服务器搭建Frp内网穿透
前言
最近开始玩儿服务器了,从最开始的阿里云轻量级服务器到现在的腾讯云轻量级服务器,从最开始的2核1G
升级到后面的2核4G
,对性能的需求越来越高。
要是一直这样砸钱升配置也太难受了,为了解决这个痛点,在百度上了解到了内网穿透这个技术,具体的实现我也不懂,咱们用别人的工具就行了,站在巨人的肩膀上嘛。
如果你想跟着本篇文章搭建内网穿透并能在公网访问,请确保你具备以下条件:
- 一台带有公网IP的服务器
- 一台Windows系统的电脑(PS,其他系统的也行,配置是差不多的)
- 能够使用的域名(PS:如果服务器是国内的,则域名需要备案)
Frp
是什么
Frp
是一种用于网络穿透的工具。”Frp”代表”Fast Reverse Proxy”,它允许用户通过在内部网络中设置一个服务器,访问位于防火墙后面或者在NAT网络中的设备。
简单来说,它可以帮助用户从外部网络访问内部网络中的服务或设备,同时绕过网络配置方面的限制。
Frp
可以用于远程访问、内网穿透、端口转发等场景,提供了一种简单、安全和灵活的方式来管理和访问网络设备和服务。(PS:ChatGPT说的)
内网穿透的工具有很多,也有一些免费的内网穿透服务,你不需要自己配置服务端,用别人的就行了,但是追求稳定,还是自己搭比较好。
根据我个人的使用体验,感觉Frp
使用起来有点儿像微服务的注册中心,你需要穿透的内容就是一个服务,每个服务有不同的协议,例如:http
、tcp
、udp
,这是最常用的三个。
传输层与应用层协议同时出现,应该是为了更好地管理应用层的协议,不太懂,反正你需要将它们注册到Frp
的服务端。
优缺点
解决高性能服务器需求,节约服务器成本,运算交给本地机器处理。
云服务器只负责数据传输,服务器性能瓶颈在于带宽的大小。
延迟翻一倍,如果搭建竞技游戏服务器不友好,例如我本地机器访问云服务器的延迟是40ms,那么穿透后的延迟即为80ms,根据实际情况会更高。
如何下载
Frp官方下载地址,需要下载系统对应的压缩包,下载最新的版本也是可以的,我这里下载的版本是0.51.1
。
Windows X86_64下载frp_x.x.x_windwos_amd64.zip
,Linux X86_64下载frp_x.x.x_linux_amd64.tar.gz
。
如何安装
下面我将Frp
的服务端类比为Java开发中微服务的注册中心,你需要穿透的内容类比为服务,例如:我的世界服务器、博客网站。
Frp
的压缩包是包含服务端与客户端的,服务端即frps
,客户端即frpc
,你可以将不需要的那端删除,也可以保留它们。
服务端
首先需要开放对应的端口
我这里开放了7000:tcp/udp
、10000:tcp
、7500:tcp
、27010-27020:udp
、25560-25570:tcp
,解释如下:
1 | 7000:tcp/udp # 服务注册的端口,我这里开放了tcp协议与udp协议,应该是只用开放tcp |
将tar.gz包解压在软件目录,我这里解压在了/opt
,进入/opt/frp_x.x.x_linux_amd64
目录,编辑frps.ini
,内容如下(使用时可能需要删除注释):
1 | [common] |
以服务的形式挂后台,非必须,但是每次你系统都需要手动执行/home/frp_0.27.0_linux_amd64/frps -c /home/frp_0.27.0_linux_amd64/frps.ini
命令。
在目录 /etc/systemd/system
下新建文件名为 frps.service
的文件,编辑内容如下:
1 | [Unit] |
(PS: ExecStart = frps所在的目录/frps
-c frps.ini所在的目录/frps.ini
)
frps.service
文件创建成功后,服务的管理指令如下:
1 | systemctl enable frps #设置开机启动 |
输入sudo systemctl start frps
启动服务,并使用systemctl status frps
查看服务运行状态,输入如下表示启动成功:
客户端
在配置客户端之前请确保你的服务端的配置文件是按照上面的模板配置的,否则我也不知道会出现什么问题。
将zip文件解压到你的软件目录下,进入解压后的目录,找到frpc.ini
文件,编辑内容如下(PS:使用时记得要删除注释,反正我的电脑得删):
1 | [common] |
除了[common]
,其他的方括号你可以类比为服务名(反正我是这么想象的),方括号节点下的内容就是该服务的配置了,http
服务有点儿特殊,需要绑定域名,绑定域名需要于本篇文章后面的域名配置配合使用。
当然,我的三级域名名字与应用名称相同只是为了好区分,你也可以不一样,上面的配置文件表示配置了两个http服务,两个tcp服务与一个udp服务, 其中tcp服务与udp服务的配置相似。
如果你一直按照本篇文章的步骤执行,请务必进行域名配置。
需要开放对应的端口,例如udp
服务中使用了远程的27015端口,那么你需要开放服务器的27015端口,并确保你本地的服务已经启动。
域名配置
Frp
穿透Http的服务有些特殊,需要配置域名,如果你是按照本文配置的Frp
服务端与客户端,那么配合接下来的域名配置,会特别方便,并且访问服务时不需要指定端口。
域名解析
需要创建两个解析,即frp
与*.frp
,其中frp
指向服务器IP,*.frp
指向frp.xxx.xxx
。
这里我将frp.xxx.xxx
作为我的注册中心面板访问域名,*.frp.xxx.xxx
作为http穿透服务的域名。
Nginx代理
当然,配置了域名还是需要带端口使用,为了不带端口使用,需要用到Nginx的反向代理,因为服务器使用了宝塔面板,这里就一键安装了。
在Nginx主配置文件的根节点下添加以下指令,解析自定义的代理规则:
1 | include /www/server/nginx/conf/product/*.conf; |
在/www/server/nginx/conf/product/
目录下创建frp.conf
文件,并写入以下内容:
1 | # frp面板 |
配置完成后,确保你的Frp
服务端与客户端都在运行,本地服务也启动成功。
随后重载Nginx配置,访问你在客户端的frpc.ini
文件中配置的custom_domains
下的域名,看是否穿透成功。
后语
本篇博文用于记录Frp
的配置步骤,防止遗忘,方便后续换机能够快速搭建。根据个人习惯对其他博主的配置步骤进行了整合。
如果博主的理解有误,可以在评论区指出,相互学习!