レガシースクリプトからNetworkManagerへの移行
もしあなたが未だにIPアドレスを確認するためにifconfigと打ち込んでいるなら、それは10年以上前に公式に非推奨となったツールを使っていることになります。長年、システム管理者は/etc/network/interfacesや/etc/sysconfig/network-scripts/ifcfg-eth0を手動で書き換えることでLinux의 ネットワークを管理してきました。しかし、それは非常に脆弱なプロセスでした。テキストファイルのタイポ一つでリモートサーバーからロックアウトされ、データセンターまで物理的に足を運ぶ羽目になることも珍しくありませんでした。
RHEL 9、Ubuntu 22.04、Debian 12といった現代のディストリビューションでは、現在NetworkManagerがネットワーク設定の「信頼できる唯一の情報源(Single Source of Truth)」となっています。多くのエンジニアは、そのコマンドラインツールであるnmcliの構文が難解に感じるため敬遠しがちです。しかし、NetworkManagerが動作している環境でレガシーなツールを使用するのは危険です。ifconfigでIPを変更しても、30秒後のDHCP更新時やサービスの再起動時に、デーモンによって設定が上書きされてしまう可能性があるからです。
ツールの選択:なぜ本番環境ではnmcliが勝るのか
プロフェッショナルな環境において、ネットワークを設定する方法は主に3つあります。現場でそれらがどのように機能するかを見てみましょう。
1. 手動設定ファイル
これには、UbuntuのNetplan(YAMLファイル)や、/etc/NetworkManager/system-connections/内のキーファイルの編集が含まれます。AnsibleのようなInfrastructure as Code(IaC)とは相性が良いですが、ライブ環境でのトラブルシューティングには時間がかかります。YAMLファイルのスペース一つが欠けているだけで接続が切れ、午前2時にシリアルコンソールを探し回る羽目になりかねません。
2. レガシーユーティリティ (ifconfig/route)
MACアドレスを5秒で確認する分には優れていますが、これらは「ステートレス」です。現在のメモリ上の状態を変更するだけで、サーバーを再起動すれば変更は消えてしまいます。現代のシステムでは、NetworkManagerはこれらの手動変更を「管理外(unmanaged)」の干渉と見なし、定義されたポリシーを維持するために積極的に元の状態に戻そうとします。
3. nmcli (プロフェッショナルの標準)
これは現代のシステム管理者にとってのゴールドスタンダードです。NetworkManager APIと直接対話します。nmcliコマンドを実行すると、永続的な設定とアクティブな状態が同時に更新されます。私はこれまで、10GbpsのSFP+インターフェースや複雑なVLANタグ付けを、ダウンタイムなしで管理するためにこれを使用してきました。高速で信頼性が高く、デフォルトで再起動後も設定が維持されます。
メリットとデメリット
- メリット:
- 統一性: Fedoraのワークステーションで使用するコマンドが、Debianのウェブサーバーでも全く同じように動作します。
- 永続性:
post-upスクリプトなどを心配する必要はありません。変更は保存されます。 - 自動化: 予測可能な終了コードを返すため、Bashによる自動化に最適です。
- 安全性: タブ補完機能により、Enterキーを押す前に構文エラーを防ぐことができます。
- デメリット:
- コマンドが長い:
nmcli connection modifyと入力するのは、昔のやり方よりも手間がかかります。 - 概念の理解: 「デバイス」(物理NIC)と「コネクション」(ソフトウェアプロファイル)の違いを理解する必要があります。
- コマンドが長い:
はじめに:本番環境での準備
本番サーバーを触る前に、NetworkManagerが実際にインターフェースを制御しているか確認してください。ステータスレポートに「unmanaged」と表示されている場合、nmcliは役に立ちません。まずはサービスを有効化することから始めましょう。
systemctl enable --now NetworkManager
実践的なnmcliレシピ
nmcliを使いこなすための鉄則は、「デバイス(ハードウェア)」に対して「コネクション(プロファイル)」を適用する、と覚えることです。
1. ハードウェアの確認
常にインターフェースの特定から始めましょう。サーバーに4つのイーサネットポートがあっても、スイッチに接続されているのは1つだけかもしれません。
# 物理および仮想ハードウェアの状態を確認
nmcli device status
# 保存されているすべての設定プロファイルを表示
nmcli connection show
アクティブな接続は緑色で表示されます。デバイスが「disconnected」と表示されている場合は、アイドル状態でプロファイルの適用を待っている状態です。
2. 静的IPの設定(正しい方法)
新しいデータベースサーバーのeth0に静的IPを設定する必要があるとしましょう。設定ファイルを探し回る代わりに、この1行のコマンドを使用します。分かりやすくするために、プロファイル名を「Static-Internal」とします。
# IP、ゲートウェイ、手動設定メソッドを指定してプロファイルを作成
nmcli con add type ethernet con-name Static-Internal ifname eth0 ipv4.addresses 10.0.0.50/24 ipv4.gateway 10.0.0.1 ipv4.method manual
# DNSリゾルバを追加(この例ではCloudflareとGoogleを使用)
nmcli con mod Static-Internal ipv4.dns "1.1.1.1,8.8.8.8"
3. DHCPから静的IPへの変換
サーバーが既にDHCPで動作しており、それを静的アドレス(例:192.168.1.101)に固定する必要がある場合は、既存の「Wired connection 1」プロファイルを修正します。
# 既存のプロファイルを更新
nmcli con mod "Wired connection 1" ipv4.addresses 192.168.1.101/24
nmcli con mod "Wired connection 1" ipv4.gateway 192.168.1.1
nmcli con mod "Wired connection 1" ipv4.method manual
# 設定変更を反映
nmcli con up "Wired connection 1"
注意: 変更は即座に/etc/NetworkManager/system-connections/に書き込まれますが、接続を「up」するまで反映されません。
4. 複数IPの処理(IPエイリアシング)
高可用性構成では、1つのNICに複数のIPを持たせる必要があることがよくあります。nmcliを使えば、古いeth0:0のような仮想インターフェースのハックよりもずっとスマートに実現できます。
# '+' プレフィックスを使用して、アドレスを置き換えるのではなく追加する
nmcli con mod Static-Internal +ipv4.addresses 10.0.0.51/24
nmcli con up Static-Internal
リモートSSHのための「セーフティネット」テクニック
SSH経由でネットワーク設定を変更するのは、自分自身を手術するようなものです。ミスをすれば接続が切れ、サーバーは「文鎮」と化します。これを防ぐために、「ロールバック」用のコマンド文字列を使用しましょう。
リスクのある変更を適用する際は、以下のように実行します。
nmcli con up NewConfig; sleep 60; nmcli con up OldConfig
もし新しい設定が正しく機能すれば、Ctrl+Cを押してsleepコマンドをキャンセルします。もし接続が切れてしまった場合は、そのまま60秒待ってください。サーバーは自動的に以前の動作していた設定に戻り、ミスを修正するために再度ログインできるようになります。
nmcliをマスターすることは、「編集して祈る(edit and pray)」ワークフローから脱却することを意味します。デーモン専用に設計されたネイティブツールを使用することで、ネットワークの安定性とドキュメント化を確保し、本番環境の稼働率を高めることができます。

