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

Elastic Compute Service:ENI のルート設定

最終更新日:Aug 21, 2026

Elastic Network Interface (ENI) のルートテーブルとルーティングルールを設定して、ECS インスタンスが複数のネットワークインターフェイスを介してトラフィックを送受信する方法を制御します。

ENI のポリシーベースルーティングの設定

ポリシーベースルーティングは、デフォルトルートのみに依存するのではなく、事前定義されたルールに基づいて、指定されたネットワークインターフェイスを介してトラフィックを転送します。これにより、複数の ENI 間で詳細なトラフィック制御が可能になります。

ユースケース

  • 複数 ENI 環境での通信:セカンダリ ENI が Elastic IP アドレス (EIP) または NAT ゲートウェイと共に使用される場合、プライマリ ENI のデフォルトルートの優先度が高いため、応答トラフィックがプライマリ ENI を介して送信されることがあります。ポリシーベースルーティングは source-in-source-out の原則を適用し、トラフィックが同じ ENI を介して出入りするようにします。

  • トラフィックの負荷分散:デフォルトルートが要件を満たさない場合、ルーティングルールを定義して、複数の ENI にアウトバウンドトラフィックを分散します。

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

前提条件

操作手順

次の例では、eth1 という名前のセカンダリ ENI を使用します。ENI 識別子と IP アドレスは、実際の値に置き換えてください。

Linux インスタンス
  1. ENI 用のルートテーブルを作成し、ルーティングルールを追加します。

    ip -4 route add default via <eth1 のゲートウェイ> dev eth1 table 1001
    ip -4 rule add from <eth1 の IP アドレス> 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
  2. 再起動後もルート設定を永続化します。

    インスタンスの起動設定にルートコマンドを追加して永続化します。そうしない場合、再起動後にルートは失われます。テストのみを行う場合は、この手順をスキップしてください。

    1. /etc/rc.local を開きます。

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

      説明

      ネットワークインターフェイスの識別子とゲートウェイアドレスは、実際の値に置き換えてください。

    3. /etc/rc.local に実行権限を付与します。

      sudo chmod +x /etc/rc.local
  3. ルートテーブルとルールが作成されたことを確認します。

    ip route list table 1001 && \
    ip rule list

    次の出力は、ルートテーブルとルールが設定されていることを示しています。

    root@xxx:/etc/netplan# ip route list table 1001 && ip rule list
    default via 172.16.20.253 dev eth1
    0:	from all lookup local
    32765:	from 172.16.20.193 lookup 1001
    32766:	from all lookup main
    32767:	from all lookup default

