我在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服务器)。
答案 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)