Elastic Compute Service (ECS) インスタンスが複数のネットワークインターフェース間でトラフィックを送受信する方法を制御するため、ENI のルートテーブルおよびルーティングルールを設定します。
ENI のポリシーベースルーティング設定
ポリシーベースルーティングは、デフォルトルートに依存せず、事前に定義されたルールに基づいて特定のネットワークインターフェース経由でトラフィックを転送します。これにより、複数の ENI 間で詳細なトラフィック制御が可能になります。
ユースケース
-
マルチ ENI 環境での通信:セカンダリ ENI が EIP または NAT ゲートウェイとともに使用されている場合、プライマリ ENI のデフォルトルートの優先度が高いため、応答トラフィックがプライマリ ENI 経由で送信されることがあります。ポリシーベースルートを使用すると、ソースイン・ソースアウトの原則に従って、トラフィックが同じ ENI を通じて送受信されます。
-
トラフィックの負荷分散:デフォルトルートが要件を満たさない場合、ルーティングルールを定義してアウトバウンドトラフィックを複数の ENI 間で分散できます。
-
アクセス制御:ネットワーク分離のために、送信元アドレス、送信先アドレス、その他のパラメーターに基づいて、特定のインターフェースまたはパスへのトラフィックを制限できます。
前提条件
-
ENI が ECS インスタンスにバインドされています。
詳細については、「ENI を ECS インスタンスにバインドする」(「ENI の作成と管理」トピック内)をご参照ください。
-
ENI が ECS インスタンスのオペレーティングシステムで有効になっています。
詳細については、「ENI を ECS インスタンスで有効にする」(「ENI の作成と管理」トピック内)をご参照ください。
操作手順
以下の例では、eth1 という名前のセカンダリ ENI を使用しています。ENI 識別子および IP アドレスは、実際の値に置き換えてください。
Linux インスタンス
-
ENI のルートテーブルを作成し、ルートルールを追加します。
ip -4 route add default via <Gateway of eth1> dev eth1 table 1001 ip -4 rule add from <IP address of eth1> lookup 1001たとえば、eth1 用に 1001 という名前のルートテーブルを作成し、172.16.20.193 からのパケットが eth1 経由でルーティングされるようにルールを追加します。
ip -4 route add default via 172.16.20.253 dev eth1 table 1001 ip -4 rule add from 172.16.20.193 lookup 1001 -
再起動後もルート設定を維持します。
ルートコマンドをインスタンスの起動設定に追加して永続化してください。この手順を実行しないと、再起動後にルートが失われます。テスト目的のみの場合は、この手順をスキップしてください。
-
/etc/rc.localを開きます。vim /etc/rc.local -
iキーを押して挿入モードに入り、前のステップの コマンド を追加した後、Escキーを押します。:wqと入力して Enter キーを押し、ファイルを保存して閉じます。説明ネットワークインターフェース識別子およびゲートウェイアドレスは、実際の値に置き換えてください。
-
/etc/rc.localに実行権限を付与します。sudo chmod +x /etc/rc.local
-
-
ルートテーブルおよびルールが作成されたことを確認します。
ip route list table 1001 && \ ip rule list以下の出力により、ルートテーブルおよびルールが正しく設定されていることが確認できます。

Windows インスタンス
-
ENI のポリシーベースルートを作成します。
route add -p <Destination network> mask <Subnet mask> <Gateway> if <Interface index> metric <Route priority>この例では、Ethernet 2 という名前の ENI を使用しています。以下のコマンドは、172.16.12.76 からのすべてのパケットをゲートウェイ
172.16.12.253経由でルーティングします。route add -p 0.0.0.0 mask 0.0.0.0 172.16.12.253 if 6 metric 1パラメーター:
-
-p:ルートを永続的にします。
-pを指定しない場合、ルートは一時的となり、再起動後に失われます。 -
送信先ネットワーク:
0.0.0.0はデフォルトルートを示し、特定のルートに一致しない場合に使用されます。 -
サブネットマスクおよびゲートウェイ:
ipconfigを実行してこれらの値を確認できます(下図参照)。
-
インターフェースインデックス:
netsh interface ipv4 show interfacesを実行してインデックスを確認できます(下図参照)。
-
ルート優先度:metric <n> 形式で指定します。値が小さいほど優先度が高くなります。
-
-
route printを実行して、ルートがルートリストに表示されることを確認します。
例
この例では、Alibaba Cloud Linux 3.2 を実行中の ECS インスタンスが、セカンダリ ENI(eth1)経由でパケットを受信し、プライマリ ENI(eth0)ではなく eth1 経由で応答パケットを送信するようにポリシーベースルートを設定する方法を示します。セキュリティポリシーで特定の ENI に対して送信元 IP ホワイトリストが設定されている場合、トラフィックパスが不一致になると正当なリクエストが拒否されます。ポリシーベースルートにより、この問題を解決できます。
-
環境を準備します。
-
ECS インスタンスを作成します。
詳細については、「カスタム起動タブでインスタンスを作成する」をご参照ください。
-
セカンダリ ENI を ECS インスタンスにバインドします。
詳細については、「セカンダリ ENI をバインドする」をご参照ください。
-
Elastic IP Address (EIP) を申請し、一般モードで eth1 セカンダリ ENI に関連付けます。
詳細については、「セカンダリ ENI に EIP を関連付ける」をご参照ください。

