什么是 FRP?
FRP(Fast Reverse Proxy) 是一款由国人开发的高性能反向代理应用,主要用于内网穿透。它可以让位于 内网或防火墙后的机器,通过一台有公网 IP 的服务器,安全地暴露服务(HTTP、HTTPS、SSH、RDP 等)到公网。
核心原理
FRP 分为 服务端(frps) 和 客户端(frpc):
frps:运行在公网服务器上,拥有公网 IP。
frpc:运行在内网机器上,主动连接 frps,并将本地端口映射到公网服务器。
这样就能实现:
在公司/家庭内网运行的服务(如 Web、MySQL、SSH),可以从外网访问。
不需要做复杂的 NAT、端口映射或运营商支持。
常见使用场景
内网穿透
家庭 NAS、网站、博客对外访问。
远程访问家里电脑的桌面(RDP)、SSH、MySQL。
远程办公
远程调试公司内网服务,免去 VPN。
反向代理
将多个内网服务映射到不同的公网端口或域名。
安全隧道
支持 TLS 加密、身份验证,适合需要安全访问的场景。
FRP 的优势
高性能:基于 Go 语言开发,跨平台,性能优秀。
安全:支持 TLS、密码认证、Token 校验。
多协议支持:
TCP
UDP
HTTP / HTTPS
STCP(安全 TCP,仅在内网可见)
XTCP(点对点直连,降低延迟)
域名映射:支持自定义域名访问内网 Web 服务。
监控界面:自带 Web UI,可以查看连接情况。
FRP部署
前期准备
拥有公网ip的服务器 | 阿里云,腾讯云,以及其他拥有公网ip的服务器 |
需要内网穿透的服务器 | 这里可以是家庭 NAS、本地服务器 |
frp下载地址
Releases · fatedier/frp · GitHub
服务端配置(拥有公网IP的服务器)
tar -zxvf frp_0.61.1_linux_amd64.tar.gz
mkdir -p /usr/local/frp/
mv frp_0.61.1_linux_amd64/* /usr/local/frp
文件配置
cd /usr/local/frp/
vim frps.toml
[common]
# 服务端绑定的端口,用于客户端与服务端通信的核心端口。需要确保该端口对外网开放。
bind_port = 7000
# 密钥,是自定义的,想怎么填写就怎么填写,但客户端和服务端必须保持一致,确保安全通信。
token = "Frp20250905"
# 仪表板端口,用于查看 frps 服务端的运行状态和管理客户端连接。访问地址:服务器IP:7600
dashboard_port = 7600
启动服务端
./frps -c frps.toml
访问可视化web界面 公网IP+7600端口
将frps服务添加到systemd管理
cat <<EOF > /etc/systemd/system/frps.service
[Unit]
Description=FRP Server
After=network-online.target
Wants=network-online.target
[Service]
WorkingDirectory=/usr/local/frp
ExecStart=/usr/local/frp/frps -c /usr/local/frp/frps.toml
Environment=FRP_LOG_LEVEL=info
Restart=always
RestartSec=5s
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl start frps
systemctl enable frps
客户端配置(需要内网穿透的服务器)
tar -zxvf frp_0.61.1_linux_amd64.tar.gz
mkdir -p /usr/local/frp/
mv frp_0.61.1_linux_amd64/* /usr/local/frp
文件配置
以下配置仅适用于6.0及以下版本
cd /usr/local/frp/
vim frpc.toml
server_addr = "x.x.x.x" # 你的 frps 服务器公网 IP
server_port = 7000 # frps 服务监听端口
token = "Frp20250905"
[[proxies]] #这里自定义
name = "qwe" #这里自定义
type = "tcp" #这里写tcp协议
local_ip = "127.0.0.1" #这里使用本机IP不用更改
local_port = 80 #这里写自己需要暴露的端口
remote_port = 9090 #这里写自己需要映射的端口
以下配置使用于6.0以上版本
# 服务端地址和端口
serverAddr = "x.x.x.x" # 你的 frps 服务器公网 IP
serverPort = 7000 # frps 服务监听端口
# 认证(如果服务端启用了 token)
auth.method = "token"
auth.token = "Frp20250905"
# 代理配置
[[proxies]]
name = "test"
type = "tcp"
localIP = "127.0.0.1"
localPort = 80
remotePort = 9090
启动客户端
./frpc -c frpc.toml
查看服务端管理界面配置情况
将frpc服务添加到systemd管理
cat <<EOF > /etc/systemd/system/frpc.service
[Unit]
Description=FRP Server
After=network-online.target
Wants=network-online.target
[Service]
WorkingDirectory=/usr/local/frp
ExecStart=/usr/local/frp/frpc -c /usr/local/frp/frpc.toml
Environment=FRP_LOG_LEVEL=info
Restart=always
RestartSec=5s
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl start frpc
systemctl enable frpc
现在通过公网IP+9090端口就可以访问内网80端口的服务了