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. 测试与访问

  1. 服务端启动后,访问 http://公网IP:7500 (如果开了 dashboard)
  2. 客户端连接成功后,日志显示 “start proxy success”
  3. SSH 测试:ssh -p 60022 user@公网IP
  4. 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