frp内网穿透使用说明
frp内网穿透使用说明
本文介绍 frp(Fast Reverse Proxy)的内网穿透原理、组件分工与典型部署流程,涵盖 TCP(SSH) 与 HTTP 域名访问 示例。配置语法以常见 INI 写法为主(与社区教程一致);新版本亦支持 TOML,完整参数以 frp 官方文档 为准。
1. frp 简介
1.1 是什么
frp 是一款开源的高性能反向代理应用,专注于内网穿透:将位于 NAT、防火墙或私网中的服务,通过一台具有公网 IP 的中转节点安全、可控地暴露到互联网。
官方定位(摘自 README_zh.md):
- 支持 TCP、UDP、HTTP、HTTPS 等多种协议,并支持 P2P 等能力;
- 客户端与服务器之间可经 TCP、QUIC、KCP、WebSocket 等传输;
- 可在单连接上复用多路请求,支持端口复用、负载均衡、插件扩展与 Web 管理界面。
1.2 典型场景
| 场景 | 说明 |
|---|---|
| 远程 SSH/RDP | 外网通过 VPS 端口访问内网主机 |
| 内网 Web 对外 | 将 192.168.x.x:8080 以域名或端口形式暴露 |
| NAS / 监控 / 管理后台 | 无公网 IP 的家庭或机房设备供外网访问 |
| 开发联调 | 临时把本机 localhost:3000 映射给同事或回调地址 |
| 多服务统一入口 | 一台 VPS 上 frps,多台内网机器各自 frpc |
1.3 相关链接
| 资源 | 链接 |
|---|---|
| GitHub 仓库 | https://github.com/fatedier/frp |
| 中文 README | https://github.com/fatedier/frp/blob/dev/README_zh.md |
| 官方文档 | https://gofrp.org |
| Release 下载 | https://github.com/fatedier/frp/releases |
| 社区实践(HTTP/SSH 配置) | 腾讯云开发者社区 · 用 frps 实现内网穿透 |
1.4 与其他方案对比(简要)
| 方式 | 特点 |
|---|---|
| frp(自建 frps) | 可控、成本低,需自运维 VPS 与安全 |
| Cloudflare Tunnel | 可不买 VPS,适合 Web/HTTPS |
| ngrok / 花生壳等 SaaS | 开箱即用,按量或订阅 |
| 路由器端口映射 | 需运营商真公网 IP,家宽常不可用 |
2. frp 组成
frp 由服务端与客户端两部分组成,需成对部署:
1
2
3
4
5
6
7
8
9
┌─────────────────────────────────────────────────────────────┐
│ frp 组成与角色 │
├─────────────────────────────────────────────────────────────┤
│ 公网 VPS / 云服务器 │
│ frps(Server)← 监听公网端口,接收外网连接,管理隧道 │
│ ↑ 主动连接(出站) │
│ 内网服务器 / PC / NAS │
│ frpc(Client)→ 连接 frps,注册本地服务端口映射 │
└─────────────────────────────────────────────────────────────┘
| 组件 | 部署位置 | 作用 |
|---|---|---|
| frps | 有公网 IP 的 VPS | 接受 frpc 连接;将外网流量按规则转发到对应隧道 |
| frpc | 内网机器 | 主动连接 frps;把 local_ip:local_port 映射到公网端口或域名 |
要点:内网侧通常不需要公网 IP,也不必改路由器端口映射——由 frpc 主动连出到 frps 建立隧道。
解压 Release 后常见文件:
| 文件 | 说明 |
|---|---|
frps / frps.exe | 服务端程序 |
frpc / frpc.exe | 客户端程序 |
frps.ini / frpc.ini | 配置模板(INI) |
frps.toml / frpc.toml | 配置模板(TOML,新版本) |
3. 内网穿透整体流程
以 内网 Web 通过子域名 test.example.com 对外提供访问 为例:
1
2
3
4
5
6
7
用户浏览器 https://test.example.com
↓ DNS:A 记录 → VPS 公网 IP(如 47.96.x.x)
VPS 上的 frps(vhost_http_port = 80 / 443)
↓ 按 Host: test.example.com 匹配代理
frpc 与 frps 之间的隧道(frpc 主动维持)
↓
内网 Web 服务(127.0.0.1:8080)
3.1 前置条件
| 项目 | 说明 |
|---|---|
| VPS | 带公网 IP,安装 frps,安全组放行相应端口 |
| 内网机器 | 安装 frpc,能访问 VPS 公网 IP |
| 域名(HTTP 按域名访问时) | 已注册根域名;子域名 A 记录 指向 VPS IP(非内网 IP) |
| 本地服务 | Web/SSH 等已在本机监听目标端口 |
3.2 子域名与 IP 的关系
购买根域名 example.com 后,可在 DNS 控制台自行添加子域名(如 test.example.com、www.example.com),一般无需为每个子域名单独付费。
| 记录类型 | 示例 | 含义 |
|---|---|---|
| A | test → 47.96.x.x | 子域名解析到 VPS 公网 IPv4 |
| CNAME | test → 其他域名 | 别名指向另一域名 |
内网穿透场景下:域名始终解析到 frps 所在 VPS;frpc 再将流量转入内网私网地址。
3.3 端口与安全组(参考)
| 端口 | 用途 |
|---|---|
| 7000(可改) | frpc 连接 frps 的控制通道 |
| 80 / 443 | HTTP/HTTPS 对外访问(vhost_http_port / HTTPS) |
| 6000 等 | TCP 映射时 frps 对外暴露的 remote_port |
生产环境务必配置 token 等鉴权,控制通道端口避免对全网裸奔;对外 Web 建议 HTTPS 与应用层鉴权。
4. 部署与应用示例
以下示例假设:
- VPS 公网 IP:
47.96.123.45 - frps / frpc 共用 token:
your_secure_token - 内网 Web:
127.0.0.1:8080 - 对外域名:
test.example.com(DNS 已 A 记录到 VPS)
软件可从 Releases 下载,Linux 解压至 /usr/local/frp,Windows 可置于 C:\frp。
4.1 示例一:TCP 映射(SSH 远程登录)
场景:外网通过 47.96.123.45:6000 访问内网 22 端口 SSH。
VPS — frps.ini:
1
2
3
[common]
bind_port = 7000
token = your_secure_token
内网 — frpc.ini:
1
2
3
4
5
6
7
8
9
10
[common]
server_addr = 47.96.123.45
server_port = 7000
token = your_secure_token
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
启动:
1
2
3
4
5
# VPS
cd /usr/local/frp && ./frps -c frps.ini
# 内网
cd /usr/local/frp && ./frpc -c frpc.ini
访问:
1
ssh -p 6000 user@47.96.123.45
Windows 客户端同理使用 frpc.exe -c frpc.ini。
4.2 示例二:HTTP + 自定义域名(内网 Web)
场景:浏览器访问 http://test.example.com → 内网 8080。
步骤 1:DNS
| 主机记录 | 类型 | 记录值 |
|---|---|---|
test | A | 47.96.123.45 |
步骤 2:VPS — frps.ini
1
2
3
4
[common]
bind_port = 7000
vhost_http_port = 80
token = your_secure_token
若 VPS 上 80 已被占用,可改为 8080,访问时需带端口 http://test.example.com:8080。
步骤 3:内网 — frpc.ini
1
2
3
4
5
6
7
8
9
10
[common]
server_addr = 47.96.123.45
server_port = 7000
token = your_secure_token
[web]
type = http
local_ip = 127.0.0.1
local_port = 8080
custom_domains = test.example.com
说明(参见 腾讯云社区文章):
type = http:按 HTTP 虚拟主机转发;custom_domains:与请求头Host匹配,须与 DNS 子域名一致;- 亦可用
subdomain = test(需 frps 配置subdomain_host = example.com),效果类似test.example.com。
步骤 4:启动与验证
1
2
3
4
5
6
7
8
# VPS
./frps -c frps.ini
# 内网
./frpc -c frpc.ini
# 内网自检
curl http://127.0.0.1:8080
浏览器访问:http://test.example.com。
4.3 示例三:--replace 与多服务(概念)
同一 VPS 上 frps 可通过不同 custom_domains 或不同 remote_port 暴露多个内网服务,例如:
| 子域名 / 端口 | 内网目标 |
|---|---|
app.example.com | 127.0.0.1:3000 |
api.example.com | 127.0.0.1:8080 |
VPS :6000 | 内网 SSH :22 |
每条映射在 frpc.ini 中增加一个 [section] 即可。
4.4 systemd 常驻(Linux 建议)
/etc/systemd/system/frps.service(VPS):
1
2
3
4
5
6
7
8
9
10
11
[Unit]
Description=frp server
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/frp/frps -c /usr/local/frp/frps.ini
Restart=on-failure
[Install]
WantedBy=multi-user.target
内网 frpc.service 同理,将 frps 换为 frpc。启用:
1
2
sudo systemctl daemon-reload
sudo systemctl enable --now frps # 或 frpc
5. 其他补充
5.1 HTTPS
生产环境建议在 VPS 上为 test.example.com 配置 TLS:
- 使用 Nginx / Caddy 终结 HTTPS 并反代到 frp 或内网端口;或
- 按 gofrp.org 文档配置 frp 的 HTTPS / 证书插件。
Let’s Encrypt 申请证书前,需确保域名已解析到 VPS 且 80/443 可从公网访问。
5.2 常见问题
| 现象 | 可能原因 | 处理建议 |
|---|---|---|
| frpc 连不上 frps | 安全组未放行 7000;token 不一致 | 检查防火墙与两端 [common] 配置 |
| 域名无法访问 | DNS 未生效;未放行 80/443 | nslookup test.example.com;查云厂商安全组 |
| 502 / 连接被拒绝 | frpc 未运行;本地端口错误 | 确认 local_port 与 curl 本机访问 |
| Host 不匹配 | custom_domains 与浏览器地址不一致 | 域名大小写不敏感,但须完全一致 |
| 已有 Web 占 80 | 与 vhost_http_port 冲突 | 改 vhost_http_port 或调整现有 Nginx 与 frp 分工 |
5.3 安全建议
- 强 token,定期轮换;控制端口限制来源 IP(若可行)。
- 管理面板(如 frps
dashboard)勿对公网开放,或加 IP 白名单。 - 穿透等于扩大攻击面:SSH 用密钥登录、Web 做认证,避免裸奔管理口。
- frpc 进程需常驻(systemd / 计划任务),否则隧道断开外网即不可达。
- 流量经 VPS 中转,带宽与延迟受 VPS 规格与线路影响。
5.4 配置格式说明
社区教程(含 腾讯云此文)多使用 INI(frps.ini / frpc.ini)。较新版本同时提供 TOML 配置,字段名略有差异(如 vhost_http_port 与 vhostHTTPPort),升级或复制配置时请对照当前版本的 官方文档 与 Release 附带的 *_full.ini / *.toml 示例。
6. 小结
| 步骤 | 动作 |
|---|---|
| 1 | 准备 VPS(frps) + 内网机器(frpc) |
| 2 | 下载 frp,配置 token 与 bind_port |
| 3 | TCP 场景:配置 remote_port;HTTP 场景:配置 DNS + vhost_http_port + custom_domains |
| 4 | 启动 frps → 启动 frpc → 外网验证 |
| 5 | 生产补充 HTTPS、systemd 常驻 与 安全加固 |
一句话:frps 在公网接客,frpc 在内网连出去注册服务;域名通过 DNS 指向 VPS,由 frp 按域名或端口把流量送进内网。
