内网穿透神器 frp 怎么部署?无公网 IP 访问内网服务完整实战

110352 Star 的开源内网穿透工具 frp 实战教程:服务端 frps 与客户端 frpc 的 TOML 配置、SSH 与远程桌面穿透、NAS 网页服务的 HTTPS 发布、STCP 加密与 XTCP P2P 打洞,附安全加固清单与常见故障速查,配置可照抄。
frp 内网穿透实战封面图

家里有 NAS、有开发机、有挂在内网的监控和路由器管理页,可宽带不给公网 IP,人在公司就够不着家里那台机器——这是折腾自托管的人绕不开的第一道坎。市面上内网穿透工具不少,但要说免费、开源、能完全自己掌控的,frp 基本是绕不开的答案:GitHub 上 11 万颗 Star 的项目,Apache-2.0 协议,从个人 NAS 穿透到企业级内网服务暴露都在用它。这篇文章把 frp 从架构原理、服务端部署、客户端配置到 HTTPS、加密穿透、P2P 打洞一次讲透,配置全部按 v0.71 的新版 TOML 格式给出,可以直接照抄。

📥 下载地址:github.com/fatedier/frp/releases/latest(GitHub Releases,最新版 v0.71.1,Linux/Windows/macOS/Android 全平台压缩包约 12~14 MB),文档见 gofrp.org。软件本体免费开源,部署时需要一台有公网 IP 的服务器承接流量。

一、frp 是什么:一张图看懂它的架构

frp(Fast Reverse Proxy)是一款专注于内网穿透的高性能反向代理工具,由 fatedier 开发,2015 年开源至今迭代了 70 多个版本,最新版 v0.71.1 发布于 2026 年 10 月中。它的架构只有两个角色:

frps(服务端)跑在一台有公网 IP 的机器上(云服务器、VPS 都行),负责接收外部访问;frpc(客户端)跑在内网里那台真正提供服务机器上(NAS、开发机、路由器),主动连出去和 frps 建立一条长连接。外面的人访问公网服务器的某个端口,流量顺着这条隧道被送到内网机器上——因为连接是内网机器主动发起的,所以不需要公网 IP,也不需要在光猫路由器上做任何端口映射。

支持的协议类型很全:TCP、UDP、HTTP、HTTPS、STCP、XTCP,覆盖了远程桌面、SSH、Web 服务、监控流媒体、游戏联机等几乎所有场景。用 Go 写的单二进制文件,不依赖任何运行时,解压就能跑,这是它能在路由器、NAS、树莓派上遍地开花的原因。

二、为什么选 frp:和主流方案摆在一起比

对比项frpCloudflare TunnelTailscale花生壳
开源 / 自托管开源,服务端自己部署闭源,托管在 CF客户端开源,协调服务托管闭源商业服务
费用免费,VPS 自理免费额度够用免费 100 台设备免费版限速限流量
速度取决于 VPS 带宽,可跑满国内访问偏慢打洞成功则快免费档 1~2 Mbps
隐私掌控流量只过自己的服务器过 CF 节点打洞失败走中继全走厂商
适合场景Web/桌面/SSH 全能,自定义强纯 Web 对外发布设备组网互访小白开箱即用

一句话定位:想要完全自主可控、速度不设上限、什么协议都能穿的,frp 是首选;只是自己几台设备互访,Tailscale 更省事;对外发布纯网页且不介意国内速度,Cloudflare Tunnel 可以白嫖。frp 唯一的「成本」是你得有一台云服务器——家里宽带没有公网 IP 时,它是绕不开的落点。

三、部署前的准备:三样东西

动手前把材料备齐,后面一路顺:

① 一台有公网 IP 的云服务器。各家云厂商的轻量应用服务器就行,穿透日常 Web 和远程桌面,1 核 1G 的最低配完全够用,瓶颈在带宽不在配置。国内服务器延迟低但域名要备案走 443/80 才方便;不想备案可以选香港或海外节点,代价是延迟高一点。② 一个域名(可选但强烈建议)。穿 HTTP/HTTPS 服务时,域名 + 泛解析能让每个内网服务都有自己的网址,不用记端口号。③ 内网服务端的 IP 和端口。提前确认 NAS 管理页是 5000 还是 5001、SSH 是 22 还是自定义口,配置时直接填。

系统用主流的 Debian/Ubuntu 或 Rocky 都行,下面命令以 Linux 为例,Windows 客户端就是把解压出来的 frpc.exe 换个方式启动,配置文件完全一样。

四、服务端 frps:五分钟部署

