Linux配置frps与frpc的四种隧道并设置开机启动

Linux配置frps与frpc的四种隧道并设置开机启动

Simuoss
2024-08-11 / 0 评论 / 77 阅读 / 正在检测是否收录...

前言

对于个人爱好者而言,国内的绝大多数家庭宽带都没有公网IP,即使能要到动态公网IP,也需要配置DDNS服务,比较麻烦。但是购买云服务器,又面临着算力较低,开销较大的问题。所以,在家中配置一台高性能服务器,并购买一台低配置大带宽的云服务器做端口转发,甚至是全端口转发,是一件性价比较高的实现方式。
在开设穿透上,我们这里使用 FRP

frp 采用 C/S 模式,将服务端部署在具有公网 IP 的机器上,客户端部署在内网或防火墙内的机器上,通过访问暴露在服务器上的端口,反向代理到处于内网的服务。 在此基础上,frp 支持 TCP, UDP, HTTP, HTTPS 等多种协议,提供了加密、压缩,身份认证,代理限速,负载均衡等众多能力。此外,还可以通过 xtcp 实现 P2P 通信。

下载预编译包

这一步对于服务端和用户端都一样,没有区别,因为预编译包里面同时包含frps和frpc

选择合适的平台与系统

打开 FRP的Github Releases界面。一般推荐直接下载最新版(截止本文撰写是0.59.0版本)。

可以看到,图中有很多版本的Release包,都是frp_版本_系统_平台的命名格式。通常来讲,云服务商提供的服务器,直接选择frp_0.59.0_linux_amd64.tar.gz即可
系统自然不必说,常见的ubuntu、centos、debian等等都属于Linux。平台的对应关系:

平台意义
arm32位的arm芯片,通常用在机顶盒、手机等等设备,目前比较少见
arm6464位的arm芯片,通常用在机顶盒、高端路由器,手机等等设备,比如高通骁龙、联发科天玑等等
amd64【最常见】64位的x86架构芯片,Intel和AMD在2003年以后的芯片都选这个
arm_hf带有硬件浮点单元的32位arm芯片
mips32位的mips芯片,通常用在一些路由器、医疗和工控设备里
mips6464位的mips芯片,通常用在一些路由器、医疗和工控设备里

下载预编译包到本地并解压

可以直接在远端服务器上使用curl下载(以frp_0.59.0_linux_amd64.tar.gz为例):

curl -L https://github.com/fatedier/frp/releases/download/v0.59.0/frp_0.59.0_linux_amd64.tar.gz

如果你选择了别的版本,可以直接改动后面的文件名。

如果远程服务器下载缓慢,也可以在本地下载好后,使用(s)ftp协议或其他方式上传至远程服务器。这里推荐使用自带ftp协议的ssh终端,如 MobaXterm

下载好后,解压文件:

tar -xzvf frp_0.59.0_linux_amd64.tar.gz
-x:表示解压。
-z:表示文件是 gzip 格式的(.gz)。
-v:表示显示解压的文件列表(可选)。
-f:指定文件名。

在服务端搭建frps服务

修改配置文件

进入frp文件目录:

cd frp_0.59.0_linux_amd64

用vim文本编辑器修改 frps.toml 配置文件

vi frps.toml

注意,对于初学者来说,vim编辑器可能比较难以使用,使用方式可以参照这篇文章:vim使用教程图文教程(零基础超详细)。如果还是觉得难以使用,推荐Windows用户下载MobaXterm,并在连接到服务器后,用右侧的sftp文件界面来修改toml文件内容。

清除原先内容,复制以下内容到文件并保存:

bindPort = 7000                 # frp服务的端口。最基础的服务有这一行就够了,后面的都可以不要。需要注意如果你有防火墙,防火墙也需放开该端口

# 服务面板可查看frp服务状态信息,无论开启还是关闭都不影响服务正常使用。想要关闭就把后面四行用#号注释掉
webServer.addr = "0.0.0.0"    # 后台管理地址,默认是127.0.0.1,如果是公网访问则改成0.0.0.0
webServer.port = 7500        # 后台管理端口
webServer.user = "admin"    # (可选)后台登录用户名
webServer.password = "admin"    # (可选)后台登录密码

# 身份认证。如果不配置这一项,那么任何想连接至你的服务器的frpc请求都会被同意。不过不开启这个配置起来简单一些。
#transport.tls.force = true     # 服务端将只接受 TLS链接
#auth.method = 'token'          # 客户端访问验证方式
#auth.token = "54321"             # 客户端访问验证密码,frpc要与frps一致

