2
1

More than 1 year has passed since last update.

Google Cloud PlatformのCompute EngineでIPv4/IPv6両対応なVMインスタンスを作成する

Posted at

初めに

不勉強で恥ずかしいのですが、Google Cloud Platform(以下GCP)のCompute EngineでIPv4/Ipv6両対応なVMインスタンスを作成可能になったことを最近になって知りました。だた、GCPのコンソールから「Compute Engine」→「VMインスタンス」と進んで「インスタンス作成」をクリックして必要な情報を入力して「作成」をクリックするだけと、現時点でも出来たVMインスタンスはIPv4のみのサポートとなってしまいます。それであれこれ検索しながらいろいろと試行錯誤した結果何とかIPv4/IPv6両対応のVMインスタンスを作成することに成功したので、その補法をまとめてみることにしました。

前提条件

取り敢えず以下のような前提条件で作成します。

  • Compute Engineの無料枠に収まるVMインスタンスを作成する
    • リージョンはus-west1
    • ゾーンはus-west1-a
    • マシンタイプはe2-micro
    • ブートディスクの種類は標準永続ディスク
    • ブートディスクのサイズは30GB
  • ブートディスクはDebian GNU/Linux 12 (bookworm) x86_64の公開イメージを利用して作成
  • 外部IPv4アドレス及びIPv6アドレスは静的IPアドレスを予約したものを用いる
  • ホスト名はtest.example.jpとする

手順

IPv4/IPv6両対応のVMインスタンスを作成するには以下の3つのステップを踏む必要があります。

  1. IPv4/IPv6両対応なVPCネットワークを作成する
  2. 外部IPv4アドレス及びIPv6アドレスを静的IPアドレスとして予約する
  3. 作成したIPv4/IPv6両対応なVPCネットワークと予約した静的IPアドレスを用いてVMインスタンスを作成する

以下各ステップの詳細を説明します。

IPv4/IPv6両対応なVPCネットワークの作成

VMインスタンスを作成する場合、インスタンス作成画面の「詳細オプション」→「ネットワーキング」→「ネットワーク インターフェース」ではdefaultというVPCネットワークがデフォルトで選択されているのですが、このdefaultというVPCネットワークはIPv4のみなので、IPv4/IPv6両対応なVPCネットワークを新規に作成します。

事前準備

実際にVPCネットワークを作成する前に、以下の手順を準備として行います。

  1. コンソールからナビゲーションメニューで「VPCネットワーク」→「VPCネットワーク」を選択
  2. VPCネットワークの一覧で「現在のプロジェクトのサブネット」のタブを選択。
  3. サブネットの一覧で、リージョンがuse-west1でVPCネットワークがdefaultなものの「内部IP範囲」の値(10.138.0.0/20)を記録しておく。

VPCネットワークの作成

VPC ネットワークの一覧の画面で「VPCネットワークを作成」をクリックして各項目を以下のように入力します。

名前
dual-stack
説明
任意で入力
VPC ネットワーク ULA の内部 IPv6 範囲
無効
サブネット→サブネット作成モード
カスタム
サブネット→サブネットの編集→名前
dual-stack
サブネット→サブネットの編集→説明
任意で入力
サブネット→サブネットの編集→リージョン
us-west1
サブネット→サブネットの編集→IPスタックタイプ
Pv4とIPv6(デュアルスタック)
サブネット→サブネットの編集→IPv4範囲
事前準備で記録した「内部IP範囲」の値(10.138.0.0/20)
サブネット→サブネットの編集→IPv6アクセスタイプ
外部
サブネット→サブネットの編集→限定公開の Google アクセス
オフ
サブネット→サブネットの編集→フローログ
オフ
ファイアウォール ルール→IPV4ファイアウォールルール
dual-stack-allow-custom,dual-stack-allow-icmp,dual-stack-allow-sshを選択
ファイアウォール ルール→IPV6ファイアウォールルール
dual-stack-allow-ipv6-custom,dual-stack-allow-ipv6-icmp,dual-stack-allow-ipv6-sshを選択
動的ルーティング モード
リージョン
最大伝達単位(MTU)
1460

入力が完了したら「作成」をクリックするとVPCネットワークが作成されます。

静的IPアドレスの予約

コンソールからナビゲーションメニューで「VPCネットワーク」→「IPアドレス」を選択し、「外部静的IPアドレスを予約」をクリックして部IPv4アドレス及びIPv6アドレスを予約します。

外部IPv4アドレスの場合は、各項目を以下のように入力します。

名前
test-ipv4
説明
任意で入力
ネットワークサービスティア
プレミアム
IPバージョン
IPv4
タイプ
リージョン
リージョン
us-west1
接続先
なし

