直入主题,原理放最后了想要了解自行观看。
FRP需要一台有公网 IP 的服务器做 “中间人,
你的内网 → 中间公网服务器 → 外网
准备
- 一台云服务器(最低配置就行,几十块一年)阿里云 / 腾讯云 / 华为云都行,系统选 Ubuntu 22.04
- 你的内网电脑(Windows/Linux)
服务端设置
1.1下载FRP
下面操作在服务端和本地端都要进行
# 以 v0.62.0 为例,去 GitHub 看最新版
wget https://github.com/fatedier/frp/releases/download/v0.62.0/frp_0.62.0_linux_amd64.tar.gz
# 解压
tar -zxvf frp_0.62.0_linux_amd64.tar.gz
# 定位到解压位置
cd frp_0.62.0_linux_amd64
1.2配置frps.ini
nano frps.ini
1.3写入
[common]
bind_port = xxx # FRP 通信端口
vhost_http_port = xxx # 网站访问端口
token = xxx # 连接密码(客户端必须一样)
dashboard_port = xxx # 管理后台端口
dashboard_user = xxx # 后台账号
dashboard_pwd = xxx # 后台密码
保存退出:Ctrl+O → 回车 → Ctrl+X
2.1开放端口
租服务器的话一般在防火墙设置添加规则,不同厂家不同改法,或者可以试一下手动开启端口。
2.2放行指定 TCP 端口
#xxx为你要开放的端口
#Ubuntu/Debian 系统
ufw allow xxx/tcp
#CentOS 7/8/9 系统
firewall-cmd --permanent --add-port=xxx/tcp
2.3重新加载防火墙
#Ubuntu/Debian 系统
ufw reload
#CentOS 7/8/9 系统
firewall-cmd --reload
2.4查看已经开放的端口
#Ubuntu/Debian 系统
ufw reload
#CentOS 7/8/9 系统
firewall-cmd --list-ports
端口配置完毕,我们进行下一步。
3.1启动服务端
# 定位到frp位置
cd frp_0.62.0_linux_amd64
# 开始运行
./frps -c frps.ini
看到 frps started successfully 就 OK。
客户端设置(你内网电脑,Windows 示例)
1.1下载FRP
https://github.com/fatedier/frp/releases
#下 windows_amd64 包
有人可能打不开github,这里推荐一个好东西Watt Toolkit
下载后解压得到:frpc.exe + frpc.ini
# ========== 全局通用配置 必须和服务端一致 ==========
[common]
# 填写你的云服务器公网IP地址,FRP客户端要连接到这台服务器
server_addr = 你的云服务器公网IP
# 服务端监听通信端口,和frps.ini里bind_port保持一致固定7000
server_port = 7000
# 连接验证密钥,服务端客户端必须一模一样,防止别人乱连你的隧道
token = 123456
# ========== 网站穿透配置 名称自定义随便写 ==========
[web]
# 穿透类型 http网页网站专用
type = http
# 本地内网网站IP,本机搭建网站固定填127.0.0.1
local_ip = 127.0.0.1
# 你本地电脑宝塔/网站运行的端口,默认建站都是80端口
local_port = 80
# 绑定自己的域名,域名提前解析指向你的云服务器公网IP
custom_domains = 你的域名.com
token连接密钥 服务端和客户端必须一致server_port(客户端)=bind_port(服务端)必须一样
1.2开放端口
以管理员身份打开 PowerShell
New-NetFirewallRule -DisplayName "FRP-Ports" -Direction Inbound -Protocol TCP -LocalPort xxx,xxx,xxx -Action Allow -Enabled True
#把xxx改成自己要开的端口,多个端口用,分割。
1.3测试端口是否开放
netstat -ano | findstr :xxx
有内容输出就说明端口正常监听
1.4启动
#windows启动
frpc -c frpc.ini
#linux启动
./frps -c frps.ini
如果运行失败就cd定位到frp文件夹再尝试启动
出现 login to server success → 穿透成功!
FRP 是什么?
FRP = 内网穿透反向代理工具,用来把内网机器(家里 / 公司电脑、NAS、树莓派)暴露到公网,让外网能访问。
核心痛点:
- 内网设备只有 私有 IP(192.168.x.x/10.x.x.x),没有公网 IP
- 路由器 NAT 阻止外网主动连进来
- 运营商大多不给家用公网 IP
FRP 解决办法:内网主动连公网,做隧道中转。
一、FRP 架构(C/S 模式)
两个核心程序:
- frps(Server 服务端)
- 部署在有公网 IP 的服务器(云服务器、VPS)
- 监听端口(默认 7000)
- 负责:接受 frpc 连接、分配公网端口、转发流量
- frpc(Client 客户端)
- 部署在内网机器(你的电脑 / NAS)
- 主动发起连接到 frps
- 负责:建立隧道、把公网请求转给本地服务
架构:
内网 frpc → 主动连 → 公网 frps → 外网用户访问 frps → 流量走隧道到内网
二、为什么能穿透 NAT?
1. NAT 的限制
- 内网机器不能被外网主动发起连接
- 但内网机器可以主动向外发起连接
2. FRP 的关键:反向连接 + 长连接隧道
- frpc 主动出站:内网主动连公网 frps,绕过 NAT 入站限制
- 长连接保活:frpc ↔ frps 之间维持一条永久 TCP 隧道(心跳包维持,默认 30 秒)
- 请求中转:外网用户访问 frps 端口 → frps 通过隧道发给 frpc → frpc 发给本地服务 → 原路返回
流程图
外网网段 ←→ 公网VPS(frps)
↑
│ 主动发起长连接(绕过NAT禁止外网入连)
↓
路由器NAT防火墙
↓
内网局域网 ←→ 内网主机(frpc) ←→ 本地应用
三、关键技术点
1. 控制连接 vs 工作连接
- Control 连接:一条,持久化,传指令(认证、建代理、心跳)
- Work 连接:动态创建,传实际业务流量(每个请求 / 连接一条)
2. 心跳保活
- 默认 30 秒一次心跳
- 超时断开 → frpc 自动重连
- 防止 NAT 会话过期被踢
3. 多协议支持
- TCP:端口映射(SSH、RDP、数据库)
- UDP:游戏、音视频
- HTTP/HTTPS:域名绑定、Host 改写、SSL
- P2P(STCP/XTCP):两端都有 frpc,frps 只做撮合,流量直连(省服务器带宽)
4. 一个 frpc 可暴露多个服务
- 一个客户端配置多个 proxy(多端口 / 多域名)
- 复用同一条控制连接,节省资源
四、总结
内网客户端 frpc 主动连接公网服务端 frps,建立一条加密长连接隧道;外网访问公网 IP 端口时,frps 将流量通过隧道转发给内网 frpc,再由 frpc 转发给本地服务,从而实现无公网 IP 情况下的内网穿透。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END



暂无评论内容