Apache只logging网关IP作为访问者的IP地址

我有一个在NAT后面的web服务器,可以在互联网上访问。 我正在使用mikrotik路由器进行NAT。

但是,当从互联网或外部局域网访问网站时,并不显示实际的访客IP,而是显示网关IP地址。 我尝试了很多改变日志格式的东西,把自定义头部分配给x-forward,但是还是没有运气。

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 

Apache不能logging根本不存在的信息。

问题是你的路由器也伪装成公有IP地址的源地址,通常来自因特网的请求只能应用目标NAT

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

看看这里:

或在这里

从我的端口转发configurationmikrotik的例子

在这里输入图像说明

正如你所看到的 – 在你发布的内容和我的configuration之间有差异。 在我的configurationsrc NAT只适用于我的私人networking。 而下面的线 – 是一个dst nat。

在你的configuration中,你正在做两种方式的src。

我只是做了一些testing
我的ether1-gateway接口(通常面向互联网的接口)分配了静态IP 10.0.0.1/16
我的私人networking是192.168.10.0/24在我的私人networking上,我有Linux笔记本电脑连接到ether2-master-local,它的IP地址设置为192.168.10.247
这台笔记本电脑运行Apache

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

在这里输入图像说明

我有Mac连接到ether1-网关接口(模仿位于互联网上的客户端)。 此Mac设置为10.0.0.2。

下面是apache访问日志。 正如你所看到的 – 显示真实的客户端IP。

在这里输入图像说明