はじめに
EC2に接続中、パブリックIPを確認したくなり、ipコマンドを実行するも、パブリックIPが表示されず「?」となったので調査する。
調査
IP設定に関連するコマンドをいくつか実行してみる。
※EC2のパブリックIPの第一オクテットは"52"
ipコマンド
# ip a | grep "52\."
#
IMDS問い合わせ
# TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 600"`
# curl -s -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/public-ipv4
52.*.*.*#
ifconfig.me問い合わせ
# curl ifconfig.me
52.*.*.*#
ipコマンドでパブリックIPが表示されないので、割り当てられていないのか…と思いきや、
IMDS、ifconfig.meでは表示されるからやっぱり割り当てられているのか…???
答えはこれか。
インスタンスにパブリック IPv4 アドレスが自動的に割り当てられるように VPC を設定するか、インスタンスに Elastic IP アドレスを割り当てることができます。インスタンスは、VPC とサブネット内で定義されたプライベート(内部)IP アドレス空間のみを認識します。インターネットゲートウェイはインスタンスに代わって 1 対 1 の NAT を論理的に行います。
(出典:インターネットゲートウェイを使用して VPC のインターネットアクセスを有効にする | AWS)
パブリックIPの割り当ての実態がNATで、OS側ではわからないからipコマンドでは見えなかったという次第。
※IMDSはメタデータ上のパブリックIP、ifconfig.meは外部通信時のクライアントIPを返している
最後に
今回の体験を踏まえて、EC2内部からパブリックIPを確認する場合は
IMDSかifconfig.meに問い合わせることとしたい。