NetworkManager (ネットワークマネージャー) は、libudevやその他のLinuxカーネルインタフェース上で動作し、高水準のネットワーク設定用のインタフェースの提供も行うデーモンである。
NetworkManagerはネットワークをより簡単に使えることを目的としたユーティリティソフトウェアで、Linuxディストリビューションやその他のUnix系オペレーティングシステムで動作する。
コンピュータが互いに通信を行うためにIEEE 802.3 (イーサネット)・IEEE 802.11 (無線LAN)・IEEE 802.15 (近距離無線通信)・PPPoE・PPPoAなど様々な通信プロトコルが存在する。ネットワークに接続する場合は、ネットワークカードに適切な設定を行う必要がある。
モノリシックカーネルの場合、全てのデバイスドライバはカーネルの一部であり、ハードウェアはデバイスドライバを介してアクセスされる。LinuxなどのUnix系オペレーティングシステムの場合、デバイスドライバのインタフェースとしてデバイスファイルが利用されている。全てのデバイスファイルは/devディレクトリに存在する。従来のイーサネットハードウェアのデバイスファイルは/eth0や/eth1と呼ばれていた。systemd以降はesp4s0などの名前が付けられるようになった。
/dev
/eth0
/eth1
esp4s0
ウェブブラウザ・SSH・NTPなどのユーザ空間にあるものは全てデバイスファイルを介してハードウェアにアクセスする。
Linuxやその他のUnix系オペレーティングシステムでは、ifconfigやip (iproute2の一部) を使用してIEEE 802.3とIEEE 802.11のハードウェアを設定する。利用方法についてはmanページを参照する。これらで行った設定はカーネルに直接設定され、直ちに反映される。再起動をした場合は再度設定をし直す必要がある。
ifconfig
ip
シャットダウン後にも設定を維持するためには、PID1で実行するプログラムが使用される。System Vinitではシェルスクリプトとバイナリプログラムを使用し、systemdでは独自の設定ファイルを解析して使用する。ネットワークインタフェースの設定は/etc/network/interfacesに、DNSサーバの設定は/etc/resolv.confに保存される。/etc/network/interfacesでは、使用する静的IPアドレスまたはdhclientを設定することができる。また、VPNの設定も行うことができる。設定を変更する場合、DHCPでは自動的に行われる。
/etc/network/interfaces
/etc/resolv.conf
dhclient
/etc/NetworkManager/NetworkManager.conf
しかしながら、公衆無線LANの普及などによりDHCPなどを利用した動的なネットワーク設定を行うことが一般的なものになっている。BOOTPはこのような目的で使用された初期のプロトコルであり、現在はその上位互換プロトコルであるDHCPが一般的に利用されている。多くのUnix系オペレーティングシステムには動的なネットワーク設定を行うためにdhclientが利用されている。比較的静的なネットワーク設定か単純な動的なネットワーク設定の場合、dhclientによって構成された静的なネットワーク設定は問題なく動作するが、ネットワークやネットワーク・トポロジーが複雑なものになった場合には、全てのネットワーク設定を集中管理することが重要になる。
NetworkManagerは2つのソフトウェアコンポーネントが存在する。
これらのコンポーネントは適切に移植が出来るように設計されており、アプレットはfreedesktop.orgの「System Tray Protocol」を実装するデスクトップ環境で利用できる[2]。コンポーネントはD-Busを介して通信をするので、アプリケーションはリンクで対応するか既存のアプレットを置き換えることが可能となっている。ノベルがSUSE Linux向けに開発したKDE向けのフロントエンドである「KNetworkManager」はこの機能を利用している。
NetworkManagerプロジェクトは、Linuxユーザーの近代的なネットワークをより簡単に利用したいというニーズ (特に無線通信) を実現するために、2004年にレッドハットによって開始された。NetworkManagerは日和見的なネットワークの選択を行い、ネットワークに障害が発生した場合や、ユーザーが移動しながら無線通信を行っている場合に、最適なネットワークに接続しようとする。NetworkManagerはユーザーが接続したことがないSSIDよりも、以前に接続をしたことがあるアクセスポイントを優先する。アクセスポイントが暗号化されていた場合、WEPキーまたはWPAキーの入力を求めるようになっている。
NetworkManagerは、D-BusとHALを利用する最初の主要なLinuxデスクトップコンポーネントの1つである。2009年6月以降、NetworkManagerはHALに依存する必要がなくなり、2014年の0.9.10以降はrootユーザーとして操作するためにD-Busデーモンを実行する必要がなくなった[6]。