Ubuntu EC2 インスタンスでセカンダリネットワークインターフェイスを動作させる方法を教えてください。

所要時間3分
0

Ubuntu Amazon Elastic Compute Cloud (Amazon EC2) インスタンスでセカンダリネットワークインターフェイスを動作させたいです。

簡単な説明

**警告:**セカンダリエラスティックネットワークインターフェイスの使用は、上級ユーザーが意図されています。この解決策は、次のユースケースにのみ使用してください。 単一のネットワークインターフェースは使用できません。同じサブネットの 2 つのネットワークインターフェイスを単一のインスタンスにアタッチする必要があります。非対称ルーティングの問題を回避するには、単一のエラスティックネットワークインターフェイスを使用するか、重複しないサブネットに重複するエラスティックネットワークインターフェイスを配置します。または、Ubuntu 24.04 LTS 以降を使用します。

Amazon Linux EC2 インスタンス以外のインスタンスにセカンダリネットワークインターフェイスを追加すると、トラフィックフローの問題が発生します。これらの問題は、プライマリネットワークインターフェイスとセカンダリネットワークインターフェイスが同じサブネットにあり、ルーティングテーブルとゲートウェイが 1 つずつあるために発生します。セカンダリネットワークインターフェイスに入ってくるトラフィックは、プライマリネットワークインターフェイスを使用してインスタンスを離れます。セカンダリ IP アドレスはプライマリネットワークインターフェイスの MAC アドレスに属していないため、セカンダリインターフェイスは動作しません。

**注:**以下の手順は Ubuntu 24.04 では必要ありません。Ubuntu 24.04では、この高度な設定が自動的に処理されます。

作成後にセカンダリインターフェイスを動作させるには、次の手順を実行します。

  1. ルーティングテーブルを設定します。
  2. セカンダリインターフェイスのトラフィックが新しいルーティングテーブルを使用するように、カスタムルーティングテーブルポリシーデータベースにルールを設定します。

始める前に、Amazon EC2 インスタンスは AWS クラウド内にあるため、複数のインターフェイスを使用することで、すべてのユースケースでメリットが得られるわけではないことに注意してください。次の例は、セカンダリネットワークインターフェイスを使用する必要がない場合を示しています。

  • ネットワークスループットを向上させるには 制限はインスタンスのタイプとサイズに基づいて設定されるため、ネットワークスループットは向上しません。詳細については、「Amazon EC2 インスタンスタイプ」を参照してください。
  • Elastic IP アドレスを増やす方法を次に示します。 ほとんどのアプリケーションは DNS で正常に動作するため、インスタンスに Elastic IP アドレスを追加する必要はありません。例えば、Apache は名前ベースの仮想ホストを使用できます。詳細については、Apache のウェブサイトで「名前ベースのバーチャルホストのサポート」を参照してください。

**注:**セカンダリネットワークインターフェイスを追加する手順は、次の Ubuntu バージョンごとに異なります。

  • Ubuntu 14.04
  • Ubuntu 16.04
  • Ubuntu 18.04
  • Ubuntu 20.04
  • Ubuntu 22.04

解決策

注: 以下の解決策の手順は、記載されている Linux バージョンでテストされていますが、構成のカスタム設定を変更する必要がある場合があります。すべてのプロシージャは、ルートユーザーのアクセス許可で実行する必要があります。sudo-i でルートユーザーになるか、sudo ですべてのコマンドを実行します。

Ubuntu 14.04 または 16.04 の設定

1 つのファイルを使用してセカンダリインターフェイス設定ファイルを作成し、ルーティングテーブルを設定してから Ubuntu のルーティングポリシールールを設定できます。

