如何使用 frp 与 Proxy Protocol 传递真实 IP 地址

技术文章1年前 (2024)发布 gyx131
110 0 0

如何使用 frp 与 Proxy Protocol 传递真实 IP 地址

在使用 frp 进行内网穿透时,为了获取客户端的真实 IP 地址,你可以借助 Proxy Protocol 协议。以下是一个简易教程,指导你如何在 frp 配置中启用 Proxy Protocol,并与支持该协议的本地服务(如 Nginx)集成,确保真实 IP 能够正确传递。

准备工作:

  • 确保你的 frp 客户端(frpc)和服务器端(frps)已正确安装并配置。
  • 确认本地服务(如 Nginx)支持并配置了 Proxy Protocol。

步骤 1:修改 frpc 配置文件

打开 frpc 的配置文件(通常是 frpc.inifrpc.toml),找到或添加你需要配置的代理段落。这里以 HTTPS 代理为例:

#toml
[[proxies]]
name = "web"
type = "https"
localPort = 443
customDomains = ["test.yourdomain.com"]

# 添加此行以启用 Proxy Protocol v2 版本
transport.proxyProtocolVersion = "v2"

步骤 2:配置本地服务支持 Proxy Protocol

以 Nginx 为例,你需要在 Nginx 的配置文件中(通常是 /etc/nginx/nginx.conf/etc/nginx/sites-available/default)相应 server 区块内,添加对 Proxy Protocol 的支持:

#nginx
server {
    listen 443 ssl proxy_protocol;
    ssl_certificate /path/to/your/cert.pem;
    ssl_certificate_key /path/to/your/key.pem;

    # 解析 Proxy Protocol 并将真实 IP 设置到 X-Real-IP 头
    set_real_ip_from 127.0.0.1; # 这里应为 frpc 连接 Nginx 的 IP
    real_ip_header proxy_protocol;

    location / {
        # 此处省略其他配置,如 proxy_pass 等
    }
}

步骤 3:重启服务

保存更改后,记得重启 frpc 和 Nginx 服务,使配置生效:

#bash
# 重启 frpc
sudo systemctl restart frpc.service

# 重启 Nginx
sudo systemctl restart nginx

注意事项:

  • 确保 set_real_ip_from 指令中包含了所有可能作为代理服务器 IP 的地址,特别是当 frpc 与 Nginx 不在同一台机器上运行时。
  • Proxy Protocol 支持 v1 和 v2 两个版本,根据实际需求选择合适的版本。
  • 请确保整个链路中的防火墙规则允许 Proxy Protocol 的头部信息通过。

以上步骤完成后,通过 frp 访问你的 HTTPS 服务时,Nginx 就能正确识别并记录下客户端的真实 IP 地址了。

© 版权声明

相关文章

暂无评论

暂无评论...