首页 文章

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

提问于
浏览
0

我在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 回答

  • 1

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

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

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

    我不知道Classic 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

相关问题