複数の Elastic IP Address (EIP) を使用して単一の Elastic Compute Service (ECS) インスタンスで異なるサービスをホストするには、NAT モードでインスタンス上の Elastic Network Interface (ENI) に EIP を関連付けます。
複数の EIP は、プライマリ ENI とセカンダリ ENI の両方に関連付けることができます。このトピックでは、セカンダリ ENI を例として使用します。
仕組み
複数の EIP の関連付け: 複数のプライベート IP アドレスを持つセカンダリ ENI を ECS インスタンスにアタッチします。次に、NAT モードでこれらのプライベート IP アドレスに複数の EIP を 1 対 1 で関連付けます。
ポリシーベースルーティングを設定して、対称的なトラフィックパスを確保します:
インバウンドトラフィック: 外部リクエストが EIP にアクセスすると、システムはその EIP に関連付けられたプライベート IP アドレスにトラフィックを自動的に転送します。
アウトバウンドトラフィック: ECS インスタンスでポリシーベースルーティングを設定して、インスタンスが正しい EIP から応答トラフィックを返すようにします。ポリシーベースルーティングは、データパケットのソース IP アドレス (プライベート IP アドレス) に基づいて、ネクストホップと出力デバイス (セカンダリ ENI) を決定します。この設定により、マルチ NIC 環境での対称ルーティングが保証され、ルーティングの競合が防止されます。
使用上の注意
アタッチできる ENI の数と割り当てることができるセカンダリプライベート IP アドレスの数は、インスタンスファミリーによって異なります。
たとえば、
ecs.c6.largeインスタンスは最大 2 つの ENI (プライマリ 1 つとセカンダリ 1 つ) のアタッチをサポートし、各 ENI は最大 6 つのプライベート IP アドレスをサポートします。プライマリ ENI とセカンダリ ENI の両方で、1 つの EIP をプライマリプライベート IP アドレスに、5 つの EIP をセカンダリプライベート IP アドレスに関連付けることができます。NAT モードで関連付けられた EIP は、NAT Application Level Gateway (ALG) を必要とするプロトコルをサポートしません。
EIP は、プライマリ ENI とセカンダリ ENI の両方に関連付けることができます。
関連付けることができる EIP の数は、ENI 上のプライベート IP アドレスの数によって決まり、それらの間には 1 対 1 のマッピングがあります。
インスタンスの Virtual Private Cloud (VPC) が集中型インターネットアクセスに IPv4 ゲートウェイを使用している場合は、インスタンスがインターネットにアクセスできるように、IPv4 ゲートウェイへのルートを追加します。
手順
ステップ 1: 複数の EIP の関連付け
複数のプライベート IP アドレスを持つセカンダリ ENI を ECS インスタンスにアタッチします。
すでにセカンダリ ENI がある場合は、ECS インスタンスに直接バインドできます。
ECS コンソール - ENI ページに移動し、インスタンスのリージョンを選択します。
[ENI の作成] をクリックします。
他のパラメーターについては、デフォルト設定を維持します。作成後、ターゲット ENI の [操作] 列にある [ENI IP アドレスの管理] をクリックして、プライベート IP アドレスを追加、削除、または変更します。
ECS インスタンスの VPC、vSwitch、およびセキュリティグループを選択します。
プライマリプライベート IP アドレス: vSwitch 内の未使用の IP アドレスを指定します。または、パラメーターを空のままにすると、システムが利用可能な IP アドレスをランダムに割り当てます。このパラメーター値は作成後に変更できません。
セカンダリプライベート IPv4 アドレス: [自動割り当て] を選択し、割り当てる予定のセカンダリプライベート IP アドレスの数を入力します。
ターゲット ENI の [操作] 列で、[インスタンスにバインド] をクリックし、ターゲット ECS インスタンスを選択します。
オペレーティングシステムがセカンダリプライベート IP アドレスを認識するように設定します。
この例では、ターゲット ECS インスタンスは Alibaba Cloud Linux 3.2 オペレーティングシステムを実行しています。他のオペレーティングシステムで IP アドレスを認識する方法については、「インスタンスのオペレーティングシステムがセカンダリプライベート IP アドレスを認識するように設定する」をご参照ください。
ECS インスタンスにログインし、
ip aコマンドを実行して ENI 情報を表示および確認します。ネットワークインターフェイス識別子: eth0 (プライマリ ENI)、eth1 (セカンダリ ENI)。
ネットワークインターフェイスのステータス:
state UPは、ENI がインスタンス内で正しく機能していることを示します。ステータスがstate DOWNの場合は、Linux OS が ENI を認識するように設定する必要があります。