-
テストクライアントを準備します。
インターネット接続可能な別の ECS インスタンスまたはオンプレミスコンピューターをテストクライアントとして使用します。
-
ECS インスタンスのセキュリティグループにインバウンドルールを追加し、テストクライアントのパブリック IP アドレスからのアクセスを許可します。その後、テストクライアントで ping <EIP> を実行し、ステップ c で関連付けた EIP への接続性を確認します。

詳細については、「ケース 4:特定のプロトコルのトラフィックのみを ECS インスタンスに許可する」(「セキュリティグループの使用ガイドラインとユースケース」トピック内)をご参照ください。
-
-
テストクライアントから ECS インスタンスにパケットを送信します。
ping 47.xx.xx.109IP アドレスは、eth1 に関連付けられた EIP に置き換えてください。
-
ECS インスタンスの eth0 および eth1 の両方で ICMP パケットを監視します。
-
eth0で ICMP パケットをキャプチャします。tcpdump -i eth0 icmp -
新しいウィンドウを開き、
eth1で ICMP パケットをキャプチャします。tcpdump -i eth1 icmp
-
-
結果を確認します。
ポリシーベースルート未設定
パケットは eth1 経由で受信されますが、応答パケットは eth0 経由で送信されます。インスタンスは eth1 で受信し、eth0 で応答します。

eth0 のデフォルトルートの優先度(100)が eth1 より高いため、パケットは eth0 から送信されます。

ポリシーベースルート設定済み
-
ポリシーベースルートを設定します。詳細については、本トピックの「ENI のポリシーベースルーティング設定」をご参照ください。
ip -4 route add default via 172.16.20.253 dev eth1 table 1001 ip -4 rule add from 172.16.20.177 lookup 1001 -
テストクライアントで
ping <EIP>を実行します。 -
ENI 上で ICMP パケットを監視します。
パケットは現在、eth1 経由で送受信されます。ソースイン・ソースアウトの原則に基づき、インスタンスは同じ ENI を通じて送受信を行います。

-
ENI のデフォルトルート設定
ENI を ECS インスタンスにバインドすると、デフォルトルートは自動的に設定されます。ただし、Ubuntu 18 より古いバージョン(例:Ubuntu 16)では、セカンダリ ENI に対してデフォルトルートが設定されない場合があり、ネットワーク接続の問題が発生することがあります。以下の手順に従って、デフォルトルートを手動で設定してください。
この例では、Ubuntu16 およびセカンダリ ENI eth1 を使用します。
-
ENI 情報を表示します。
ip a
出力により、eth1 がオペレーティングシステムで有効になっていることが確認できます。
-
ルート情報を表示します。
route -n出力により、eth1 には内部ルートのみが存在し、アウトバウンドルートが存在しないことが確認できます。

-
eth1 のデフォルトルートを設定します。
ip -4 route add default via 172.16.20.253 dev eth1 metric 200-
-4:IPv4 アドレスにのみ適用されます。 -
172.16.20.253:eth1 のゲートウェイアドレスです。 -
metric 200:ルート優先度です。値が小さいほど優先度が高くなります。同一の送信先に対する複数のルートが存在する場合、メトリック値が最も小さいルートが使用されます。
-
-
再起動後もルート設定を維持します。
ルートコマンドをインスタンスの起動設定に追加して永続化してください。この手順を実行しないと、再起動後にルートが失われます。テスト目的のみの場合は、この手順をスキップしてください。
-
/etc/rc.localを開きます。vim /etc/rc.local -
iキーを押して挿入モードに入り、前のステップの コマンド を追加した後、Escキーを押します。:wqと入力して Enter キーを押し、ファイルを保存して閉じます。説明ネットワークインターフェース識別子およびゲートウェイアドレスは、実際の値に置き換えてください。
-
/etc/rc.localに実行権限を付与します。sudo chmod +x /etc/rc.local
-
-
eth1 に追加されたルートを表示します。
route -n

