源码湾

frp 内网穿透工具 v0.71.1:单文件 20MB,自建隧道不租中转

源码湾
2小时前发布
资源信息 Windows / Linux 双平台,解压即用。
版本
v0.71.1
授权
Apache-2.0
体积
26.9 MB
语言
Go
数据库
无
夸克网盘 无提取码 下载

今日下载 0 累计下载 0 还剩 10 个

家里放着 NAS、老电脑上跑着开发环境、公司内网有个后台系统——这些服务本地用着都挺顺,一旦出门在外想访问,就卡在同一件事上:没有公网 IP。运营商现在默认 NAT,家宽绝大多数拿不到公网 IPv4,端口映射更是无从谈起。

市面上的内网穿透服务基本都能用,但套路差不多:免费额度限速几十 KB、流量按月计费、域名和端口由平台分配、断线要重连。你要传个大文件,或者想让服务长期在线,钱是省不下来的。

frp 走的是相反的路:自己有台带公网 IP 的服务器,就能把穿透能力整个搬到手上。它只有一个可执行文件,服务端 19.9MB、客户端 16.3MB,Apache-2.0 协议,2016 年开到现在,GitHub 上 11 万个 Star。服务端启动到监听端口 0.42 秒,客户端打出隧道 0.33 秒,这一整套跑在 1 核 1G 的机器上都绰绰有余。

我把 Windows 和 Linux 两个平台都跑了一遍,从服务端启动、仪表盘登录、客户端建隧道,到通过域名真的访问到内网页面,全链路走通,两边行为一致。结论先给:它适合愿意自己管一台服务器的人,不适合连命令行都不想碰的人——差在哪,后面写清楚了。

frp 是什么,和 ngrok 差在哪

一句话:它把你内网的某个端口,映射到公网服务器的某个端口上。

整套东西只有两个角色。frps 跑在有公网 IP 的服务器上,负责接客;frpc 跑在内网机器上,负责把流量往本地服务上导。两边靠一条长连接维持,默认走 7000 端口。

和 ngrok、花生壳这类服务相比,差别在三个地方:

  • 谁出服务器:SaaS 方案用他们的节点,frp 用你自己的 VPS。一台 2 核 2G 的海外小机器,一年成本比按流量付费低得多。
  • 谁定规则:域名、端口、带宽、限速全在你自己手里。想开几个映射开几个,不用担心「免费版只给 2 条隧道」。
  • 数据经过谁:流量只经过你自己的服务器,不经过第三方节点。对备份、数据库这类敏感服务来说,这点比省钱重要。

代价也很明确:服务器要自己维护。证书、防火墙、开机自启、监控,都得自己弄。frp 只负责穿透这一段,不负责帮你运维。

我的测试环境

两边都是干净环境,没有预装任何运行时:

  • Windows:Windows 11,解压到本地目录,用命令行启动,没有装服务、没有写注册表
  • Linux:CentOS Stream 9,x86_64,香港节点,走宝塔面板的 Web 终端操作
  • 服务端:两边都跑同一份配置,监听 7000(连接)、8080(HTTP 映射)、7500(仪表盘)
  • 验证方式:内网起一个静态页,用 frpc 建一条 HTTP 代理,再从公网端口按域名访问,看能不能拿到内容

两个平台的安装包都核对过官方 frp_sha256_checksums.txt,哈希完全一致;Linux 那份在本地和服务器上分别下载,sha256 也逐字节相同。

安装:Windows 只要解压

下载 frp_0.71.1_windows_amd64.zip,13.5MB,解压出来是四个文件:frps.exe、frpc.exe、frps.toml、frpc.toml,外加 LICENSE。

没有安装程序,没有下一步下一步,也没有需要勾选的选项。想在任何目录都能敲,把解压出来的目录加进 PATH;懒得配就直接在当前目录跑。

验证:

frps --version
frpc --version

两条都应该输出 0.71.1,实测各 0.15 秒和 0.10 秒,基本就是进程启动的时间。

安装:Linux 也一样

tar xzf frp_0.71.1_linux_amd64.tar.gz
cd frp_0.71.1_linux_amd64
chmod +x frps frpc

官方 tar.gz 里的两个二进制已经带执行位,chmod 是保险起见。想在任意目录用,把 frps 复制到 /usr/local/bin/ 就行。

有个细节值得提:Linux 版和 Windows 版不是同一个文件。Windows 的 frps.exe 是 19.9MB,Linux 的 frps 是 19.7MB,因为目标平台不同、链接的库不同。别想着拿 exe 去 WSL 里跑。

上手:三步建一条隧道

第一步,写服务端配置 frps.toml

bindPort = 7000
vhostHTTPPort = 8080
auth.method = "token"
auth.token = "换成你自己的口令"

bindPort 是 frpc 连过来的端口,vhostHTTPPort 是给 HTTP 类型代理用的对外端口。两个都要在服务器防火墙里放行,这一步漏了会表现为「客户端显示在线,但公网访问不通」。

第二步,启动服务端

./frps -c frps.toml

看到三行日志就算起来了:监听 7000、监听 8080、frps started successfully。实测从执行到端口可连 0.42 秒(Windows)/ 122 毫秒(Linux)。

第三步,写客户端配置 frpc.toml

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

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

localPort 是内网被代理的端口。启动后访问 http://你的域名:8080 就能到内网的 9000 端口。实测隧道建立 0.33 秒,随后请求返回 200。

实测数据