先在服务器上把 frps 装起来并注册成系统服务:

# 下载并解压(以 linux amd64 为例,arm64 换对应包名)
wget https://github.com/fatedier/frp/releases/download/v0.71.1/frp_0.71.1_linux_amd64.tar.gz
tar -xzf frp_0.71.1_linux_amd64.tar.gz
cd frp_0.71.1_linux_amd64
cp frps /usr/local/bin/ && mkdir -p /etc/frp

写服务端配置 /etc/frp/frps.toml(v0.52 起从 ini 换成了 TOML,老教程里的 ini 写法会报错,这是新人最容易踩的坑):

bindPort = 7000
auth.token = "换成一段你自己的长随机字符串"

# 管理面板(可选,建议开)
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "换成强密码"

# HTTP/HTTPS 虚拟主机端口
vhostHTTPPort = 8080
vhostHTTPSPort = 8443

注册成 systemd 服务 /etc/systemd/system/frps.service:

[Unit]
Description=frps service
After=network.target

[Service]
ExecStart=/usr/local/bin/frps -c /etc/frp/frps.toml
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

systemctl daemon-reload && systemctl enable --now frps 搞定。然后到云厂商的安全组里放行 7000(隧道)、7500(面板)、8080/8443(Web 虚拟主机)这几个端口——安全组不放行是 frp 排障时排名第一的原因,服务端日志看着一切正常、客户端死活连不上,九成是这里。访问 http://服务器IP:7500 能看到面板,服务端就算就绪了。

五、客户端 frpc:把第一个服务穿出去

回到内网那台机器(NAS 或家里常开的电脑),同样下载解压,写 frpc.toml。第一个例子穿 SSH,最简单也最经典:

serverAddr = "你服务器的公网IP"
serverPort = 7000
auth.token = "和服务端一致的token"

[[proxies]]
name = "home-ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6022

./frpc -c frpc.toml 启动,看到 login to server success 就通了。此后在任何能上网的地方 ssh -p 6022 用户名@服务器IP,实际登录的就是家里那台机器。Windows 远程桌面同理,把 localPort 换成 3389、remotePort 换个没被占用的(比如 6389),远程桌面客户端填 服务器IP:6389 即可。

正式使用时别用命令行裸跑:Linux 上照服务端的做法写一个 frpc.service;Windows 上推荐用 WinSW 把 frpc.exe 注册成系统服务,配置里把重启策略设为自动,开机即通、崩溃自拉起。日常运维盯着两个地方就够:服务端 7500 面板看每条隧道的实时连接数和流量,客户端日志看有没有连续的 connect server error——面板里某条代理长时间零流量,多半是内网那头的本地服务先挂了,不是 frp 的问题。

🔧 我整理的软件库

这些年折腾服务器、虚拟化和开发环境,装过的系统镜像、运维工具、开发套件、数据库与中间件,我都归档在自建的文件库里,持续补充新版本。没有弹窗广告,不强制注册,需要什么直接取。

进入软件库 →

常用工具随手可取 · 不定期补档

每个要穿透的服务就是一段 [[proxies]],可以并列写很多个:监控的 RTSP 流、路由器管理页、家里的下载工具,各自起名、各占一个 remotePort。名字重复会导致后一个注册失败,日志里会有明确提示。

六、穿 Web 服务与 HTTPS:给 NAS 一个正经网址

TCP 穿透要记端口号,穿 Web 服务用 http 类型就体面多了。先把域名的一条 A 记录指到服务器公网 IP(做泛解析 *.home.example.com 更省事),然后:

[[proxies]]
name = "nas-web"
type = "http"
localIP = "192.168.1.10"
localPort = 5000
customDomains = ["nas.home.example.com"]

访问 http://nas.home.example.com:8080 就到了 NAS 管理页。要用标准 443 端口和 HTTPS,两种路子:一是在服务器前面挂 Nginx 或 Caddy 做反向代理和证书,8080 只是上游;二是 frp 1.x 之前的方案里直接用 vhostHTTPSPort 配合插件处理。反代方案更主流,证书续期、HTTP 跳转 HTTPS 都归反代管,frp 只管穿隧道,职责清晰。

一个实用细节:localIP 不用写 127.0.0.1,直接写内网目标机器的 IP,就能在一台常开机器上代理整个内网——路由器 192.168.1.1 的管理页、打印机、IoT 设备都能这样穿出去,不用每台机器都装 frpc。

七、STCP 与 XTCP:不想裸奔的进阶玩法

TCP 穿透的 remotePort 是暴露在公网上的,哪怕服务本身有密码,端口暴露总会被扫描器盯上。frp 给了两层进阶方案:

