啥是 FRP ?

FRP(Fast Reverse Proxy) 是一款高性能的反向代理应用,主要用于内网穿透。通过 FRP,用户可以将内网服务暴露到公网,使得外部用户能够访问到内网中的服务。它支持多种协议,包括 TCP、UDP、HTTP 和 HTTPS

PS:这东西太适合我这种穷逼了,高性能云服务器贵的要死,存储还低。直接本地组装一台”小卡拉米“主机 + 一台每个月十几块的VPS,简直香爆了

内网穿透的原理

内网穿透解决了内网中的设备或服务无法直接被公网访问的问题。典型的内网穿透服务工作原理如下:

  1. 客户端和服务端的双向连接:

    • FRP 客户端(frpc)运行在内网机器上,并与公网的 FRP 服务端(frps)保持一个持久的连接

    • 当有公网访问请求时,FRP 服务端将该请求通过持久连接转发给 FRP 客户端

  2. 请求和响应的转发:

    • 外部用户通过访问 FRP 服务端的特定端口或域名,实际请求被转发到内网的 FRP 客户端

    • FRP 客户端将请求再转发到本地服务,处理完请求后再将响应通过 FRP 服务端返回给外部用户

FRP 的工作原理

以下是 FRP 内网穿透的工作流程:

  1. 建立连接:

    • FRP 客户端(frpc)与 FRP 服务端(frps)建立一个持久的 TCP 连接

  2. 端口映射:

    • FRP 服务端将一个公网端口与内网服务进行映射。例如,公网端口 8080 映射到内网机器上的 80 端口

  3. 转发请求:

    • 当外部用户访问 FRP 服务端的公网端口时,请求被转发到内网的 FRP 客户端

  4. 处理请求:

    • 内网服务处理请求并生成响应,通过 FRP 客户端返回给 FRP 服务端,再由 FRP 服务端返回给外部用户


在 Debian 上配置和使用 FRP 内网穿透

1. 安装 FRP

首先,从官方 GitHub 仓库下载最新版本的 FRP:

wget https://github.com/fatedier/frp/releases/download/v0.58.1/frp_0.58.1_linux_amd64.tar.gz

解压下载的文件:

tar -xzf frp_0.58.1_linux_amd64.tar.gz
cd frp_0.58.1_linux_amd64

2. 配置 FRP 服务端

创建 frps.toml 配置文件:

bindAddr = "0.0.0.0"
bindPort = 7000

auth.method = "token"
auth.token = "token"

webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "admin"

frps.ini 文件内容解释:

  • bindAddr:服务端监听的地址,0.0.0.0 表示监听所有网络接口,允许来自任何 IP 地址的连接

  • bindPort:服务端监听的端口号,这里是 7000。客户端会连接到这个端口

  • auth.method:认证方式,这里使用的是 token 认证

  • auth.token:用于认证的 token,客户端和服务端需要匹配的 token 来进行认证(你也可以把它当作客户端跟服务端链接的密码)

  • webServer.addr:Web 管理页面监听的地址,0.0.0.0 表示监听所有网络接口

  • webServer.port:Web 管理页面的端口号,这里是 7500

  • webServer.user:Web 管理页面的用户名,用于登录 Web 管理页面

  • webServer.password:Web 管理页面的密码,用于登录 Web 管理页面

启动 FRP 服务端:

./frps -c frps.toml

3. 配置 FRP 客户端

在内网机器上创建frpc.toml配置文件:

frpc.toml 文件是 FRP (Fast Reverse Proxy) 客户端的配置文件,用于设置客户端连接到服务器和一些其他代理配置。下面是对这个文件中每个参数的解释和作用:

# 全局设置
serverAddr = "x.x.x.x"
serverPort = 7000

# 认证设置
auth.method = "token"
auth.token = "token"

# Web 服务设置
webServer.addr = "0.0.0.0"
webServer.port = 7400
webServer.user = "admin"
webServer.password = "admin"
webServer.pprofEnable = false

# 代理设置
[[proxies]]
name = "qinglong"
type = "http"
localPort = 5000
customDomains = ["qinglong.xxxx.com"]
  • serverAddr:FRP 服务端的 IP 地址或域名

  • serverPort:FRP 服务端监听的端口

  • auth.method:认证方式,这里使用的是 token

  • auth.token:用于认证的 token,客户端和服务端需要匹配的 token 来进行认证

  • webServer.addr:Web 服务监听的地址,0.0.0.0 表示监听所有网络接口

  • webServer.port:Web 服务的端口号

  • webServer.user:Web 服务的用户名,用于登录 Web 管理页面

  • webServer.password:Web 服务的密码,用于登录 Web 管理页面

  • webServer.pprofEnable:是否启用 pprof,pprof 是 Go 语言的性能剖析工具,这里设置为 false 表示禁用

  • [[proxies]]:代理配置块,可以有多个代理配置

  • name:代理的名称,标识这个代理配置

  • type:代理的类型,这里是 http

  • localPort:本地服务的端口号,FRP 会将流量转发到这个端口上

  • customDomains:自定义域名,这里指定了 qinglong.xxxx.com,流量会通过这个域名转发到 localPort 指定的本地端口

启动 FRP 客户端:

./frpc -c frpc.toml

4. 配置为系统服务

为了使 FRP 服务端和客户端在系统启动时自动启动,可以将其配置为系统服务

配置 FRP 服务端为系统服务

创建 systemd 服务文件 /etc/systemd/system/frps.service:

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

[Service]
Type=simple
ExecStart=/path/to/frp/frps -c /path/to/frp/frps.toml
Restart=on-failure

[Install]
WantedBy=multi-user.target

启用并启动服务:

sudo systemctl enable frps
sudo systemctl start frps
配置 FRP 客户端为系统服务

创建 systemd 服务文件 /etc/systemd/system/frpc.service:

[Unit]
Description=FRP Client Service
After=network.target

[Service]
Type=simple
ExecStart=/path/to/frp/frpc -c /path/to/frp/frpc.toml
Restart=on-failure

[Install]
WantedBy=multi-user.target

启用并启动服务:

sudo systemctl enable frpc
sudo systemctl start frpc

小结

FRP 是一款强大的内网穿透工具,可以轻松地将内网服务暴露到公网。它通过建立持久连接、端口映射和请求转发的机制,使得内网服务能够被外部访问。通过上述步骤,可以在 Debian 系统上安装和配置 FRP 服务端和客户端,实现内网穿透。将自己的一些东西映射到公网之前,要确认是否有隐私数据之类的东西,或者是否符合相关的法律法规,不然的话容易翘辫子