すべてのプロダクト
Search
ドキュメントセンター

Elastic Compute Service:ENI のルートを構成する

最終更新日:Mar 07, 2025

仮想プライベートクラウド (VPC) 内、および VPC と他のネットワーク間でデータが転送される場合、パケットのルーティングにルートテーブルが使用されます。 正しいルーティング構成は、Elastic Network Interface (ENI) が想定どおりにデータを送受信するのに役立ちます。 ENI を Elastic Compute Service (ECS) インスタンスにバインドすると、ENI にデフォルトルートが自動的に構成されます。 このトピックでは、既存のルートがビジネス要件を満たしていることを確認するためのルートテーブルとルールの構成方法について説明します。

ENI のポリシーベースルートを構成する

ポリシーベースルーティングとは、ルートテーブルのデフォルトルートだけでなく、事前に定義されたルールに基づいてルーティングを決定するネットワーク手法です。 ルートテーブルとルールを構成して、さまざまなルーティングポリシーを実装し、指定されたネットワークインターフェースを介してトラフィックを転送できます。 この方法で、ネットワークトラフィックをよりきめ細かく制御および管理できます。

シナリオ

  • マルチネットワークインターフェース環境での通信: セカンダリ ENI を EIP または NAT ゲートウェイと共に使用する場合、プライマリ ENI のデフォルトルートはセカンダリ ENI のデフォルトルートよりも優先度が高いため、アウトバウンドトラフィックは優先的にプライマリ ENI によって送信されます。 その結果、ECS インスタンスがセカンダリ ENI でデータトラフィックを受信した後、インスタンスはプライマリ ENI から返信データトラフィックを送信する可能性があり、通信の問題が発生します。 この場合、送信元インソースアウトの原則に基づいて、同じ ENI を介してデータトラフィックをルーティングするようにポリシーベースルートを構成できます。

  • トラフィックの負荷分散: マルチネットワークインターフェース環境では、各ネットワークインターフェースが異なるネットワークに接続したり、異なる目的に使用されたりする可能性があります。 その結果、デフォルトルートでは不十分な場合があります。 この場合、ネットワークインターフェースにポリシーベースルートを構成できます。 たとえば、ルールに基づいて、異なるネットワークインターフェース間でアウトバウンドトラフィックを分散および負荷分散するようにポリシーベースルートを構成できます。

  • アクセス制御: 送信元アドレス、宛先アドレス、またはその他のパラメーターに基づいてルーティングルールを定義し、特定の種類のトラフィックを特定のインターフェースまたはパスに制限して、ネットワーク 隔離 を実現します。

前提条件

手順

このセクションでは、eth1 という名前のセカンダリ ENI を使用します。 ネットワークインターフェース ID や IP アドレスなど、ENI の情報は実際の値に置き換えてください。

Linux インスタンス
  1. 次のコマンドを実行して、ENI のルートテーブルを作成し、ルートテーブルにルーtrールを追加します。

    ip -4 route add default via <eth1 のゲートウェイ> dev eth1 table 1001
    ip -4 rule add from <eth1 の IP アドレス> lookup 1001

    たとえば、次のコマンドを実行して、eth1 セカンダリ ENI の 1001 という名前のルートテーブルを作成し、172.16.20.193 から発信されるパケットのルーティングルールをルートテーブルに追加します。 これにより、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
  2. インスタンスの起動時にルーティング情報を自動的に更新し、構成を永続的に有効にするように ECS インスタンスを構成します。

    eth1 のデフォルトルートを構成した後、インスタンスの起動時にルーティング情報を自動的に更新するように、関連コマンドをインスタンスの構成ファイルに追加します。 そうしないと、インスタンスの再起動後にデフォルトルート構成が無効になります。 デフォルトルートを使用してテストを実行する場合は、この手順をスキップしてください。

    1. 次のコマンドを実行して、/etc/rc.local ファイルを開きます。

      vim /etc/rc.local
    2. i キーを押して挿入モードに入り、前の手順で実行したコマンドをファイルに追加し、Esc キーを押して挿入モードを終了します。 :wq と入力し、Enter キーを押してファイルを保存して閉じます。

      説明

      コマンドでは、ネットワークインターフェース ID やゲートウェイアドレスなどの関連情報を実際の値に置き換えてください。

    3. 次のコマンドを実行して、/etc/rc.local ファイルの実行権限を付与します。

      sudo chmod +x /etc/rc.local
  3. 次のコマンドを実行して、ルートテーブルが作成され、ルートテーブルにルーティングルールが追加されているかどうかを確認します。

    ip route list table 1001 && \
    ip rule list

    次のコマンド出力は、ルートテーブルが作成され、ルートテーブルにルーティングルールが追加されたことを示しています。

    image

