セカンダリelastic network Interface (ENI) がElastic Compute Service (ECS) インスタンスにバインドされた後、インスタンスによって使用される一部のイメージは、セカンダリENIのIPアドレスを認識せず、セカンダリENIのルートを設定できない場合があります。 この問題が発生した場合、セカンダリENIはインスタンスで期待どおりに使用できません。 この問題を解決するには、このトピックで説明されているように、インスタンス内からセカンダリENIのIPアドレスが認識されるように設定することを推奨します。 また、ビジネス要件に基づいてセカンダリENIのルートを設定し、ネットワークトラフィックをより適切に管理および制御することもできます。
前提条件
セカンダリENIはECSインスタンスにバインドされています。 詳細については、「セカンダリENIのバインド」をご参照ください。
ステップ1: セカンダリENIを設定する必要があるかどうかを確認する
ECSインスタンスにバインドされているセカンダリENIを設定する必要があるかどうかを確認するには、セカンダリENIのIPアドレスが認識されているかどうか、またはインスタンスで使用されているイメージのタイプを確認します。
Linuxインスタンスに接続します。
詳細については、「パスワードまたはキーを使用したLinuxインスタンスへの接続」をご参照ください。
次のコマンドを実行して、セカンダリENIのIPアドレスが認識されているかどうかを確認します。
ip address show
返された結果に基づいて、セカンダリENIを設定する必要があるかどうかを判断します。
シナリオ1: eth0プライマリENIとeth1セカンダリENIの両方のIPアドレスが認識されます。 セカンダリENIを設定する必要はありません。
サンプルコマンド出力:
シナリオ2: eth0プライマリENIのIPアドレスは認識されるが、eth1セカンダリENIのIPアドレスは認識されない。 このトピックで説明する操作を実行して、セカンダリENIを設定できます。
サンプルコマンド出力:
上記のコマンド出力では、00:16:3e:16:**:**
はプライマリENIのメディアアクセス制御 (MAC) アドレス、00:16:3e:0f:**:**
はセカンダリENIのMACアドレスです。
(オプション) ステップ2: セカンダリENIの情報を取得する
セカンダリENIを設定する場合、プライマリプライベートIPアドレスとMACアドレスが必要になる場合があります。 後続の設定のために情報を準備します。
サンプル値は、以下の操作で使用される。 実際のシナリオでは、それらをセカンダリENIの属性値に置き換えます。
(推奨) ECSコンソールでセカンダリENIに関する情報を取得
ECSコンソールにログインします。
左側のナビゲーションウィンドウで、
を選択します。上部のナビゲーションバーで、リソースが属するリージョンとリソースグループを選択します。
[Elastic Network Interface] ページで、情報を取得するセカンダリENIを見つけ、[IPアドレス] 列と [MACアドレス] 列でプライマリプライベートIPアドレスとMACアドレスを表示します。
インスタンスメタデータからセカンダリENIに関する情報を取得
Linux ECSインスタンスに接続します。
詳細については、「パスワードまたはキーを使用したLinuxインスタンスへの接続」をご参照ください。
次のコマンドを順番に実行して、セカンダリENIの情報を取得します。
LinuxインスタンスにバインドされているすべてのENIのMACアドレスを取得します。
curl http:// 100.100.100.200/latest/meta-data/network/interfaces/macs/
説明ENIのMACアドレスは、ENIのプライマリプライベートIPアドレス、サブネットマスク、およびゲートウェイアドレスを取得するために必要です。
特定のENIのプライマリプライベートIPアドレスを取得します。
curl http:// 100.100.100.200/latest/meta-data/network/interfaces/macs/00:16:3e:19:**:**/primary-ip-address
特定のENIのサブネットマスクを取得します。
curl http:// 100.100.100.200/latest/meta-data/network/interfaces/macs/00:16:3e:19:**:**/netmask
特定のENIのゲートウェイアドレスを取得します。
curl http:// 100.100.100.200/latest/meta-data/network/interfaces/macs/00:16:3e:19:**:**/gateway
コマンド出力の例を次の図に示します。 サンプルコマンド出力では、00:16:3e:16:**:**
はプライマリENIのMACアドレスであり、00:16:3e:0f:**:**
はセカンダリENIのMACアドレスです。
ip address show
コマンドを実行した後、コマンド出力にMACアドレスが表示される順序に基づいて、プライマリENIとセカンダリENIを識別できます。
ステップ3: セカンダリENIの設定
セカンダリENIの設定に必要な操作は、セカンダリENIがバインドされているインスタンスのオペレーティングシステムによって異なります。
Alibaba Cloud Linux 2、CentOS 6、CentOS 7、またはRed Hat
インスタンスがAlibaba Cloud Linux 2、CentOS 6、CentOS 7、またはRed Hatを実行している場合、multi-nic-utilツールを使用して、インスタンスにバインドされているENIの設定を自動的に設定または変更できます。
multi-nic-utilツールを使用すると、ECSインスタンスの元のネットワーク設定が上書きされる可能性があります。 作業は慎重に行ってください。
Dockerまたはその他のコンテナ化された環境では、multi-nic-utilツールを使用しないことをお勧めします。
CentOSインスタンスの場合、マルチnic-utilツールを使用してセカンダリENIを構成できるのは、インスタンスがツールをサポートするCentOSイメージバージョンを使用している場合のみです。 次のCentOSイメージバージョンは、マルチnic-utilツールをサポートしています。
CentOS 6画像: CentOS 6.8以降
CentOS 7画像: CentOS 7.3以降
CentOSインスタンスがマルチnic-utilツールをサポートしていないCentOSイメージバージョンを使用している場合は、セカンダリENIの設定ファイルを変更して、インスタンスのセカンダリENIを設定します。
(推奨) 方法1: マルチnic-utilツールを使用してセカンダリENIを設定
以下のコマンドを実行して、multi-nic-utilツールをダウンロードしてインストールします。
次のコマンドを実行して、ENIサービスを再起動します。
sudo systemctl restart eni.service
wget https://image-offline.oss-cn-hangzhou.aliyuncs.com/multi-nic-util/multi-nic-util-0.6.tgz && \
tar -zxvf multi-nic-util-0.6.tgz && \
cd multi-nic-util-0.6 && \
bash install.sh
方法2: セカンダリENIの設定ファイルを変更してセカンダリENIを設定する
次のコマンドを実行して、セカンダリENIの設定ファイルを開きます。
I
キーを押してInsertモードに入り、セカンダリENIに関する情報を設定ファイルに追加します。Esc
キーを押して挿入モードを終了し、:wq
と入力して構成ファイルを保存して閉じます。セカンダリENIに関するサンプル情報:
DEVICE=eth1 # Specify the name of the ENI that you want to configure. BOOTPROTO=dhcp ONBOOT=yes TYPE=Ethernet USERCTL=yes PEERDNS=no IPV6INIT=no PERSISTENT_DHCLIENT=yes HWADDR=00:16:3e:0f:**:** # Specify the MAC address of the ENI that you obtained. DEFROUTE=no # Indicates that the ENI is not used for the default route. To prevent the default route of the instance from being changed when you run the ifup command to start the secondary ENI, do not specify eth1 information as the default route.
次のいずれかのコマンドを実行して、ネットワークサービスを再起動します。
CentOS 7やRed Hat 7より前のバージョン (CentOS 6やRed Hat 6など):
sudo service network restart
CentOS 7以降、RedHat 7以降、およびAlibaba Cloud Linux 2:
vi /etc/sysconfig/network-scripts/ifcfg-eth1
sudo systemctl restart network
eniが設定されているインスタンスからカスタムイメージを作成する前に、/etc/eni_utils/eni-cleanup
コマンドを実行して、/etc/udev/rules.d/70-persistent-net.ru les
および /etc/sysconfig/network-scripts/
ファイルからネットワーク設定を削除します。
UbuntuまたはDebian
インスタンスがUbuntuまたはDebianを実行している場合は、イメージのバージョンに基づいてセカンダリENIの設定ファイルを変更します。
Ubuntu 14.04、Ubuntu 16.04、およびDebian
次のコマンドを実行して、セカンダリENIの設定ファイルを開きます。
vi /etc/network/interfaces
I
キーを押してInsertモードに入り、セカンダリENIに関する情報を設定ファイルに追加します。 次に、Esc
キーを押して挿入モードを終了し、:wq
と入力して構成ファイルを保存して閉じます。セカンダリENIに関するサンプル情報:
auto eth0 iface eth0 inet dhcp auto eth1 # Specify the name of the ENI that you want to configure. iface eth1 inet dhcp
説明eth0プライマリENIは、eth1セカンダリENIが設定されているのと同じ設定ファイルで設定されます。 プライマリENIに関する情報を構成ファイルに追加する必要があります。
次のいずれかのコマンドを実行して、ネットワークサービスを再起動します。
Ubuntu 14.04:
sudo service networking restart
Ubuntu 16.04とDebian:
sudo systemctl restart networking
セカンダリENIの設定は、次のアラート通知が表示されるかどうかに関係なく有効になります。
ip address show
コマンドを実行して、セカンダリENIのIPアドレスが認識されているかどうかを確認できます。
Ubuntu 18.04、20.04、および22.04
次のコマンドを実行して、セカンダリENIの設定ファイルを開きます。
I
キーを押してInsertモードに入り、セカンダリENIに関する情報を設定ファイルに追加します。Esc
キーを押して挿入モードを終了し、:wq
と入力して構成ファイルを保存して閉じます。説明設定ファイルを変更するときは、次の項目に注意してください。
設定ファイルは
YAML
形式です。 設定ファイルを変更するときは、YAML
構文ルールに従います。YAML
ファイルのインデントにスペースを使用します。 タブはサポートされていません。フォーマットの問題を防ぐために、デフォルトの
/etc/netplan/99-netcfg.yaml
構成ファイルから情報をコピーすることを推奨します。
セカンダリENIに関するサンプル情報:
network: version: 2 renderer: networkd ethernets: eth1: dhcp4: yes dhcp6: no
設定ファイルの変更を有効にするには、次のコマンドを実行します。
vi /etc/netplan/eth1-netcfg.yaml
netplan apply
SUSEまたはopenSUSE
インスタンスがSUSEまたはopenSUSEを実行している場合は、セカンダリENIの設定ファイルを変更する必要があります。
次のコマンドを実行して、セカンダリENIの設定ファイルを開きます。
vi /etc/sysconfig/network/ifcfg-eth1
I
キーを押してInsertモードに入り、セカンダリENIに関する情報を設定ファイルに追加します。Esc
キーを押して挿入モードを終了し、:wq
と入力して構成ファイルを保存して閉じます。次の例では、IPアドレスの割り当て方法はDynamic Host Configuration Protocol (DHCP) に設定されています。
BOOTPROTO='dhcp4' STARTMODE='auto' USERCONTROL='no'
次のいずれかのコマンドを実行して、ネットワークサービスを再起動します。
SUSE Linux Enterprise Server 12およびopenSUSE 13.2より前のバージョン:
sudo service network restart
SUSE Linux Enterprise Server 12以降、およびopenSUSE 13.2以降:
sudo systemctl restart network
(条件付きで必要) 手順4: ルートの設定
route -n
コマンドを実行して、現在のルート情報を照会できます。 セカンダリENIにルートが設定されていない場合、または既存のルートがビジネス要件を満たしていない場合は、このトピックの説明に従って、セカンダリENIのルートテーブルとルールを設定できます。 ルートテーブルとルールは、特定のゲートウェイを使用してトラフィックを転送するルーティングポリシーの実装に役立ちます。 これにより、ネットワークトラフィックをより細かく制御および管理できます。
要件に基づいてデフォルトルートを計画します。 この例では、次の表にリストされているサンプル値が使用されます。
セカンダリENI属性 | サンプル値 |
ENI 名 | eth1 |
プライマリプライベートIPアドレス | 192.168。**。* 2 |
ゲートウェイアドレス | 192.168.**.253 |
測定値 | 1001 |
Alibaba Cloud Linux 2またはCentOS 7を実行するインスタンスのセカンダリENIのルートの設定
次のコマンドを実行して、ルート情報を照会します。
route -n
コマンド出力のサンプル:
次のコマンド出力には、eth0プライマリENIのルート情報のみが含まれます。 eth1セカンダリENIにはルートが設定されていません。 セカンダリENIのルートを設定するには、後続の操作を実行する必要があります。
次のコマンド出力には、eth0プライマリENIとeth1セカンダリENIのルート情報が含まれています。 セカンダリENIのルートを設定するために、後続の操作を実行する必要はありません。 設定されたルートがビジネス要件を満たしていない場合は、ルート設定を変更できます。
次のコマンドを実行して、デフォルトルートを設定します。
ip -4 route add default via 192.168.**.253 dev eth1 metric 1001 && \ ip -4 route add default via 192.168.**.253 dev eth1 table 1001 && \ ip -4 rule add from 192.168.**.*2 lookup 1001
説明上記のコマンドを実行してeth1セカンダリENIのデフォルトルートを設定し、ルートテーブルを作成してから、テーブルにルーティングポリシーをアタッチできます。 この例では、
table 1001
という名前のルートテーブルが作成されます。 ルートテーブルの名前は、ENIのデフォルトルートのメトリック値と同じにすることをお勧めします。192.168.**.253
はゲートウェイアドレスであり、192.168.*.* 2
はeth1セカンダリENIのプライマリプライベートIPアドレスです。 パラメーター値を実際の値に置き換えます。次のコマンドを実行して、作成したルートテーブルとルーティングポリシーを照会します。
ip route list table 1001 && \ ip rule list
次のコマンド出力は、ルートテーブルとルーティングポリシーが作成されたことを示します。
インスタンスの起動時に自動的に更新するルートを設定します。
eth1セカンダリENIのルートを設定した後、インスタンスの起動時に自動的に更新されるようにルートを設定する必要があります。 それ以外の場合、インスタンスの再起動時にルートは無効になります。
次のコマンドを実行して、
/etc/rc.local
ファイルを開きます。vim /etc/rc.local
I
キーを押して挿入モードに入り、次の内容を追加し、Esc
キーを押して挿入モードを終了し、:wq
と入力してファイルを保存して閉じます。ip -4 route add default via 192.168.**.253 dev eth1 metric 1001 ip -4 route add default via 192.168.**.253 dev eth1 table 1001 ip -4 rule add from 192.168.**.*2 lookup 1001
次のコマンドを実行して、
/etc/rc.local
ファイルに対する実行権限を付与します。sudo chmod + x /etc/rc.local
CentOS 8を実行するインスタンスのセカンダリENIのルートの設定
次のコマンドを実行して、ルート情報を照会します。
route -n
次のコマンド出力には、eth0プライマリENIとeth1セカンダリENIのルート情報が含まれています。
ルートの設定に使用するスクリプトを作成します。
次のコマンドを実行して、
/home/route.sh
ファイルを作成して開きます。vi /home/route.sh
I
キーを押して挿入モードに入り、次の内容を追加し、Esc
キーを押して挿入モードを終了し、:wq
と入力してファイルを保存して閉じます。説明次のサンプルスクリプトは、eth1セカンダリENIのルートテーブルを作成し、ルーティングポリシーをルートテーブルにアタッチする方法の例を示しています。 この例では、
テーブル1001
という名前のルートテーブルが作成されます。192.168.**.253
はゲートウェイアドレスで、192.168.*.* 2
はeth1セカンダリENIのプライマリプライベートIPアドレスです。#!/bin/bash i=0 while true; do /usr/sbin/ip -4 route add default via 192.168.**.253 dev eth1 table 1001 if [ $? -eq 0 ]; then break fi sleep 3 let i++ if [ $i -gt 10 ]; then exit -1 fi done i=0 while true; do /usr/sbin/ip -4 rule add from 192.168.**.*2 lookup 1001 if [ $? -eq 0 ]; then break fi sleep 3 let i++ if [ $i -gt 10 ]; then exit -1 fi done
次のコマンドを実行して、デフォルトルートを設定します。
sh /home/route.sh
次のコマンドを実行して、作成したルートテーブルとルーティングポリシーを照会します。
ip route list table 1001 && \ ip rule list
コマンド出力の例を次の図に示します。
インスタンスの起動時に自動的に更新するルートを設定します。
上記の手順を実行してeth1セカンダリENIのルートを設定した後、次の手順を実行して、インスタンスの起動時に自動的に更新されるルートを設定する必要があります。 それ以外の場合、インスタンスの再起動後にルートは無効になります。
次のコマンドを実行して、
/etc/rc.local
ファイルを開きます。vim /etc/rc.local
I
キーを押して挿入モードに入り、次の内容を追加し、Esc
キーを押して挿入モードを終了し、:wq
と入力してファイルを保存して閉じます。sh /home/route.sh
次のコマンドを実行して、
/etc/rc.local
ファイルに対する実行権限を付与します。sudo chmod + x /etc/rc.local