Ubuntu 14.04 または 16.04 を設定するには、以下の手順を実行してください。

  1. プライマリネットワークインターフェイスの名前を取得するには、次のコマンドを実行します。

    ip a | grep ^[[:digit:]]

    次のメッセージのような出力が表示されます。

    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc pfifo_fast state UP group default qlen 1000
    3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000

    **重要:**前の例では、プライマリインターフェイスに eth0eth1 などの名前が付けられています。ただし、m4 や m5 ファミリタイプなどの拡張ネットワーキングをサポートするインスタンスでは、名前が一致しないことがあります。例えば、セカンダリの名前が eth0 の場合、プライマリは ens3 という名前になります。この名前の不一致は、インスタンスの実行中にセカンダリインターフェイスを追加した場合に発生します。名前の不一致を避けるには、起動時にインターフェイスを追加するか、インスタンスを再起動します。または、インターフェイスが実行中の場合は、次のコマンドを使用して名前を変更します。

    ip link set eth0 name ens4
    ip link set ens4 up
    ip link show ens4 --->verify
  2. セカンダリインターフェイス用の設定ファイルを作成します。

    vi /etc/network/interfaces.d/51-eth1.cfg

    **注:**セカンダリインターフェイス名と一致するように eth1 を変更します。

    次のコマンドは、単一の IP アドレスが 172.31.21.115 で、セカンダリインターフェイスのゲートウェイが 172.31.16.1 である場合の例です。

    auto eth1  
    iface eth1 inet static address 172.31.21.115  
    netmask 255.255.240.0
    
    # Gateway configuration
    up ip route add default via 172.31.16.1 dev eth1 table 1000
    
    # Routes and rules
    up ip route add 172.31.21.115 dev eth1 table 1000
    up ip rule add from 172.31.21.115 lookup 1000

    **注:**例の IP アドレスとゲートウェイは、ご自身の情報に置き換えてください。ゲートウェイは、サブネット内の最初の有効な IP アドレスである必要があります。

    次のコマンドは、複数の IP アドレスの例です。この例では、IP アドレスが 172.31.21.115172.31.18.46 で、ゲートウェイが 172.31.16.1です。

    auto eth1
    # Enter one or more IP settings
    iface eth1 inet static
    address 172.31.21.115
    netmask 255.255.240.0
    
    iface eth1 inet static
    address 172.31.18.46
    netmask 255.255.240.0
    
    # Default gateway for eth1
    up ip route add default via 172.31.16.1 dev eth1 table 1000
    
    # A route for every IP
    up ip route add 172.31.21.115 dev eth1 table 1000
    up ip route add 172.31.18.46 dev eth1 table 1000
    
    # A policy rule for every IP
    up ip rule add from 172.31.21.115 lookup 1000
    up ip rule add from 172.31.18.46 lookup 1000

    **注:**例の IP アドレスとゲートウェイは、ご自身の情報に置き換えてください。

  3. restrict-default-gw ファイルを作成して、デフォルトのゲートウェイがメインテーブルで上書きされないようにします。

    vi /etc/dhcp/dhclient-enter-hooks.d/restrict-default-gw
  4. restrict-default-gw ファイルに次の行を追加します。

    case ${interface} in  eth0)    ;;  *)
        unset new_routers
        ;;
    esac

    **注:**eth0 は、プライマリインターフェイスの名前に置き換えてください。

  5. ネットワークを再起動します。

    Ubuntu 14.04 の場合は、以下のコマンドを実行します。

    (ifdown eth1 && ifup eth1)

    Ubuntu 16.04 の場合は、以下のコマンドを実行します。

    systemctl restart networking

Ubuntu 18.04、20.04、22.04 を設定する

Ubuntu 18.04、20.04、22.04 は、Netplan のネットワーク設定を使用しています。Netplan は YAML 形式を使用していることに注意してください。この形式ではインデントが重要です。次の Netplan の例では、2 スペースインデントを使用しています。

Ubuntu 18.04、20.04、22.04を設定するには、次の手順を実行してください。

  1. セカンダリインターフェイス用の設定ファイルを作成します。

    vi /etc/netplan/51-eth1.yaml
  2. 51-eth1.yaml ファイルに次の行を追加します。

    network:  version: 2  renderer: networkd    
     ethernets:
        eth1:
          addresses:
           - 172.31.24.153/20
           - 172.31.28.195/20
          dhcp4: no
          routes:
           - to: 0.0.0.0/0
             via: 172.31.16.1 # Default gateway
             table: 1000
           - to: 172.31.24.153
             via: 0.0.0.0
             scope: link
             table: 1000
           - to: 172.31.28.195
             via: 0.0.0.0
             scope: link
             table: 1000
          routing-policy:
            - from: 172.31.24.153
              table: 1000
            - from: 172.31.28.195
              table: 1000

    **注:**先の例の情報は、ユースケースに固有の情報に置き換えてください。YAML ファイルの例では、セカンダリインターフェイスである eth1 に 2 つの IP アドレスを設定します。

YAML ファイルで使用する CIDR 範囲を確認するには、次の手順を実行します。

  1. Amazon EC2 コンソールを開き、[インスタンス] を選択してインスタンスを選択します。
  2. [ネットワーキング] タブで [ネットワークインターフェイス] までスクロールし、セカンダリネットワークインターフェイスのサブネット ID を書き留めます。
  3. Amazon Virtual Private Cloud (Amazon VPC) コンソールを開いて [サブネット] を選択し、サブネット ID にリストされている IPv4 CIDR 範囲を書き留めます。
  4. ネットワーク設定を適用するには、次のコマンドを実行します。
    netplan --debug apply

関連情報

ルートテーブルを設定する

AWS公式
AWS公式更新しました 3ヶ月前
コメントはありません

関連するコンテンツ