IPv6アドレスの場合は、各項目を以下のように入力します。

名前
test-ipv6
説明
任意で入力
ネットワークサービスティア
プレミアム
IPバージョン
IPv6
タイプ
リージョン
リージョン
us-west1
ネットワーク
dual-stack
サブネットワーク
dual-stack
エンドポイントのタイプ
VM インスタンス
接続先
なし

項目の入力が完了したら「予約」をクリックすると静的IPアドレスが予約されます。

VMインスタンスの作成

作成したVPCネットワークと予約した静的IPアドレスを用いてIPv4/IPv6両対応なVMインスタンスを作成します。

コンソールからナビゲーションメニューの「Computing Engine」→「VMインスタンス」を選択し、「インスタンスを作成」をクリックして各項目を以下のように入力します。

名前
test
リージョン
us-west1
ゾーン
us-west1-a
マシンの構成→シリーズ
E2
マシンの構成→マシンタイプ
e2-micro
ブートディスク→名前
test
ブートディスク→タイプ
新しい標準永続ディスク
ブートディスク→サイズ
30G
ブートディスク→ライセンスの種類
無料
ブートディスク→イメージ
Debian GNU/Linux 12 (bookworm)
アイデンティティとAPIへのアクセス→サービスアカウント
Compute Engine default service account
アイデンティティとAPIへのアクセス→アクセススコープ
デフォルトのアクセス権を許可
ファイアウォール→HTTPトラフィックを許可する
必要に応じてチェックを入れる
ファイアウォール→HTTPSトラフィックを許可する
必要に応じてチェックを入れる
詳細オプション→ネットワーキング→ネットワークタグ
空白のまま
詳細オプション→ネットワーキング→ホスト名
空白のまま
詳細オプション→ネットワーキング→IP転送
無効のまま
詳細オプション→ネットワーキング→ネットワーク パフォーマンスの構成→ネットワークインターフェースカード
未選択のまま
詳細オプション→ネットワーキング→ネットワーク インターフェース→ネットワーク インターフェースの編集→ネットワーク
dual-stack
詳細オプション→ネットワーキング→ネットワーク インターフェース→ネットワーク インターフェースの編集→サブネットワーク
dual-stack
詳細オプション→ネットワーキング→ネットワーク インターフェース→ネットワーク インターフェースの編集→IP スタックタイプ
IPv4とIPv6(デュアル スタック)
詳細オプション→ネットワーキング→ネットワーク インターフェース→ネットワーク インターフェースの編集→プライマリ内部IPv4アドレス
エフェメラル(自動)
詳細オプション→ネットワーキング→ネットワーク インターフェース→ネットワーク インターフェースの編集→外部IPv4アドレス
test-ipv4
詳細オプション→ネットワーキング→ネットワーク インターフェース→ネットワーク インターフェースの編集→外部IPv6アドレス
test-ipv6
詳細オプション→ネットワーキング→ネットワーク インターフェース→ネットワーク インターフェースの編集→パブリックDNS PTRレコード→IPv4対応にする
有効にして「PTRドメイン名に」test.example.jpと入力
詳細オプション→ネットワーキング→ネットワーク インターフェース→ネットワーク インターフェースの編集→パブリックDNS PTRレコード→IPv6対応にする
有効にして「PTRドメイン名に」test.example.jpと入力
詳細オプション→ディスク
そのまま
詳細オプション→セキュリティ
そのまま
詳細オプション→管理
そのまま
詳細オプション→単一テナンシー
そのまま

入力が完了したら「作成」をクリックするとVMインスタンスが作成されます。

不具合?

IPアドレスの逆引き情報ですが、VMインスタンス作成直後はIPv4/IPv6共に作成時に指定した値が返されるものの、そのまま運用していると何かのタイミングでIPv6の方の逆引きの値がx.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.bc.googleusercontent.com.のようなデフォルト値らしきものに変わってしまうという現象が発生します。この状態でVMインスタンスの設定を確認すると、パブリックDNS PTRレコードをIPv6対応にする設定が無効になっているのですが、これを再び有効にしようとすると

VM インスタンス「test」の編集に失敗しました。エラー: Invalid value for field 'resource.name': 'external-ipv6'. Access config name is immutable.

と言われてしまい有効にすることが出来ません。エラーメッセージで検索してみたところ同じ問題の話がいくつか見つかるものの解決策は書かれていないので、既知の未解決な不具合なのかもしれません。

まとめ

GCPのCompute EngineでIPv4/IPv6両対応なVMインスタンスを作成する方法についてまとめました。正直なところ、一応それらしく動いているものの本当にこれでいいのか確信が持てない部分もあるので、もし何かおかしな点がありましたらその旨コメントで指摘していただけるとありがたいです。

2
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1