Linuxはネットワークデバイスの割り当てをどのようにまたはどこで決定しますか?具体的には、wlan0
またはwlan1
ワイヤレスUSBデバイス用。
少し前にTP USBワイヤレスを接続しましたが、割り当てられましたwlan0
。削除しました。今週私はEdimax USBワイヤレスデバイスを接続しましたが、wlan1
。今日2つ目のEdimax USBワイヤレスデバイス(2つ購入)を試すためにそれを取り外しましたが、今ではwlan2
。
これがどこかで構成されていることを知るのに十分なUnix/Linuxを知っています。未使用の構成ファイルを削除すると、最新のEdimaxをwlan0
。しかし、どのように/どこで?
dev は、Linuxでのデバイスの名前を決定するシステムコンポーネントです。主に/dev
でのファイル名だけでなく、ネットワークインターフェイスの名前も決定します。
Udevのバージョン099から196には、ネットワークインターフェースの名前を記録し、常に同じデバイスに同じ番号を使用するルールが付属しています。これらのルールはudev 174以降、デフォルトでは無効になっていますが、ディストリビューションでは有効になっている場合があります(Ubuntuが保持しているなど)。一部のディストリビューションは、異なるルールセットを提供しています。
将来の使用のためにインターフェース名を記録および予約するスクリプトは/lib/udev/rules.d/75-persistent-net-generator.rules
です。 /etc/udev/rules.d/70-persistent-net.rules
にルールを記述します。したがって、wlan0
から既存のwlan1
および/etc/udev/rules.d/70-persistent-net.rules
エントリを削除し、wlan2
をwlan0
に変更します。 udevadm --trigger --attr-match=vendor='Edimax'
(または、お使いのデバイスに一致する--attr-match
パラメータを見つけたら)を実行して、すでにプラグインされているデバイスにルールを再適用します。
この問題は、systemd
v197の時点で解決され、ネットワークデバイスの永続的な命名が導入されました。
Freedesktop Predictable Network Interface Names ページによると、カーネルは、関連するドライバによってプローブされた順序に基づいて名前を割り当てただけです:
カーネルによって適用されるネットワークインターフェースの古典的な命名方式は、ドライバーによってプローブされるすべてのインターフェースに、「eth0」、「eth1」などで始まる名前を割り当てるだけです。ドライバーのプローブは一般に最新のテクノロジーでは予測できないため、複数のネットワークインターフェイスが利用可能になるとすぐに、「eth0」、「eth1」などの名前の割り当ては一般に修正されなくなり、非常によく発生する可能性があります」あるブートでのeth0は、次のブートでは「eth1」になります。
ディストリビューションでsystemdを使用している場合は、wlp0s11
のように予測どおりに割り当てられているが扱いにくい名前を使用するか、udev
ルールを記述して、Macアドレスに基づいて、wifi1
などの使いやすい名前を付けることができます...
/etc/udev/rules.d/
という名前のファイルを10-network-device.rules
にインクルードします。
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="22:bb:cc:33:44:dd", NAME="wifi1"