Windows インスタンス

  1. ENI のポリシーベースルートを作成します。

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

    この例では、イーサネット 2 という名前の ENI が使用されます。次のコマンドは、特定のルートに一致しないトラフィックをゲートウェイ 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 を実行してこれらの値を確認します。

      C:\Users\Administrator>ipconfig
      
      Windows IP Configuration
      
      Ethernet adapter Ethernet:
      
         Connection-specific DNS Suffix  . : cn-hangzhou.ecs.internal
         Link-local IPv6 Address . . . . . : fe80::6926:88f5:e002:7443%3
         IPv4 Address. . . . . . . . . . . : 172.16.20.241
         Subnet Mask . . . . . . . . . . . : 255.255.255.0
         Default Gateway . . . . . . . . . : 172.16.20.253
      
      Ethernet adapter Ethernet 2:
      
         Connection-specific DNS Suffix  . : cn-hangzhou.ecs.internal
         Link-local IPv6 Address . . . . . : fe80::46bd:a7fb:362e:f79f%6
         IPv4 Address. . . . . . . . . . . : 172.16.12.76
         Subnet Mask . . . . . . . . . . . : 255.255.255.0
         Default Gateway . . . . . . . . . : 172.16.12.253
    • インターフェイスインデックス:netsh interface ipv4 show interfaces を実行してインデックスを確認します。

      この例では、イーサネット 2 のインターフェイスインデックス (Idx) は 6 です。

      C:\Users\Administrator>netsh interface ipv4 show interfaces
      
      Idx     Met         MTU          State                Name
      ---  ----------  ----------  ------------  ---------------------------
        1          75  4294967295  connected     Loopback Pseudo-Interface 1
        3          15        1500  connected     Ethernet
        6          15        1500  connected     Ethernet 2
    • ルート優先度:metric <n> の形式で指定します。値が小さいほど優先度が高くなります。

  2. route print を実行して、ルートがルート一覧に表示されることを確認します。

    C:\Users\Administrator>route print
    
    ===========================================================================
    Interface List
    3...00 16 3e 0a d5 39 ......Red Hat VirtIO Ethernet Adapter
    6...00 16 3e 4c 88 9c ......Red Hat VirtIO Ethernet Adapter #2
    1...........................Software Loopback Interface 1
    
    IPv4 Route Table
    
    Active Routes:
    Network Destination        Netmask          Gateway       Interface  Metric
    0.0.0.0          0.0.0.0    172.16.12.253   172.16.12.76     15
    0.0.0.0          0.0.0.0    172.16.20.253   172.16.20.241     15
    127.0.0.0        255.0.0.0         On-link       127.0.0.1    331
    127.0.0.1  255.255.255.255         On-link       127.0.0.1    331
    127.255.255.255  255.255.255.255         On-link       127.0.0.1    331
    172.16.12.0    255.255.255.0         On-link    172.16.12.76    271
    172.16.12.76  255.255.255.255         On-link    172.16.12.76    271
    172.16.12.255  255.255.255.255         On-link    172.16.12.76    271
    172.16.20.0    255.255.255.0         On-link   172.16.20.241    271
    172.16.20.241  255.255.255.255         On-link   172.16.20.241    271
    172.16.20.255  255.255.255.255         On-link   172.16.20.255    271
    224.0.0.0        240.0.0.0         On-link       127.0.0.1    331
    224.0.0.0        240.0.0.0         On-link   172.16.20.241    271
    224.0.0.0        240.0.0.0         On-link    172.16.12.76    271
    255.255.255.255  255.255.255.255         On-link       127.0.0.1    331
    255.255.255.255  255.255.255.255         On-link   172.16.20.241    271
    255.255.255.255  255.255.255.255         On-link    172.16.12.76    271
    
    Persistent Routes:
    Network Address          Netmask  Gateway Address  Metric
    0.0.0.0          0.0.0.0    172.16.12.253       1
    ===========================================================================

