frp 基础配置指南(内网穿透入门)
frp 是一个快速的反向代理工具,用于将内网服务暴露到公网。
官方推荐从 v0.52.0 开始使用 TOML 格式配置文件(.ini 已弃用,但旧版本仍支持)。
1. 准备工作
- 下载最新 frp:https://github.com/fatedier/frp/releases (选择对应系统架构,如 amd64/linux)
- 解压后得到
frps(服务端)和frpc(客户端) - 服务端需有公网 IP,防火墙放行所需端口
- 基础端口建议:
- 7000:frp 客户端与服务端通信(TCP + 可选 UDP)
- 7500:Web 管理面板(可选)
- 6000+:映射的远程端口(自定义)
2. 服务端基础配置(frps)
推荐:frps.toml(新版)
# frps.toml - 基础配置
bindAddr = "0.0.0.0"
bindPort = 7000 # frpc 连接端口(TCP)
# 强烈推荐:加 token 防止未授权连接
auth.method = "token"
auth.token = "mytoken123456" # 自定义,客户端必须一致
# 可选:开启 Web 管理面板(强烈建议)
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "adminpass"
# 日志(可选)
log.to = "./frps.log"
log.level = "info"
旧版兼容:frps.ini
# frps.ini - 基础配置
[common]
bind_port = 7000
token = mytoken123456
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = adminpass
log_file = ./frps.log
log_level = info
3. 客户端基础配置(frpc) - 以 SSH 穿透为例
推荐:frpc.toml
# frpc.toml - 基础 SSH 穿透
serverAddr = "你的公网IP或域名" # 如 1.2.3.4 或 frp.example.com
serverPort = 7000
# 认证(必须与服务端一致)
auth.method = "token"
auth.token = "mytoken123456"
# 代理示例:穿透本地 SSH (22端口)
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 60022 # 公网访问:你的公网IP:60022 即可连内网 SSH
额外示例:穿透本地 Web 服务(HTTP)
在 frpc.toml 追加:
[[proxies]]
name = "web"
type = "http"
localIP = "127.0.0.1"
localPort = 80 # 或 8080 等
customDomains = ["web.yourdomain.com"] # 需要服务端开启 vhostHTTPPort
服务端需额外配置(frps.toml):
vhostHTTPPort = 80 # 公网 HTTP 访问端口
旧版兼容:frpc.ini
# frpc.ini - 基础 SSH 穿透
[common]
server_addr = 你的公网IP或域名
server_port = 7000
token = mytoken123456
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 60022
4. 启动命令
# 服务端(前台运行,测试用)
./frps -c frps.toml
# 后台运行(Linux 推荐)
nohup ./frps -c frps.toml > frps.out 2>&1 &
# 客户端同理
./frpc -c frpc.toml
nohup ./frpc -c frpc.toml > frpc.out 2>&1 &
Windows:直接双击 frps.exe / frpc.exe 或用 cmd 执行(加 -c 参数)。
5. 测试与访问
- 服务端启动后,访问 http://公网IP:7500 (如果开了 dashboard)
- 客户端连接成功后,日志显示 “start proxy success”
- SSH 测试:
ssh -p 60022 user@公网IP - Web 测试:浏览器访问 http://公网IP:你的vhostHTTPPort 或自定义域名
6. 常见问题快速排查
| 问题 | 可能原因 | 解决办法 |
|---|---|---|
| 客户端连不上 | 防火墙未放行 7000/TCP | 服务端安全组/防火墙开 TCP 7000 |
| dashboard 打不开 | 未配置 webServer 或端口冲突 | 检查 webServer.port 并放行端口 |
| proxy start error | token 不一致 | 客户端/服务端 token 必须完全相同 |
| 旧版提示 ini deprecated | 使用了 .ini 但版本 ≥0.52 | 迁移到 .toml(语法类似) |
| 连接成功但无法访问服务 | remotePort 被占用/未放行 | 服务端防火墙放行 remotePort |
7. 安全建议(基础版)
- 必须设置 token(防止任何人连接)
- 尽量不要用默认 dashboard 账号密码
- 生产环境建议加 TLS(transport.tls.force = true)
- remotePort 不要用常见端口(如 22、80),改用高位端口
- 定期更新 frp 到最新版
更多高级配置(如 UDP、STCP、范围端口、KCP/QUIC 等)参考官方文档:
https://github.com/fatedier/frp
https://gofrp.org/docs/
frp 使用 KCP 协议配置指南
frp 从 v0.52.0 开始正式推荐使用 TOML 格式配置文件(旧 .ini 已弃用)。
KCP 协议适合弱网、高丢包、高延迟环境,能显著改善体验(代价:流量增加 10–30% 左右),底层使用 UDP。
1. 服务端配置(frps)
推荐方式:frps.toml(新版 v0.52+)
# frps.toml
bindAddr = "0.0.0.0"
bindPort = 7000
# 开启 KCP 支持(最关键)
kcpBindPort = 7000 # 可与 bindPort 相同端口
# 推荐:token 认证
auth.method = "token"
auth.token = "你的自定义密钥123456"
# 推荐:强制 TLS
transport.tls.force = true
# 可选:Web 面板
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "admin888"
# 日志(可选)
log.to = "./frps.log"
log.level = "info"
旧版方式:frps.ini(v0.51 及以下)
# frps.ini
[common]
bind_port = 7000
kcp_bind_port = 7000 ; 必须开启,否则客户端无法用 KCP
token = 你的自定义密钥123456
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = admin888
log_file = ./frps.log
log_level = info
防火墙必开端口:
- TCP 7000(控制连接)
- UDP 7000(KCP 数据传输)
2. 客户端配置(frpc)
推荐方式:frpc.toml(新版)
# frpc.toml
serverAddr = "你的服务器公网IP或域名"
serverPort = 7000
# 全局启用 KCP(最关键)
transport.protocol = "kcp"
# 认证(与服务端一致)
auth.method = "token"
auth.token = "你的自定义密钥123456"
# 推荐:启用 TLS
transport.tls.enable = true
# 代理示例
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 60022
[[proxies]]
name = "rdp"
type = "tcp"
localIP = "127.0.0.1"
localPort = 3389
remotePort = 13389
[[proxies]]
name = "web"
type = "http"
localIP = "127.0.0.1"
localPort = 80
customDomains = ["www.example.com"]
旧版方式:frpc.ini
# frpc.ini
[common]
server_addr = 你的服务器公网IP或域名
server_port = 7000
token = 你的自定义密钥123456
# 全局启用 KCP(旧版写法)
protocol = kcp
# 代理示例
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 60022
[rdp]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 13389
[web]
type = http
local_ip = 127.0.0.1
local_port = 80
custom_domains = www.example.com
3. 启动命令
# 服务端
./frps -c frps.toml # 或 frps.ini
# 客户端
./frpc -c frpc.toml # 或 frpc.ini
# 后台运行示例(Linux)
nohup ./frps -c frps.toml >/dev/null 2>&1 &
4. 常见问题排查表
| 现象 | 可能原因 | 解决办法 |
|---|---|---|
| 连不上,提示 dial udp … | 服务器防火墙未放行 UDP 7000 | 防火墙/安全组放行 UDP 7000 |
| 连接成功但仍很卡顿 | 客户端未启用 KCP | 确认 transport.protocol = "kcp" 或 protocol = kcp |
| 报错 invalid protocol | 服务端未开启 kcpBindPort | 服务端补上 kcpBindPort / kcp_bind_port |
| 流量比 TCP 高很多 | KCP 正常现象(前向纠错冗余) | 弱网值得,强网可切换回 tcp |
| 旧版客户端报错 | 版本不兼容 | 建议双方升级到最新版并统一用 TOML |
5. 版本建议
- ≥ v0.52.0 → 强烈推荐 TOML 格式(更清晰、功能更全)
- < v0.52.0 → 继续用 .ini,但建议尽快升级
- 检查版本:
./frpc --version或./frps --version