Linux で eth0 を使わせる
enp3s0
のような名前が不便だった。
SSDを載せ替えたり、ネットワークインタフェースを切り替えたりするとどうしても思ったようにならない。マイグレーション・サーバ移転で面倒が起きる。
もう、ネットワーク・インタフェースが1個〜2個に限られるようなサーバーは、eth0 で固定しちゃえばいいじゃないか。
サーバの構成を変更すると、netplan や network-manager が設定移行しなくて/ネットワークにつながらなくて焦る。なんでネットに繋がらない!!って焦ってよく見ると 「enp3s0
が enp3s1
に変わって設定エラー発生」。こんなことが頻発してもうキレた。
昔みたいにeth0 に固定したい。
起動時のカーネル引数で指定する。
/etc/default/grub
GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0"
net.ifnames=0 biosdevname=0
が一意な名前を解除するカーネル引数である。
設定の反映
update-grub
カーネルのオプションなので強烈な設定だが、確実に動作するし誤作動もない。
その他の方法
ln -s /dev/null /etc/systemd/network/99-default.link
これでlinkの名前をsystemdに変更を未然に防止できる。がカーネル引数が一番確実。
netplan の場合(注意が必要)
netplan に set-name
があるので、これを使うと eth0 にすることができる。
network: version: 2 ethernets: enp0s1: addresses: - 192.168.123.213/24 gateway4: 0.0.0.0 match: macaddress: 52:54:00:70:cd:5c set-name: eth0
ただし、永続化しない。設定ファイルを見て分かる通りenp0s1
を直接書いている。
なので当初目標である「マザーボードを交換しても設定がそのまま使える」という目的は全く達成されない。
ということでnetplan は全く使えない。
さらに、これは、networkd のlink設定を入れるのと同じなので役に立たない。systemdのマニュアルでは候補2と書いてあるが、全く無用の長物である。なぜなら、networkdで「名前がenps01」になったあとに「名前をeth0」に変更する。その変更設定を書くのである。永続化するわけがない。
さらにいえば、match が不可欠でmacaddress を指定して名前を変えるわけである。
これは、vpn などソフトウェア制御なNICのためにある機能であり、物理NICのためには使うべきではない機能だと思う。
2022-01-06 メモ
ubuntu の場合、netplan の設定に、直接eht0 と書いたら、自動的に eth0 が使われた。eth0を使っていてenp0s3 のような表記にしていない人たちへの互換性配慮のためだろうと思う。
逆手に取れば、 netplan の config.yml を eth0
で作っておけばそれで十分解決するわけである。
しかし、上にも書いたとおり、今後動かなくなる可能性が高い。そしてnetplanがない ubuntu以外はどうすればいいんだろうか。と考えるとカーネル引数が確実かもしれない。
他にも方法があるかもしれないので調べたい。
2022-01-10
systemdの公式サイトに記載があったので追記。
2022-02-16
match/macaddress について追記