同一套配置,两边分别跑,数字都是这次真实测出来的:

  • 服务端启动:Windows 0.42 秒到端口可连;Linux 122 毫秒
  • 客户端建隧道:Windows 0.33 秒;Linux 82 毫秒
  • 隧道生效:经 8080 端口按域名请求,两边都是 HTTP 200,返回内容与内网页面一致
  • 仪表盘响应:接口带认证 200,耗时 0.0008 秒;不带认证返回 401
  • 主程序体积:Windows 19.9MB + 16.3MB;Linux 19.7MB + 16.1MB
  • 整合包体积:26.92MB(双平台主程序 + 示例配置 + 说明)
  • 跨平台一致性:同一份 Linux 安装包在本地和服务器上下载,sha256 相同;两边行为、日志格式、配置语义一致

解压即用也验证了一遍:把整合包解到一个全新目录,直接用包里自带的示例配置起服务端和客户端,解压耗时 0.33 秒,服务端 0.64 秒可连,隧道 0.45 秒打通并返回 200。

界面长什么样

frp 本身是命令行工具,但它带一个 Web 仪表盘,挂起来之后日常基本不用再盯终端。

仪表盘总览 - frp 内网穿透工具 v0.71.1:单文件 20MB,自建隧道不租中转

概览页能看到在线客户端数、活跃代理数、今日流量。上面这张是真实跑起来的状态:1 个客户端、1 个代理、6.08 KB 流量,版本号 v0.71.1 也对得上。

代理列表 - frp 内网穿透工具 v0.71.1:单文件 20MB,自建隧道不租中转

代理列表按类型分组,TCP / UDP / HTTP / HTTPS 分开看。每条显示端口、连接数、所属客户端和在线状态,上下行流量实时刷新。

客户端在线 - frp 内网穿透工具 v0.71.1:单文件 20MB,自建隧道不租中转

客户端页能看到机器名、版本、协议版本、来源 IP 和最后心跳时间。机器名那栏显示的是客户端的真实主机名,排查「到底哪台机器连上来了」时很直观。

隧道生效页 - frp 内网穿透工具 v0.71.1:单文件 20MB,自建隧道不租中转

这张是从公网端口按域名访问到的内网页面。页面原本只存在于 127.0.0.1:9000,全程没做过端口映射,纯粹是 frp 把请求转进去的。

手机端 - frp 内网穿透工具 v0.71.1:单文件 20MB,自建隧道不租中转

仪表盘是响应式的,手机浏览器打开也能正常用,卡片会自动变单列。出门在外用手机看一眼在线状态很方便。

一个真实的坑:老配置还能跑,但已经在倒计时

网上大量 frp 教程用的还是 frps.ini,[common] 加 bind_port = 7000 那种写法。按常规理解,0.52 之后改成 TOML,老的应该直接报错——实际不会。

我拿老格式的 ini 文件直接启动 0.71.1,它照常跑起来了,监听端口、日志全都正常,只在最前面多打了一行:

WARNING: ini format is deprecated and the support will be removed
in the future, please use yaml/json/toml format instead!

这个坑的危险之处在于它不报错。你照着五年前的教程配好,服务正常、隧道也通,就会一直用下去;等到某次升级真的把 ini 支持拿掉,服务会在重启时直接起不来,而那时候你可能已经忘了配置是从哪抄的。

所以新装的话,一开始就用 TOML;已经在用 ini 的,趁服务还没停赶紧迁——两者字段一一对应,bind_port 就是 bindPort,vhost_http_port 就是 vhostHTTPPort,[common] 段在 TOML 里不用写,直接摊平到顶层。

另外一个不算坑但容易困惑的点:仪表盘概览页的统计数字,如果在同一个标签页里先点进代理列表再退回来,会停留在旧值(我这次就遇到过客户端显示 1、代理显示 0)。重新载入一次页面就是对的,不是数据出问题。

上线:让它常驻

命令行跑着关掉窗口就断,正式用要挂成服务。

Linux 用 systemd,新建 /etc/systemd/system/frps.service,ExecStart 指向 frps -c /路径/frps.toml,然后 systemctl enable --now frps。挂了会自动拉起。

Windows 用 nssm 或任务计划程序,把 frps.exe -c frps.toml 注册成开机启动。注意「起始于」要填配置文件所在目录,否则找不到配置。

还有两件收尾的事:

  • 仪表盘别直接暴露公网。webServer.addr 写成 127.0.0.1,需要看的时候用 SSH 隧道转一下,或者给它设强口令。
  • HTTPS 建议交给外面的 Nginx。frp 自己也能配 vhostHTTPSPort 和证书,但用 Nginx 反代更灵活,证书续期也省事。

这几类人适合,这几类不适合

适合:

  • 有台闲置 VPS、想把手里的服务开放给自己用的人
  • 家里 NAS、路由器后台、自建 Git 需要外网访问,但运营商不给公网 IP 的人
  • 要给客户演示内网系统,又不想为了演示专门买中转服务的人
  • 想控住流量走向、不想数据经第三方节点的人

不适合:

  • 不想碰命令行、也不想管服务器的人。frp 没有图形化安装器,配置就是改文件
  • 只想临时穿一次、用完就扔的人。SaaS 服务点两下更方便,frp 得先有服务器
  • 完全不懂防火墙和端口的人。穿透通了但端口没放行,会卡在「客户端在线、页面打不开」
  • 需要开箱即用的监控告警的人。仪表盘只给基础统计,没有告警

常见问题

源码获取

建议先转存到自己网盘再下载。手机上打开链接点右下角「保存到网盘」,回头在夸克 App 的「我的网盘」里下载。

实测说明

本文截图全部来自本站实测环境(源码湾 yuanmawan.com),实测版本 frp v0.71.1,许可证 Apache-2.0。

© 版权声明
THE END
喜欢就支持一下吧
点赞 0 分享 收藏
评论 抢沙发
OωO
取消