はじめに
GoogleCloudPlatformの外部IPアドレスと内部IPアドレスの紐づけについて調べていた際に便利だったコマンドを紹介します。
ちなみに結論としてはネットワークインターフェースで1:1のNATをしている模様です。
環境情報
$ gcloud --version Google Cloud SDK 289.0.0
VMインスタンスの一覧を確認する
以下のコマンドで作成済のVMインスタンスの一覧が確認できます。
起動中のVMにはExternalIPということで外部IPアドレスが割り振られていて
$ gcloud compute instances list NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS instance-2 us-central1-a f1-micro 10.128.0.2 TERMINATED instance-1 us-east1-b f1-micro 10.142.0.2 35.X.X.X RUNNING
ローカル端末からでも当アドレスにはpingが打てます。アメリカにサーバあるからか応答速度は100ms超え。
$ ping 35.X.X.X 35.X.X.X に ping を送信しています 32 バイトのデータ: 35.X.X.X からの応答: バイト数 =32 時間 =203ms TTL=51 ...
tracerouteの結果でも後半で一気に遅延が大きくなったので日本にサーバあるか否かはクラウドを選ぶ上で重要なポイントですね。
> tracert 35.185.70.214 214.70.185.35.bc.googleusercontent.com [35.X.X.X] へのルートをトレースしています 経由するホップ数は最大 30 です: 1 1 ms 1 ms <1 ms x.home [192.168.1.1] ... 11 224 ms 197 ms 199 ms 214.70.185.35.bc.googleusercontent.com [35.X.X.X]
VMインスタンスの詳細を確認する
一覧で確認した「インスタンス名」を引数に以下コマンドを押下すれば詳細情報が確認できます。
$ gcloud compute instances describe <INSTANCE_NAME>
以下は出力結果。
canIpForward: false cpuPlatform: Intel Haswell creationTimestamp: '...' deletionProtection: false description: '' disks: - autoDelete: true boot: true deviceName: instance-1 diskSizeGb: '10' guestOsFeatures: - type: VIRTIO_SCSI_MULTIQUEUE index: 0 interface: SCSI kind: compute#attachedDisk licenses: - https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-9-stretch mode: READ_WRITE source: https://www.googleapis.com/compute/v1/projects/.../zones/us-east1-b/disks/instance-1 type: PERSISTENT displayDevice: enableDisplay: false fingerprint: ...= id: '...' kind: compute#instance labelFingerprint: ...= machineType: https://www.googleapis.com/compute/v1/projects/.../zones/us-east1-b/machineTypes/f1-micro metadata: fingerprint: ...= items: - key: ssh-keys value: ...:ssh-rsa ... kind: compute#metadata name: instance-1 networkInterfaces: - accessConfigs: - kind: compute#accessConfig name: External NAT natIP: 35.X.X.X networkTier: PREMIUM type: ONE_TO_ONE_NAT fingerprint: ...= kind: compute#networkInterface name: nic0 network: https://www.googleapis.com/compute/v1/projects/.../global/networks/default networkIP: 10.142.0.X subnetwork: https://www.googleapis.com/compute/v1/projects/.../regions/us-east1/subnetworks/default reservationAffinity: consumeReservationType: ANY_RESERVATION scheduling: automaticRestart: true onHostMaintenance: MIGRATE preemptible: false selfLink: https://www.googleapis.com/compute/v1/projects/.../zones/us-east1-b/instances/instance-1 serviceAccounts: - email: ...-compute@developer.gserviceaccount.com scopes: - https://www.googleapis.com/auth/devstorage.read_only - https://www.googleapis.com/auth/logging.write - https://www.googleapis.com/auth/monitoring.write - https://www.googleapis.com/auth/servicecontrol - https://www.googleapis.com/auth/service.management.readonly - https://www.googleapis.com/auth/trace.append startRestricted: false status: RUNNING tags: fingerprint: ..= zone: https://www.googleapis.com/compute/v1/projects/../zones/us-east1-b
ここでのポイントは以下の箇所。
networkInterfaces: - accessConfigs: - kind: compute#accessConfig name: External NAT natIP: 35.X.X.X networkTier: PREMIUM type: ONE_TO_ONE_NAT
やはり外部IPと内部IPはNATされているんですね。
確かに仮想マシン内のipconfigでは外部IPは確認できません。
終わりに
仮想マシンからはメタ的な情報は確認できませんがgcloudコマンドではそれらが確認できて勉強になります。
仮想マシンをGoogleCloudに立てている方は興味があれば確認してみてください。