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`とすることもできる。

```bash
$ 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](https://regauth.standards.ieee.org/standards-ra-web/pub/view.html#registries) サイトへアクセスする
+ 「Please select a Product :mag:」をクリックし、「ALL MAC (MA-L, MA-M, MA-S)」を選択する
+ 「SEARCH RESULTS」の「Filter results by search text」にMACアドレスの頭6桁を入力し「:mag: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のチップが分かっている場合に有効

```bash:ethtool
$ ethtool -i wlan1
driver: rtl8192cu
version: 5.10.63-v7+
firmware-version: N/A
(後略)
```

```bash:lsusb
$ lsusb
Bus 001 Device 004: ID 0bda:8178 Realtek Semiconductor Corp. RTL8192CU 802.11n WLAN Adapter
(後略)
```

```bash: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]` コマンドで起動することができる。

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

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


# おわりに

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