NetworkManagerは、
Linuxカーネルのインタフェース上で動作するデーモンであり、高水準なネットワーク設定を可能にする
ユーティリティソフトウェアです。このソフトウェアは、ネットワークをより簡単に利用できるように設計されており、
Linuxディストリビューションや他の
Unix系オペレーティングシステムで動作します。
NetworkManagerの動作
コンピュータ同士が
通信を行うためには、イーサネット(
IEEE 802.3)、
無線LAN(
IEEE 802.11)、近距離
無線通信(IEEE 802.15)、
PPPoE、PPPoAなど、様々な
通信プロトコルが存在します。ネットワークに接続する際には、
ネットワークカードに適切な設定を施す必要があります。
モノリシック
カーネルでは、全ての
デバイスドライバが
カーネルの一部であり、
ハードウェアは
デバイスドライバを通してアクセスされます。Linuxなどの
Unix系オペレーティングシステムでは、
デバイスドライバのインターフェースとして
デバイスファイルが使用されます。これらの
デバイスファイルは `/dev`
ディレクトリに格納されており、従来のイーサネット
ハードウェアの
デバイスファイルは `/eth0` や `/eth1` と呼ばれていました。しかし、systemd以降では `esp4s0` のような名前が付けられるようになりました。
ウェブブラウザ、SSH、NTPなどのユーザー空間にあるソフトウェアは、全て
デバイスファイルを通して
ハードウェアにアクセスします。
NetworkManagerを使用する場合のネットワーク設定
Linuxや他の
Unix系オペレーティングシステムでは、 `ifconfig` や `ip` (iproute2の一部)を使用して、イーサネットと
無線LANの
ハードウェアを設定します。これらのコマンドの利用方法については、manページを参照してください。これらのコマンドで設定された内容は、直接
カーネルに反映され、即座に適用されます。ただし、
再起動を行うと、設定はリセットされるため、再度設定を行う必要があります。
シャットダウン後にも設定を維持するためには、PID1で実行されるプログラムが使用されます。System Vinitでは
シェルスクリプトとバイナリプログラムを使用し、systemdでは独自の
設定ファイルを解析して使用します。
ネットワークインタフェースの設定は `/etc/network/interfaces` に、DNS
サーバの設定は `/etc/resolv.conf` に保存されます。`/etc/network/interfaces` では、静的
IPアドレスの設定や、dhclientの設定、VPNの設定などを行うことができます。DHCPを使用する場合は、これらの設定が自動的に行われます。
NetworkManagerを使用しない場合のネットワーク設定
NetworkManagerは
D-Busを介してアクセスできます。その設定は `/etc/NetworkManager/NetworkManager.conf` に保存されます。
公衆無線LANの普及に伴い、DHCPなどを用いた動的なネットワーク設定が一般的になっています。BOOTPはこのような目的で使用された初期のプロトコルであり、現在ではその上位互換プロトコルであるDHCPが広く利用されています。多くの
Unix系オペレーティングシステムでは、動的なネットワーク設定を行うためにdhclientが用いられています。比較的静的なネットワーク設定や単純な動的ネットワーク設定の場合、dhclientによって構成された静的なネットワーク設定でも問題なく動作しますが、ネットワークやネットワークトポロジが複雑になった場合は、全てのネットワーク設定を一元管理することが重要になります。
ソフトウェアアーキテクチャ
NetworkManagerは主に2つのコンポーネントで構成されています。
1.
NetworkManagerデーモン: 接続の管理と変更の通知を行うソフトウェアです。
2.
GUIフロントエンド: GNOME、
KDE、Xfce、
LXQt、
Cinnamonなどの
デスクトップ環境向けのグラフィカルインターフェースです。
これらのコンポーネントは、移植性を考慮して設計されており、
アプレットはfreedesktop.orgの「System Tray Protocol」を実装する
デスクトップ環境で利用できます。コンポーネント間の
通信には
D-Busが使用されるため、アプリケーションはリンクを通じて既存の
アプレットに対応させるか、置き換えることが可能です。ノベルが
SUSE Linux向けに開発した
KDE向けの
フロントエンドである「KNetworkManager」はこの機能を利用しています。
NetworkManagerには、以下のようなGUI
フロントエンドとCLIツールが存在します。
nm-applet: GTK3を使用した
フロントエンドです。
plasma-nm: QMLで記述されたPlasma
アプレットです。
nmcli: コマンドラインインターフェースです。
nmtui: テキストユーザーインターフェースです。
歴史
NetworkManagerプロジェクトは、Linuxユーザーがより簡単にネットワーク(特に
無線通信)を利用できるようにするために、
2004年に
レッドハットによって開始されました。NetworkManagerは、利用可能なネットワークを自動的に選択し、ネットワーク障害が発生した場合や、ユーザーが移動しながら
無線通信を使用している場合に、最適なネットワークへの接続を試みます。過去に接続したことのあるアクセスポイントを、初めて接続するアクセスポイントよりも優先的に選択します。アクセスポイントが暗号化されている場合、WEPキーまたはWPAキーの入力を求めます。
NetworkManagerは、
D-BusとHALを利用した最初の主要なLinuxデスクトップコンポーネントの一つです。
2009年6月以降、NetworkManagerはHALへの依存を解消し、
2014年のバージョン0.9.10以降では、rootユーザーとして操作するために
D-Busデーモンを実行する必要がなくなりました。
関連項目
BlueZ
GNOME キーリング
KWallet
Wicd -
Pythonで記述されたネットワークマネージャー
iproute2
iw
wpa_supplicant
外部リンク
NetworkManager 公式ウェブサイト