记录一个笨蛋搭建frp服务器的历程

写在前面

前言

(此部分对全文而言并不重要,可以跳过)

曾经的我呢,可是纯正的技术类博主呢

不知为何,居然转行到生活类博主了…

所以,今天我重操旧业啦(笑)


本文与其说是一篇搭frp的教程文章吧,更像是一篇我的踩坑历程。当然它的本质还是教程文章啦

小惊喜

我用的是宝塔面板,直到最后我才知到它有个插件叫frp管理器…可以一键部署frp……

所以,如果你也用宝塔面板,完全没有必要耗费脑细胞折腾,装个插件就over了

了解一些小常识

(个人理解,语言可能比较接地气,见谅)

内网穿透啊,就是你的计算机没有公网(仅在一个内网环境中),通过有公网的frp服务器进行流量转发,让内网中计算机的流量转发到公网。(但是在公网访问的是frp服务器而非内网的计算机)

至于frp嘛,它是一个开源、简洁易用、高性能的内网穿透和反向代理软件,支持 tcp, udp, http, https等协议。它分为服务端frps,即放在公网服务器的一端;以及客户端frpc,即放在内网里边的。

frp工作原理(一般用不到,看看即可):

1.服务端运行,监听一个主端口,等待客户端的连接;
2.客户端连接到服务端的主端口,同时告诉服务端要监听的端口和转发类型;
3.服务端fork新的进程监听客户端指定的端口;
4.外网用户连接到客户端指定的端口,服务端通过和客户端的连接将数据转发到客户端;
5.客户端进程再将数据转发到本地服务,从而实现内网对外暴露服务的能力。

开始前的准备

  • 一台有公网的服务器
  • 一个电脑
  • 一个已经备案的域名(国外服务器不用备案也行)
  • 一个敢于不怕失败而折腾的大脑

先上GitHub把最新的frp下载下来。

https://github.com/fatedier/frp/releases

注意:把你服务端(服务器)的版本和客户端的都下载下来

(比如我用Centos,即linux,和Windows)

