内网穿透 FRP 配置指南

关键词:内网穿透、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 文件格式

相关推荐
ningqw5 小时前
SpringBoot 常用跨域处理方案
java·后端·springboot
你的人类朋友5 小时前
vi编辑器命令常用操作整理(持续更新)
后端
胡gh5 小时前
简单又复杂,难道只能说一个有箭头一个没箭头?这种问题该怎么回答?
javascript·后端·面试
一只叫煤球的猫6 小时前
看到同事设计的表结构我人麻了!聊聊怎么更好去设计数据库表
后端·mysql·面试
uzong6 小时前
技术人如何对客做好沟通(上篇)
后端
颜如玉7 小时前
Redis scan高位进位加法机制浅析
redis·后端·开源
Moment7 小时前
毕业一年了,分享一下我的四个开源项目!😊😊😊
前端·后端·开源
why技术8 小时前
在我眼里,这就是天才般的算法!
后端·面试
绝无仅有8 小时前
Jenkins+docker 微服务实现自动化部署安装和部署过程
后端·面试·github
程序视点8 小时前
Escrcpy 3.0投屏控制软件使用教程:无线/有线连接+虚拟显示功能详解
前端·后端