1

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

4

1 回答 1

2

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

这意味着当您通过 www.getip.com 检查时,您会得到预期的 EIP,因为您通过了 IGW,但在本地网络中,您只会看到本地 IP。此外,PPTP VPN 也可以通过 IGW。

亚马逊建议你使用FDQN,即使你在里面查找外部FDQN,也会得到本地IP。

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

如果您绝对需要公共 IP,您可以使用 Amazon 服务找到它:

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 )

于 2014-08-18T12:16:55.417 回答