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

时间:2013-06-29 13:37:18

标签: php vpn pptp

我在AWS上设置了PPTP VPN服务器,一切正常。连接到我的VPN时,例如www.getip.com显示VPN服务器的IP地址。

到目前为止一直很好......

在同一台服务器上我安装了一台Apache服务器,运行PHP脚本来获取我自己的IP地址:

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

无论我连接到VPN,此代码都会显示我的本地IP。我没有使用清漆或任何类似的缓存。

知道为什么会这样吗?   - $ _SERVER变量是否保存在PHP会话中?

非常感谢您的帮助。

[UPDATE] 问题肯定与VPN服务器和PHP脚本位于同一服务器上有关。如果我将脚本放在不同的服务器上,一切都按预期工作。如果连接到VPN,我希望看到服务器的公共IP(同时是VPN服务器)。

1 个答案:

答案 0 :(得分:1)

如果您使用的是VPC,则存在一个问题,即本地IP将用于VPC内的所有通信。公共IP(EIP I假设)在VPC内部不存在,它被分配给网络接口并且仅在进入或离开的IGW中被转换。

这意味着当您通过www.getip.com查询时,由于您通过了IGW,因此您可以按预期获得EIP,但在本地网络内,您只能看到本地IP。此外,PPTP VPN也可以通过IGW。

亚马逊建议您使用FDQN,即使您在内部并查找外部FDQN,您也将获得本地IP。

我不知道经典EC2中的情况如何,但我只能猜测它的相似之处。

如果您绝对需要拥有公共IP,可以使用亚马逊服务找到它:

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

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

(见这里:http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-instance-addressing.html