啥是 FRP ?
FRP(Fast Reverse Proxy) 是一款高性能的反向代理应用,主要用于内网穿透。通过 FRP,用户可以将内网服务暴露到公网,使得外部用户能够访问到内网中的服务。它支持多种协议,包括 TCP、UDP、HTTP 和 HTTPS
PS:这东西太适合我这种穷逼了,高性能云服务器贵的要死,存储还低。直接本地组装一台”小卡拉米“主机 + 一台每个月十几块的VPS,简直香爆了
内网穿透的原理
内网穿透解决了内网中的设备或服务无法直接被公网访问的问题。典型的内网穿透服务工作原理如下:
客户端和服务端的双向连接:
FRP 客户端(frpc)运行在内网机器上,并与公网的 FRP 服务端(frps)保持一个持久的连接
当有公网访问请求时,FRP 服务端将该请求通过持久连接转发给 FRP 客户端
请求和响应的转发:
外部用户通过访问 FRP 服务端的特定端口或域名,实际请求被转发到内网的 FRP 客户端
FRP 客户端将请求再转发到本地服务,处理完请求后再将响应通过 FRP 服务端返回给外部用户
FRP 的工作原理
以下是 FRP 内网穿透的工作流程:
建立连接:
FRP 客户端(frpc)与 FRP 服务端(frps)建立一个持久的 TCP 连接
端口映射:
FRP 服务端将一个公网端口与内网服务进行映射。例如,公网端口 8080 映射到内网机器上的 80 端口
转发请求:
当外部用户访问 FRP 服务端的公网端口时,请求被转发到内网的 FRP 客户端
处理请求:
内网服务处理请求并生成响应,通过 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 服务端和客户端,实现内网穿透。将自己的一些东西映射到公网之前,要确认是否有隐私数据之类的东西,或者是否符合相关的法律法规,不然的话容易翘辫子