STCP(安全穿透):服务不再占用公网端口,访问者必须在自己的机器上也跑一份 frpc,配置一段 [[visitors]],凭 secretKey 才能在本地生成一条到内网服务的隧道:

# 内网服务端配置
[[proxies]]
name = "ssh-secret"
type = "stcp"
secretKey = "只有你知道的密钥"
localPort = 22

# 访问者机器上配置
[[visitors]]
name = "ssh-visitor"
type = "stcp"
serverAddr = "服务器公网IP"
serverPort = 7000
secretKey = "同一个密钥"
bindAddr = "127.0.0.1"
bindPort = 6022

之后访问者连自己的 127.0.0.1:6022 就等于连家里 SSH,公网上什么都扫不到。远程桌面同理,这是把 RDP 安全暴露出去最省心的办法。XTCP(P2P 打洞)更进一步:两端在网络条件允许时直接打洞点对点通信,流量不过服务器,速度不再受 VPS 带宽限制,看家里 NAS 的高码率电影全靠它。把 type 换成 xtcp 即可,注意打洞成功率取决于两边 NAT 类型,打不洞会自动回落走服务器中继,不会断连。

八、安全加固清单:这几条至少做前三条

frp 服务端暴露在公网上,安全配置不是可选项:

措施做法防什么
强 tokenauth.token 用 32 位以上随机串,不用默认值陌生人蹭你的隧道中转流量
最小放行安全组只放 7000 和确实要用的端口,7500 面板限自己 IP 访问面板被爆破登录
端口跳变remotePort 别用 3389/22 等知名端口,用高位随机口扫描器批量命中
TLS 加密frpc 配 transport.tls.enable = true(新版默认开启)隧道流量被中间人还原
系统加固fail2ban 盯 SSH、及时打系统补丁服务器本身沦陷

再啰嗦一句定位问题的心态:frp 的日志非常诚实,客户端连不上先看 connect server error 还是 proxy not exist,前者查网络和安全组,后者查两端 token 和端口配置是否一致。别一上来就重启,先读日志,九成问题日志里写得明明白白。自己搭完还是不通、或者企业场景下想一次把多条隧道、权限和审计规划好,可以找我聊聊:微信 / 手机 17712677007,把你的网络拓扑和想暴露的服务说清楚,我先帮你判断方案再动手。

九、常见问题速查

问题原因与处理
frpc 连不上服务器先 telnet 服务器 7000 端口:不通查安全组和服务端进程,通了查 token 是否一致
老 ini 配置报错v0.52 起全面改 TOML,键名改成驼峰(bindPort/serverAddr),老教程配置要转格式
穿透能通但速度慢瓶颈通常是 VPS 带宽;大流量场景上 XTCP 打洞或换大带宽机器
HTTP 穿透打不开确认域名解析到服务器、frps 配了 vhostHTTPPort、安全组放行了对应端口
客户端断线不自动重连frpc 本身带重连,配成 systemd/WinSW 服务才能开机自启和崩溃拉起
远程桌面能连但很卡改低桌面分辨率和体验设置,或换 XTCP 打洞绕开服务器带宽瓶颈

十、结语:把内网的主动权拿回来

frp 的门槛比「装个 App 点一下」高那么一点,但它给你的回报是完全的掌控:协议随便穿、速度自己定、数据只过自己的服务器,11 万颗 Star 和十年迭代保证了它不是玩具。如果你已经在用它给 RustDesk 做中继,可以看看之前那篇《RustDesk 内网无公网 IP 怎么搭中继?端口映射、frp 中转与多分支机构组网实战》,两篇正好互补——一篇管远程桌面的中继,一篇管穿透本体的部署。你拿 frp 穿的第一个服务是什么?SSH、NAS 还是家里那台下载机?欢迎评论区聊聊。

✍️ 关于作者

IT 峰哥,互联网技术从业者。日常折腾服务器、虚拟化、数据库与企业级应用,关注开源系统的二次开发与基础设施落地。这里记录的是踩过的坑和验证过跑得通的方案,不是转述文档。

交流:微信 / 手机 17712677007(注明来意,看到会回)

文中方案如有疏漏,欢迎在评论区指正 · 技术问题欢迎交流

默认

Windows 也能装灵动岛?Fly Island 5 MB 小胶囊装下通知、剪贴板与待办

2026-10-31 14:33:33

默认

雷池 SafeLine 怎么部署?一条命令给个人站点装上开源 WAF

2026-10-31 16:48:46

❯
搜索