I have setup a PPTP VPN server on AWS and everything works perfectly. When connected to my VPN e.g. www.getip.com shows the IP address of the VPN server.
So far so good...
On the same server I installed an Apache server where I run a PHP script to get me my own IP address:
$ip = isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR'];
Regardless if I am connected to VPN this code shows my local IP. I am not using varnish or any similar caching.
Any idea why this is the case? - Are the $_SERVER variables saved in the PHP session?
Your help is very much appreciated.
[UPDATE] The problem is definitely linked to the fact that the VPN server and the PHP script are on the same server. If I put the script on a different server everything works as desired. If connected to the VPN I expect to see the public IP of the server (which is the VPN server at the same time).
If you are using a VPC, then there is a problem in that the local IP will be used for all communication inside the VPC. The Public IP (EIP I assume) does not exist inside the VPC, it is assigned to the network interface and only translated in the IGW going in or out.
This means that when you check with www.getip.com you get the EIP just as expected since you pass the IGW, but inside the local net you will only see the local IP. Also, PPTP VPN works as it also passes the IGW.
Amazon suggests that you use the FDQN, even if you are on the inside and look up the external FDQN, you will get the local IP.
I do not know how this is in the Classic EC2, but I can only guess its similar.
If you absolutely need to have the public IP, you find it by using the Amazon service for this:
curl http://169.254.169.254/latest/meta-data/public-ipv4
or
curl http://169.254.169.254/latest/meta-data/local-ipv4
(See here: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-instance-addressing.html)