nmcli conを使用して、セカンダリプライベート IP アドレスを設定します。再起動後も設定が維持されるようにするには、
sudo vim /etc/cloud/cloud.cfg.d/99-disable-network-config.cfgを実行してファイルを作成し、network: {config: disabled}設定を追加して、cloud-init によるネットワークの自動初期化を無効にします。nmcli con showを実行して、eth1の接続名を表示します。
次のコマンドを実行して、セカンダリプライベート IPv4 アドレスとセカンダリ ENI のデフォルトゲートウェイを設定します。
route -nを実行して、デフォルトゲートウェイを表示できます。sudo nmcli con modify "<eth1 connection name>" ipv4.addresses <Secondary private IPv4 address 1>,<Secondary private IPv4 address 2> sudo nmcli con modify "<eth1 connection name>" ipv4.gateway <default gateway>
sudo nmcli con up "<eth1 connection name>"を実行して、変更されたネットワーク接続をアクティブにします。Connection successfully activatedメッセージは、設定が成功したことを示します。再度ip aを実行して、セカンダリプライベート IP アドレスを表示します。
複数の EIP を作成し、セカンダリ ENI に関連付けます。
EIP 購入ページに移動します。
ここでは関連する設定項目のみをリストします。詳細な選択ガイドラインについては、「EIP 選択ガイド」をご参照ください。
課金方法: 従量課金モデルは変動するワークロードに適しており、サブスクリプションは長期的で安定したサービスに最適です。この例では、[従量課金] を選択します。
リージョン: ECS インスタンスのリージョンと同じである必要があります。
回線タイプ: このパラメーターは一部のリージョンでのみカスタマイズできます。
セキュリティ保護: このパラメーターは、従量課金方法を使用する BGP (マルチ ISP) EIP に対してのみカスタマイズできます。
IP アドレスプール: IP アドレスプールがある場合は、そこから EIP を割り当てることができます。
数量: 関連付ける予定の EIP の数を選択します。
各 EIP をセカンダリ ENI 上のプライベート IP アドレスに個別に関連付けます。
VPC コンソール - Elastic IP Address ページに移動し、EIP が配置されているリージョンを選択します。
ターゲット EIP の [アクション] 列で、[リソースへの関連付け] をクリックします。表示されるダイアログボックスで [ENI] を選択し、次にセカンダリプライベート IP アドレスを選択します。
ステップ 2: ポリシーベースルーティングの設定
ECS インスタンスでポリシーベースルーティングを設定して、対称的なトラフィックパスを確保します。
ECS インスタンスにログインし、ルートテーブル
table 1001とプライベート IP アドレスのルーティングポリシーを作成して、セカンダリ ENIeth1のデフォルトルートを追加します。ip -4 route add default via <Default gateway> dev eth1 metric 1001 && \ ip -4 route add default via <Default gateway> dev eth1 table 1001 && \ ip -4 rule add from <Private IPv4 address 1 of the secondary ENI> lookup 1001 && \ ip -4 rule add from <Private IPv4 address 2 of the secondary ENI> lookup 1001 && \ ip -4 rule add from <Private IPv4 address 3 of the secondary ENI> lookup 1001ip route list table 1001 && ip rule listを実行して、作成されたルートテーブルとポリシーベースルートを表示します。
システム起動時にルートが自動的に適用されるように設定して、インスタンスの再起動後も設定が維持されるようにします。
vim /etc/rc.localを実行し、ルートテーブルとポリシーベースルートを作成するためのコマンドをファイルに追加します。sudo chmod +x /etc/rc.localを実行して、ファイルを実行可能にします。
ステップ 3: 設定の確認
アウトバウンド IP アドレスの確認
ECS インスタンスにログインし、curl --interface <セカンダリ ENI のプライベート IP アドレス> https://ifconfig.me を実行します。異なるプライベート IP アドレスから送信されたリクエストのパブリック出力 IP アドレスが、関連付けられた EIP と一致することを確認します。

インバウンドおよびアウトバウンドのトラフィックパスの確認
インターネットにアクセスできる別のテスト ECS インスタンスにログインし、
ping <セカンダリ ENI に関連付けられた EIP>を実行します。同時に、ターゲット ECS インスタンスにログインし、
tcpdump -i eth1 icmpを実行してeth1上の ICMP パケットをキャプチャします。
パケットが eth1 を通じて出入りしていることがわかります。これは、トラフィックパスが対称であることを確認します。

本番環境での適用
リスク防止: このソリューションでは単一の ECS インスタンスを使用します。サービスの 高可用性 (HA) を確保するために、Server Load Balancer (SLB) の使用を推奨します。インスタンスの再起動やネットワーク設定の変更が発生した場合、ビジネスの中断が発生する可能性があることに注意してください。
モニタリングとアラート: ネットワークトラフィック、CPU、メモリ使用率など、セカンダリ ENI の主要なメトリックに対するモニタリングとアラートを設定して、異常を迅速に検出します。
セキュリティ強化: セカンダリ ENI のセキュリティグループルールを設定し、必要なポートとソース IP アドレスのみがサービスにアクセスできるように許可します。
課金
EIP 設定料金 (パブリック IP 保持料金):
従量課金 EIP: EIP がセカンダリ ENI に関連付けられている場合、インターネットトラフィックがなくても、パブリック IP アドレスの保持に対して設定料金が請求されます。
サブスクリプション EIP: 設定料金は請求されません。
インターネットデータ転送料金:
従量課金 EIP: 選択した課金方法 (帯域幅課金またはトラフィック課金) に基づいて料金が請求されます。
サブスクリプション EIP: 選択した課金方法 (帯域幅課金またはトラフィック課金) に基づいて料金が請求されます。
その他のリソースの課金: ECS インスタンスなどのリソースは、それぞれ独自のルールに従って課金されます。セカンダリ ENI は無料です。