新しく検出された NIC が自動的にデフォルト設定されるのを抑止する
Fedora では、新しく接続した NIC は、カーネルによって認識され、Predictable Network Interface Names にリネームされます。その後、通信可能な状態するために NetworkManager でデフォルト設定されます。他の RHEL 系ディストリビューションも事情は同じでしょう。これには、いくつか問題があります。
- DHCP で IP アドレスを配布していない環境では、NIC は通信可能にならない。そのため、
NetworkManager-wait-online.service
がタイムアウトになり、その後に起動する予定であったサービスの起動に失敗する。 - 起動後も DHCP で IP アドレスを取得しようとし続ける。
"有線接続 1"
のような、半角スペースを含む名前を付けられてしまう。
何でこんなことを言っているかというと、さくら VPS では、インストール中とインストール後で見える NIC に差異があります。インストール中は ens3
だけが見えていて、インストール後は ens3
、ens4
、および ens5
が見えます。つまり、初回起動時に、ens4
と ens5
が新しく見つかった NIC として、デフォルト設定されてしまいます。普通にインストールすると、上記の挙動により、こんな感じになります。
$ nmcli connection show NAME UUID TYPE DEVICE 有線接続 1 9b9b6255-5552-3427-8c31-dcbc164bc4a2 ethernet ens4 有線接続 2 10068638-111d-3c80-858f-95573e758443 ethernet ens5 ens3 5592628d-fdf6-49fe-b625-25de9ceee35c ethernet ens3 $ nmcli device show DEVICE TYPE STATE CONNECTION ens3 ethernet 接続済み ens3 ens4 ethernet 接続中 (IP 設定を取得中) 有線接続 1 ens5 ethernet 接続中 (IP 設定を取得中) 有線接続 2 lo loopback 管理無し -- $
誰得のデフォルト設定です。私はこの後、スクリプトで自動設定したいんですが、とてもめんどくさい状況になっています。日本語はともかくとして、名前に半角スペースを入れるのやめてもらえませんかね? ちなみに、英語でインストールしても、半角スペースを含んだ名前になります。
この変な挙動を止めるには、KickStart の設定ファイルの後処理スクリプトで、以下のコードを実行します。
%post # Stop to automatically configure newly attached NICs. cat << 'EOF' > /etc/NetworkManager/conf.d/no-automatic-configuration.conf [main] no-auto-default=* EOF %end
上記を動かしてインストールすると、初回起動直後は、以下のようになります。
$ nmcli connection show NAME UUID TYPE DEVICE ens3 e3c089f5-09f0-48ab-a1b8-b13644d50827 ethernet ens3 $ nmcli device show DEVICE TYPE STATE CONNECTION ens3 ethernet 接続済み ens3 ens4 ethernet 切断済み -- ens5 ethernet 切断済み -- lo loopback 管理無し -- $
ens4
と ens5
は真っさらな状態です。この後、スクリプトであれ、手動であれ、ens4
や ens5
を設定するのは容易です。また、設定しなかったとしても、NetworkManager-wait-online.service
がタイムアウトになることもありません。
さくら VPS の標準的な設定では、NetworkManager-wait-online.service
を mask
することで、問題 1 (サービスの起動に失敗する)だけを避けています。この方法では、逆に IP アドレスを取得できないため起動に失敗するサービスが出てきますし、問題 2 と 3 に対しては全くアプローチできていません。
まとめ
この記事では、新しく検出された NIC が勝手にデフォルト設定されるのを回避する方法を紹介しました。