使用 FRP 代理内网服务并获取真实客户端 IP

frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议,且支持 P2P 通信。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

当我们的 1Panel 服务器没有固定公网 IP 时,可以通过 frp 配合一台具有公网 IP 的 1Panel 服务器实现内网服务的公网访问。

本篇教程将介绍如何在 1Panel 环境中配置和使用 frp 实现内网穿透,同时确保内网环境中的 1Panel 可以正确获取并记录客户端的真实 IP 地址。

环境准备

  • 一台具有公网 IP 的 1Panel 服务器,以下简称为公网 1Panel

  • 一台可以访问公网的内网 1Panel 服务器,以下简称为内网 1Panel

部署 frp 服务端

登录公网 1Panel 控制台,在应用商店列表中找到 frp 服务端,根据需求修改端口、密码等参数,点击确定后等待 frp 服务端应用安装成功。

如果服务器启用了防火墙,需要在防火墙中开放服务端口及 Dashboard 端口,同时在云服务器安全组/防火墙规则中也需要开放相应端口。

部署并配置 frp 客户端

登录内网 1Panel 控制台,在应用商店列表中找到 frp 客户端,其中服务端 IP、服务端端口、密钥参数,分别填入部署 frp 服务端的 1Panel 服务器的公网 IP 地址、frp 服务端服务端口以及密钥。

Dashboard 端口、Dashboard 用户名、Dashboard 密码参数根据需求进行修改。

frp 客户端应用安装完成后,查看应用日志提示类似这样的信息则表明已经正常连接到了 frp 服务端。

1Panel-frpc-mfpb  | 2025-09-01 08:15:45.431 [I] [sub/root.go:149] start frpc service for config file [/etc/frp/frpc.toml]
1Panel-frpc-mfpb  | 2025-09-01 08:15:45.431 [I] [client/service.go:319] try to connect to server...
1Panel-frpc-mfpb  | 2025-09-01 08:15:45.431 [I] [client/service.go:198] admin server listen on 0.0.0.0:7400
1Panel-frpc-mfpb  | 2025-09-01 08:15:45.484 [I] [client/service.go:311] [e337d2c8d3e61fc7] login to server success, get run id [e337d2c8d3e61fc7]

在 frp 客户端增加映射配置

访问内网 1Panel 服务器安装 frp 客户端应用时的 Dashboard 端口,即可打开 frp 客户端管理配置页面。

配置 HTTP 模式代理

  1. 配置 frps.toml

    在 frps.toml 文件中添加以下内容,以指定 HTTP 请求的监听端口为 8080:

    bindPort = 7000
    vhostHTTPPort = 8080
    

    如果需要配置 HTTPS 代理,还需要设置 vhostHTTPSPort

  2. 配置 frpc.toml

    在 frpc.toml 文件中添加以下内容,确保设置了正确的服务器 IP 地址、本地 Web 服务监听端口和自定义域名:

    serverAddr = "x.x.x.x"
    serverPort = 7000
    
    [[proxies]]
    name = "web"
    type = "http"
    localPort = 80
    customDomains = ["www.yourdomain.com"]
    
    [[proxies]]
    name = "web2"
    type = "http"
    localPort = 8080
    customDomains = ["www.yourdomain2.com"]
    
  3. 创建对应网站

在内网 1Panel 服务器中,分别创建域名为www.yourdomain.comwww.yourdomain2.com 的网站。

  1. 域名解析

www.yourdomain.comwww.yourdomain2.com 的域名 A 记录解析到公网 1Panel 服务器的 IP 地址 x.x.x.x。如果服务器已经有对应的域名,您还可以将 CNAME 记录解析到原始域名。另外,通过修改 HTTP 请求的 Host 字段也可以实现相同的效果。

  1. 通过浏览器访问

使用浏览器访问 http://www.yourdomain.com:8080 即可访问内网机器上的 80 端口服务,访问 http://www.yourdomain2.com:8080 可以访问内网机器上的 8080 端口服务。

  1. 查看 1Panel 中的访问记录

frp http 类型的代理支持在请求 header 中添加了 X-Forwarded-For 请求头记录用户真实 IP,默认启用。因此在 1Panel 中默认即可获取到真实的客户端 IP 地址。

配置 TCP 模式代理

  1. 配置 frpc.toml

在 frpc.toml 文件中添加以下内容:

[[proxies]]
name = "web-tcp"
type = "tcp"
localPort = 18080
remotePort = 18080

transport.proxyProtocolVersion = "v2"
  1. 创建对应网站

在内网 1Panel 服务器中,创建域名www.yourdomain.com 端口18080 的网站。同时修改网站配置配置文件如下:

server {
    listen 18080 proxy_protocol;
    set_real_ip_from 127.0.0.1;
    real_ip_header proxy_protocol;
    server_name www.yourdomain.com; 
    index index.php index.html index.htm default.php default.htm default.html; 
    access_log /www/sites/www.yourdomain.com.18080/log/access.log main; 
    error_log /www/sites/www.yourdomain.com.18080/log/error.log; 
    location ~ ^/(\.user.ini|\.htaccess|\.git|\.env|\.svn|\.project|LICENSE|README.md) {
        return 404; 
    }
    location ^~ /.well-known {
        allow all; 
        root /usr/share/nginx/html; 
    }
    if ( $uri ~ "^/\.well-known/.*\.(php|jsp|py|js|css|lua|ts|go|zip|tar\.gz|rar|7z|sql|bak)$" ) {
        return 403; 
    }
    root /www/sites/www.yourdomain.com.18080/index; 
    error_page 404 /404.html; 
}
  1. 通过浏览器访问

使用浏览器访http://www.yourdomain.com:18080 即可访问到内网 1Panel 服务器上的对应网站。

  1. 查看 1Panel 中的访问记录

在内网 1Panel 的网站配置中增加了 proxy_protocol 相关配置后,通过 1Panel 网站监控功能查看请求日志,也可以正常记录到客户端真实 IP 地址了。

评论

购物车

总计

¥1299