关键词:内网穿透、FRP配置、frps、frpc、远程访问、自建服务器、反向代理、TCP转发、HTTP转发
在开发或部署项目时,我们经常遇到内网设备无法被公网访问 的问题,例如你想从外网访问你家里的 NAS、远程调试开发板,或是访问本地测试环境。这时候,一个轻量、易用、高效的开源工具 ------ FRP (Fast Reverse Proxy) 就派上用场了。
本文将手把手教你如何使用 FRP 实现内网穿透,支持 **TCP / HTTP ** 协议的穿透。
一、FRP 是什么?
FRP(Fast Reverse Proxy) 是一个高性能的反向代理应用,专为内网穿透而设计。你可以通过它将内网服务映射到公网服务器,实现从外网访问内网服务的需求。
FRP 包含两个核心组件:
- frps:部署在公网服务器上,作为服务端。
- frpc:部署在内网主机上,作为客户端。

二、FRP 应用场景
- 从公网访问位于 NAT/防火墙后的内网服务
- 家庭网络中远程访问内网电脑或 NAS
- IoT 设备远程调试
- 本地开发环境暴露给互联网使用
- 内网网站、API接口暴露给第三方服务
三、准备工作
1. 准备一台 公网服务器
- 操作系统:Linux(例如 Ubuntu 20.04)
- 能开放指定端口(例如 7000、80、443)
- 安装 SSH,方便远程管理
2. 一台内网主机
- 比如你家里的电脑、树莓派、或公司内网中的服务器
3. 下载 FRP 工具
访问:https://github.com/fatedier/frp/releases
选择对应系统版本进行下载,例如:
bash
# 以 Linux 64 位为例
wget https://github.com/fatedier/frp/releases/download/v0.63.0/frp_0.63.0_linux_amd64.tar.gz
tar -zxvf frp_0.63.0_linux_amd64.tar.gz
四、服务端配置(公网服务器)
进入 frp_0.63.0_linux_amd64
目录:
编辑 frps.toml
:
toml
bindPort = 15700
vhostHTTPPort = 14144
启动 frps:
bash
# 后台启动frp服务端应用
nohpu ./frps -c frps.toml &
#利用tail 命令查看启动日志
tail -f nohup.out
出现如下内容则表示启动成功:
bash
[1;34m2025-07-23 18:50:38.146 [I] [frps/root.go:105] frps uses config file: frps.toml
[0m[1;34m2025-07-23 18:50:38.307 [I] [server/service.go:237] frps tcp listen on 0.0.0.0:15701
[0m[1;34m2025-07-23 18:50:38.308 [I] [server/service.go:305] http service listen on 0.0.0.0:14144
[0m[1;34m2025-07-23 18:50:38.308 [I] [frps/root.go:114] frps started successfully
✅ 建议将其配置为 Systemd 服务,实现开机自启。
五、客户端配置(内网主机)
在内网主机中进入对应解压后的 frp
目录。
编辑 `frpc.toml:
1. 穿透 HTTP 服务(比如本地 8080)
toml
serverAddr = "公网IP"
serverPort = 15700
[[proxies]]
name = "web01"
type = "http"
localIP = "127.0.0.1"
localPort = 8080
customDomains = ["指定到公网的域名"]
启动成功后,可以通过
http://公网IP:14144
内网http服务!
2. 穿透 SSH 服务(远程 SSH 到内网设备)
toml
serverAddr = "公网地址"
serverPort = 15700
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort =16000
启动 frpc:
bash
./frpc -c frpc.toml
启动成功后,
ssh 公网IP -p 16000
来访问内网ssh服务!
六、设置自启动(Systemd 配置)
1. 服务器
创建 /etc/systemd/system/frps.service
ini
[Unit]
Description=FRP Server
After=network.target
[Service]
ExecStart=/opt/frp/frps -c /opt/frp/frps.toml
Restart=on-failure
[Install]
WantedBy=multi-user.target
2.客户端
创建 /etc/systemd/system/frpc.service
ini
[Unit]
Description=FRP Client
After=network.target
[Service]
ExecStart=/opt/frp/frpc -c /opt/frp/frpc.toml
Restart=on-failure
[Install]
WantedBy=multi-user.target
执行:
bash
sudo systemctl daemon-reexec
sudo systemctl enable frps
sudo systemctl start frps
客户端同理。
七、常见问题排查
问题 | 可能原因 | 解决办法 |
---|---|---|
frpc 连接不上 frps | 防火墙或端口未开放 | 检查安全组、防火墙设置 |
HTTP 映射失败 | 域名未解析或未配置 vhost_http_port | 检查 DNS 和配置 |
SSH 登录失败 | remote_port 已被占用 | 修改 remote_port |
frps/frpc 启动失败 | 配置文件格式错误 | 仔细检查 toml 文件格式 |