この例では、Alibaba Cloud Linux 3.2 を実行している ECS インスタンスがセカンダリ ENI (eth1) を介してパケットを受信し、プライマリ ENI (eth0) ではなく eth1 を介して応答パケットを送信するように、ポリシーベースルートを設定する方法を示します。セキュリティポリシーに特定の ENI の送信元 IP ホワイトリストが含まれている場合、トラフィックパスが一致しないと、正当なリクエストが拒否されます。ポリシーベースルーティングはこの問題を解決します。

  1. 環境を準備します。

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

      詳細については、「[カスタム購入] タブでインスタンスを作成」をご参照ください。

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

      詳細については、「セカンダリ ENI のバインド」をご参照ください。

    3. EIP を申請し、NAT モードで eth1 セカンダリ ENI に関連付けます。

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

      バインドが完了すると、ECS インスタンスの詳細ページの [Elastic Network Interface] タブで、セカンダリ ENI のステータスが [バインド済み] に変わり、[IP アドレス] 列に割り当てられたパブリック IP アドレス (EIP) とプライマリプライベート IP アドレスが表示されます。

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

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

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

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

  2. テストクライアントから ECS インスタンスにパケットを送信します。

    ping 47.xx.xx.109

    IP アドレスを eth1 に関連付けられた EIP に置き換えてください。

  3. ECS インスタンスの eth0 と eth1 の両方で ICMP パケットを監視します。

    • eth0 で ICMP パケットをキャプチャします。

      tcpdump -i eth0 icmp
    • 新しいウィンドウを開き、eth1 で ICMP パケットをキャプチャします。

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

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

    パケットは eth1 を経由して入りますが、応答パケットは eth0 を経由して出ます。インスタンスは eth1 で受信し、eth0 で応答します。

    eth0 でパケットをキャプチャします。ICMP エコー応答を確認できます。

    [root@xxx ~]# tcpdump -i eth0 icmp
    dropped privs to tcpdump
    tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
    listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
    14:01:55.129356 IP iZxxx > 12.xxx: ICMP echo reply, id 2048, seq 142, length 40
    14:01:56.141993 IP iZxxx > 12.xxx: ICMP echo reply, id 2048, seq 143, length 40
    14:01:57.145388 IP iZxxx > 12.xxx: ICMP echo reply, id 2048, seq 144, length 40
    14:01:58.163042 IP iZxxx > 12.xxx: ICMP echo reply, id 2048, seq 145, length 40

    eth1 でパケットをキャプチャします。ICMP エコー要求を確認できます。

    [root@xxx ~]# 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
    14:01:55.129339 IP 12.xxx > iZxxx: ICMP echo request, id 2048, seq 142, length 40
    14:01:56.141980 IP 12.xxx > iZxxx: ICMP echo request, id 2048, seq 143, length 40
    14:01:57.145376 IP 12.xxx > iZxxx: ICMP echo request, id 2048, seq 144, length 40
    14:01:58.163030 IP 12.xxx > iZxxx: ICMP echo request, id 2048, seq 145, length 40

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

    [root@i xxx          ~]# route -n
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    0.0.0.0         172.16.20.253   0.0.0.0         UG    100    0        0 eth0
    0.0.0.0         172.16.20.253   0.0.0.0         UG    101    0        0 eth1
    172.16.20.0     0.0.0.0         255.255.255.0   U     100    0        0 eth0
    172.16.20.0     0.0.0.0         255.255.255.0   U     101    0        0 eth1
    ポリシーベースルートが設定されている場合
    1. ポリシーベースルートを設定します。詳細については、このトピックの「ENI のポリシーベースルーティングの設定」セクションをご参照ください。

      ip -4 route add default via 172.16.20.253 dev eth1 table 1001
      ip -4 rule add from 172.16.20.199 lookup 1001
    2. テストクライアントで ping <EIP> を実行します。

    3. ENI で ICMP パケットを監視します。

      パケットは eth1 を経由して出入りするようになりました。インスタンスは source-in-source-out の原則に基づいて、同じ ENI を介して送受信します。

      [root@xxx ~]# tcpdump -i eth0 icmp
      dropped privs to tcpdump
      tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
      listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
      
      [root@xxx ~]# 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
      14:15:13.249277 IP 123.xxx.xxx.4 > iZbp1gt1xxx          Z: ICMP echo request, id 2050, seq 150, length 40
      14:15:13.249293 IP iZbxxx    lh49gbqovzZ :         4: ICMP echo reply, id 2050, seq 150, length 40
      14:15:14.263769 IP 123.xxx.xxx.4 > iZbp1gt1xxx          Z: ICMP echo request, id 2050, seq 151, length 40
      14:15:14.263783 IP iZbxxx    lh49gbqovzZ :         4: ICMP echo reply, id 2050, seq 151, length 40
      14:15:15.267143 IP 123.xxx.xxx.4 > iZbp1gt1xxx          Z: ICMP echo request, id 2050, seq 152, length 40
      14:15:15.267155 IP iZbxxx    lh49gbqovzZ :         4: ICMP echo reply, id 2050, seq 152, length 40
      14:15:16.275436 IP 123.xxx.xxx.4 > iZbp1gt1xxx          Z: ICMP echo request, id 2050, seq 153, length 40
      14:15:16.275449 IP iZbxxx    lh49gbqovzZ :         4: ICMP echo reply, id 2050, seq 153, length 40

ENI のデフォルトルートの設定

デフォルトルートは、ENI を ECS インスタンスにバインドする際に自動的に設定されます。ただし、Ubuntu 18 より前の OS バージョン (Ubuntu 16 など) では、セカンダリ ENI のデフォルトルートが設定されず、ネットワーク接続の問題が発生することがあります。次の手順に従って、手動でデフォルトルートを設定します。

