适用场景
TCP 隧道后面接的是 Nginx stream、HAProxy 或你自己开发的、明确支持 PROXY Protocol v2 的程序,想在它的日志里看到访客真实 IP。
远程桌面、SSH、数据库不支持这个功能,打开后会直接连不上。
前置条件
- 最新版客户端,隧道协议为 TCP。
- 能修改本地 Nginx 或 HAProxy 的配置。
操作步骤
第 1 步:准备一个接收 PROXY 头的端口
以 Nginx stream 为例:新开 9000 端口接收带 PROXY 头的连接,再转给原来在 9001 端口的业务:
stream {
server {
listen 127.0.0.1:9000 proxy_protocol;
proxy_pass 127.0.0.1:9001;
}
}
日志里用 $proxy_protocol_addr 记录真实 IP。HAProxy 写法是在 frontend 中用 bind 127.0.0.1:9000 accept-proxy。
修改后执行 nginx -t,成功后会看到 test is successful,再重载 Nginx。
第 2 步:修改隧道
- 控制台“隧道”页点这条隧道的“配置”。
- 端口改为
9000(接收 PROXY 头的端口)。 - “真实访客 IP 透传”选“发送 PROXY Protocol v2”,保存。
第 3 步:验证
重启客户端里的这条隧道,从外网新建一次连接。
成功后会看到:Nginx/HAProxy 日志里记录的是访客公网 IP,业务也能正常使用。
成功检查
- 日志里是访客真实 IP。
- 业务连接正常。
常见错误
| 现象 | 怎么办 |
|---|---|
| 打开后业务报协议错误、连不上 | 后端不支持 PROXY v2。把“真实访客 IP 透传”改回“关闭(保持原始 TCP 字节流)”,端口改回原值 |
| 担心 IP 被伪造 | 9000 端口只监听 127.0.0.1 或只允许客户端电脑访问,不要对外开放 |
| 想用于 UDP | 不支持 |