この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
この疑問、セミナーで何度も受けてきました。そして私自身、CentOS 7 が本格普及し始めた時期にまったく同じ体験をしています。
この記事では、20年以上Linuxサーバーを運用してきた現役講師の立場から、SE時代から使い続けてきた ifconfig から ip コマンドへの移行で経験した「設定が再起動後に消える」落とし穴と、NetworkManager(nmcli)を使った永続化の方法を実体験をもとに解説します。RHEL 9 / AlmaLinux 9 / Ubuntu 22.04 LTS で動作確認済みです。
この記事のポイント
・ip コマンドの変更はメモリ上のみ ── 再起動で消えるのが正常な動作
・永続化するには nmcli(NetworkManager)か接続設定ファイルを使う
・ifconfig から ip コマンドへの対応関係を知るとスムーズに移行できる
・RHEL 9 系では nmcli connection modify が最も確実な永続化手段
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
SE時代、私は ifconfig と route コマンドで「完結」していた
私が Linux エンジニアとして現場で仕事を始めた 2001 年当時、ネットワーク確認のコマンドといえば ifconfig と route の2本でした。IPアドレスを確認したければ
ifconfig eth0、デフォルトゲートウェイを見たければ route -n。設定変更も ifconfig eth0 192.168.1.10 netmask 255.255.255.0 と打てば即座に反映される。この手順が完全に身体に染みついていました。この方程式が崩れたのは、2013 年に CentOS 7 の先行評価環境を触ったときです。
なんと
ifconfig が動かない。正確には、最小インストール状態では net-tools パッケージが入っておらず、ifconfig コマンド自体が存在しなかったのです。代わりに推奨されたのが
ip コマンドでした。「また新しいコマンドを覚えなければいけないのか」という正直な気持ちと一緒に、ip コマンドを調べ始めたのを今でも覚えています。最初に試したのは仮想マシンのIPアドレスを変更する作業でした。
# ip addr add 192.168.1.100/24 dev ens3 # ip route add default via 192.168.1.1
ip コマンドとは何か ── ifconfig との根本的な違い
ip コマンドは iproute2 パッケージに含まれるネットワーク設定ツールで、RHEL 7 / CentOS 7 以降から標準となりました。ifconfig・route・arp コマンドの機能を統合した「後継コマンド群」です。しかし、ifconfig と ip の最も重要な違いは機能の豊富さではありません。「設定の永続性」に対する設計思想の違いです。
・ifconfig での変更:カーネルのネットワーク設定をメモリ上で直接書き換える。再起動で消える。
・ip コマンドでの変更:同じく一時的。再起動で消える。
実は両者とも「再起動で消える」点は同じです。では、なぜ ifconfig 時代はそれほど問題にならなかったのか?
それは当時、設定ファイル(/etc/sysconfig/network-scripts/ifcfg-eth0 等)に永続設定を書く運用が徹底されていたからです。ベテランエンジニアはコマンドで一時設定してから設定ファイルに反映する手順を当然のように行っていました。
CentOS 7 以降では NetworkManager(nmcli)がネットワーク設定の管理を一元的に担うようになり、設定ファイルの場所も構造も変わりました。この変化を知らないまま ip コマンドだけを使うと、「設定したのに消えた」という現象に必ず出合うことになります。
ip コマンドの基本的な使い方 ── ifconfig との対応で理解する
1. ネットワークインターフェースの状態を確認する
最もよく使う確認操作です。# ip addr show # ip addr show ens3 # ip link show # ip route show
ip addr show ens3 の実際の出力例(一部マスク)はこのようになります。2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP link/ether 52:54:00:xx:xx:xx brd ff:ff:ff:ff:ff:ff inet 192.168.x.x/24 brd 192.168.x.255 scope global dynamic ens3ifconfig に慣れた目には情報量が多く感じますが、
inet 192.168.x.x/24 の行が現在のIPアドレスです。scope global は「このNIC全体で有効なアドレス」を意味します。2. 一時的にIPアドレスを追加・削除する
テスト用やVIP用に一時的にIPを付与したいケースに使います。# ip addr add 192.168.1.100/24 dev ens3 # ip addr show ens3 | grep inet inet 192.168.1.100/24 scope global secondary ens3 # ip addr del 192.168.1.100/24 dev ens3
3. ルーティングを確認・追加する
# ip route show default via 192.168.1.1 dev ens3 proto dhcp metric 100 192.168.1.0/24 dev ens3 proto kernel scope link src 192.168.1.10 # ip route add default via 192.168.1.1
「再起動後に設定が消える」エラーが出た時の対処法
ip コマンドでの設定が再起動後に消える場合、解決策は「NetworkManager(nmcli)を使って永続化する」ことです。問題1:nmcli を知らずに ip コマンドだけで設定しようとする
原因:ip コマンドはカーネルのネットワーク設定をメモリ上で変更するだけで、NetworkManager の設定データベースには書き込みません。対処:現在の接続名(Connection Name)を確認してから nmcli で永続設定します。
# nmcli connection show NAME UUID TYPE DEVICE ens3 a1b2c3d4-xxxx-xxxx-xxxx-xxxxxxxxxxxx ethernet ens3 # nmcli connection modify ens3 ipv4.addresses "192.168.1.100/24" # nmcli connection modify ens3 ipv4.gateway "192.168.1.1" # nmcli connection modify ens3 ipv4.dns "8.8.8.8" # nmcli connection modify ens3 ipv4.method manual # nmcli connection up ens3
nmcli connection up ens3 で接続を再起動すると設定が即時反映されます。この設定は再起動後も維持されます。問題2:ip コマンドと nmcli を混在させて設定が二重になる
原因:ip コマンドで一時設定した状態で nmcli による永続設定を追加すると、NIC 上に複数のIPアドレスが乗ってしまい通信が不安定になる場合があります。対処:設定前に ip addr del で一時アドレスを削除してから nmcli で設定し直すか、または最初から nmcli だけで操作する。
# ip addr del 192.168.1.100/24 dev ens3 # nmcli connection modify ens3 ipv4.addresses "192.168.1.100/24" # nmcli connection up ens3 # ip addr show ens3
問題3:nmcli connection modify 後に反映されない
nmcli connection modify だけでは設定はデータベースに書き込まれますが、現在の接続には反映されません。必ず nmcli connection up 接続名 を実行するか、nmcli の変更を即時適用するオプションを使います。# nmcli connection show ens3 | grep -E "ipv4\.(addresses|gateway|dns)" ipv4.addresses: 192.168.1.100/24 ipv4.gateway: 192.168.1.1 ipv4.dns: 8.8.8.8 # nmcli connection up ens3 Connection successfully activated (D-Bus active path: ...)
ping -c 3 ゲートウェイIP で疎通確認するのが習慣化のポイントです。NetworkManager を理解してから変わった設定変更の「型」
ip コマンドは「現状確認」と「一時的なテスト」に使う。永続的な変更は必ず nmcli で行う。この認識が定着してから、私のネットワーク設定作業は格段に確実になりました。以前の私は「ip addr add が通った = 設定完了」と判断していました。今は「nmcli connection show で意図した設定が出ている」「再起動後も ping が通る」まで確認して初めて設定完了と判断しています。
セミナーで3,100名以上を指導してきた中で気づいたことがあります。ip コマンドの使い方は正確に知っているのに、「なぜ再起動後に消えるのか」「永続化のために何が必要か」を理解していない受講生が多い。ifconfig から ip への移行は完了しているのに、設定の「一時性と永続性の区別」が曖昧なまま使っているケースです。
・ip コマンドの変更 = カーネルのネットワーク設定をメモリ上で変える(再起動で消える)
・nmcli / 設定ファイルの変更 = NetworkManager の設定データベースを更新する(再起動後も維持)
この2つを意識的に使い分けることが、ネットワーク設定ミスを防ぐ最も効果的な習慣です。特に本番サーバーのネットワーク変更作業では、「ip コマンドでテスト → 問題なければ nmcli で永続化 → 再起動して確認」の3ステップを型として守ることを強くお勧めします。
まとめ ── ifconfig から ip コマンドへの移行対応表
よく使うネットワーク操作を旧コマンドと ip コマンドで対比させてまとめます。| 操作内容 | ifconfig / route (旧) | ip コマンド (現行) |
|---|---|---|
| インターフェース一覧確認 | ifconfig -a |
ip addr show |
| 特定 NIC の IP 確認 | ifconfig eth0 |
ip addr show ens3 |
| 一時的に IP アドレスを追加 | ifconfig eth0 192.168.1.10 netmask 255.255.255.0 |
ip addr add 192.168.1.10/24 dev ens3 |
| デフォルト GW の確認 | route -n |
ip route show |
| 永続的な IP 設定(RHEL 9 系) | ifcfg ファイルを直接編集 | nmcli connection modify 接続名 ... |
| 接続の再起動(設定反映) | service network restart | nmcli connection up 接続名 |
関連記事:
・LinuxのDNS設定方法|resolv.confとnmcliを使った設定と確認手順
・systemctlコマンドの使い方|chkconfigからの完全移行ガイド
「Linuxサーバー構築入門マニュアル(図解60P)」を無料でプレゼントしています。ネットワーク設定の永続化を含む、サーバー構築から運用まで体系的に解説。3,100名以上が受け取ったマニュアルを今すぐ手に入れてください。
>> 無料マニュアルを受け取る(メルマガ登録)
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら
- 前のページへ:Linuxの.bashrcに設定を書いても反映されなかった日の話|ログインシェルと.bash_profileの違いを理解するまで
- この記事の属するカテゴリ:Linux学習ガイドへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。
登録無料・いつでも解除できます