1

AWS で PPTP VPN サーバーをセットアップしましたが、すべてが完全に機能しています。www.getip.com などの VPN に接続すると、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 を使用している場合、VPC 内のすべての通信にローカル IP が使用されるという問題があります。パブリック IP (私が想定する EIP) は VPC 内には存在せず、ネットワーク インターフェイスに割り当てられ、出入りする IGW でのみ変換されます。

これは、www.getip.com で確認すると、IGW を通過するため期待どおりに EIP が取得されることを意味しますが、ローカル ネット内ではローカル IP しか表示されません。また、PPTP VPN は IGW も通過するため機能します。

Amazon は、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 に答える