善忘技术夹 Logo
善忘技术夹
后端与运维 · 150 阅读

frp v0.64.0 更新速览:内网穿透最新教程

一、出差在外,想访问家里 NAS 怎么办?

上周出差,突然想起家里 NAS 上有个文件没拷出来。

家里没有公网 IP,我平时都用 frp 穿透。但那次是新装的电脑,还没来得及配 frp 客户端。我让家人帮忙开机,远程指导他们装 frp、配配置文件,折腾了半小时才连上。

这就是内网穿透的典型场景:你在外面,服务在里面,中间隔着 NAT 和防火墙。

frp 是目前最流行的开源内网穿透方案,GitHub 上 109k Star,最新版本 v0.64.0 刚发布。

二、frp 是什么?

frp 的全称是 Fast Reverse Proxy,一个高性能的反向代理应用,专注于内网穿透。由 Go 语言编写,Apache-2.0 协议,支持 TCP、UDP、HTTP、HTTPS 以及 P2P 通信。

项目地址:https://github.com/fatedier/frp

它的架构分两部分:

  • frps(服务端):部署在有公网 IP 的服务器上,接收转发请求
  • frpc(客户端):部署在内网机器上,主动连接服务端建立隧道

frp 架构图:frps 和 frpc 的通信关系 图:frp 架构示意图,服务端 frps 部署在公网服务器,客户端 frpc 部署在内网(来源:GitHub 官方仓库)

简单说,就是把家里电脑的某个端口,映射到公网服务器的某个端口上。你在外面访问公网 IP,数据通过隧道传到家里的电脑。

三、v0.64.0 更新了什么?

v0.64.0 于 8 月 10 日发布,主要变化:

新特性:tokenSource 支持从文件加载 token

以前 token 只能写在配置文件里,或者通过环境变量设置。现在多了一个选择:从文件读取 token。这个改动对安全配置更友好——你可以把 token 单独存放在一个只有特定权限的文件中,配置文件和 token 文件分开管理,不需要把敏感信息写死在配置里。

Bug 修复:SSH 隧道网关绑定地址问题

修复了一个 SSH 隧道网关的 bug:之前 SSH 隧道错误地绑定到了 proxyBindAddr 而不是 bindAddr,导致当 proxyBindAddr 设为 127.0.0.1 时外部连接失败。现在修正为绑定到正确的 bindAddr

这次更新不算大,但 tokenSource 的加入对自动化部署和安全管理有实际价值。

四、快速上手指南

下面是一份适合最新版 v0.64.0 的配置实战,从下载到验证,跑通一个 SSH 穿透场景。

准备条件

服务端配置(frps)

在公网服务器上下载并解压 frp 压缩包,编辑 frps.toml

bindPort = 7000            # frp 通信端口
webServer.addr = "0.0.0.0"
webServer.port = 7500      # 管理面板端口
auth.token = "your-token"  # 认证密钥,客户端需要一致

然后启动:

./frps -c frps.toml

客户端配置(frpc)

在内网机器上下载对应系统的 frp 压缩包,编辑 frpc.toml

serverAddr = "你的公网服务器IP"
serverPort = 7000
auth.token = "your-token"

[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000

启动客户端:

./frpc -c frpc.toml

验证

从任意一台联网的电脑上,SSH 到公网服务器的 6000 端口:

ssh -oPort=6000 user@你的公网服务器IP

如果配置正确,连接会穿透到内网机器的 22 端口,相当于你直接 SSH 到了家里那台电脑。

注意:配置格式改成 TOML 了

从 v0.52.0 开始,frp 不再支持 INI 格式的配置文件,改用 TOML。如果你在网上找到的教程还是 INI 格式的 [common] 语法,那是旧版,直接复制到新版会报错。

五、进阶场景

HTTP 穿透

想把内网的本机开发服务器暴露到公网?服务端配置不变,客户端配置改成:

[[proxies]]
name = "web"
type = "http"
localPort = 8080
customDomains = ["你的域名"]

需要把域名解析到公网服务器 IP,然后在服务端加上:

vhostHTTPPort = 80

端口复用

frp 的默认端口 7000 和 HTTP 端口 80 可以复用同一个端口。配置 vhostHTTPPort = 80 后,HTTP 请求和 frp 通信共用 80 端口,省一个端口。

P2P 模式

如果两台机器之间的带宽需求大,不想经过服务器中转,可以用 P2P 模式(xtcp):

[[proxies]]
name = "p2p-ssh"
type = "xtcp"
localIP = "127.0.0.1"
localPort = 22

P2P 模式下,流量不经过服务器,但需要额外的 NAT 穿透支持,不是所有网络环境都能成功。

管理面板

服务端启动后,浏览器打开 http://公网服务器IP:7500,可以看到 frp 的运行状态、当前连接数、流量统计等信息。默认没有密码,建议配置 webServer.userwebServer.password

六、常见问题与安全建议

常见问题

连接不上? 检查防火墙:服务端的 7000 端口需要在安全组/防火墙中放行。可以用 telnet 测试端口是否可达。

客户端状态显示 online 但连不上? 检查 serverAddrserverPort 是否配置正确,token 是否一致。

日志报错? 客户端和服务端都有详细的日志输出,启动时加 --log-file 参数可以输出到文件,方便排查。

安全建议

一定要配置 token。 默认情况下 frp 没有认证,任何人都可以连你的服务端。v0.52.0 之后 token 是必填项。

配置 TLS 加密。 如果隧道经过公网传输,建议配置 TLS 加密,防止数据被中间人窃听。在服务端和客户端配置 transport.tls 相关字段。

限制 Dashboard 访问。 管理面板不要暴露在公网上,或者配置强密码。建议把 webServer.addr 设为 127.0.0.1,通过 SSH 隧道访问。

只暴露需要的端口。 不要把所有内网端口都映射出去。按需配置,用完关闭。

v0.64.0 的 tokenSource 新特性可以用起来。 把 token 单独存放在一个权限受限的文件中,避免敏感信息泄露。

七、写在最后

frp 解决的是”没有公网 IP 怎么访问内网服务”这个经典问题。109k Star、持续维护、多协议支持,让它成为内网穿透领域的首选工具。

v0.64.0 的更新不算大,但 tokenSource 的加入让安全配置更灵活,SSH 隧道 bug 的修复也解决了部分用户的痛点。如果你已经在用 frp,升级很简单;如果还没用过,这次更新是个不错的契机——从 SSH 穿透开始,五分钟就能跑通第一个隧道。


项目信息

  • 项目名称:frp(Fast Reverse Proxy)
  • GitHub:https://github.com/fatedier/frp
  • 协议:Apache-2.0
  • 当前 Star:109k+
  • 技术栈:Go
  • 版本:v0.64.0(2025 年 8 月 10 日发布)
  • 配置格式:TOML(v0.52.0 起废弃 INI)
  • 文档:https://gofrp.org

互动时间:你用过内网穿透吗?frp、ngrok、nps 还是其他?评论区聊聊你的方案和踩过的坑。

关注「善忘技术夹」全媒体矩阵

扫描上方宣传海报二维码,第一时间获取最新技术文章、开源项目与免安装小程序体验。

善忘技术夹 微信公众号宣传图
微信公众号 (扫码关注)
善忘技术夹 微信小程序宣传图
微信小程序 (扫码即用)