Windows インスタンス

  1. 次のコマンドを実行して、ENI のポリシーベースルートを作成します。

    route add -p <宛先ネットワーク> mask <サブネットマスク> <ゲートウェイ> if <インターフェースインデックス> metric <ルートの優先度>

    この例では、Ethernet 2 という名前の ENI を使用します。 次のコマンドを実行して、172.16.12.253 のゲートウェイを介して 172.16.12.76 から発信されるすべてのパケットを転送するルートを構成します。

    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 の値はデフォルトルートを示し、特定のルートが一致しない場合に使用されます。

    • サブネットマスクとゲートウェイ: ENI のサブネットマスクとゲートウェイ。 ipconfig コマンドを実行して、次の図に示すように、ENI のサブネットマスクとゲートウェイを表示します。

      image

    • インターフェースインデックス: ENI のインデックス。 netsh interface ipv4 show interfaces コマンドを実行して、次の図に示すように、ENI のインデックスを表示します。

      image

    • ルートの優先度: ルートの優先度。 metric <n> 形式で値を指定します。 値が小さいほど、優先度が高くなります。

  2. route print コマンドを実行して、作成されたルートがルートリストに表示されるかどうかを確認します。

    image

このセクションでは、ECS インスタンスが eht1 という名前のセカンダリ ENI を介してパケットを受信し、eth0 という名前のプライマリ ENI を介して返信パケットを送信するように、ポリシーベースルートを構成する方法について説明します。 この例では、Alibaba Cloud Linux 3.2 を実行する ECS インスタンスを使用します。 セキュリティポリシーの送信元 IP アドレスホワイトリストに特定のネットワークインターフェースの IP アドレスのみが含まれている場合など、データトラフィックの方向に厳しい要件がある場合、トラフィックパスのバインディングが正しくないと、正当なリクエストが拒否される可能性があります。 この問題は、送信元 IP アドレスとネットワークインターフェースの不一致が原因で発生し、ネットワーク接続エラーが発生します。 この問題を解決するには、ポリシーベースルートを構成します。

  1. 環境を準備します。

    1. ECS インスタンスを作成します。

      ECS インスタンスの作成方法については、「[カスタム起動] タブでインスタンスを作成する」をご参照ください。

    2. セカンダリ ENI を ECS インスタンスにバインドします。

      セカンダリ ENI を ECS インスタンスにバインドする方法については、「セカンダリ ENI をバインドする」をご参照ください。

    3. Elastic IP アドレス (EIP) を申請し、EIP を一般モードで ECS インスタンスにバインドされている eht1 という名前のセカンダリ ENI に関連付けます。

      詳細については、「EIP をセカンダリ ENI に関連付ける」をご参照ください。

      image

    4. テストクライアントを準備します。

      インターネットアクセスが可能な別の ECS インスタンスまたはオンプレミスのコンピューターをテストクライアントとして使用できます。

    5. 手順 a で作成した ECS インスタンスのセキュリティグループへのテストクライアントのパブリック IP アドレスからのアクセスを許可するインバウンドルールを追加します。 その後、テストクライアントで ping <EIP> コマンドを実行して、手順 c で関連付けた EIP に ping を実行し、ECS インスタンスにアクセスできます。

      image

      詳細については、「セキュリティグループの使用ガイドラインとユースケース」トピックの「ケース 4: 特定のプロトコルのトラフィックのみが ECS インスタンスにアクセスできるようにする」セクションをご参照ください。

  2. テストクライアントで次のコマンドを実行して、ECS インスタンスにパケットを送信します。

    ping 47.xx.xx.109

    上記のコマンドでは、IP アドレスを eth1 セカンダリ ENI に関連付けられている EIP に置き換えます。

  3. ECS インスタンスのプライマリ ENI (eth0) と eth1 セカンダリ ENI でインターネット制御メッセージプロトコル (ICMP) パケットを監視します。

    • 次のコマンドを実行して、eth0 プライマリ ENI で ICMP パケットをキャプチャします。

      tcpdump -i eth0 icmp
    • 新しいウィンドウを開き、次のコマンドを実行して、eth1 セカンダリ ENI で ICMP パケットをキャプチャします。

      tcpdump -i eth1 icmp
  4. 結果を表示します。

    ポリシーベースルートが構成されていない場合

    次の図は、パケットが eth1 を介して入り、対応する返信パケットが eth0 を介して出ていくことを示しています。 ECS インスタンスは eth1 を介してリクエストを受信し、eth0 を介してレスポンスを送信します。

    image

    eth0 のデフォルトルートの優先度は 100 で、eth1 のデフォルトルートの優先度よりも高くなっています。 その結果、パケットは eth0 から送信されます。

    image

    ポリシーベースルートが構成されている場合
    1. ECS インスタンスのポリシーベースルートを構成します。 詳細については、このトピックの「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
    2. テストクライアントで ping <EIP> コマンドを実行します。

    3. ECS インスタンスの ENI で ICMP パケットを監視します。

      次の図は、パケットが eth1 を介して入り、対応する返信パケットが eth1 を介して出ていくことを示しています。 ECS インスタンスは、送信元インソースアウトの原則に基づいて、eth1 を介してリクエストを受信し、レスポンスを送信します。

      image

