我在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会话中?
非常感激您的帮忙 .
[更新]问题肯定与VPN服务器和PHP脚本位于同一服务器上有关 . 如果我将脚本放在不同的服务器上,一切都按预期工作 . 如果连接到VPN,我希望看到服务器的公共IP(同时是VPN服务器) .
1 回答
如果您使用的是VPC,则存在一个问题,即本地IP将用于VPC内的所有通信 . 公共IP(EIP I假设)在VPC内部不存在,它被分配给网络接口并且仅在进入或离开的IGW中被转换 .
这意味着当您通过www.getip.com查询时,由于您通过IGW,您可以获得预期的EIP,但在本地网络内,您只能看到本地IP . 此外,PPTP VPN也可以通过IGW .
亚马逊建议您使用FDQN,即使您在内部并查找外部FDQN,您也将获得本地IP .
我不知道Classic EC2是怎么回事,但我只能猜测它的相似之处 .
如果您绝对需要拥有公共IP,可以使用亚马逊服务找到它:
要么
(见这里:http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-instance-addressing.html)