![Apache 仅将网关 IP 记录为访问者的 IP 地址](https://linux22.com/image/693578/Apache%20%E4%BB%85%E5%B0%86%E7%BD%91%E5%85%B3%20IP%20%E8%AE%B0%E5%BD%95%E4%B8%BA%E8%AE%BF%E9%97%AE%E8%80%85%E7%9A%84%20IP%20%E5%9C%B0%E5%9D%80.png)
我在 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。