FRP内网穿透服务搭建,服务端(Ubuntu)与客户端(Windows)设置

概述

最近一年的时间里,我所做的两个项目的服务和一个游戏服务器(后面简称:项目应用)需要公开到公网上,由于我家的宽带并没有公网IP地址并且也无法申请到动态的公网IP,因此需要一个软件或者是协议将服务和游戏挂到公网上。

早期有了解过 Apache 和 Nginx 可以实现反向代理,利用 SSH 连接的方式将项目应用连接至服务器,并实现从公网访问。但多次发现SSH的连接并不稳定,就算安装了 autossh 插件也会经常出现断连的情况。因此在大半年的时间里,在有动态公网的环境下尝试使用过 DDOS服务,还有许多许多其他的方式,例如:编写Python脚本实时监测连接状态,在更换IP地址的时候强制更新代理的地址,或者是采用P2P的方式,客户机和服务器直连,效果都不尽人意。

因此需要换其他的方式来将项目应用挂在公网上,于是乎采用 FRP 也就是FRP内网穿透工具来将项目应用挂在公网上。

什么是 FRP

FRP 是一个可用于内网穿透的,对外网提供服务的高性能反向代理应用,支持 tcp, http, https 等协议类型,并且 web 服务支持根据域名进行路由转发。

准备工作

在搭建一个完整的 FRP 服务之前,我们需要提前准备一些东西:

  • 具有公网IP地址的云主机(例如:阿里云的ECS)或者是一台VPS;
  • 具有公网IP地址的主机尽量安装Ubuntu或者是Linux;
  • 在公网的主机要经过工信部备案,否则容易被查水表;
  • 本地的网络要具备相对良好的网络环境(下行 300Mbps 上行 30Mbps最佳,最低上行测试不要低于5Mbps);
  • 本地的主机要安装Windows操作系统;
  • 要有一些简单的Linux命令基础(例如cd ls cp tar之类的简单命令即可);

FRP服务之服务器端设置

首先,我们先从 FRP 的 Github 地址下载用于服务器端的安装包,Github Releases 页面,截止编写该文档,官方已经更新到0.39.0版本。

截屏2022-02-05 00.44.46

这里选择linux_amd64.tar.gz下载即可。通过FTP上传到 /usr/local目录下。

进入到该目录下,可以看到下面这个样子:

截屏2022-02-05 01.06.32

红色的就是我们的压缩包,接着我们来解压

tar -xvf frp_0.39.0_linux_amd64.tar

截屏2022-02-05 01.08.21

解压完成之后可以看到左边有一个不带有任何后缀的文件夹,我们来cd进入文件夹。

截屏2022-02-05 01.09.10

可以看到文件夹目录如下所示:

frp_0.39.0_linux_amd64
	|- frpc
	|- frpc_full.ini
	|- frpc.ini
	|- frps
	|- frps_full.ini
	|- frps.ini
	|- LICENSE
	|- systemd

服务器端只需要编辑frps.ini,我们可以用vim打开也可以使用FTP下载到本地之后使用VSCode打开。

默认的状态下是

[common]
bind_port = 7000

[common]代表这部分是必须有的,bind_port这个端口是用来设定 FRP 服务端端口的,我这里设定的是17465端口

[common]
bind_port = 17465

你也可以加上token来进行简单的身份验证,不然谁都可以用你的这台服务器做内网穿透。

服务器端作为服务端,可以删掉一些不必要的客户端文件,以免以后启动的时候选错配置文件。

rm -f frpc
rm -f frpc.ini

我们为了能让服务在关掉SSH连接之后依然能够运行,需要让服务在后台运行。这里使用screen指令,这个模块Ubuntu本身是不涵盖的,需要自行安装:

apt-get update

在Update完成之后进行安装

apt-get install screen

这个时候就已经安装完成了。这里放几个常用的screen指令:

screen -S name          启动一个名字为name的screen 
screen -S name -X quit  删除某个session 
screen -ls    		    是列出所有的screen 
screen -r name或者id     可以回到某个screen了(如不行先detached: screen -d name) 
键盘 ctrl + a + d  	   可以回到前一个screen,当时在当前screen运行的程序不会停止

我们新建一个screen

screen -S frps

然后进入到 FRP 目录里,输入下面的指令启动服务

./frps -c ./frps.ini

截屏2022-02-05 16.40.47

服务成功启动!

这个时候键盘按下ctrl + a + d返回,之后就可以退出SSH了,而程序并不会因此中断。

FRP服务之客户端设置

首先,我们先从 FRP 的 Github 地址下载用于客户端的安装包,Github Releases 页面,截止编写该文档,官方已经更新到0.39.0版本。

截屏2022-02-05 00.44.46

这里选择windows_amd64.zip即可,然后将文件解压到一个你中意的文件夹内,注意文件夹层次别太深。

客户端只需要配置frpc相关的文件,这里打开frpc.ini,我的配置如下

[common]
server_addr = x.x.x.x
server_port = 17465
[minecraft]
type = tcp
local_ip = 127.0.0.1
local_port = 25565
remote_port = 17778

上述的配置需要与服务端的配置相吻合

[common]中的server_addr填写的是刚才服务端的IP地址,server_port填写的是服务端的bind_port

[minecraft]中的local_port填写的是ssh的端口,remote_port则是远程连接时要输入的端口,通过frp服务映射到local_port

保存配置,在文件夹里打开cmd.exe,然后输入下面的命令启动客户端。

frpc.exe -c frpc.ini

这个时候应该能在服务端看到下面的字样,表示连接成功。红色部分是打码。

截屏2022-02-05 16.53.44

方便客户端启动,写了一个简单的bat文件,命名为frp-client.bat,内容如下

@echo off
@title frp client service
frpc.exe -c frpc.ini
pause

保存双击启动之后,点击最小化即可,frp服务就启动了。

那些所谓的“坑”

无法连接到服务器或者从外网无法访问?

请检查Ubuntu的防火墙是否为开启状态,若开启,请开放端口。若开放了端口或者没有开启防火墙,请登录云服务提供商的平台检查服务商的防火墙有无出入站端口设置。如果没有设置端口,请进行设置。

如果还是不行,请检查客户端电脑的防火墙出入站设置。

猜你喜欢

转载自blog.csdn.net/qq_17790209/article/details/122791535