开源大世界

kydsj.vip 【首页】

用户工具

站点工具


wiki:frp

frp


frp 是一款高性能的反向代理应用,专注于内网穿透。它支持多种协议,包括 TCP、UDP、HTTP、HTTPS 等,并且具备 P2P 通信功能。使用 frp,您可以安全、便捷地将内网服务暴露到公网,通过拥有公网 IP 的节点进行中转。

为什么选择frp


通过在具有公网 IP 的节点上部署 frp 服务端,您可以轻松地将内网服务穿透到公网,并享受以下专业特性:

  多种协议支持:客户端服务端通信支持 TCP、QUIC、KCP 和 Websocket 等多种协议。
  TCP 连接流式复用:在单个连接上承载多个请求,减少连接建立时间,降低请求延迟。
  代理组间的负载均衡。
  端口复用:多个服务可以通过同一个服务端端口暴露。
  P2P 通信:流量不必经过服务器中转,充分利用带宽资源。
  客户端插件:提供多个原生支持的客户端插件,如静态文件查看、HTTPS/HTTP 协议转换、HTTP、SOCKS5 代理等,以便满足各种需求。
  服务端插件系统:高度可扩展的服务端插件系统,便于根据自身需求进行功能扩展。
  用户友好的 UI 页面:提供服务端和客户端的用户界面,使配置和监控变得更加方便。
  

概念


了解以下概念有助于更好地理解和使用 frp。

工作原理

frp 主要由两个组件组成:客户端(frpc)服务端(frps)。通常情况下,服务端部署在具有公网 IP 地址的机器上,而客户端部署在需要穿透的内网服务所在的机器上。

由于内网服务缺乏公网 IP 地址,因此无法直接被非局域网内的用户访问。用户通过访问服务端的 frps,frp 负责根据请求的端口或其他信息将请求路由到相应的内网机器,从而实现通信。

代理

在 frp 中,一个代理对应一个需要公开访问的内网服务。一个客户端可以同时配置多个代理,以满足不同的需求。

代理类型

frp 支持多种代理类型,以适应不同的使用场景。以下是一些常见的代理类型:

  TCP:提供纯粹的 TCP 端口映射,使服务端能够根据不同的端口将请求路由到不同的内网服务。
  UDP:提供纯粹的 UDP 端口映射,与 TCP 代理类似,但用于 UDP 流量。
  HTTP:专为 HTTP 应用设计,支持修改 Host Header 和增加鉴权等额外功能。
  HTTPS:类似于 HTTP 代理,但专门用于处理 HTTPS 流量。
  STCP:提供安全的 TCP 内网代理,要求在被访问者和访问者的机器上都部署 frpc,不需要在服务端暴露端口。
  SUDP:提供安全的 UDP 内网代理,与 STCP 类似,需要在被访问者和访问者的机器上都部署 frpc,不需要在服务端暴露端口。
  XTCP:点对点内网穿透代理,与 STCP 类似,但流量不需要经过服务器中转。
  TCPMUX:支持服务端 TCP 端口的多路复用,允许通过同一端口访问不同的内网服务。

每种代理类型适用于不同的使用情境,您可以根据需求选择合适的代理类型来配置 frp。

安装


下载

您可以从 GitHub 的 Release 页面中下载最新版本的客户端和服务器二进制文件。所有文件都打包在一个压缩包中,还包含了一份完整的配置参数说明。 部署

  解压下载的压缩包。
  将 frpc 复制到内网服务所在的机器上。
  将 frps 复制到拥有公网 IP 地址的机器上,并将它们放在任意目录。

开始使用!

  编写配置文件,目前支持的文件格式包括 TOML/YAML/JSON,旧的 INI 格式仍然支持,但已经不再推荐。
  使用以下命令启动服务器:./frps -c ./frps.toml。
  使用以下命令启动客户端:./frpc -c ./frpc.toml。
  如果需要在后台长期运行,建议结合其他工具,如 systemd 和 supervisor。

使用 systemd


此示例演示如何在 Linux 系统下使用 systemd 来管理 frps 服务,包括启动、停止、配置后台运行和设置开机自启动。

在 Linux 系统下,使用 systemd 可以方便地控制 frps 服务端的启动、停止、配置后台运行以及开机自启动。

以下是具体的操作步骤:

1 安装 systemd

如果您的 Linux 服务器上尚未安装 systemd,可以使用包管理器如 yum(适用于 CentOS/RHEL)或 apt(适用于 Debian/Ubuntu)来安装它:

# 使用 yum 安装 systemd(CentOS/RHEL)
yum install systemd

# 使用 apt 安装 systemd(Debian/Ubuntu)
apt install systemd

2 创建 frps.service 文件

使用文本编辑器 (如 vim) 在 /etc/systemd/system 目录下创建一个 frps.service 文件,用于配置 frps 服务。

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

写入内容

[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target

[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /path/to/frps -c /path/to/frps.toml

[Install]
WantedBy = multi-user.target

3 使用 systemd 命令管理 frps 服务

# 启动frp
sudo systemctl start frps
# 停止frp
sudo systemctl stop frps
# 重启frp
sudo systemctl restart frps
# 查看frp状态
sudo systemctl status frps

4 设置 frps 开机自启动

    sudo systemctl enable frps

通过遵循上述步骤,您可以轻松地使用 systemd 来管理 frps 服务,实现启动、停止、自动运行和开机自启动。确保替换路径和配置文件名称以匹配您的实际安装。

示例


在这里,您将找到多个常见的使用场景和配置示例,可供您用来亲自部署和体验这些示例。

通过SSH访问内网机器

通过简单配置 TCP 类型的代理,使用户能够访问内网服务器。

多个SSH服务复用同一端口

通过使用 tcpmux 类型的代理,您可以实现多个 SSH 服务通过同一端口进行暴露。这种方法还适用于任何支持 HTTP Connect 代理连接方式的客户端,以实现端口的复用。

通过自定义域名访问内网的 Web 服务

通过简单配置HTTP类型的代理,您可以让用户通过自定义域名访问内网的 Web 服务。

转发 DNS 查询请求

本示例演示如何通过简单配置 UDP 类型的代理来实现 DNS 查询请求的转发。

转发Unix域套接字

通过配置 Unix 域套接字客户端插件,您可以使用 TCP 端口访问内网的 Unix 域套接字服务,例如 Docker Daemon。

对外提供简单的文件访问服务

通过配置 static_file 客户端插件,您可以将本地文件暴露在公网上,以供其他人访问。

为本地 HTTP 服务启用 HTTPS

使用 https2http 插件将本地 HTTP 服务转换为 HTTPS 服务,以供外部访问。

安全地暴露内网服务

通过创建一个只有授权用户能够访问的 SSH 服务代理,实现内网服务的安全暴露。

点对点内网穿透

这个示例将演示如何通过点对点 (P2P) 连接来访问内网服务,流量不会通过服务器中转。

相关网站

相关

wiki/frp.txt · 最后更改: 2024/04/28 10:27 由 math

⭐24小时内访问人数:【473】⭐