(防止某些人上不了GitHub,我把它们放到这里了:

然后用电脑把它俩解压,留着别删了

捣腾服务器

给你的域名解析个二级域名,这个域名就是frp转发的域名(记得挂ssl)

在服务器的网站根目录把你上上一步解压的压缩包(与服务器系统对应的那个)传过去。

其实不用和我一样,直接把文件夹里边的内容放到根目录即可

然后新建一个配置文件,frps.ini

这个配置文件内至少包含以下内容:

[common]
bind_port = 7000
vhost_http_port = 8080
vhost_https_port = 8443
  • bind_port:指定 FRP 服务端监听的端口,客户端将通过该端口与服务端进行连接。这里设置为 7000
  • vhost_http_port:指定用于 HTTP 虚拟主机的端口。通过 FRP 的 HTTP 类型隧道,客户端请求将被转发到该端口。这里设置为 8080
  • vhost_https_port:指定用于 HTTPS 虚拟主机的端口。通过 FRP 的 HTTPS 类型隧道,客户端请求将被转发到该端口。这里设置为 8443

当然,也可以增加其他参数:

[common]
# frp服务端口
bind_port = 7000
# 用户连接时的url端口
vhost_http_port = 10000
vhost_https_port = 10000
# 主域名 通过此域名连接(也可用公网IP)
subdomain_host = test.com

# 控制台端口(通过此端口可进入后台查看frp状态)
dashboard_port = 7500
# 控制台账户
dashboard_user = admin
# 控制台密码
dashboard_pwd = admin123
max_pool_count = 10
# 日志文件位置及名字
log_file = ./frps.log
# 日志级别
log_level = info
# 日志最多记录天数
log_max_days = 3
# token 客户端token需要与此一致(类似密码,客户端配置文件也必须要token)
# token可以有效防止其他人连接服务器
token = testtoken

[web01]
# 如果值为http,则必须设置 vhost_http_port
type = http
# 如果代理类型等于http,则必须设置自定义_域,并用逗号分隔
# 例:custom_domains = web01.yourdomain.com,web01.yourdomain2.com
custom_domains = test.com

然后打开终端,cd到frps目录,运行以下指令:

./frps -c ./frps.ini

然后就运行成功了。

需要注意的是:关闭终端后,frps服务端也随之关闭。后文会提到挂后台运行的方法。

捣腾客户端

打开第一步解压的frpc客户端文件夹

同理,新建一个frpc.ini的配置文件

其中至少包括以下内容:

[common]
server_addr = frp服务器ip或域名,最好是ip(IP 地址更稳定和直接。)
server_port = 服务端frps.ini的bind_port

[web]
type = 类型,https或http等
local_port = 本地要映射的端口(本地服务运行的端口,比如 Flask 或其他 Web 服务的端口。)
custom_domains = frp的二级域名,例如frp.loneapex.cn,而非主域名

注:custom_domains的域名需要正确解析到frp服务器上,否则可能无法访问。

其中的type要说的话有点复杂,让chatgpt讲一下:

客户端配置文件中的 type 类型决定了客户端将如何处理传入的流量,而不是取决于服务端的二级域名的协议。

  1. FRP 客户端配置类型 (type)
    • type 字段指定了客户端将如何处理传入的流量。常见的类型有:
      • tcp: 用于TCP流量的穿透,适用于非HTTP/HTTPS的应用程序。
      • http: 用于HTTP流量的穿透,适用于Web应用程序。
      • https: 用于HTTPS流量的穿透,支持加密传输。
      • 其他类型可以用于不同的协议和场景,如UDP等。
  2. 服务端的二级域名与客户端配置的关系
    • 服务端的二级域名(如 frp.loneapex.cn)主要决定了请求到达FRP服务器后如何转发到内部网络或服务。
    • 客户端的配置文件中的 custom_domains 字段用于指定需要穿透的域名,但不直接决定协议类型。
  3. 协议与端口的匹配
    • 协议类型(如 httphttps)和端口(如 80443)通常是服务端和客户端在配置时约定好的。客户端会监听本地的一个端口(如 8080),而服务端则会根据请求的协议和域名进行转发到相应的端口上。

上边说了这么多,就是:

tcp: 用于一般 TCP 流量,例如 SSH。httphttps: 用于 Web 流量,分别对应 HTTP 和 HTTPS 协议

注:可以有多个类似[web]的区块,如[web1] [web2]


然后把客户端要映射的程序给打开【一定要先打开再启动frp客户端!】

【待映射端口一定要和配置文件一致!!】

我用flask举例

然后依旧用终端cd到文件目录,运行

./frpc -c ./frpc.ini

如果不出意外(配置文件两端吻合且没错的话),则

连接成功

(为了方便把它塞到一个bat文件吧)

frpc -c frpc.ini
pause

服务器折腾

本来就此结束,访问frp.loneapex.cn(frp的二级域名,后边不用加端口),理论上可以访问,但是吧

哦,对哦,还要配置nginx呢(反向代理)

由于我用宝塔,它自己即可完成,各位大佬们可以搜搜frp Nginx配置(挺多的)

然后,理论上来说,你的frp服务器就搭好了。

后台挂frp服务端。

(本部分搬自云服务器搭建frp服务(超详细) – 散人长情 – 博客园 (cnblogs.com)

以 Linux 为例,在目录 /etc/systemd/system 下新建文件名为 frps.service 的文件(Windows参考百度)

说明: ExecStart = {frps.exe所在的目录}/frps -c {frps.ini所在的目录}/frps.ini

(比如ExecStart=/home/frp_0.27.0_linux_amd64/frps -c /home/frp_0.27.0_linux_amd64/frps.ini)

内容如下:

[Unit] 
Description=Frp Server Service 
After=network.target 

[Service] 
Type=simple U
ser=nobody 
Restart=on-failure 
RestartSec=5s 
ExecStart=/home/frp_0.27.0_linux_amd64/frps -c /home/frp_0.27.0_linux_amd64/frps.ini(举个例子)

[Install] 
WantedBy=multi-user.target

文件新建好后用以下命令控制(Linux的客户端也是此命令,把 frps 改成 frpc 即可):

systemctl enable frps #设置开机启动
systemctl start frps #启动 
systemctl stop frps #停止 
systemctl status frps #状态

終わり

本文到此就结束了

啊,好累,好久没写技术类文章以至于有种违和感了。

不过嘛,技术类文章虽说写一篇得一两个小时(加上各种调试得半天呢),但是不需要任何情感输出;相反,生活类文章(比如随笔、杂谈)则需要自己的主观感受,把自己的真实想法写出来,这种感觉对我来说是这样的——当我在写作的时候,各种思绪喷涌而来,写完后才发现论点们居然毫无关联、驴唇不对马嘴,成了一篇“狗皮膏药”似的随笔(笑),这之后又发现自己提出的观点好低级、好无聊、好没用,发现自己挺废物的www

所以呢,久违的写篇技术文也挺不错的嘛。

暂无评论

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯
 ̄﹃ ̄
(/ω\)
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
(´っω・`。)
( ,,´・ω・)ノ)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•)
(ㆆᴗㆆ)
有希酱最可爱啦!(素材来自bilibili@最上川下山)
整活by Mimosa233
Source: github.com/k4yt3x/flowerhd
galgame系列表情by Mimosa233
颜文字
周防有希
小恐龙
夸夸我!
花!
可愛い!
上一篇
下一篇