LinuxにNICが複数接続されているときの見分け方


はじめに

NICが複数枚あるとき、どの口がeth0? どのアンテナがwlan1?とか迷うことがあるので見分け方をまとめたい
テスト環境としてRaspberryPiを用いたが、一般的なLinuxマシンでも同じ方法で見分けられるのではないかと思う

環境

  • RaspberryPi 3B+
  • Raspberry Pi OS 32bit
    • Linux raspberrypi 5.10.63-v7+ #1459 SMP Wed Oct 6 16:41:10 BST 2021 armv7l GNU/Linux
  • USB Wi-Fiデバイスを追加

TL;DR

後から調べようとするとめんどくさい。
NICにMACアドレスのシールを貼っておけばすぐ分かる。NICを買ったらすぐ貼ろう!!

1. 基本的な情報を収集する

認識しているNICの一覧をip addressコマンドで取得する。

オプションのaddressは短縮してaとすることもできる。

$ ip address 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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 pfifo_fast state UP group default qlen 1000
    link/ether b8:27:eb:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    inet 192.0.2.5/24 brd 192.0.2.255 scope global dynamic noprefixroute eth0
       valid_lft 74503sec preferred_lft 63703sec
    inet6 2402:6b00:3e2e:0000:0000:0000:0000:0000/64 scope global dynamic mngtmpaddr noprefixroute 
       valid_lft 292sec preferred_lft 292sec
    inet6 fe80::2261:a142:0000:0000/64 scope link 
       valid_lft forever preferred_lft forever
3: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    link/ether b8:27:eb:xx:xx:xx brd ff:ff:ff:ff:ff:ff
4: wlan1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether 34:76:c5:xx:xx:xx brd ff:ff:ff:ff:ff:ff

上記例から、下記のような構成とわかる

if type state mac
lo ループバック UNKNOWN なし
eth0 有線 UP b8:27:eb:xx:xx:xx
wlan0 Wi-Fi DOWN b8:27:eb:xx:xx:xx
wlan1 Wi-Fi DOWN 34:76:c5:xx:xx:xx

2. MACアドレスベンダーから判別を試みる

IEEEウェブサイトでの検索例:

  • IEEE Registration Authority: Assignments サイトへアクセスする
  • 「Please select a Product 」をクリックし、「ALL MAC (MA-L, MA-M, MA-S)」を選択する
  • 「SEARCH RESULTS」の「Filter results by search text」にMACアドレスの頭6桁を入力し「Filter」をクリックする
  • 「ALL MAC (MA-L, MA-M, MA-S) SEARCH RESULTS」の表がフィルタリングされる

※IEEEが総本山であるため紹介したが、ほかにもMACアドレス検索できるサイトが数多くある。好みのものを使ってもらいたい。

サンプルデータを用いて調査した結果、下記の通りとなった

if mac頭6桁 CompanyName
eth0 b8:27:eb Raspberry Pi Foundation
wlan0 b8:27:eb Raspberry Pi Foundation
wlan1 34:76:c5 I-O DATA DEVICE,INC.
  • eth0はオンボードの有線NIC
  • wlan0はオンボードの無線NIC
  • wlan1は外付けの無線NIC(アイ・オー・データ機器製)

の可能性が高いということが分かった。

2. デバイスのチップ型番で判別する

追加したNICのチップが分かっている場合に有効

ethtool
$ ethtool -i wlan1
driver: rtl8192cu
version: 5.10.63-v7+
firmware-version: N/A
(後略)
lsusb
$ lsusb
Bus 001 Device 004: ID 0bda:8178 Realtek Semiconductor Corp. RTL8192CU 802.11n WLAN Adapter
(後略)
lspci
$ lspci 
pcilib: Cannot open /proc/bus/pci
lspci: Cannot find any working access method.

※Raspberry Pi 3B+ にはPCIバスが存在しないのかデータを取ることができなかった。

上記例から、USBにRealtek社の「RTL8192CU」が搭載された無線LANアダプタが存在することが分かる。
これはwlan1に適用されているドライバーとチップ型番が一致する。

3. NICのLEDを点滅させ、目視で判別する

NICドライバによっては、NICのLEDを点灯・点滅させて目視で判別できる機能を備えているものがある。
ethtool --identify [nic] コマンドで起動することができる。

$ sudo ethtool --identify eth0
Cannot identify NIC: Operation not supported

実際に実行してみたところ、その操作はサポートされていないというメッセージが出てしまったため
どのような動きをするのか確認はできなかった。

おわりに

他にナイスな知り方があれば教えてください!