ENI のデフォルトルートを構成する

ENI を ECS インスタンスにバインドすると、ENI にデフォルトルートが自動的に構成されます。 Ubuntu 18 より前の特定のオペレーティングシステムバージョン (Ubuntu 16 など) では、セカンダリ ENI のデフォルトルートが自動的に構成されない場合があります。 デフォルトルートが構成されていない場合、ENI を外部通信に使用するときにネットワーク接続の問題が発生する可能性があります。 ENI のデフォルトルートを構成するには、次の手順を実行します。

この例では、Ubuntu16eth1 セカンダリ ENI を使用します。

  1. 次のコマンドを実行して、ENI 情報を表示します。

    ip a

    image

    上記のコマンド出力は、eth1 が ECS インスタンスのオペレーティングシステムで有効になっていることを示しています。

  2. 次のコマンドを実行して、ルート情報を表示します。

    route -n

    次のコマンド出力は、eth1 に内部通信用のルートのみがあり、アウトバウンドルートがないことを示しています。

    image

    例外の例

    上記のシナリオでは、通信に eth1 を指定すると例外が発生する可能性があります。 たとえば、次の図に示すように、EIP を eth1 に関連付けて、EIP を使用してインターネットと通信するように ECS インスタンスを構成すると、ネットワーク接続が失われる可能性があります。

    image

  3. 次のコマンドを実行して、eth1 のデフォルトルートを構成します。

    ip -4 route add default via 172.16.20.253 dev eth1 metric 200
    • -4: IPv4 アドレスにのみ適用されます。

    • 172.16.20.253: eth1 のゲートウェイアドレス。

    • metric 200: ルートのメトリック値 (優先度) を 200 に設定します。 メトリック値が小さいほど、優先度が高くなります。 同じ宛先への複数のルートが存在する場合、メトリック値が最も小さいルートが使用されます。

  4. インスタンスの起動時にルーティング情報を自動的に更新し、構成を永続的に有効にするように ECS インスタンスを構成します。

    eth1 のデフォルトルートを構成した後、インスタンスの起動時にルーティング情報を自動的に更新するように、関連コマンドをインスタンスの構成ファイルに追加します。 そうしないと、インスタンスの再起動後にデフォルトルート構成が無効になります。 デフォルトルートを使用してテストを実行する場合は、この手順をスキップしてください。

    1. 次のコマンドを実行して、/etc/rc.local ファイルを開きます。

      vim /etc/rc.local
    2. i キーを押して挿入モードに入り、前の手順で実行したコマンドをファイルに追加し、Esc キーを押して挿入モードを終了します。 :wq と入力し、Enter キーを押してファイルを保存して閉じます。

      説明

      コマンドでは、ネットワークインターフェース ID やゲートウェイアドレスなどの関連情報を実際の値に置き換えてください。

    3. 次のコマンドを実行して、/etc/rc.local ファイルの実行権限を付与します。

      sudo chmod +x /etc/rc.local
  5. 次のコマンドを実行して、eth1 に追加されたルートを表示します。

    route -n

    image

    例外が解決されたことを確認する

    eth1 を内部通信用に構成します。 次の図は、eth1 が想定どおりに通信できることを示しています。

    image