# 自定义的监听的端口,所有对服务器该端口访问将被转发到本地内网,做了反向代理可不处理防火墙放行
#vhostHTTPPort = 8000
#vhostHTTPSPort = 45443

保存退出。
这时,输入

./frps -c ./frps.toml

即可运行服务,如果正常运行,就先按ctrl+c关闭程序,因为我们后面要配置后台运行和开机启动。

设置开机启动

在这里,我们使用 systemd 来将frps注册为系统服务。
systemd 是一个用于 Linux 操作系统的系统和服务管理器。它是大多数现代 Linux 发行版中用于启动和管理系统服务的主要工具。systemd 负责管理系统启动、服务运行、系统资源分配以及进程和日志管理等。在多数主流的 Linux 发行版中,systemd 已经成为默认的系统管理工具。

使用以下指令创建frps.service服务文件并编辑:

sudo vim /etc/systemd/system/frps.service

这里会提示你输入密码,因为此目录有root等级权限。如果没有提示输入密码,证明你用了root用户直接操作日常人物,这是不好的。

如果你想用我前面提到的sftp工具直接修改,那你需要在Session里面重新开一个具有root权限的stfp会话,因为左边自带的stfp没有root权限,不能直接修改这个路径的文件。

所以尽量还是学一下 vim 吧:vim使用教程图文教程(零基础超详细)。如果还是觉得难以使用,推荐Windows用户下载MobaXterm

写入内容,注意修改frp文件路径:

