Ubuntu EC2 インスタンスでセカンダリネットワークインターフェイスを動作させる方法を教えてください。
Ubuntu Amazon Elastic Compute Cloud (Amazon EC2) インスタンスでセカンダリネットワークインターフェイスを動作させたいです。
簡単な説明
**警告:**セカンダリエラスティックネットワークインターフェイスの使用は、上級ユーザーが意図されています。この解決策は、次のユースケースにのみ使用してください。 単一のネットワークインターフェースは使用できません。同じサブネットの 2 つのネットワークインターフェイスを単一のインスタンスにアタッチする必要があります。非対称ルーティングの問題を回避するには、単一のエラスティックネットワークインターフェイスを使用するか、重複しないサブネットに重複するエラスティックネットワークインターフェイスを配置します。または、Ubuntu 24.04 LTS 以降を使用します。
Amazon Linux EC2 インスタンス以外のインスタンスにセカンダリネットワークインターフェイスを追加すると、トラフィックフローの問題が発生します。これらの問題は、プライマリネットワークインターフェイスとセカンダリネットワークインターフェイスが同じサブネットにあり、ルーティングテーブルとゲートウェイが 1 つずつあるために発生します。セカンダリネットワークインターフェイスに入ってくるトラフィックは、プライマリネットワークインターフェイスを使用してインスタンスを離れます。セカンダリ IP アドレスはプライマリネットワークインターフェイスの MAC アドレスに属していないため、セカンダリインターフェイスは動作しません。
**注:**以下の手順は Ubuntu 24.04 では必要ありません。Ubuntu 24.04では、この高度な設定が自動的に処理されます。
作成後にセカンダリインターフェイスを動作させるには、次の手順を実行します。
- ルーティングテーブルを設定します。
- セカンダリインターフェイスのトラフィックが新しいルーティングテーブルを使用するように、カスタムルーティングテーブルポリシーデータベースにルールを設定します。
始める前に、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 を設定するには、以下の手順を実行してください。
-
プライマリネットワークインターフェイスの名前を取得するには、次のコマンドを実行します。
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
**重要:**前の例では、プライマリインターフェイスに eth0、eth1 などの名前が付けられています。ただし、m4 や m5 ファミリタイプなどの拡張ネットワーキングをサポートするインスタンスでは、名前が一致しないことがあります。例えば、セカンダリの名前が eth0 の場合、プライマリは ens3 という名前になります。この名前の不一致は、インスタンスの実行中にセカンダリインターフェイスを追加した場合に発生します。名前の不一致を避けるには、起動時にインターフェイスを追加するか、インスタンスを再起動します。または、インターフェイスが実行中の場合は、次のコマンドを使用して名前を変更します。
ip link set eth0 name ens4 ip link set ens4 up ip link show ens4 --->verify
-
セカンダリインターフェイス用の設定ファイルを作成します。
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.115 と 172.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 アドレスとゲートウェイは、ご自身の情報に置き換えてください。
-
restrict-default-gw ファイルを作成して、デフォルトのゲートウェイがメインテーブルで上書きされないようにします。
vi /etc/dhcp/dhclient-enter-hooks.d/restrict-default-gw
-
restrict-default-gw ファイルに次の行を追加します。
case ${interface} in eth0) ;; *) unset new_routers ;; esac
**注:**eth0 は、プライマリインターフェイスの名前に置き換えてください。
-
ネットワークを再起動します。
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を設定するには、次の手順を実行してください。
-
セカンダリインターフェイス用の設定ファイルを作成します。
vi /etc/netplan/51-eth1.yaml
-
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 範囲を確認するには、次の手順を実行します。
- Amazon EC2 コンソールを開き、[インスタンス] を選択してインスタンスを選択します。
- [ネットワーキング] タブで [ネットワークインターフェイス] までスクロールし、セカンダリネットワークインターフェイスのサブネット ID を書き留めます。
- Amazon Virtual Private Cloud (Amazon VPC) コンソールを開いて [サブネット] を選択し、サブネット ID にリストされている IPv4 CIDR 範囲を書き留めます。
- ネットワーク設定を適用するには、次のコマンドを実行します。
netplan --debug apply
関連情報
関連するコンテンツ
- 質問済み 4ヶ月前lg...
- 質問済み 7年前lg...
- 質問済み 3ヶ月前lg...
- AWS公式更新しました 8ヶ月前