使用 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 模式代理
配置 frps.toml
在 frps.toml 文件中添加以下内容,以指定 HTTP 请求的监听端口为 8080:
bindPort = 7000 vhostHTTPPort = 8080
如果需要配置 HTTPS 代理,还需要设置
vhostHTTPSPort
。配置 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"]
创建对应网站
在内网 1Panel 服务器中,分别创建域名为www.yourdomain.com
和www.yourdomain2.com
的网站。
域名解析
将 www.yourdomain.com
和 www.yourdomain2.com
的域名 A 记录解析到公网 1Panel 服务器的 IP 地址 x.x.x.x
。如果服务器已经有对应的域名,您还可以将 CNAME 记录解析到原始域名。另外,通过修改 HTTP 请求的 Host 字段也可以实现相同的效果。
通过浏览器访问
使用浏览器访问 http://www.yourdomain.com:8080
即可访问内网机器上的 80 端口服务,访问 http://www.yourdomain2.com:8080
可以访问内网机器上的 8080 端口服务。
查看 1Panel 中的访问记录
frp http 类型的代理支持在请求 header 中添加了 X-Forwarded-For
请求头记录用户真实 IP,默认启用。因此在 1Panel 中默认即可获取到真实的客户端 IP 地址。
配置 TCP 模式代理
配置 frpc.toml
在 frpc.toml 文件中添加以下内容:
[[proxies]]
name = "web-tcp"
type = "tcp"
localPort = 18080
remotePort = 18080
transport.proxyProtocolVersion = "v2"
创建对应网站
在内网 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;
}
通过浏览器访问
使用浏览器访http://www.yourdomain.com:18080
即可访问到内网 1Panel 服务器上的对应网站。
查看 1Panel 中的访问记录
在内网 1Panel 的网站配置中增加了 proxy_protocol 相关配置后,通过 1Panel 网站监控功能查看请求日志,也可以正常记录到客户端真实 IP 地址了。