跳到正文

游民营地

主题: 科技生活

FRP内网穿透小白教程,手把手教你搞定局域网穿透

按公网 frps、内网 frpc、LEDE 客户端与管理界面串起 FRP v0.34.3 的配置过程,分清 HTTP 域名分流和 TCP 端口转发,并说明新版格式、鉴权与公网暴露边界。

作者 一只游民Developer and YouTuber

发布于 更新于 约 2 分钟读完

办公室服务迁移后,内网服务需要重新配置远程访问。我使用 FRP,让内网客户端主动连接公网服务端,再把外部请求转回指定服务。这篇先跑 Web 示例,再看软路由客户端、TCP 映射和两种管理界面。

版本边界:这是 2020 年 FRP v0.34.3 的 INI 配置记录,新部署应使用官方当前版本与配置说明。下面示例用于理解旧环境,不能逐字贴进新版 TOML。网络能穿透,不等于服务可以无鉴权公开。

1. FRP 简介:服务端在公网,客户端在内网

外部访问者 → 公网主机 frps → 已建立的连接 → 内网 frpc → 目标服务
准备项用途
可达的公网主机运行 frps,接收客户端与外部请求
内网主机或路由设备运行 frpc,连接需要访问的服务
相容的 FRP 版本与平台包两端分别选择对应系统、架构
域名与 DNS 记录HTTP 虚拟主机示例按域名匹配
防火墙与服务认证仅开放需要的范围,保护实际服务

frps 是服务端,frpc 是客户端;这两个二进制与各自配置文件别混用。HTTP 可以共享服务端端口、按域名区分请求,TCP 映射则通常为目标指定独立远端端口。

2. 服务端:下载、配置、启动

从 官方 Releases选择平台包并核对版本、架构与文件。旧环境使用 Linux amd64 包,解压后编辑 frps.ini。

[common]
bind_port = 7000
vhost_http_port = 54321
vhost_https_port = 54322
token = REPLACE_WITH_A_RANDOM_SHARED_SECRET

这里的数字是可调整的示例端口,不是只能使用的固定值;鉴权值必须自行生成,两端一致,不使用短数字演示口令。

参数用途
bind_port客户端连接服务端的通信端口
vhost_http_portHTTP 虚拟主机入口
vhost_https_portHTTPS 虚拟主机入口,不自动为应用签发证书
token此旧版本中的共享鉴权值

先前台启动,看到日志再判断配置是否有效:

./frps -c ./frps.ini

前台可用 Ctrl + C 停止。旧环境也使用过 nohup:

nohup ./frps -c ./frps.ini > frps.log 2>&1 &

它将进程放到后台并处理挂断信号,不提供完整的重启、健康检查或日志管理;长期运行应使用系统服务管理。停进程时先确认 PID,优先正常终止,不把强制 kill -9 当默认步骤。

3. 客户端:先映射 Web 服务,再从外部验证

Windows、Linux 和 Mac 的旧版配置

下载对应客户端包,修改 frpc.ini。下面是独立的占位示例,域名与鉴权均需替换:

[common]
server_addr = frp.example.com
server_port = 7000
token = REPLACE_WITH_A_RANDOM_SHARED_SECRET

[web-demo]
type = http
local_ip = 127.0.0.1
local_port = 80
custom_domains = demo.example.com

local_ip 是从 frpc 所在机器看目标服务的地址。服务在本机才用 127.0.0.1;服务在另一台局域网设备上就填其内网地址,先确认客户端本身能访问它。

HTTP 示例不靠客户端的 remote_port 区分站点,而由服务端 vhost_http_port 接收,按 custom_domains 匹配。先将该域名解析到公网服务端,再在客户端目录启动:

# Linux / Mac 的旧版客户端
./frpc -c ./frpc.ini
# Windows 的旧版客户端
.\frpc.exe -c .\frpc.ini

日志连接成功后,先确认本地 Web 服务可用,再从另一台设备或网络访问对应域名与入口端口。停止客户端后再验证服务不可达,有助于确认确实经过这条链路。不要只看浏览器缓存里的旧页面。

LEDE 客户端:界面对应同一套参数

我使用的旧 LEDE 插件把配置分成基本配置和穿透配置。先启用 FRPC,填公网服务器地址、连接端口和鉴权;HTTP 项再填目标 LAN 地址、目标端口与域名。

插件的 TCP 多路复用设置需与服务端版本及配置一致,不能单纯说某个开关必须永远为 true。修改后看日志和实际请求,固件、插件来源和维护状态也要核对。

在路由设备上运行客户端,可以连接其可达的其他 LAN 服务,不必每台目标机器都装 frpc;但路由器上的 127.0.0.1 指路由器自己,不是桌面电脑。配置生成后可核对实际文件,避免界面与运行配置不同步。

4. TCP 映射:本地端口与远端端口分开

旧版 TCP 配置的关键字段如下:

[service-demo]
type = tcp
local_ip = 127.0.0.1
local_port = 3306
remote_port = 54329

这里用数据库端口说明映射关系,不建议把数据库裸露给互联网。客户端连接本地服务,外部访问服务端的 54329;不是把外部客户端仍填成 3306。实际访问控制、强鉴权、加密和防火墙允许范围要在开放前准备好。

尽量采用受限通道访问管理和数据库服务。验证既要试允许的连接,也要确认未授权请求被拒绝;测试结束撤销不需要的映射与防火墙规则。

5. Dashboard 与 AdminUI:管理入口别一起公开

界面配置位置用途
Dashboardfrps 服务端查看服务端状态、代理与流量
AdminUIfrpc 客户端查看或管理客户端配置

旧版 Dashboard 使用 dashboard_port、dashboard_user、dashboard_pwd 等字段;客户端使用 admin_addr、admin_port 与对应凭证。客户端示例将 admin_addr 设为 127.0.0.1,只在本机访问。

管理界面不是业务服务,不能为了省事把同一批端口都开放。公网侧限制管理来源,使用独立强凭证;不要沿用示例 admin/admin 或把真实配置贴进文章。新版字段和 Web 管理方式以当前文档为准。

从连通到可维护,还要再走一步

主线就是服务端入口、客户端目标、域名或端口匹配,再加实际服务自己的安全措施。连接成功、外部可访问、未授权被拒绝、停用后入口收回,分别检查才算完整。

欢迎分享你的平台、版本与脱敏日志,别只贴“连接不上”。感谢阅读,希望这份旧版记录能帮你理解原理;今天新部署还是从官方当前配置开始,不为复刻教程继续使用旧二进制和旧口令。

评论

评论由 GitHub Discussions 提供。发表评论、回复或添加反应需要使用 GitHub 登录。

正在加载评论服务…

暂时没有相互链接的笔记;先读同主题文章,再看看最近更新的内容。

更多好文