CentOS7 で NIC を有効にする
CentOS 7 をインストールしたばかりのマシンで、外部への ping が通らず、ip addr にも IP が見当たらない——これはネットワークが壊れているのではなく、システムがデフォルトで NIC を有効にしていないだけです。このノートでは、NIC を有効にする一連の手順と、その背後にある理由を記録します。
背景
CentOS 7 を最小インストール(Minimal Install)する場合、インストールウィザードのネットワークスイッチはデフォルトでオフになっています。インストール中に手動でオンにしなかった場合、システムのインストール完了後、NIC はカーネルに認識されてはいるものの、起動時に自動的にアクティブにならず、IP アドレスの取得も行いません。現象としては、マシンのローカルはすべて正常なのに、ゲートウェイに ping が通らず、yum でソフトウェアをインストールできず、ssh でも接続できない、という状態になります。
解決方法は簡単です。対応する NIC の設定ファイルを見つけて、「起動時に有効化」のスイッチをオンにするだけです。
原理の概要
CentOS 7 の NIC 設定ファイルは /etc/sysconfig/network-scripts/ ディレクトリにあり、NIC 1 枚ごとに ifcfg- で始まるファイルが 1 つ対応します。サフィックスは NIC 名で、たとえば ifcfg-ens33、ifcfg-eth0 などです。
NIC を起動時に有効化するかどうかを決めるのは、ファイル内の ONBOOT パラメータです。
ONBOOT=no:起動時にこの NIC をアクティブにしない。インストール時にネットワークスイッチをオンにしなかった場合のデフォルト値です;ONBOOT=yes:起動時に自動的にアクティブにする。BOOTPROTO=dhcpと組み合わせれば、自動的にルーターへ IP を要求します。
つまりこの件の本質は、ONBOOT を no から yes に変更し、ネットワークサービスに設定を読み直させることに尽きます。
実際の手順
1)NIC のリソースフォルダに移動する
cd /etc/sysconfig/network-scripts/
2)有効化したい NIC の名前を確認する
# ip コマンドはプレフィックスの省略形に対応しており、addres / addr はいずれも完全な ip address と等価
ip addres
出力の中で lo(ローカルループバック)以外のインターフェースが物理 NIC です。よくある名前は ens33、ens160、eth0 などです。この時点では状態は通常 DOWN で、inet アドレスもありません。
3)対応する設定ファイルを編集する
# ファイル名は ifcfg- に前の手順で調べた NIC 名を付けたもの。たとえば NIC 名が ens33 なら:
vi ifcfg-ens33
4)ONBOOT=no の行を見つけて no を yes に変更し、ファイルを保存する

DHCP のあるルーターに接続している場合は、ついでに BOOTPROTO=dhcp になっていることも確認しておきましょう。こうすればネットワーク再起動後に自動で IP を取得できます。
5)ネットワークサービスを再起動して設定を反映させる
service network restart
もう一度 ip addr を実行し、NIC の状態が UP になって inet アドレスが付いていれば成功です。
ハマりどころと注意点
1)設定ファイル名は記憶違いしやすいです。ディレクトリ内のファイルは ifcfg-NIC名(間に余計なハイフンはありません)なので、vi で開く前に ls で一度確認しましょう。手が滑って空ファイルを新規作成してしまい、いくら変更しても反映されない、という事態を避けられます。
2)変更しているのは「設定」であって「状態」ではありません。ONBOOT=yes は起動時の挙動を決めるだけなので、変更後は必ずネットワークサービスを再起動(またはマシンを再起動)しないと反映されません。一時的に NIC を立ち上げたいだけなら ifup ens33 も使えますが、設定ファイルを変更しなければ、次回の再起動でまたネットのない状態に戻ってしまいます。
3)仮想マシン環境で IP が取れない場合は、まず仮想ネットワークモードを確認しましょう。VMware/VirtualBox でブリッジや NAT の設定が正しくない場合、ONBOOT を変更しても外部に ping は通りません。これはホストマシン側の問題であり、本記事のスイッチとは無関係です。
インストール時にウィザードの「ネットワークとホスト名」ページで NIC のスイッチを直接オンにしておけば、インストール完了と同時にネットワークが使えるようになり、上記のすべての手順を省略できます。
小まとめ
CentOS 7 のインストール後にネットが繋がらないのは、多くの場合ドライバやハードウェアの問題ではなく、単に ONBOOT がデフォルトで no になっているだけです。ip addr で NIC 名を確認し、/etc/sysconfig/network-scripts/ 配下の対応する ifcfg- ファイルの ONBOOT=yes に変更して、service network restart を実行すれば、ネットワークは繋がります。これは新しく CentOS 7 を入れたマシンでほぼ毎回行うことになる定番の作業なので、記録しておけば毎回調べ直す手間が省けます。
COMMENTS