大家好,
有人能帮我解决这个问题吗?设置如下:
- 客户端:1.1.1.1
- 公共服务器:2.2.2.2(Digital Ocean)
- pfSense:3.3.3.3
- 网络服务器:4.4.4.4
公共服务器(Linux)通过 IPSEC VPN 和 StrongSwan(Linux)连接到 pfSense。
设置:
公共服务器有一个 IPtables,它将 HTTP(S) 请求端口转发到 Web 服务器
-A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 4.4.4.4:80
-A PREROUTING -i eth0 -p tcp -m tcp --dport 443 -j DNAT --to-destination 4.4.4.4:443
假设客户端 1.1.1.1 正在通过 HTTP 访问公共服务器,并将请求转发到 WEBSERVER 4.4.4.4。根据 apache 日志,我获取的公共服务器 IP 是 2.2.2.2,我的目标是获取客户端 IP 1.1.1.1?
有什么建议吗?我也尝试过使用 Haproxy,但结果相同。有没有办法通过 IPsec VPN 获取客户端 IP?
非常感谢!
答案1
NAT 或 VPN 设置不应影响客户端 IP 地址的记录。
公共服务器(Apache 反向代理或您问题中的 Haproxy)将使用 X-Forwarded-For 标头传递原始客户端的 IP。
请参阅:https://httpd.apache.org/docs/2.4/mod/mod_proxy.html#x-headers以 Apache 为例
如果使用 Apache,您可能还需要安装/启用 mod_remoteip
http://httpd.apache.org/docs/current/mod/mod_remoteip.html
并在日志格式中将远程主机名标头替换%h
为请求的客户端 IP 地址%a
。
请参阅:mod_log_config.html#formats