如何使用FRP内网穿透

直入主题,原理放最后了想要了解自行观看。

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
  1. token 连接密钥 服务端和客户端必须一致
  2. 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 模式)

两个核心程序:

  1. frps(Server 服务端)
    • 部署在有公网 IP 的服务器(云服务器、VPS)
    • 监听端口(默认 7000)
    • 负责:接受 frpc 连接、分配公网端口、转发流量
  2. 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
喜欢就支持一下吧
点赞14 分享
yue的头像-长川三记
评论 抢沙发

请登录后发表评论

    暂无评论内容