«前の日記(2021-03-27) 最新 次の日記(2021-07-30)» 編集

meta's blog - The Power To Serve

筆者について

FreeBSDを通じてOSSにささかな貢献を。HTTPS化したいとは思っているんです…

OSS活動をご支援いただける方を募集しています


2021-07-01

FreeBSDでMACアドレスごとにネットワークインターフェイス名を固定する

背景

FreeBSDでUSB接続のネットワークインターフェイスを使用すると接続した順に ue0, ue1, ue2…というようなインターフェイス名が割り当てられますが、インターフェイスの挿抜や再起動によってインターフェイス名が変わってしまい不便なことがあります。

実現方法

devdを使用します。詳しくは説明しませんが、大雑把にいうと「デバイスが接続されたり切断されたときになんかするやつ」です。

devdでue0ue1というデバイスが接続されたのを検出して、MACアドレスに対応するインターフェイス名に変更することで決まったインターフェイス名を割り当てるというからくりです。

まず、MACアドレスとインターフェイス名のマッピングを書いたファイルを /etc/netifmap に作成します。ファイル名とパスは任意で構いません。MACアドレスとインターフェイス名を空白文字区切りで書いておきます。

インターフェイス名は foo[0-9]+ というフォーマットである必要はありません。alicebobでもOKですが、元のインターフェイス名と同じue[0-9]+と重複するものは避けておきます。例えばue0ue1に変更し、ue1ue0に変更するというようなスワップはうまくいきません。

ここでは、eth[0-9]+にしてみました。

00:11:22:33:44:55 eth0
00:11:22:33:44:66 eth1

次に、/etc/rename-netif.sh というスクリプトを作成します。スクリプトは末尾にGistで貼っておきます。 第一引数にインターフェイス名を与えると、マッピングファイルを参照しマッチしたインターフェイス名に変更するというスクリプトです。

最後に、このスクリプトがインターフェイス接続時に実行されるようにdevdの設定ファイルを書いておきます。 /etc/devd/netif.confという名前で作成しますが、これも任意の名前で構いません。ue[0-9]+という名前にマッチするネットワークインターフェイスが接続されたら、actionに指定したスクリプトが実行されます。

書き終わったら、service devd restartでdevdを再起動しておきます。再起動したら、USBネットワークインターフェイスを順番を変えて挿抜してみると固定のインターフェイス名が割り当てられていることが確認できます。OSごと再起動しても同じMACアドレスに対して同じインターフェイス名が割り当てられます。

今回作成した各ファイル