一、引言:内网穿透的刚需
你是否遇到过这些场景?
- 🎮 搭建游戏服务器:和朋友联机玩Minecraft,但没有公网IP
- 💻 远程控制:需要从外网SSH到家里的Linux服务器
传统的解决方案要么很贵(花生壳专业版每年几百元),要么很复杂(自己配置公网服务器+端口转发)。今天介绍的这款工具,让内网穿透变得简单又免费。
二、项目介绍
frp(Fast Reverse Proxy)是一款高性能的反向代理应用,可以轻松实现内网穿透,让内网服务暴露到公网。
核心特点:
- 🔒 安全可靠:支持TLS加密、Token认证、端到端加密
- 🎯 协议丰富:TCP、UDP、HTTP、HTTPS、STCP全支持
- 🔌 功能强大:负载均衡、健康检查、端口复用等高级功能
GitHub 地址:https://github.com/fatedier/frp⭐ Stars:103.0K+开发语言:Go开源协议:Apache-2.0
三、工作原理
frp 采用客户端-服务器架构:
内网设备 (frpc) → 公网服务器 (frps) ← 外网用户
↓ ↓ ↓
内网服务 代理转发 访问服务
组件说明:
- frps(frp server):运行在有公网IP的服务器上
- frpc(frp client):运行在内网设备上
流程:
四、核心功能
1. TCP 端口转发
最基础的功能,转发任意 TCP 端口:
应用场景:
- 数据库远程连接(MySQL、PostgreSQL)
配置示例:
# frpc.ini
[common]
server_addr = your-server.com
server_port = 7000
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
访问:ssh -p 6000 user@your-server.com → 连接到内网SSH
2. HTTP/HTTPS 代理
通过域名访问内网 Web 服务:
应用场景:
配置示例:
# frpc.ini
[web]
type = http
local_port = 8080
custom_domains = demo.example.com
访问:http://demo.example.com → 内网的 localhost:8080
HTTPS 示例:
[web_https]
type = https
local_port = 443
custom_domains = secure.example.com
3. UDP 端口转发
转发 UDP 协议:
应用场景:
配置示例:
[dns]
type = udp
local_ip = 8.8.8.8
local_port = 53
remote_port = 6053
4. 加密与压缩
保护数据传输安全:
TLS 加密:
# frpc.ini
[common]
server_addr = your-server.com
server_port = 7000
tls_enable = true
# frps.ini
[common]
bind_port = 7000
tls_only = true
数据压缩:
# frpc.ini
[ssh]
type = tcp
local_port = 22
remote_port = 6000
use_compression = true
5. 点对点穿透(STCP)
无需通过服务器中转,直接点对点连接:
优势:
服务端配置:
# frpc.ini(内网服务提供方)
[secret_ssh]
type = stcp
sk = your_secret_key
local_ip = 127.0.0.1
local_port = 22
访问端配置:
# frpc.ini(访问方)
[secret_ssh_visitor]
type = stcp
role = visitor
server_name = secret_ssh
sk = your_secret_key
bind_addr = 127.0.0.1
bind_port = 6000
访问:ssh -p 6000 user@127.0.0.1 → 点对点连接
6. 负载均衡
多台服务器负载分担:
# frpc1.ini
[web1]
type = tcp
local_port = 8080
remote_port = 80
group = web
group_key = your_group_key
# frpc2.ini(另一台服务器)
[web2]
type = tcp
local_port = 8080
remote_port = 80
group = web
group_key = your_group_key
frps 自动在两台服务器间负载均衡。
7. 端口范围映射
批量映射端口:
[range:game_server]
type = tcp
local_ip = 127.0.0.1
local_port = 6000-6010,7000-7010
remote_port = 6000-6010,7000-7010
一次性映射 22 个端口。
五、安装与配置
服务器端安装(frps)
前置条件:
- 操作系统:Linux、Windows、macOS 均可
Linux 快速安装:
# 1. 下载最新版本
wget https://github.com/fatedier/frp/releases/download/v0.54.0/frp_0.54.0_linux_amd64.tar.gz
# 2. 解压
tar -zxvf frp_0.54.0_linux_amd64.tar.gz
cd frp_0.54.0_linux_amd64
# 3. 配置 frps.ini
vi frps.ini
基础配置:
[common]
bind_port = 7000 # frp 服务端口
dashboard_port = 7500 # 控制台端口
dashboard_user = admin # 控制台用户名
dashboard_pwd = your_password # 控制台密码
token = your_secure_token # 客户端连接密钥
# 可选:日志配置
log_file = /var/log/frps.log
log_level = info
log_max_days = 7
启动服务:
# 前台运行(测试用)
./frps -c ./frps.ini
# 后台运行
nohup ./frps -c ./frps.ini &
# 或使用 systemd(推荐)
sudo vi /etc/systemd/system/frps.service
systemd 服务配置:
[Unit]
Description=frp server
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/frps -c /etc/frp/frps.ini
Restart=on-failure
[Install]
WantedBy=multi-user.target
sudo systemctl enable frps
sudo systemctl start frps
sudo systemctl status frps
客户端安装(frpc)
Windows 安装:
- 下载
frp_x.x.x_windows_amd64.zip
macOS 安装:
# 使用 Homebrew
brew install frp
# 或手动下载
wget https://github.com/fatedier/frp/releases/download/v0.54.0/frp_0.54.0_darwin_amd64.tar.gz
Linux 安装:
wget https://github.com/fatedier/frp/releases/download/v0.54.0/frp_0.54.0_linux_amd64.tar.gz
tar -zxvf frp_0.54.0_linux_amd64.tar.gz
cd frp_0.54.0_linux_amd64
基础配置:
[common]
server_addr = your-server.com # frps 服务器地址
server_port = 7000 # frps 服务端口
token = your_secure_token # 与 frps 一致
# SSH 穿透示例
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
# Web 服务穿透示例
[web]
type = http
local_port = 8080
custom_domains = myapp.example.com
启动客户端:
./frpc -c ./frpc.ini
六、实战案例
案例1:远程SSH到家里电脑
需求:在公司访问家里的 Linux 服务器
服务器配置(frps.ini):
[common]
bind_port = 7000
token = my_secure_token_2024
客户端配置(frpc.ini):
[common]
server_addr = vps.example.com
server_port = 7000
token = my_secure_token_2024
[ssh_home]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6022
使用:
ssh -p 6022 user@vps.example.com
案例2:远程访问NAS管理界面
需求:外网访问群晖NAS的Web界面
客户端配置:
[common]
server_addr = vps.example.com
server_port = 7000
token = my_token
[nas_web]
type = http
local_ip = 192.168.1.100 # NAS 内网IP
local_port = 5000
custom_domains = nas.example.com
DNS 配置: 将 nas.example.com 解析到 frps 服务器IP
使用: 浏览器访问 http://nas.example.com
案例3:Minecraft 服务器穿透
需求:和朋友联机玩 Minecraft
客户端配置:
[common]
server_addr = vps.example.com
server_port = 7000
token = my_token
[minecraft]
type = tcp
local_ip = 127.0.0.1
local_port = 25565
remote_port = 25565
朋友连接: 添加服务器:vps.example.com:25565
案例4:开发项目演示
需求:给客户展示本地开发的Web应用
客户端配置:
[common]
server_addr = vps.example.com
server_port = 7000
token = my_token
[demo_project]
type = http
local_port = 3000 # React/Vue 开发服务器端口
custom_domains = demo.example.com
# 启用 HTTPS
[demo_project_https]
type = https
custom_domains = demo.example.com
plugin = https2http
plugin_local_addr = 127.0.0.1:3000
使用: 发送链接给客户:https://demo.example.com
案例5:远程桌面(RDP)
需求:远程控制家里的 Windows 电脑
客户端配置:
[common]
server_addr = vps.example.com
server_port = 7000
token = my_token
[rdp]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 3389
使用: Windows 远程桌面连接:vps.example.com:3389
七、安全加固
1. Token 认证
防止未授权访问:
# frps.ini
[common]
token = use_a_very_strong_random_token_here
使用强随机 Token(推荐 32+ 字符)。
2. TLS 加密
加密控制通道:
# frps.ini
[common]
tls_only = true
# frpc.ini
[common]
tls_enable = true
3. 端到端加密(STCP)
连接完全不经过服务器:
# 使用 STCP 类型
type = stcp
sk = your_secret_key
4. IP 白名单
限制访问来源:
# frpc.ini
[ssh]
type = tcp
local_port = 22
remote_port = 6000
allow_users = user1,user2 # 只允许特定用户
5. 端口复用
隐藏 frp 服务端口:
# frps.ini
[common]
bind_port = 7000
vhost_http_port = 80
vhost_https_port = 443
bind_addr = 0.0.0.0
HTTP/HTTPS 服务和普通网站共用 80/443 端口。
八、对比分析
| | | | |
|---|
| 费用 | | | | |
| 带宽 | | | | |
| 自定义域名 | | | | |
| 协议支持 | | | | |
| 部署难度 | | | | |
| 性能 | | | | |
| 隐私性 | | | | |
| 稳定性 | | | | |
适用场景:
九、常见问题
Q1:需要什么样的服务器?
最低配置:
推荐配置:
云服务器推荐:
Q2:连接失败怎么办?
排查步骤:
- 检查 frps 是否运行:
systemctl status frps - 检查防火墙是否开放端口:
sudo firewall-cmd --add-port=7000/tcp --permanent
sudo firewall-cmd --reload
- 查看日志:
tail -f /var/log/frps.log
Q3:如何提升性能?
优化方法:
- 启用压缩:
use_compression = true
Q4:如何实现开机自启?
Windows: 使用任务计划程序创建开机启动任务
Linux:
# 使用 systemd
sudo systemctl enable frpc
macOS: 创建 LaunchAgent 配置文件
Q5:域名如何配置?
- 在 frpc 配置中使用
custom_domains - frps 需要监听 80/443 端口(或使用 Nginx 反向代理)
Q6:可以穿透多台设备吗?
可以!每台设备运行 frpc,使用不同的配置段名:
# 电脑1
[pc1_ssh]
type = tcp
local_port = 22
remote_port = 6001
# 电脑2
[pc2_ssh]
type = tcp
local_port = 22
remote_port = 6002
十、总结
frp 的核心优势:
- 🆓 成本低:开源免费,只需服务器费用(月付20-50元)
- 🔒 安全性高:TLS加密、Token认证、端到端加密
- 🎯 功能丰富:TCP、UDP、HTTP、HTTPS、STCP 全支持
- 🔧 高度定制:负载均衡、端口复用、健康检查等高级功能
适合你吗?
✅ 适合:
❌ 不适合:
frp 虽然需要一定的学习成本,但一旦配置好,就是最强大、最灵活、性价比最高的内网穿透解决方案。
快速开始:
推荐资源:
- 📚 官方文档:https://gofrp.org/zh-cn/docs/
- 🎯 配置示例:https://github.com/fatedier/frp/tree/dev/conf
- 💬 问题讨论:https://github.com/fatedier/frp/discussions
- 📖 中文教程:https://gofrp.org/zh-cn/
让 frp 成为你的内网穿透利器,随时随地访问内网资源!
阅读原文:原文链接
该文章在 2026/1/19 10:55:54 编辑过