雷池+frp 批量设置proxy_protocol实现真实IP透传

在使用雷池(LaiChi)和 FRP(Fast Reverse Proxy)进行代理时,如果需要实现真实 IP 的透传,可以通过启用 proxy_protocol 来完成。proxy_protocol 允许代理服务器在与后端服务通信时,将客户端的原始 IP 地址传递给后端。下面是实现这一功能的详细步骤。

1. 什么是 Proxy Protocol?

Proxy Protocol 是由 HAProxy 引入的一种协议,用于在代理与后端服务器之间传递客户端的真实 IP 地址。它会在 TCP 连接的起始部分插入一个包含原始客户端 IP 和端口的报头。后端服务器读取这个报头,就能获取到客户端的真实 IP,而不是代理服务器的 IP。

2. FRP 支持 Proxy Protocol

FRP 支持通过 proxy_protocol 选项启用 Proxy Protocol,这样 FRP 就能将客户端的原始 IP 地址传递给后端服务器。

FRP 的配置主要分为两部分:

  • frps(FRP 服务端)配置
  • frpc(FRP 客户端)配置

3. 雷池和 FRP 配置 Proxy Protocol

3.1 FRP 服务端配置(frps.ini)

在 FRP 服务端配置中,启用 proxy_protocol_version 参数,指定代理协议版本为 v1v2,这是 Proxy Protocol 的版本。

frps.ini 示例:

[common]
bind_port = 7000

# 开启 proxy_protocol
proxy_protocol_version = v1

如果你有多个服务监听不同的端口,你也可以为不同的服务单独启用 Proxy Protocol。

例如:

[common]
bind_port = 7000

# 针对 http 和 tcp 服务分别设置 proxy_protocol
[http]
bind_port = 8080
proxy_protocol_version = v1

[tcp]
bind_port = 9000
proxy_protocol_version = v2
3.2 FRP 客户端配置(frpc.ini)

客户端不需要做特别的 Proxy Protocol 配置,只需正常配置即可,像下面这样:

frpc.ini 示例:

[common]
server_addr = x.x.x.x
server_port = 7000

[web]
type = http
local_port = 80
remote_port = 8080

[ssh]
type = tcp
local_port = 22
remote_port = 9000

这里 local_port 指向的是你客户端的本地服务,remote_port 是在 FRP 服务端暴露的端口。

3.3 雷池 (LaiChi) 的配置

雷池是一个高性能的 L4 代理(Layer 4 Proxy),用于传输 TCP/UDP 流量。要在雷池中启用 Proxy Protocol,需要在对应的监听配置中启用 proxy_protocol

你可以在雷池的 lai.conf 中添加如下配置:

server {
    listen 8080;
    proxy_protocol on;

    # 指定后端服务地址
    proxy_pass 127.0.0.1:8081;
}

其中:

  • listen 8080; 表示监听 8080 端口。
  • proxy_protocol on; 启用 Proxy Protocol 功能,允许将真实 IP 透传到后端。
  • proxy_pass 127.0.0.1:8081; 表示将流量转发给本地的 8081 端口。

4. 后端服务配置

要正确处理 Proxy Protocol,后端服务也需要能够识别和处理该协议。许多常见的服务(例如 NGINX、HAProxy)都支持 Proxy Protocol。

4.1 NGINX 后端配置

如果后端服务是 NGINX,则需要启用 Proxy Protocol:

server {
    listen 8081 proxy_protocol;

    location / {
        proxy_pass http://localhost:8080;
        real_ip_header proxy_protocol;
        set_real_ip_from 0.0.0.0/0;
    }
}
  • listen 8081 proxy_protocol; 启用 Proxy Protocol 监听。
  • real_ip_header proxy_protocol; 指定使用 Proxy Protocol 中的真实客户端 IP。

5. 批量配置

如果你有多个服务需要开启 Proxy Protocol,可以通过配置模板或者脚本化的方式批量修改 frps.ini 和雷池的 lai.conf,从而实现批量处理。

批量配置示例(简单 Shell 脚本):

你可以编写一个简单的脚本来自动为多个服务添加 Proxy Protocol 支持。

#!/bin/bash

services=("http" "tcp" "udp")
ports=("8080" "9000" "10000")

# 生成 frps.ini 配置
for i in "${!services[@]}"; do
  echo "[${services[$i]}]" >> frps.ini
  echo "bind_port = ${ports[$i]}" >> frps.ini
  echo "proxy_protocol_version = v1" >> frps.ini
done

# 生成 lai.conf 配置
for i in "${!ports[@]}"; do
  echo "server {" >> lai.conf
  echo "    listen ${ports[$i]};" >> lai.conf
  echo "    proxy_protocol on;" >> lai.conf
  echo "    proxy_pass 127.0.0.1:${ports[$i]};" >> lai.conf
  echo "}" >> lai.conf
done

这个脚本会根据你定义的 servicesports 列表,批量生成对应的 FRP 和雷池的配置。

6. 验证 Proxy Protocol 是否生效

你可以通过后端服务的日志来验证真实 IP 是否透传。比如,在 NGINX 日志中,可以查看客户端 IP 是否已经由 Proxy Protocol 透传成功。

检查客户端 IP
tail -f /var/log/nginx/access.log

你应该能看到真实的客户端 IP 地址,而不是代理服务器的 IP。

总结

通过在雷池和 FRP 中启用 proxy_protocol,可以实现客户端真实 IP 的透传。配置包括以下几个关键步骤:

  1. 在 FRP 服务端配置中启用 proxy_protocol_version
  2. 在雷池(LaiChi)中启用 proxy_protocol
  3. 确保后端服务(例如 NGINX)支持并处理 Proxy Protocol。
  4. 如果有多个服务,可以通过脚本批量生成配置文件。

这些步骤可以帮助你在使用代理的场景中保留客户端的真实 IP 信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

先天无极编程圣体

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值