仮想プライベートクラウド (VPC) 内、および VPC と他のネットワーク間でデータが転送される場合、パケットのルーティングにルートテーブルが使用されます。 正しいルーティング構成は、Elastic Network Interface (ENI) が想定どおりにデータを送受信するのに役立ちます。 ENI を Elastic Compute Service (ECS) インスタンスにバインドすると、ENI にデフォルトルートが自動的に構成されます。 このトピックでは、既存のルートがビジネス要件を満たしていることを確認するためのルートテーブルとルールの構成方法について説明します。
ENI のポリシーベースルートを構成する
ポリシーベースルーティングとは、ルートテーブルのデフォルトルートだけでなく、事前に定義されたルールに基づいてルーティングを決定するネットワーク手法です。 ルートテーブルとルールを構成して、さまざまなルーティングポリシーを実装し、指定されたネットワークインターフェースを介してトラフィックを転送できます。 この方法で、ネットワークトラフィックをよりきめ細かく制御および管理できます。
シナリオ
マルチネットワークインターフェース環境での通信: セカンダリ ENI を EIP または NAT ゲートウェイと共に使用する場合、プライマリ ENI のデフォルトルートはセカンダリ ENI のデフォルトルートよりも優先度が高いため、アウトバウンドトラフィックは優先的にプライマリ ENI によって送信されます。 その結果、ECS インスタンスがセカンダリ ENI でデータトラフィックを受信した後、インスタンスはプライマリ ENI から返信データトラフィックを送信する可能性があり、通信の問題が発生します。 この場合、送信元インソースアウトの原則に基づいて、同じ ENI を介してデータトラフィックをルーティングするようにポリシーベースルートを構成できます。
トラフィックの負荷分散: マルチネットワークインターフェース環境では、各ネットワークインターフェースが異なるネットワークに接続したり、異なる目的に使用されたりする可能性があります。 その結果、デフォルトルートでは不十分な場合があります。 この場合、ネットワークインターフェースにポリシーベースルートを構成できます。 たとえば、ルールに基づいて、異なるネットワークインターフェース間でアウトバウンドトラフィックを分散および負荷分散するようにポリシーベースルートを構成できます。
アクセス制御: 送信元アドレス、宛先アドレス、またはその他のパラメーターに基づいてルーティングルールを定義し、特定の種類のトラフィックを特定のインターフェースまたはパスに制限して、ネットワーク 隔離 を実現します。
前提条件
ENI が ECS インスタンスにバインドされていること。
詳細については、「ENI の作成と管理」トピックの「ENI を ECS インスタンスにバインドする」セクションをご参照ください。
ENI が ECS インスタンスのオペレーティングシステムで有効になっていること。
詳細については、「ENI の作成と管理」トピックの「ECS インスタンスで ENI を有効にするように構成する」セクションをご参照ください。
手順
このセクションでは、eth1 という名前のセカンダリ ENI を使用します。 ネットワークインターフェース ID や IP アドレスなど、ENI の情報は実際の値に置き換えてください。
Linux インスタンス
次のコマンドを実行して、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
インスタンスの起動時にルーティング情報を自動的に更新し、構成を永続的に有効にするように ECS インスタンスを構成します。
eth1 のデフォルトルートを構成した後、インスタンスの起動時にルーティング情報を自動的に更新するように、関連コマンドをインスタンスの構成ファイルに追加します。 そうしないと、インスタンスの再起動後にデフォルトルート構成が無効になります。 デフォルトルートを使用してテストを実行する場合は、この手順をスキップしてください。
次のコマンドを実行して、
/etc/rc.local
ファイルを開きます。vim /etc/rc.local
i
キーを押して挿入モードに入り、前の手順で実行したコマンドをファイルに追加し、Esc
キーを押して挿入モードを終了します。:wq
と入力し、Enter キーを押してファイルを保存して閉じます。説明コマンドでは、ネットワークインターフェース ID やゲートウェイアドレスなどの関連情報を実際の値に置き換えてください。
次のコマンドを実行して、
/etc/rc.local
ファイルの実行権限を付与します。sudo chmod +x /etc/rc.local
次のコマンドを実行して、ルートテーブルが作成され、ルートテーブルにルーティングルールが追加されているかどうかを確認します。
ip route list table 1001 && \ ip rule list
次のコマンド出力は、ルートテーブルが作成され、ルートテーブルにルーティングルールが追加されたことを示しています。
Windows インスタンス
次のコマンドを実行して、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 のサブネットマスクとゲートウェイを表示します。インターフェースインデックス: ENI のインデックス。
netsh interface ipv4 show interfaces
コマンドを実行して、次の図に示すように、ENI のインデックスを表示します。ルートの優先度: ルートの優先度。 metric <n> 形式で値を指定します。 値が小さいほど、優先度が高くなります。
route print
コマンドを実行して、作成されたルートがルートリストに表示されるかどうかを確認します。
例
このセクションでは、ECS インスタンスが eht1 という名前のセカンダリ ENI を介してパケットを受信し、eth0 という名前のプライマリ ENI を介して返信パケットを送信するように、ポリシーベースルートを構成する方法について説明します。 この例では、Alibaba Cloud Linux 3.2 を実行する ECS インスタンスを使用します。 セキュリティポリシーの送信元 IP アドレスホワイトリストに特定のネットワークインターフェースの IP アドレスのみが含まれている場合など、データトラフィックの方向に厳しい要件がある場合、トラフィックパスのバインディングが正しくないと、正当なリクエストが拒否される可能性があります。 この問題は、送信元 IP アドレスとネットワークインターフェースの不一致が原因で発生し、ネットワーク接続エラーが発生します。 この問題を解決するには、ポリシーベースルートを構成します。
環境を準備します。
ECS インスタンスを作成します。
ECS インスタンスの作成方法については、「[カスタム起動] タブでインスタンスを作成する」をご参照ください。
セカンダリ ENI を ECS インスタンスにバインドします。
セカンダリ ENI を ECS インスタンスにバインドする方法については、「セカンダリ ENI をバインドする」をご参照ください。
Elastic IP アドレス (EIP) を申請し、EIP を一般モードで ECS インスタンスにバインドされている eht1 という名前のセカンダリ ENI に関連付けます。
詳細については、「EIP をセカンダリ ENI に関連付ける」をご参照ください。
テストクライアントを準備します。
インターネットアクセスが可能な別の ECS インスタンスまたはオンプレミスのコンピューターをテストクライアントとして使用できます。
手順 a で作成した ECS インスタンスのセキュリティグループへのテストクライアントのパブリック IP アドレスからのアクセスを許可するインバウンドルールを追加します。 その後、テストクライアントで ping <EIP> コマンドを実行して、手順 c で関連付けた EIP に ping を実行し、ECS インスタンスにアクセスできます。
詳細については、「セキュリティグループの使用ガイドラインとユースケース」トピックの「ケース 4: 特定のプロトコルのトラフィックのみが ECS インスタンスにアクセスできるようにする」セクションをご参照ください。
テストクライアントで次のコマンドを実行して、ECS インスタンスにパケットを送信します。
ping 47.xx.xx.109
上記のコマンドでは、IP アドレスを eth1 セカンダリ ENI に関連付けられている EIP に置き換えます。
ECS インスタンスのプライマリ ENI (eth0) と eth1 セカンダリ ENI でインターネット制御メッセージプロトコル (ICMP) パケットを監視します。
次のコマンドを実行して、
eth0
プライマリ ENI で ICMP パケットをキャプチャします。tcpdump -i eth0 icmp
新しいウィンドウを開き、次のコマンドを実行して、
eth1
セカンダリ ENI で ICMP パケットをキャプチャします。tcpdump -i eth1 icmp
結果を表示します。
ポリシーベースルートが構成されていない場合
次の図は、パケットが eth1 を介して入り、対応する返信パケットが eth0 を介して出ていくことを示しています。 ECS インスタンスは eth1 を介してリクエストを受信し、eth0 を介してレスポンスを送信します。
eth0 のデフォルトルートの優先度は 100 で、eth1 のデフォルトルートの優先度よりも高くなっています。 その結果、パケットは eth0 から送信されます。
ポリシーベースルートが構成されている場合
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
テストクライアントで
ping <EIP>
コマンドを実行します。ECS インスタンスの ENI で ICMP パケットを監視します。
次の図は、パケットが eth1 を介して入り、対応する返信パケットが eth1 を介して出ていくことを示しています。 ECS インスタンスは、送信元インソースアウトの原則に基づいて、eth1 を介してリクエストを受信し、レスポンスを送信します。
ENI のデフォルトルートを構成する
ENI を ECS インスタンスにバインドすると、ENI にデフォルトルートが自動的に構成されます。 Ubuntu 18 より前の特定のオペレーティングシステムバージョン (Ubuntu 16 など) では、セカンダリ ENI のデフォルトルートが自動的に構成されない場合があります。 デフォルトルートが構成されていない場合、ENI を外部通信に使用するときにネットワーク接続の問題が発生する可能性があります。 ENI のデフォルトルートを構成するには、次の手順を実行します。
この例では、Ubuntu16 とeth1 セカンダリ ENI を使用します。
次のコマンドを実行して、ENI 情報を表示します。
ip a
上記のコマンド出力は、eth1 が ECS インスタンスのオペレーティングシステムで有効になっていることを示しています。
次のコマンドを実行して、ルート情報を表示します。
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
: ルートのメトリック値 (優先度) を 200 に設定します。 メトリック値が小さいほど、優先度が高くなります。 同じ宛先への複数のルートが存在する場合、メトリック値が最も小さいルートが使用されます。
インスタンスの起動時にルーティング情報を自動的に更新し、構成を永続的に有効にするように ECS インスタンスを構成します。
eth1 のデフォルトルートを構成した後、インスタンスの起動時にルーティング情報を自動的に更新するように、関連コマンドをインスタンスの構成ファイルに追加します。 そうしないと、インスタンスの再起動後にデフォルトルート構成が無効になります。 デフォルトルートを使用してテストを実行する場合は、この手順をスキップしてください。
次のコマンドを実行して、
/etc/rc.local
ファイルを開きます。vim /etc/rc.local
i
キーを押して挿入モードに入り、前の手順で実行したコマンドをファイルに追加し、Esc
キーを押して挿入モードを終了します。:wq
と入力し、Enter キーを押してファイルを保存して閉じます。説明コマンドでは、ネットワークインターフェース ID やゲートウェイアドレスなどの関連情報を実際の値に置き換えてください。
次のコマンドを実行して、
/etc/rc.local
ファイルの実行権限を付与します。sudo chmod +x /etc/rc.local
次のコマンドを実行して、eth1 に追加されたルートを表示します。
route -n