drwj4061 2013-06-29 13:37
浏览 373
已采纳

通过VPN连接:PHP $ _SERVER仍然提供本地IP

I have setup a PPTP VPN server on AWS and everything works perfectly. When connected to my VPN e.g. www.getip.com shows the IP address of the VPN server.

So far so good...

On the same server I installed an Apache server where I run a PHP script to get me my own IP address:

$ip = isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR'];

Regardless if I am connected to VPN this code shows my local IP. I am not using varnish or any similar caching.

Any idea why this is the case? - Are the $_SERVER variables saved in the PHP session?

Your help is very much appreciated.

[UPDATE] The problem is definitely linked to the fact that the VPN server and the PHP script are on the same server. If I put the script on a different server everything works as desired. If connected to the VPN I expect to see the public IP of the server (which is the VPN server at the same time).

  • 写回答

1条回答 默认 最新

  • dongxia1390 2014-08-18 12:16
    关注

    If you are using a VPC, then there is a problem in that the local IP will be used for all communication inside the VPC. The Public IP (EIP I assume) does not exist inside the VPC, it is assigned to the network interface and only translated in the IGW going in or out.

    This means that when you check with www.getip.com you get the EIP just as expected since you pass the IGW, but inside the local net you will only see the local IP. Also, PPTP VPN works as it also passes the IGW.

    Amazon suggests that you use the FDQN, even if you are on the inside and look up the external FDQN, you will get the local IP.

    I do not know how this is in the Classic EC2, but I can only guess its similar.

    If you absolutely need to have the public IP, you find it by using the Amazon service for this:

    curl http://169.254.169.254/latest/meta-data/public-ipv4
    

    or

    curl http://169.254.169.254/latest/meta-data/local-ipv4
    

    (See here: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-instance-addressing.html)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效