Apache 仅将网关 IP 记录为访问者的 IP 地址

Apache 仅将网关 IP 记录为访问者的 IP 地址

我在 NAT 后面有一个 Web 服务器,可通过互联网访问。我使用 mikrotik 路由器进行 NAT。

但是当从互联网或 LAN 外部访问网站时,它不会显示实际访问者的 IP,而是显示网关 IP 地址。我尝试了很多方法,更改日志格式,为 x-forwarded 分配自定义标头,但仍然没有成功。

NAT 规则:

chain=srcnat action=masquerade 
chain=dstnat action=dst-nat to-addresses=private-ip to-ports=80 protocol=tcp dst-address=public-ip dst-port=80

答案1

Apache 无法记录根本不存在的信息。

问题在于你的路由器也会伪装公共 IP 地址的源地址,通常对于来自互联网的请求,你会仅应用目标 NAT

答案2

您需要在 mikrotik 上设置所谓的端口转发

请看这里:

或此处

来自我的 mikrotik 端口转发配置的示例

在此处输入图片描述

如您所见 - 您发布的内容与我的配置之间存在差异。在我的配置中,src nat 仅适用于我的私有网络。其下方的行是 dst nat。

在您的配置中,您正在以两种方式执行 src nat。

我刚刚做了一个小测试。
我的 ether1-gateway 接口(通常面向互联网的接口)被分配了静态 IP 10.0.0.1/16。
我的专用网络是 192.168.10.0/24。在我的专用网络上,我有一台连接到 ether2-master-local 的 Linux 笔记本电脑,它的 IP 设置为 192.168.10.247。
这台笔记本电脑运行 apache

我在 mikrotik 上有这些防火墙设置

在此处输入图片描述

我有一台 Mac 连接到 ether1-gateway 接口(模拟位于互联网某处的客户端)。这台 Mac 设置为 10.0.0.2。

下面是 Apache 访问日志。如您所见,显示的是真实客户端 IP。

在此处输入图片描述



相关内容