Fedora では、新しく接続した NIC は、カーネルによって認識され、Predictable Network Interface Names にリネームされます。その後、通信可能な状態するために NetworkManager でデフォルト設定されます。他の RHEL 系ディストリビューションも事情は同じでしょう。これには、いくつか問題があります。

  1. DHCP で IP アドレスを配布していない環境では、NIC は通信可能にならない。そのため、NetworkManager-wait-online.service がタイムアウトになり、その後に起動する予定であったサービスの起動に失敗する。
  2. 起動後も DHCP で IP アドレスを取得しようとし続ける。
  3. "有線接続 1" のような、半角スペースを含む名前を付けられてしまう。

何でこんなことを言っているかというと、さくら VPS では、インストール中とインストール後で見える NIC に差異があります。インストール中は ens3 だけが見えていて、インストール後は ens3ens4、および ens5 が見えます。つまり、初回起動時に、ens4ens5 が新しく見つかった 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  管理無し  --          
$ 

ens4ens5 は真っさらな状態です。この後、スクリプトであれ、手動であれ、ens4ens5 を設定するのは容易です。また、設定しなかったとしても、NetworkManager-wait-online.service がタイムアウトになることもありません。

さくら VPS の標準的な設定では、NetworkManager-wait-online.servicemask することで、問題 1 (サービスの起動に失敗する)だけを避けています。この方法では、逆に IP アドレスを取得できないため起動に失敗するサービスが出てきますし、問題 2 と 3 に対しては全くアプローチできていません。

まとめ

この記事では、新しく検出された NIC が勝手にデフォルト設定されるのを回避する方法を紹介しました。