この例では、Ubuntu 16eth1 セカンダリ ENI が使用されます。

  1. ENI 情報を表示します。

    ip a
    root@xxx:/etc/network# ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host
           valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
        link/ether 00:16:3e:15:74:ee brd ff:ff:ff:ff:ff:ff
        inet 172.16.20.231/24 brd 172.16.20.255 scope global eth0
           valid_lft forever preferred_lft forever
        inet6 fe80::216:3eff:fe15:74ee/64 scope link
           valid_lft forever preferred_lft forever
    3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
        link/ether 00:16:3e:46:31:f4 brd ff:ff:ff:ff:ff:ff
        inet 172.16.20.199/24 brd 172.16.20.255 scope global eth1
           valid_lft forever preferred_lft forever
        inet6 fe80::216:3eff:fe46:31f4/64 scope link
           valid_lft forever preferred_lft forever

    出力は、eth1 がオペレーティングシステムで有効になっていることを示しています。

  2. ルート情報を表示します。

    route -n

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

    root@xxx:/etc/network# route -n
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    0.0.0.0         172.16.20.253   0.0.0.0         UG    0      0        0 eth0
    172.16.20.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
    172.16.20.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1

    通信失敗の例

    アウトバウンドルートがないと、eth1 を介した通信は失敗します。たとえば、インターネットアクセス用に EIP を eth1 に関連付けると、接続が失われます。

    root@xxx               /etc/network# ping -I eth1 www.xxx.com
    PING www.xxx.com (1xxx12) from 172.16.20.199 eth1: 56(84) bytes of data.
    From 172.16.20.199 icmp_seq=1 Destination Host Unreachable
    From 172.16.20.199 icmp_seq=2 Destination Host Unreachable
    From 172.16.20.199 icmp_seq=3 Destination Host Unreachable
    From 172.16.20.199 icmp_seq=4 Destination Host Unreachable
    From 172.16.20.199 icmp_seq=5 Destination Host Unreachable
    From 172.16.20.199 icmp_seq=6 Destination Host Unreachable
    From 172.16.20.199 icmp_seq=7 Destination Host Unreachable
    From 172.16.20.199 icmp_seq=8 Destination Host Unreachable
    From 172.16.20.199 icmp_seq=9 Destination Host Unreachable
    From 172.16.20.199 icmp_seq=10 Destination Host Unreachable
    From 172.16.20.199 icmp_seq=11 Destination Host Unreachable
    From 172.16.20.199 icmp_seq=12 Destination Host Unreachable
    From 172.16.20.199 icmp_seq=13 Destination Host Unreachable
    From 172.16.20.199 icmp_seq=14 Destination Host Unreachable
  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:ルート優先度です。値が小さいほど優先度が高くなります。同じ宛先へのルートが複数存在する場合、メトリックが最も小さいルートが使用されます。

  4. 再起動後もルート設定を永続化します。

    インスタンスの起動設定にルートコマンドを追加して永続化します。そうしない場合、再起動後にルートは失われます。テストのみを行う場合は、この手順をスキップしてください。

    1. /etc/rc.local を開きます。

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

      説明

      ネットワークインターフェイスの識別子とゲートウェイアドレスは、実際の値に置き換えてください。

    3. /etc/rc.local に実行権限を付与します。

      sudo chmod +x /etc/rc.local
  5. eth1 に追加されたルートを表示します。

    route -n
    root@ixxxxxxxxxx:/etc/network# route -n
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    0.0.0.0         172.16.20.253   0.0.0.0         UG    0      0        0 eth0
    0.0.0.0         172.16.20.253   0.0.0.0         UG    200    0        0 eth1
    172.16.20.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
    172.16.20.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1

    問題が解決されたことの確認

    デフォルトルートを設定した後、eth1 は期待どおりに通信します。

    root@xxx:~/etc/network# ping  -I eth1 www.xxx.com
    PING www.xxx.com (xxx) from 172.16.20.199 eth1: 56(84) bytes of data.
    64 bytes from xxx: icmp_seq=1 ttl=51 time=11.6 ms
    64 bytes from xxx: icmp_seq=2 ttl=51 time=11.6 ms
    64 bytes from xxx: icmp_seq=3 ttl=51 time=11.6 ms
    64 bytes from xxx: icmp_seq=4 ttl=51 time=11.6 ms
    ^C