デフォルトでは、Elastic IP Address (EIP) はネットワークアドレス変換 (NAT) を介して ECS インスタンスのプライベート IP アドレスにマップされます。このため、オペレーティングシステム内ではプライベート IP アドレスのみが可視となります。ただし、一部のアプリケーションでは、パブリック IP アドレスを Elastic Network Interface (ENI) に直接設定する必要があります。このような構成は「可視化された EIP」と呼ばれます。
プロトコル要件:FTP などのアクティブモードで動作するプロトコルでは、メッセージペイロードにパブリック IP アドレスを含める必要があります。プライベート IP アドレスを使用すると通信が失敗します。
送信元アドレス検証:一部のサーバーでは、送信元ネットワークインターフェースの IP アドレスとパブリックアウトバウンド IP アドレスが一致している必要があります。
IPsec VPN:一部の VPN ソフトウェアでは、トンネル確立のためにパブリック IP アドレスへの直接バインドが必要です。
VPC のセカンダリ CIDR ブロックを活用することで、Elastic Network Interface (ENI) を作成し、そのプライマリプライベート IP アドレスを EIP アドレスと同一の値に設定できます。これにより、パブリック IP アドレスがオペレーティングシステム内で可視化されます。また、同一の ENI に IPv6 アドレスを設定することで、単一のネットワークインターフェース上で IPv4/IPv6 デュアルスタック通信を実現できます。
仕組み
Virtual Private Cloud (VPC) のセカンダリ CIDR ブロック機能により、パブリック IP 範囲を含む任意の CIDR ブロックをカスタムネットワークセグメントとして追加できます。これにより、以下のワークフローが可能になります:
EIP を含むパブリック CIDR ブロック(例:
118.XX.XX.0/24)を、VPC のセカンダリ CIDR ブロックとして追加します。セカンダリ CIDR ブロック内に vSwitch および Elastic Network Interface (ENI) を作成します。ENI のプライマリプライベート IP アドレスを、ご利用の EIP アドレスと同一の値に設定します。
EIP を NAT モードで ENI に関連付けます。これにより、パブリック IP アドレスがオペレーティングシステム内で可視化されます。
この構成を基に、同一の ENI に IPv6 アドレスを割り当て、パブリック帯域幅を有効化することで、単一のネットワークインターフェース上で IPv4 および IPv6 のデュアルスタック通信を実現できます。
制限事項
VPC 内通信:ENI 可視化モードでセカンダリ CIDR ブロックを使用する ECS インスタンスは、パブリックネットワーク経由で同一 VPC 内の他のインスタンスと EIP を用いて通信できません。代わりに、VPC 内で非公開通信が行われます。
vSwitch CIDR ブロック:セカンダリ CIDR ブロックから vSwitch を作成する場合、その vSwitch の CIDR ブロックには EIP アドレスが含まれている必要があります。EIP は vSwitch のシステム予約アドレスのいずれかであってはなりません。IPv4 の場合、各 vSwitch の先頭 IP アドレスおよび末尾の 3 つの IP アドレスがシステムによって予約されています。
Elastic Network Interface:
ECS インスタンスおよび接続された Elastic Network Interface (ENI) は、同一の VPC およびゾーン内に存在する必要があります。ただし、異なる vSwitch に配置することは可能です。
インスタンスタイプによって、ECS インスタンスに接続可能な ENI の数が決定されます。
セカンダリ CIDR ブロック:各 VPC は最大 5 つのセカンダリ IPv4 CIDR ブロックおよび 5 つのセカンダリ IPv6 CIDR ブロックをサポートします。
IPv4 ネットワークインターフェースの可視化設定
コンソール
EIP の作成: EIP コンソール にログインし、EIP の作成 をクリックします。詳細については、「EIP 選択ガイド」をご参照ください。
課金方法 を 従量課金 に設定します。
[リージョン]:ECS インスタンスと同じリージョンを選択します。
その他のパラメーターはデフォルト値のままとします。
EIP アドレスは、後続で設定するセカンダリ CIDR ブロックおよび vSwitch CIDR ブロックを決定します。
VPC への IPv4 セカンダリ CIDR ブロックの追加、および vSwitch および Elastic Network Interface (ENI) の作成を行います。
セカンダリ CIDR ブロックの追加:
VPC コンソール にログインし、ECS インスタンスを含む VPC の ID をクリックして、詳細ページに移動します。
CIDR タブをクリックし、IPv4 CIDR の追加 をクリックします。カスタム CIDR ブロック を選択し、EIP アドレスを含む CIDR ブロックを入力します。
たとえば、EIP アドレスが
118.XX.XX.230の場合、CIDR ブロックを118.XX.XX.0/24に設定します。
[vSwitch の作成] ページ に移動し、セカンダリ CIDR ブロック内に vSwitch を作成します。
VPC:ECS インスタンスを含む VPC を選択します。
IPv4 CIDR ブロック:追加したセカンダリ CIDR ブロックを選択します。
ゾーン:ECS インスタンスが配置されているゾーンを選択します。
IPv4 CIDR ブロック:EIP アドレスを含む CIDR ブロックを入力します。たとえば、EIP アドレスが
118.XX.XX.230の場合、CIDR ブロックを118.XX.XX.128/25に設定します。
ENI の作成:
ECS コンソール内の [Elastic Network Interfaces] ページ に移動します。
[ENI の作成] をクリックします。
VPC、vSwitch、およびセキュリティグループ:ECS インスタンスを含む VPC およびセキュリティグループ、およびセカンダリ CIDR ブロック内に作成した vSwitch を選択します。
プライマリプライベート IP アドレス:EIP の IP アドレス(例:
118.XX.XX.230)を入力します。
リソースの関連付け:
EIP と ENI の関連付け: EIP コンソール に移動し、対象の EIP を見つけ、リソースと関連付ける を 操作 列からクリックします。
インスタンスタイプ を ENI に設定します。
モード を NAT Mode に設定します。
関連付けるインスタンスを選択してください:作成した ENI を選択します。
ENI と ECS インスタンスの関連付け:
ECS コンソール内の [Elastic Network Interfaces] ページ に移動し、対象の ENI を見つけ、操作 列の [インスタンスのバインド] をクリックし、対象の ECS インスタンスを選択します。一部のインスタンスタイプはホットプラグをサポートしていません。ENI を関連付けるには、ECS インスタンスを停止する必要があります。
ECS インスタンスに接続済みのセカンダリ ENI の数が、そのインスタンスタイプの上限に達している場合、[インスタンスのサイズ変更] を実行してインスタンスタイプをアップグレードできます。
ENI の動作確認:ECS インスタンスにログインし、
ip addr showコマンドを実行して、セカンダリ ENI の IP アドレスが EIP と同一であることを確認します。ENI が起動していない場合は、Linux オペレーティングシステムをネットワークインターフェースを認識するように設定する必要があります。
ポリシールーティングの設定:ECS インスタンスのデフォルトルートはプライマリネットワークインターフェース eth0 を指しています。セカンダリ ENI (eth1) 経由で受信したリクエストが元のパスで返却されるよう、ポリシールーティングを設定します。
一時的な設定(再起動後に失われる):
ip route add default via <サブネットゲートウェイ> dev eth1 table 1001 ip rule add from <プライマリプライベート IP アドレス> lookup 1001
結果の確認:ECS インスタンスにログインし、
curl -4 --interface eth1 ifconfig.meコマンドを実行して、アウトバウンド IP アドレスがプライマリプライベート IP アドレスであることを確認します。
API
[AllocateEipAddress] を呼び出して EIP を作成します。
[AssociateVpcCidrBlock] を呼び出してセカンダリ CIDR ブロックを追加します。
[CreateVSwitch] を呼び出して vSwitch を作成します。
[CreateNetworkInterface] を呼び出して ENI を作成します。
[AssociateEipAddress] を呼び出して EIP を ENI に関連付けます。
[AttachNetworkInterface] を呼び出して ENI を既存の ECS インスタンスに関連付けます。
IPv6 デュアルスタックの設定
IPv4 ENI の可視化設定 を完了した後、セカンダリ Elastic Network Interface (ENI) に IPv6 アドレスを割り当てます。これにより、単一の ENI 上で IPv4/IPv6 デュアルスタックを実現できます。
コンソール
Virtual Private Cloud (VPC) に対する IPv6 の有効化:
対象の VPC で IPv6 が有効化されていない場合、対象 VPC の IPv6 CIDR ブロック 列にある IPv6 CIDR ブロックの有効化 をクリックします。自動割り当て を選択し、VPC におけるすべての vSwitch の IPv6 機能を自動的に有効化する チェックボックスをオンにします。システムは自動的に [IPv6 ゲートウェイ] を作成し、IPv6 CIDR ブロックを割り当てます。
対象の VPC およびその vSwitch で IPv6 がすでに有効化されている場合は、この手順をスキップします。
ENI への IPv6 アドレスの割り当て:
ECS コンソール内の [Elastic Network Interfaces] ページ に移動します。対象 ENI の 操作 列で ENI IP の管理 をクリックし、IPv6 アドレスを追加します。
オペレーティングシステムによる IPv6 アドレスの認識設定:ECS インスタンスにログインし、
sudo acs-plugin-manager --exec --plugin=ecs-utils-ipv6コマンドを実行します。その後、ip -6 addr show dev eth1コマンドを実行して、アドレスが正しく認識されていることを確認します。
IPv6 アドレスに対するパブリック帯域幅の有効化:デフォルトでは、IPv6 アドレスは VPC 内でのみ通信をサポートします。インターネットアクセスを有効化するには、IPv6 アドレスに対してパブリック帯域幅を有効化する必要があります。
[IPv6 ゲートウェイ コンソール] にログインします。
対象 VPC の IPv6 ゲートウェイをクリックします。対象 IPv6 アドレスの 操作 列で IPv6 インターネット帯域幅の作成 をクリックし、パブリック帯域幅を設定します。
結果の確認:ECS インスタンスにログインし、
curl -6 ifconfig.meコマンドを実行して、IPv6 のパブリックアウトバウンドを確認します。
API
既存の VPC および vSwitch に対して、[ModifyVpcAttribute] および [ModifyVSwitchAttribute] オペレーションを呼び出し、
EnableIPv6パラメーターを設定して IPv6 を有効化または無効化します。コンソールとは異なり、API オペレーションを用いて VPC およびその vSwitch に対して IPv6 を有効化しても、IPv6 ゲートウェイは自動的に作成されません。IPv6 ゲートウェイを作成するには、[CreateIpv6Gateway] オペレーションを呼び出します。
[AssignIpv6Addresses] オペレーションを呼び出して ENI に IPv6 アドレスを割り当てます。
[AllocateIpv6InternetBandwidth] オペレーションを呼び出して、IPv6 アドレスのパブリック帯域幅を購入します。
よくある質問
問題 | 原因の可能性 | 解決策 |
elastic network interface のプライマリプライベート IP アドレスが無効です。 | プライマリプライベート IP アドレスが vSwitch の CIDR ブロック内にありません。 | vSwitch を再作成します。vSwitch の CIDR ブロックにプライマリプライベート IP アドレスが含まれていることを確認してください。 |
elastic network interface をバインドする際に、対象の ECS インスタンスを選択できません。 | ゾーンが異なります。 | elastic network interface と ECS インスタンスが同一のゾーン内にあることを確認してください。 |
elastic network interface を ECS インスタンスにバインドする際にエラーが発生します。 | インスタンスタイプがホットプラグをサポートしていません。 | インスタンスを停止し、インターフェースをバインドしてから、インスタンスを起動します。 |
elastic network interface が有効化されていません。 | オペレーティングシステムが新しいネットワークインターフェースを認識していません。 | |
ECS インスタンスがインターネットにアクセスできません。 | デフォルトルートがプライマリネットワークインターフェースを指しています。 | セカンダリ elastic network interface をインターネットアクセスに使用するよう、ルート優先度を調整します。または、 |
非対称ルーティングが発生しています。 | トラフィックが流入したインターフェースと同じインターフェースから戻るように、ポリシールーティングを設定します。 | |
セキュリティグループがトラフィックを許可していません。 | セキュリティグループが関連する送信元からのトラフィックを許可しているか確認してください。 |