【问题标题】:Why does $_SERVER['REMOTE_ADDR'] return the gateway ip rather than the remote ip with a fortigate router?为什么 $_SERVER['REMOTE_ADDR'] 返回网关 ip 而不是带有强化路由器的远程 ip?
【发布时间】:2013-09-26 09:37:55
【问题描述】:

我有一台通过 Fortigate 40C 连接到互联网的服务器。当我的php代码调用$_SERVER['REMOTE_ADDR']时,它返回的是路由器(fortigate)的IP地址,而不是访问php脚本的远程IP。

这是为什么?

【问题讨论】:

  • 原始IP可能还在请求中。看看你是否能找到像X_FORWARDED_FOR 这样的X_ 标头。
  • 我可以确认此行为,并添加其他信息。如果客户端和服务器在同一个 VLAN 上,phpinfo(), $_SERVER['REMOTE_ADDR'] 和 apache_getenv("REMOTE_ADDR") 都报告客户端 IP,但是如果客户端和服务器在不同的 VLAN 上,只有网关IP 节目。

标签: php ip firewall nat


【解决方案1】:

Fortigate 有一个在策略上“启用 NAT”的选项,这并不意味着转换地址(无论如何它都会为你做),但确实意味着它会改变一些数据包,用网关 IP 替换远程 IP。

确保禁用“启用 NAT”,$_SERVER['REMOTE_ADDR'] 将按预期工作。

【讨论】:

  • @Simon_eQ 我发布这个问题的原因是我没有在stackoverflow上找到这个问题的答案,并认为它对关注我的其他人有用。
  • 这确实对我有帮助 :) 感谢您提出并回答您自己的问题!
猜你喜欢
  • 2016-05-03
  • 1970-01-01
  • 2015-06-19
  • 2011-05-14
  • 2017-04-28
  • 1970-01-01
  • 2023-03-24
  • 2017-01-31
  • 1970-01-01
相关资源
最近更新 更多