Skip to content

🔗 技术架构札记:frp——内网穿透的“瑞士军刀”

作者:王硕 - Shuo Wang

引用:docs 链接 github 链接

💡 引言:为什么我们需要 frp?

对于我们网络工程师和开发者而言,日常工作中经常会遇到一个头疼的问题:如何从外部网络(公网)访问到处于 NAT(网络地址转换)或防火墙保护下的内部服务(内网)?

无论是远程访问家里的设备、调试本地 Webhook,还是在异地办公时连接公司的开发机,传统的端口映射和 VPN 方案往往配置复杂、受限较多。

frp (Fast Reverse Proxy) 正是为了解决这个痛点而生的“瑞士军刀”。它通过简单的配置,利用反向代理的原理,帮助我们优雅地实现内网穿透

⚙️ frp 的核心原理:反向代理的艺术

frp 的工作机制基于一个经典的网络架构:客户端-服务器(C/S)模式

它由两个核心组件构成:

  1. frps (frp Server):部署在拥有公网 IP 的服务器上。
  2. frpc (frp Client):部署在内网中需要被访问的机器上。

工作流程:

  1. 连接建立: frpc(内网客户端)主动与 frps(公网服务器)建立一个持久的连接
  2. 服务注册: frpc 将它需要代理的本地服务信息注册给 frps。
  3. 流量转发: 当外部用户访问 frps 上的特定端口时,frps 会识别到这个请求,并通过其与 frpc 建立的持久连接,将外部请求安全地转发给内网的 frpc。
  4. 最终访问: frpc 接收到请求后,再将其转发给本地的实际服务

通过这种方式,内网服务就如同直接暴露在公网服务器上一样,实现了逻辑上的端口映射

💻 实践应用:配置 frp 快速穿透

frp 的配置核心在于区分 frps.ini(服务端)和 frpc.ini(客户端)。

1. frps 服务端配置 (公网服务器)

ini
# frps.ini
[common]
# frp 服务端用来和客户端通信的端口,必须开放
bind_port = 7000
# 可选:HTTP 服务的 VHost 端口
vhost_http_port = 80
# 可选:frp 管理面板端口
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = your_password

2. frpc 客户端配置 (内网机器)

客户端配置需要指定服务器地址,并定义需要穿透的具体服务:

# frpc.ini
[common]
# frps 所在公网服务器的 IP 地址
server_addr = x.x.x.x
# frps 的 bind_port 端口
server_port = 7000

# 示例服务 1:SSH 远程访问
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22 # 内网机器的 SSH 端口
remote_port = 6000 # 公网服务器上用于访问 SSH 的端口

# 示例服务 2:本地 Web 服务(如您的开发调试服务)
[web_service]
type = http
local_port = 8080 # 内网的 Web 服务端口
# 子域名配置:访问 http://dev.您的域名 就能访问到内网 8080 端口
subdomain = dev

3. 结果验证

当配置完成后,外部用户就可以通过以下方式访问到您的内网服务:

  • 访问 SSH: ssh user@x.x.x.x -p 6000

  • 访问 Web: http://dev.您的域名:vhost_http_port (需配置 CNAME/A 记录到 frps 服务器 IP)

🛡️ 架构师的思考:frp 的优缺点

作为一名架构师,我们需要理性看待 frp 的能力边界:

✅ 优势

  • 配置简洁: 相比于复杂 VPN 或端口转发,frp 配置简单直观。

  • 多协议支持: 支持 TCP、UDP、HTTP、HTTPS 等多种协议。

  • 安全性增强: 所有流量都经过 frps 转发,且 frps 和 frpc 之间可以通过 Token 进行身份验证。

  • 性能优秀: frp 使用 Go 语言开发,性能损耗小。

❌ 局限性

  • 依赖公网服务器: 必须拥有一台拥有公网 IP 的服务器作为中心跳板。

  • 单点故障: 公网服务器(frps)一旦宕机,所有穿透服务都将中断。

  • 带宽消耗: 所有内网和公网之间的流量都将占用 frps 服务器的带宽。

结语:效率与便捷的平衡

frp 是一款优秀的工具,它以极高的效率解决了工程师日常开发和调试中的内网访问难题。它体现了反向代理在复杂网络环境中的巨大价值。

掌握 frp,就如同在您的技术工具箱中增加了一把“万能钥匙”,让您的架构实践和远程工作更加便捷高效!