1 つの Elastic Compute Service (ECS) インスタンスで、それぞれ専用のパブリック IP アドレスを必要とする複数のサービスをホストする必要がある場合、NAT モードを使用して、インスタンスの Elastic Network Interface (ENI) に複数の Elastic IP (EIP) をバインドできます。
複数の EIP を、プライマリ ENI とセカンダリ ENI の両方にバインドできます。ネットワーク設計に基づいて選択してください。このトピックでは、セカンダリ ENI を例として使用します。
仕組み
-
複数の EIP のバインド:複数のプライベート IP アドレスを持つセカンダリ ENI を ECS インスタンスにアタッチします。次に、NAT モードで EIP をプライベート IP アドレスに 1 対 1 でマッピングしてバインドします。
-
ポリシーベースルーティングを設定して、対称的なトラフィックパスを確保します:
-
インバウンドトラフィック:外部リクエストが EIP に到達すると、システムはその EIP にバインドされているプライベート IP アドレスにトラフィックを自動的に転送します。
-
アウトバウンドトラフィック:ECS インスタンスでポリシーベースルーティングを設定します。ルーティングポリシーは、パケットの送信元 IP アドレス (プライベート IP アドレス) を使用して、そのネクストホップと出力インターフェイス (セカンダリ ENI) を決定します。これにより、応答トラフィックが正しい EIP を介して出力されることが保証され、対称ルーティングが維持され、複数の ENI 環境での競合が防止されます。
-
注意事項
-
ECS インスタンスにアタッチできる ENI の数と、ENI に割り当てることができるセカンダリプライベート IP アドレスの数は、「インスタンスファミリー」によって異なります。
例えば、
ecs.c6.largeインスタンスタイプの ECS インスタンスは、プライマリ ENI とセカンダリ ENI を含む最大 2 つの Elastic Network Interface (ENI) にバインド可能で、各 ENI は最大 6 つのプライベート IP アドレスをサポートします。プライマリ ENI とセカンダリ ENI はどちらも、プライマリプライベート IP アドレスに 1 つの EIP を、セカンダリプライベート IP アドレスに 5 つの EIP をバインドできます。 -
NAT モードでは、EIP は NAT を使用して ENI にバインドされます。このモードは、NAT Application-Level Gateway (NAT ALG) に依存するプロトコルをサポートしていません。
-
EIP は、プライマリ ENI とセカンダリ ENI の両方にバインドできます。
-
マッピングは 1 対 1 であるため、バインドできる EIP の数は ENI で利用可能なプライベート IP アドレスの数によって制限されます。
-
-
VPC が集中型インターネットアクセスに「IPv4 ゲートウェイ」を使用している場合は、ECS インスタンスがインターネットにアクセスできるように、IPv4 ゲートウェイにトラフィックを転送するルートを設定してください。
操作手順
ステップ1:複数の EIP のバインド
-
複数のプライベート IP アドレスを持つセカンダリ ENI を ECS インスタンスにアタッチします。
既存のセカンダリ ENI がある場合は、ECS インスタンスに直接バインドできます。
-
ECS コンソールの「ENI」ページに移動します。上部メニューで、ECS インスタンスがあるリージョンを選択します。
-
[ENIの作成] をクリックします。
「その他のパラメーター」はデフォルト値のままにします。ENI が作成された後、ENI の 操作 列にある [ENI IPアドレスの管理] をクリックして、プライベート IP アドレスを追加、削除、または変更できます。
-
ECS インスタンスが属する VPC、vSwitch、およびセキュリティグループを選択します。
-
プライマリプライベート IP アドレス:vSwitch から未使用の IP アドレスを指定できます。IP アドレスを指定しない場合、システムは vSwitch 内の利用可能なアドレスからランダムに 1 つを割り当てます。このアドレスは作成後に変更できません。
-
セカンダリプライベート IPv4 アドレス: [自動割り当て] を選択し、割り当てるセカンダリプライベート IP アドレスの数を入力します。
-
-
対象の ENI の 操作 列で、インスタンスの関連付け をクリックし、対象の ECS インスタンスを選択します。
-
-
セカンダリプライベート IP アドレスを認識するようにオペレーティングシステムを設定します。
このトピックでは、Alibaba Cloud Linux 3.2 を例として使用します。他のオペレーティングシステムについては、「セカンダリプライベートIPアドレスを認識するためのオペレーティングシステムの設定」をご参照ください。
-
ECS インスタンスにログインし、
ip aコマンドを実行してネットワークインターフェイス情報を表示および確認します。-
インターフェイス識別子:
eth0(プライマリ ENI)、eth1(セカンダリ ENI)。 -
ネットワークカードのステータス:
state UPは、ネットワークカードが正常に機能しており、インスタンス内でアクティブであることを示します。ネットワークカードのステータスがstate DOWNの場合は、「Linuxオペレーティングシステムでネットワークカードを認識させるための設定」を行う必要があります。
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 8500 qdisc mq state UP group default qlen 1000 link/ether 00:xxx:ff altname enp0s5 altname ens5 inet 192.168.0.3/24 brd 192.168.0.255 scope global dynamic noprefixroute eth0 valid_lft 1892159940sec preferred_lft 1892159940sec inet6 xxx/64 scope link valid_lft forever preferred_lft forever 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 8500 qdisc mq state UP group default qlen 1000 link/ether 00:xxx:ff altname enp0s7 altname ens7 inet 192.168.0.252/24 brd 192.168.0.255 scope global dynamic noprefixroute eth1 valid_lft 1892159958sec preferred_lft 1892159958sec inet6 xxx/64 scope link noprefixroute valid_lft forever preferred_lft forever -
-
nmcli conを使用して、セカンダリプライベート IP アドレスを設定します。-
sudo vim /etc/cloud/cloud.cfg.d/99-disable-network-config.cfgコマンドを実行し、network: {config: disabled}設定を追加して、「cloud-initによる自動ネットワーク設定」を無効にし、再起動後に設定が失われるのを防ぎます。 -
nmcli con showを実行して、eth1のネットワーク接続名を表示します。[root@ixxx Z ~]# nmcli con show NAME UUID TYPE DEVICE System eth0 5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03 ethernet eth0 Wired connection 1 c8c8d113-cd19-3945-a292-1a89d8bab4e8 ethernet eth1 -
次のコマンドを実行して、セカンダリ ENI のセカンダリプライベート IPv4 アドレスとデフォルトゲートウェイを設定します。
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 modify "Wired connection 1" ipv4.addresses 192.168.0.1/24,192.168.0.2/24 sudo nmcli con modify "Wired connection 1" ipv4.gateway 192.168.0.253
-
-
sudo nmcli con up "<eth1 ネットワーク接続名>"コマンドを実行して、変更されたネットワーク接続をアクティブにします。Connection successfully activatedのようなメッセージが表示されれば、設定は成功です。ip aコマンドを再度実行して、セカンダリプライベート IP アドレスを表示します。eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 8500 qdisc mq state UP group default qlen 1000 link/ether 00:xxx:ff altname enp0s7 altname ens7 inet 192.168.0.1/24 brd 192.168.0.255 scope global noprefixroute eth1 valid_lft forever preferred_lft forever inet 192.168.0.2/24 brd 192.168.0.255 scope global secondary noprefixroute eth1 valid_lft forever preferred_lft forever inet 192.168.0.252/24 brd 192.168.0.255 scope global secondary dynamic noprefixroute eth1 valid_lft 1892159981sec preferred_lft 1892159981sec inet6 fe80::xxx/64 scope link noprefixroute valid_lft forever preferred_lft forever
-
-
複数の EIP を作成し、セカンダリ ENI のプライベート IP アドレスにバインドします。
-
「EIP購入」ページに移動します。
ここでは関連するパラメーターのみを記載します。詳細なガイダンスについては、「EIPの選択」をご参照ください。
-
[課金方法]: 従量課金方法は、ワークロードが変動するサービスに適しています。サブスクリプション方法は、長期的で安定したワークロードに最適です。このトピックでは、従量課金 を使用します。
-
リージョン: ECS インスタンスと同じリージョンを選択します。
-
回線タイプ: このオプションは、一部のリージョンでのみ利用可能です。
-
保護: このオプションは、従量課金方法を使用する BGP (マルチ ISP) EIP でのみ利用可能です。
-
アドレスプール: 既存の「IPアドレスプール」がある場合は、そこから EIP を割り当てることができます。
-
数量: バインドする予定の EIP の数を入力します。
-
-
EIP をセカンダリ ENI のプライベート IP アドレスに 1 対 1 でマッピングしてバインドします。
-
「Elastic IPアドレス」ページに移動します。上部メニューで、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 <secondary_eni_private_ipv4_address_1> lookup 1001 && \ ip -4 rule add from <secondary_eni_private_ipv4_address_2> lookup 1001 && \ ip -4 rule add from <secondary_eni_private_ipv4_address_3> lookup 1001 -
ip route list table 1001 && ip rule listコマンドを実行して、作成されたルートテーブルとポリシーベースルートを表示します。[root@iZ ~]# ip route list table 1001 && ip rule list default via 192.168.0.253 dev eth1 0: from all lookup local 32763: from 192.168.0.2 lookup 1001 32764: from 192.168.0.1 lookup 1001 32765: from 192.168.0.252 lookup 1001 32766: from all lookup main 32767: from all lookup default -
再起動後も設定を維持するため、起動時にルートが自動的に更新されるように設定します。
-
vim /etc/rc.localを実行し、ルートテーブルとポリシーベースルーティングを作成するためのコマンドをファイルに追加します。 -
sudo chmod +x /etc/rc.localを実行して、実行権限を追加します。
-
ステップ3:設定の確認
アウトバウンド IP アドレスの確認
ECS インスタンスにログオンし、curl --interface <セカンダリ ENI のプライベート IP アドレス> https://ifconfig.me を実行して、各プライベート IP アドレスから送信されたトラフィックのパブリック出力 IP アドレスが対応する EIP であることを確認します。
[root@iZbxxx ~]# echo $(curl --silent --interface 192.168.0.2 https://ifconfig.me)
47.xxx.xxx.13
[root@iZbxxx ~]# echo $(curl --silent --interface 192.168.0.1 https://ifconfig.me)
121.xxx.xxx.23
[root@iZbxxx ~]# echo $(curl --silent --interface 192.168.0.252 https://ifconfig.me)
121.xxx.xxx.175
対称的なトラフィックパスの確認
-
インターネットにアクセスできる別のテスト ECS インスタンスにログオンし、
ping <EIP bound to the secondary ENI>を実行します。 -
同時に、この ECS インスタンスにログインし、
tcpdump -i eth1 icmpコマンドを実行してeth1で ICMP パケットをキャプチャします。
パケットが eth1 から入力され、同じく eth1 から出力されていることから、入力トラフィックパスと出力トラフィックパスが一致していることがわかります。
[root@iZbp1xxx_uv2Z ~]# tcpdump -i eth1 icmp
dropped privs to tcpdump
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes
10:14:34.410905 IP 47.xxx.xxx.250 > iZbpxxx_uv2Z: ICMP echo request, id 19, seq 1, length 64
10:14:34.410944 IP iZbpxxx_juv2Z > 47.xxx.xxx.250: ICMP echo reply, id 19, seq 1, length 64
10:14:35.412272 IP 47.xxx.xxx.250 > iZbpxxx_juv2Z: ICMP echo request, id 19, seq 2, length 64
10:14:35.412307 IP iZbpxxx_juv2Z > 47.xxx.xxx.250: ICMP echo reply, id 19, seq 2, length 64
10:14:36.413675 IP 47.xxx.xxx.250 > iZbpxxx_uv2Z: ICMP echo request, id 19, seq 3, length 64
10:14:36.413707 IP iZbpxxx_juv2Z > 47.xxx.xxx.250: ICMP echo reply, id 19, seq 3, length 64
本番環境での考慮事項
-
リスク防止: このソリューションは単一の ECS インスタンスを使用します。高可用性を実現するには、ロードバランサーを使用してください。インスタンスの再起動やネットワーク設定の変更は、サービスの中断を引き起こす可能性があることに注意してください。
-
監視とアラート: セカンダリ ENI のネットワークトラフィック、CPU 使用率、メモリ使用量などの主要なメトリックに対して監視とアラートを設定し、異常を迅速に検出します。
-
セキュリティ強化: 最小権限の原則を使用して、セカンダリ ENI のセキュリティグループを設定します。サービスに不可欠なポートと送信元 IP アドレスのみを許可します。
課金
-
-
EIP 設定料金 (パブリック IP 維持料金):
-
従量課金 EIP:セカンダリ ENI にバインドされている場合、インターネットトラフィックがなくても設定料金 (パブリック IP 維持料金) が課金されます。
-
サブスクリプション EIP:設定料金は課金されません。
-
-
インターネットトラフィック料金:
-
従量課金 EIP:選択した課金方法 (帯域幅課金またはトラフィック課金) に基づいて料金が課金されます。
-
サブスクリプション EIP:ピーク帯域幅に基づいて料金が課金されます。
-
-
-
その他のリソース:ECS インスタンスなどのリソースは、標準の課金ルールに従って課金されます。セカンダリ ENI は無料です。