进阶配置

配置PROXY protocol

如何通过 PROXY protocol 获取访客真实 IP
本文为进阶教程并面向专业用户,可能不适合大多数用户。

1. 为什么拿不到真实 IP

数据经过 FRP 转发后,您的本地服务看到的来源地址是运行 frpc 的那台机器(通常是 127.0.0.1),而不是访客。

通常所有依赖来源 IP 的功能都会失效,例如 IP Ban 和 fail2ban。

让本地服务重新拿到访客 IP 有两种做法:

方案适用隧道需要做什么
X-Forwarded-For仅 HTTP面板无需配置,本地服务读取请求头,见 Apache 与 NGINX 配置
PROXY protocolTCP、UDP、HTTP(S)隧道与本地服务同时开启,见第 2 节

您部署的服务不一定支持PROXY protocol,请在配置前先查阅您的服务是否支持PROXY protocol,如果不支持,则需要其他方法。

2. 在面板启用 PROXY protocol

2.1 打开隧道详情

从左侧隧道-隧道管理进入,点开需要配置的隧道。

2.2 编辑配置

在配置信息卡片中点击编辑。

2.3 选择版本

在高级配置中找到PROXY protocol,按本地服务支持的版本选择v1或v2。

版本说明
v1文本协议,兼容性最好
v2二进制协议,开销更小;UDP 隧道只能用它
本地服务两个版本都支持时,选v2。

选中后会提示风险,确认本地服务已经支持后再确认保存。

保存后重新启动隧道,frpc 会在启动时拉取新配置。

3. 本地服务必须同时开启

只在面板开启、本地服务没开,隧道会完全不可用,反之亦然,只有同时打开或同时都不打开,才能正常连接。

开启后,本地服务的端口通常只接受带 PROXY protocol 头的连接。请确保已经被防火墙拒绝了来自外部的Header,否则可能被伪造真实IP造成安全风险。

您在本地或内网直接访问该端口(浏览器访问、客户端连 127.0.0.1:端口)都会失败,这是正常现象,因为本地的访问(如浏览器)不会添加 PROXY protocol 的头部。

4. 常见服务配置

通常支持PROXY protocol的,我们都会直接写在对应的服务配置指南内。

如果文档没有的,可以自行搜索关键字 PROXY protocol + 您的服务名称。

5. 常见问题

5.1 开启后完全连不上

按顺序排查:

  1. 本地服务是否也开启了 PROXY protocol
  2. 版本是否与本地服务一致,UDP 隧道是否误选了 v1
  3. 保存后是否重启了隧道
  4. 本地服务是否真的在监听隧道配置的本地端口

5.2 一部分人能连、一部分人连不上

服务端强制握手时,只有走隧道的连接带 PROXY protocol 头。如果有玩家或客户端走了直连(例如同局域网访问、或另有一条未开启 PROXY protocol 的隧道),就会被判为非法连接。

5.3 我想在本地调试

临时把服务和frpc的 PROXY protocol 改回 关闭 并重启隧道;

如果是生产环境或者无法重新配置,可以在本地起一个frps和frpc,frpc指向本地的服务,然后打开PROXY protocol并连接本地的frps暴露的端口。