[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target
 
[Service]
Type = simple
# 启动命令,改为实际存放frps的路径
ExecStart = /path/to/frps -c /path/to/frps.toml
# 自动重启设置
Restart = always
# 适用于重启策略的额外设置
RestartSec = 5s
 
[Install]
WantedBy = multi-user.target

注意修改你的frps路径。
如果你想修改自动重启配置,可参照下面的细则调整配置文件(一般没有必要,可以直接跳过):

Restart:
- no:默认值,不会自动重启服务。
- always:无论服务的退出状态如何(正常退出或崩溃),systemd 都会自动重启服务。
- on-failure:只有在服务因非零退出状态或超时而失败时,systemd 才会重启服务。
- on-abnormal:只有在服务异常退出(如段错误、崩溃等)时,systemd 才会重启服务。
- on-success:仅当服务正常退出(退出码为0)时,systemd 才会重启服务。
- on-abnormal:只有在服务异常退出(如段错误、崩溃等)时,systemd 才会重启服务。
RestartSec:定义在服务重启之前等待的时间。这里设置为 5 秒。

保存文件。随后,依次执行以下命令(如有启动失败,评论区联系):
启动frp

sudo systemctl start frps

停止frp

sudo systemctl stop frps

重启frp

sudo systemctl restart frps

查看frp状态

sudo systemctl status frps

设置为开机自启

sudo systemctl enable frps

恭喜你,你已经完成了服务端的搭建工作,随后该服务会在系统开机时自启,无惧重启了。

在用户端搭建frps服务

修改配置文件

进入frp文件目录:

cd cd frp_0.59.0_linux_amd64

用vim文本编辑器修改 frpc.toml 配置文件

vi frpc.toml

注意,对于初学者来说,vim编辑器可能比较难以使用,使用方式可以参照这篇文章:vim使用教程图文教程(零基础超详细)。如果还是觉得难以使用,推荐Windows用户下载MobaXterm,并在连接到服务器后,用右侧的sftp文件界面来修改toml文件内容。

清除原先内容,复制以下内容到文件,理解你的每一项配置并按需修改和删除:

transport.tls.enable = true    # 从 v0.50.0版本开始,transport.tls.enable的默认值为 true
serverAddr = "47.76.92.71"     # 服务端ip,改成你的
serverPort = 7000         # 服务端端口,和之前配置frps.toml时候一致
#auth.method = 'token'         # 客户端访问验证方式,如果你前面开启了访问验证,这里需要和之前配置frps.toml时候一致
#auth.token = '54321'         # 客户端访问验证密码,如果你前面开启了访问验证,这里需要和之前配置frps.toml时候一致

# TCP隧道配置方式(如MySQL、Minecraft等等服务)
[[proxies]]
name = "thisclient.mc"     # 客户端服务名,建议写成“xxx.xxx”的形式好分辨
type = "tcp"         # 通讯方式
localIP = "127.0.0.1"     # 客户端的ip(本机就写127.0.0.1,局域网下其他主机也可以写其它局域网IP)
localPort = 25565     # 客户端服务端口(比如MC的默认端口是25565,MySQL是3306)
remotePort = 13306     # 映射到服务端端口(服务器需放行。注意有些服务可能要求端口一致,但大部分不需要)

# UDP隧道配置方式(如语音服务、MC基岩版)
[[proxies]]
name = "mc-bedrock"
type = "udp"        # 注意这里变了
localIP = "127.0.0.1"
localPort = 19132    # MCBE的默认端口
remotePort = 39132

# 走TCP通道的HTTP流量,穿透网站用,但这种方式需要在网站后面加端口号
[[proxies]]
name = "test-http"
type = "tcp"
localIP = "127.0.0.1"        # 需要暴露的服务的IP
localPort = 80            # 将本地80端口的服务暴露在公网的6060端口
remotePort = 6060         # 暴露服务的公网入口

# SSH隧道,远程连接用
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22        # ssh隧道默认端口是22
remotePort = 6000
#customDomains = ["xxx.xxx.xxx.xxx"]    #如果想用域名访问,就在这里改

# HTTP隧道代理方式,穿透网站用,远程端口可以不是80并且不需要在访问时加端口号
[[proxies]]
name = "web"
type = "http"
localPort = 80
#customDomains = ["域名"]

# HTTPS隧道代理方式,需要注意配置证书
[[proxies]]
name = "web-80"
type = "https"
localPort = 45443
#customDomains = ["cloud.your-service.com"]

保存退出。
这时,输入

./frpc -c ./frpc.toml

即可运行服务,如果正常运行,就先按ctrl+c关闭程序,因为我们后面要配置后台运行和开机启动。

设置开机启动

客户端设置开机启动方法与服务端一致,唯一不同的是创建的文件名和配置文件的frpc路径不同。所以相同的内容读者可以自行跳过

在这里,我们使用 systemd 来将frpc注册为系统服务。
systemd 是一个用于 Linux 操作系统的系统和服务管理器。它是大多数现代 Linux 发行版中用于启动和管理系统服务的主要工具。systemd 负责管理系统启动、服务运行、系统资源分配以及进程和日志管理等。在多数主流的 Linux 发行版中,systemd 已经成为默认的系统管理工具。

使用以下指令创建frpc.service服务文件并编辑:

sudo vim /etc/systemd/system/frpc.service

这里会提示你输入密码,因为此目录有root等级权限。如果没有提示输入密码,证明你用了root用户直接操作日常人物,这是不好的。

如果你想用我前面提到的sftp工具直接修改,那你需要在Session里面重新开一个具有root权限的stfp会话,因为左边自带的stfp没有root权限,不能直接修改这个路径的文件。

所以尽量还是学一下 vim 吧:vim使用教程图文教程(零基础超详细)。如果还是觉得难以使用,推荐Windows用户下载MobaXterm

写入内容,注意修改frp文件路径:

[Unit]
# 服务名称,可自定义
Description = frp client
After = network.target syslog.target
Wants = network.target
 
[Service]
Type = simple
# 启动命令,改为实际存放frpc的路径
ExecStart = /path/to/frpc -c /path/to/frpc.toml
# 自动重启设置
Restart = always
# 适用于重启策略的额外设置
RestartSec = 5s
 
[Install]
WantedBy = multi-user.target

注意修改你的frpc路径。
如果你想修改自动重启配置,可参照下面的细则调整配置文件(一般没有必要,可以直接跳过):

Restart:
- no:默认值,不会自动重启服务。
- always:无论服务的退出状态如何(正常退出或崩溃),systemd 都会自动重启服务。
- on-failure:只有在服务因非零退出状态或超时而失败时,systemd 才会重启服务。
- on-abnormal:只有在服务异常退出(如段错误、崩溃等)时,systemd 才会重启服务。
- on-success:仅当服务正常退出(退出码为0)时,systemd 才会重启服务。
- on-abnormal:只有在服务异常退出(如段错误、崩溃等)时,systemd 才会重启服务。
RestartSec:定义在服务重启之前等待的时间。这里设置为 5 秒。

保存文件。随后,依次执行以下命令(如有启动失败,评论区联系):
启动frp

sudo systemctl start frpc

停止frp

sudo systemctl stop frpc

重启frp

sudo systemctl restart frpc

查看frp状态

sudo systemctl status frpc

设置为开机自启

sudo systemctl enable frpc

恭喜你,你已经完成了客户端的搭建工作,随后该服务会在系统开机时自启,无惧重启了。

至此,我们就完成了所有服务的搭建。如果对过程有什么问题,或者出现了报错,请在下方评论留言联系。

参考链接:
FRP官网
用FRP配置toml文件搭建内网穿透

4

评论 (0)

取消