NetworkManager

提供: ArchWiki
移動先: 案内検索

NetworkManager はネットワークの検知とシステムの設定を自動で行いネットワークに接続するプログラムです。NetworkManager の機能は無線・有線両方のネットワークに使うことができます。無線ネットワークでは、NetworkManager は既知の無線ネットワークを優先し、一番信頼性のあるネットワークに切り替えることができます。NetworkManager 対応アプリケーションはオンラインとオフラインを切り替えることが可能です。また、NetworkManager では無線接続よりも有線接続が優先され、モデム接続や特定の VPN に対応しています。NetworkManager はもともとは Red Hat によって開発されていましたが、現在では GNOME プロジェクトによってホストされています。

目次

インストール

NetworkManager は公式リポジトリにある networkmanager パッケージでインストールできます。バージョン 1.0 から、NetworkManager には DHCP を基本的にサポートする内部的な機能が追加されています。フル機能の DHCP を使う場合、または IPv6 のサポートが必要な場合、dhclient を使ってください。

ノート: ネットワークを設定しようとするサービスが他に動いていないことを確認してください。複数のネットワークサービスがあると衝突します。systemctl --type=service で現在動作しているサービスのリストを表示できるので、ネットワークサービスがあったら停止してください。NetworkManager サービスを有効にする方法は設定を見てください。

VPN サポート

Network Manager の VPN サポートはプラグインシステムをベースにしています。NetworkManager で VPN のサポートが必要なときは以下のパッケージの中から必要なものをインストールしてください:

警告: VPN サポートは 不安定 です。GUI からデーモンプロセスのオプションが正しく設定されていることを確認して、パッケージがリリースされるたびに再確認してください [1]

PPPoE / DSL サポート

PPPoE / DSL 接続のサポートが必要な場合は rp-pppoeインストールしてください。

グラフィカルフロントエンド

NetworkManager を簡単に使えるようにするためのアプレットをインストールすることができます。この GUI フロントエンドはシステムトレイ(や通知エリア)に収納され、NetworkManager のネットワーク選択や設定が可能です。異なるデスクトップにあわせて様々なアプレットが存在します。その他に #nm-applet を使うこともできます。

GNOME

GNOME にはツールが内蔵されており、ネットワーク設定からアクセスできます。

KDE Plasma

plasma-nm アプレットをインストールしてください。

nm-applet

network-manager-applet はあらゆる Xorg 環境で動作する GTK+ 3 フロントエンドです (システムトレイに表示されます)。

接続情報を保存するには GNOME Keyring をインストール・設定してください。

Make available to other users オプションを有効にすると、NetworkManager はパスワードを平文で保存します。ただしファイルにアクセスできるのは root だけです (他のユーザーは nm-applet を介してアクセスします)。#Wi-Fi パスワードの暗号化を見てください。

システムトレイを使わずに nm-applet を起動したい場合、trayer または stalonetray を使います。例えば、以下のようなスクリプトを追加して使うことができます:

nmgui
#!/bin/sh
nm-applet    2>&1 > /dev/null &
stalonetray  2>&1 > /dev/null
killall nm-applet

stalonetray のウィンドウを閉じると nm-applet も終了するため、ネットワーク設定で無駄なメモリを消費することがありません。

Xfce

Xfce でも network-manager-applet は動作しますが、エラーメッセージなど通知を表示するには nm-applet に加えて FreeDesktop.org の仕様に準拠したデスクトップ通知デーモンが必要です。xfce のパネル設定では "Notification Area" という名前のアプリになります。通知を有効にするには xfce4-notifyd をインストールしてください。新しい無線ネットワークに接続したときにパスワードの入力プロンプトを表示させるには gnome-keyring などの org.freedesktop.secrets サービスが必要です。

通知デーモンがないと、nm-applet アプレットは以下のエラーを標準出力に表示します:

(nm-applet:24209): libnotify-WARNING **: Failed to connect to proxy
** (nm-applet:24209): WARNING **: get_all_cb: couldn't retrieve
system settings properties: (25) Launch helper exited with unknown
return code 1.
** (nm-applet:24209): WARNING **: fetch_connections_done: error
fetching connections: (25) Launch helper exited with unknown return
code 1.
** (nm-applet:24209): WARNING **: Failed to register as an agent:
(25) Launch helper exited with unknown return code 1

nm-applet は問題なく動作しますが、通知は表示されません。

アプレットが表示されない場合は xfce4-indicator-pluginAUR パッケージをインストールしてください [2]

Openbox

Openbox で正しく動作させるには、XFCE と同じ理由で GNOME アプレットに xfce4-notifyd 通知デーモンが必要です。また、システムトレイにアプレットを表示するには gnome-icon-theme パッケージが必要です。

認証情報 (Wireless/DSL) を保存するには GNOME Keyring をインストール・設定してください。

nm-applet は autostart ファイルを /etc/xdg/autostart/nm-applet.desktop にインストールします。これに問題が発生する場合 (例: nm-applet が二度起動する、全く起動しない)、Openbox#autostart[3] を見て解決してください。

コマンドライン

nmcli

networkmanager パッケージにはバージョン 0.8.1 から nmcli が含まれています。

例:

  • wifi ネットワークに接続するには:
    nmcli dev wifi connect <name> password <password>
  • wlan1 の wifi インターフェイスの wifi に接続するには:
    nmcli dev wifi connect <name> password <password> iface wlan1 [profile name]
  • インターフェイスを切断するには:
    nmcli dev disconnect iface eth0
  • 切断されたインターフェイスに再接続するには:
    nmcli con up uuid <uuid>
  • UUID のリストを表示するには:
    nmcli con show
  • ネットワークデバイスのリストと状態を表示するには:
    nmcli dev
  • wifi をオフにするには:
    nmcli r wifi off

nmtui

nmtuinetworkmanager のグラフィックフロントエンドで curses を使っています。X のない環境でネットワークを設定・管理するのに便利です。networkmanager パッケージにはバージョン 0.9.10 から nmtui が含まれています。

nmcli-dmenu

もしくは nm-applet の代わりに dmenu を使って NetworkManager の接続を管理する小さなスクリプト networkmanager-dmenu-gitAUR も存在します。既存の NetworkManager の有線・無線接続に接続したり、新しい無線接続に接続したり、必要であればパスフレーズをリクエストする、既存の VPN 接続に接続する、ネットワークを無効化・有効化する、nm-connection-editor GUI を起動するなどの機能が備わっています。

設定

NetworkManager には正しく機能させるために必要なことがあります。

次に進む前に /etc/hosts が正しいことを確認してください。この手順を行う前に接続を試すと、NetworkManager が設定を変えてしまうことがあります。/etc/hosts の例:

/etc/hosts
127.0.0.1 localhost
::1       localhost

nss-myhostname を使っていない場合:

/etc/hosts
127.0.0.1 my-laptop localhost
::1       my-laptop localhost

NetworkManager を有効にする

NetworkManager は NetworkManager.service を使って操作します。NetworkManager デーモンが起動すると、自動的に設定済みの有効な "システム接続" に接続します。"ユーザー接続"や設定していない接続には nmcli やアプレットを使って設定・接続する必要があります。

NetworkManager のグローバルな設定ファイルは /etc/NetworkManager/NetworkManager.conf にあります。通常、グローバルなデフォルト設定ファイルに設定を加える必要はありません。

NetworkManager Wait Online を有効にする

ネットワークが立ち上がる前にサービスが起動して失敗する場合、NetworkManager サービスにプラスして NetworkManager-wait-online.service を使って下さい。ただし、ネットワークが設定されていないときでも殆どのネットワークデーモンは正しく立ち上がるので、これが必要になるのは稀です。

それでもサービスが正しく起動できない場合 /usr/lib/systemd/system/NetworkManager-wait-online.service のタイムアウト設定が短すぎることが原因です。デフォルトのタイムアウトである 30 を高い値に修正してください。

PolicyKit パーミッションの設定

ワーキングセッションの設定については一般的なトラブルシューティング#セッションのパーミッションを参照してください。

ワーキングセッションで、NetworkManager に必要な特権を与える方法は複数存在します:

方法 1. ログイン時に /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 (polkit-gnome に含まれています) などの PolicyKit 認証エージェントを実行する。ネットワーク接続を追加・削除したときにパスワードを求められるようになります。

方法 2. ユーザーを wheel グループに追加する。パスワードを入力する必要はなくなりますが、root パスワードを入力せずに sudo を使えるなど、他の権限もユーザーアカウントに与えてしまうことになります。

方法 3. ユーザーを network グループに追加して以下のファイルを作成する:

/etc/polkit-1/rules.d/50-org.freedesktop.NetworkManager.rules
polkit.addRule(function(action, subject) {
  if (action.id.indexOf("org.freedesktop.NetworkManager.") == 0 && subject.isInGroup("network")) {
    return polkit.Result.YES;
  }
});

network グループの全てのユーザーはパスワードなしでネットワークを追加・削除できるようになります。systemd-logind でアクティブセッションを作っていない場合、この方法は systemd では動きません。

ネットワークサービスと NetworkManager dispatcher

NetworkManager がインターフェースを立ち上げるまで動かしたくないネットワークサービスというのが相当数存在します。NTPd や様々なタイプのネットワークファイルシステムマウント (例: netfs) が好例です。NetworkManager には、あなたがネットワークに接続したときにこれらのサービスを起動して、切断したときにサービスを停止する機能があります。この機能を有効にするには NetworkManager-dispatcher.service起動してください。

機能を有効にすれば、スクリプトを /etc/NetworkManager/dispatcher.d ディレクトリに追加することができます。スクリプトは実行可能でユーザーのパーミッションがなければなりません。セキュリティ上、スクリプトの所有者を root:root にして書き込み権限を所有者だけに与えるとよいでしょう。

接続時にアルファベット順でスクリプトは実行され、切断時にはアルファベットの逆順で実行されます。スクリプトには2つの引数が渡されます: インターフェースの名前 (例: eth0) と状態 (インターフェイスは updown、vpn 接続は vpn-upvpn-down) です。起動する順番を正確に決めるために、しばしばスクリプトの名前の前に数字が使われます (例: 10_portmap30_netfs (これでポートマップが NFS マウントよりも先に実行されます)。

警告: パブリックネットワークに接続する場合、起動するサービスや接続するサーバーに注意してください。パブリックネットワークに接続している際に間違ったサービスを起動するとセキュリティホールとなる可能性があります。

3秒タイムアウトを止める

上の設定で動作するなら、このセクションは関係ありません。ただし、実行するのに3秒以上かかる dispatcher スクリプトを動かす場合は共通の問題があります。NetworkManager は内部的に3秒タイムアウトを使っており (詳しくはバグトラッカーを参照) 3秒以上時間がかかっているスクリプトを自動的に殺します。この場合、/usr/lib/systemd/system/NetworkManager-dispatcher.service にある dispatcher サービスファイルを有効にしつづけるように修正が必要です。以下の内容でサービスファイル /etc/systemd/system/NetworkManager-dispatcher.service を作成してください:

.include /usr/lib/systemd/system/NetworkManager-dispatcher.service
[Service]
RemainAfterExit=yes

作成したら修正を加えた NetworkManager-dispatcher スクリプトを有効にしてください。

OpenNTPD を起動

networkmanager-dispatcher-openntpd パッケージをインストールしてください。

リモートフォルダを sshfs でマウント

スクリプトは制限的な環境で実行されるので、SSH エージェントに接続するには SSH_AUTH_SOCK を export する必要があります。複数の方法が存在します、詳しくは このメッセージ を見て下さい。以下の例は GNOME Keyring と一緒に動作し、ロックが解除されていない場合にパスワードを尋ねます。NetworkManager がログイン時に自動的に接続する場合は、gnome-keyring は起動せず export は失敗します。UUIDnmcli con statusnmcli con list コマンドで確認できます。

#!/bin/sh
USER='username'
REMOTE='user@host:/remote/path'
LOCAL='/local/path'

interface=$1 status=$2
if [ "$CONNECTION_UUID" = "uuid" ]; then
  case $status in
    up)
      export SSH_AUTH_SOCK=$(find /tmp -maxdepth 1 -type s -user "$USER" -name 'ssh')
      su "$USER" -c "sshfs $REMOTE $LOCAL"
      ;;
    down)
      fusermount -u "$LOCAL"
      ;;
  esac
fi

dispatcher を使って LAN ケーブルが接続されているかどうかに応じて自動的に Wi-Fi を切り替える

LAN ケーブルが接続されていない場合にのみ Wi-Fi をオンにして、LAN ケーブルが接続されたら (ノートパソコンがドックに接続された場合など) Wi-Fi を自動的に無効化することができます。

以下の dispatcher スクリプトを作成してください (ソース)、LAN_interface は適当なインターフェイスに置き換えてください:

/etc/NetworkManager/dispatcher.d/wlan_auto_toggle.sh
#!/bin/sh

if [ "$1" = "LAN_interface" ]; then
    case "$2" in
        up)
            nmcli radio wifi off
            ;;
        down)
            nmcli radio wifi on
            ;;
    esac
fi
ノート: インターフェイスは nmcli で確認できます。有線 (LAN) インターフェイスは先頭が en となります。例: enp0s5

dispatcher を使ってネットワーク接続が確立された後に VPN に接続する

この例では特定の WiFi ネットワークの接続後に予め定義した VPN に自動的に接続します。最初にネットワークに接続した後にすることを定義した dispatcher スクリプトを作成する必要があります。

1. dispatcher スクリプトを作成:
/etc/NetworkManager/dispatcher.d/vpn-up
#!/bin/sh
VPN_NAME="name of VPN connection defined in NetworkManager"
ESSID="Wi-Fi network ESSID (not connection name)"

interface=$1 status=$2
case $status in
  up|vpn-down)
    if iwgetid | grep -qs ":\"$ESSID\""; then
      nmcli con up id "$VPN_NAME"
    fi
    ;;
  down)
    if iwgetid | grep -qs ":\"$ESSID\""; then
      if nmcli con show --active | grep "$VPN_NAME"; then
        nmcli con down id "$VPN_NAME"
      fi
    fi
    ;;
esac

全ての Wi-Fi ネットワークで VPN の接続を自動的にして欲しい場合は、ESSID は次のように定義します: ESSID=$(iwgetid -r)上述のようにスクリプトのパーミッションを忘れずに設定してください。

nm-appletMake the VPN connection available to all users オプションを有効にしている場合、接続が失敗して NetworkManager が 'no valid VPN secrets' と表示することがあります (VPN の接続情報の保存方法 が問題です)。その場合、以下を試してみてください:

2. VPN の接続ファイルを編集して NetworkManager が接続情報をキーリングではなく自分で保存するようにしてください [4]: /etc/NetworkManager/system-connections/name of your VPN connection を開いて password-flagssecret-flags1 から 0 に変更します。

もしくは設定ファイルに vpn-secrets セクションを追加して直接パスワードを記述します:

 [vpn]
 ....
 password-flags=0
 
 [vpn-secrets]
 password=your_password
ノート: It may now be necessary to re-open the NetworkManager connection editor and save the VPN passwords/secrets again.

dispatcher を使って CIFS 共有のマウントを処理

CIFS 共有の中には特定のネットワークや場所 (例: 家の中) を使っているときだけ使えるものがあります。ディスパッチャを使うことで現在の場所に応じて CIFS 共有をマウントすることができます。

以下のスクリプトは特定のネットワークに接続されているかどうか確認してから共有をマウントします:

/etc/NetworkManager/dispatcher.d/mount_cifs
#!/bin/bash
if [ "$2" = "up" ]; then
  if [ "$CONNECTION_UUID" = "uuid" ]; then
    mount /your/mount/point & 
    # add more shares as needed
  fi
fi
ノート: nmcli を使うことで uuid のリストを取得できます。

以下のスクリプトは特定のネットワークから切断する前に全ての CIFS をアンマウントします:

/etc/NetworkManager/dispatcher.d/pre-down.d/mount_cifs
#!/bin/bash
umount -a -l -t cifs
ノート:
  • 上記のスクリプトは pre-down.d サブディレクトリに保存しないと、接続状態が変わったときに全ての共有がアンマウントされてしまいます。
  • NetworkManager 0.9.8 から、'pre-down' や 'down' はシャットダウンや再起動時に実行されなくなりました。したがって上記のスクリプトはネットワークから手動で切断したときにのみ機能します。詳しくは このバグレポート を参照。

忘れずに上述のようにスクリプトにパーミッションを設定してください。

dispatcher の中で /etc/fstab のマウントを解析する他のスクリプト例は NFS#NetworkManager dispatcher にあります。

プロクシ設定

NetworkManager は直接プロクシ設定を扱いませんが、GNOME や KDE を使っている場合、NetworkManager の情報を使ってプロクシ設定を管理する proxydriver を使うことができます。AURproxydriverAUR パッケージを探して下さい。

proxydriver でプロクシ設定を変更できるようにするには、GNOME スタートアッププロセスの一部として、次のコマンドを実行する必要があります (System -> Preferences -> Startup Applications):

xhost +si:localuser:your_username

参照: プロキシ設定

NetworkManager の無効化

dbus によってサービスが自動的に起動してしまうこともあります。systemctl でサービスをマスクすることで完全に無効化できます:

# systemctl mask NetworkManager
# systemctl mask NetworkManager-dispatcher

テスト

ログイン時に NetworkManager アプレットがロードされるようになっているので、ほとんどの場合さらに設定をする必要はありません。既に前のネットワーク設定を無効にしてネットワークから切断している場合、NetworkManager が動作するかどうかテストすることができます。まず NetworkManager.service起動してください。

アプレットは .desktop ファイルを提供するので、NetworkManager アプレットはアプリケーションメニューからロードすることができます。アプレットがない場合、コマンドを探すか、一度ログアウトしてからログインしなおしてアプレットを起動してください。アプレットが起動すれば、DHCP サーバーの自動設定によってネットワーク接続のポーリングを開始します。

Awesome などの xdg 非互換のウィンドウマネージャで GNOME アプレットを起動するには:

nm-applet --sm-disable &

固定 IP を使うには NetworkManager を設定する必要があります。アプレットを右クリックして 'Edit Connections' などを選択してください。

トラブルシューティング

一般的な問題に対する修正。

PPTP トンネルを使って通信できない

PPTP 接続のログインが成功すると、適切な VPN IP の ppp0 インターフェースが表示されますが、リモートの IP に ping できません。これは標準の Arch の pppd に MPPE (Microsoft Point-to-Point Encryption) サポートがないのが原因です。まず標準の Arch の ppp を使って予期通り動作するか試すことを推奨します。

問題を解決するには AUR から ppp-mppeAUR[リンク切れ: アーカイブ: aur-mirror] をインストールしてください。

PEAP の MSCHAPv2 type-2 認証を使う WPA2-Enterprise ワイヤレスネットワークでは標準の ppp パッケージではなく ppp-mppe が必要になることがあります。netctl では ppp-mppe がなくても設定いらずで動きます。いずれにしても、MSCHAPv2 は攻撃されやすいため使用が推奨されていません。ただし他の方法にすることはできないのが普通です。この 記事 を参照してください。

Network management disabled

時々 NetworkManager を終了したときに pid (state) ファイルが削除されずに 'Network management disabled' というメッセージが表示されることがあります。これが発生した場合は、手動でファイルを削除する必要があります:

# rm /var/lib/NetworkManager/NetworkManager.state

resolv.conf をカスタマイズする

resolv.conf を見て下さい。dhclient を使いたい場合、AURnetworkmanager-dispatch-resolvAUR[リンク切れ: アーカイブ: aur-mirror] パッケージを試すことができます。

dhclient と DHCP に関する問題

DHCP を使って IP を取得するときに問題が起こるときは、以下を /etc/dhclient.conf に追加してみてください:

 interface "eth0" {
   send dhcp-client-identifier 01:aa:bb:cc:dd:ee:ff;
 }

aa:bb:cc:dd:ee:ff は NIC の MAC アドレスに置き換えてください。MAC アドレスは iproute2 パッケージの ip link show interface コマンドを使うことでわかります。

dhcpcd と DHCP に関する問題

ルーターによっては、/etc/dhcpcd.conf (dhcpd.conf とは別のファイルです) 内の次の行をコメントアウトしないと正しく接続できないことがあります:

require dhcp_server_identifier

ネットワーク上で複数の DHCP サーバーを使ってなければこの修正によって問題が起こることはありません。詳細は このページ を見て下さい。

ホストネームの問題

ホストネームが接続しているルーターに送信されるかどうかは、使用している NetworkManager プラグインによります。標準の "keyfile" プラグインはデフォルト設定ではホストネームを送信しません。ホストネームを送信するようにしたいときは、以下を /etc/NetworkManager/NetworkManager.conf に追加してください:

/etc/NetworkManager/NetworkManager.conf
[keyfile]
hostname=your_hostname

[keyfile] 下のオプションはデフォルトの /etc/NetworkManager/system-connections のパスのネットワーク接続に適用されます。

また、(NetworkManager が自動的に起動する) DHCP クライアントを設定して送信させることもできます。NetworkManager はデフォルトで dhclient を利用しますが、インストールされていない場合は、NetworkManager 内蔵の DHCP 機能にフォールバックします。dhclient でホストネームを送信するには設定を変更する必要があります。dhcpcd はデフォルトでホストネームを送信します。

まず、どの DHCP クライアントが使われているのか確認 (以下の例では dhclient):

# journalctl -b | egrep "dhc"
...
Nov 17 21:03:20 zenbook dhclient[2949]: Nov 17 21:03:20 zenbook dhclient[2949]: Bound to *:546
Nov 17 21:03:20 zenbook dhclient[2949]: Listening on Socket/wlan0
Nov 17 21:03:20 zenbook dhclient[2949]: Sending on   Socket/wlan0
Nov 17 21:03:20 zenbook dhclient[2949]: XMT: Info-Request on wlan0, interval 1020ms.
Nov 17 21:03:20 zenbook dhclient[2949]: RCV: Reply message on wlan0 from fe80::126f:3fff:fe0c:2dc.

ホストネームを DHCP サーバーに送るように dhclient を設定する

サンプル設定ファイルをコピー:

# cp /usr/share/dhclient/dhclient.conf.example /etc/dhclient.conf

ファイルの中身を見てください。重要なのは以下の行です:

/etc/dhclient.conf
send host-name = pick-first-value(gethostname(), "ISC-dhclient");

IP アドレスの更新を強制することで DHCP サーバーからホストネームを確認できるようになるはずです。

特定の DHCP クライアントを使うように NetworkManager を設定する

NetworkManager で使用する DHCP クライアントを明示的に設定したい場合、グローバルな設定ファイルで設定できます:

/etc/NetworkManager/NetworkManager.conf
dhcp=internal

上記のオプションが設定されていない場合、dhcp=dhclient がデフォルトで使われます。

それから NetworkManager.service再起動してください。

ノート: dhcpcd のサポートは networkmanager-1.0.0-2 で 無効 になっています (2015-02-14)。

デフォルトの route が見つからない

KDE4 システムでは、NetworkManager でワイヤレス接続を確立したときにデフォルトの route が作られません。ワイヤレス接続の route 設定を変更してデフォルトの選択 "Use only for resources on this connection" を削除すれば問題は解決します。

3G モデムが検知されない

USB 3G モデム#Network_Manager を参照してください。

ラップトップで WLAN をオフに切り替える

ラップトップについているスイッチを使って WiFi アダプタを無効にしてその後また有効にした時に NetworkManager が動作しないことがしばしばあります。これはほとんど rfkill の問題です。公式リポジトリから rfkill をインストールして、ドライバが rfkill に無線アダプタの状態を通知しているかどうか確かめるために次のコマンドを実行してください:

$ watch -n1 rfkill list all

アダプタの切り替えを行った後に identifier がブロックされたままの場合、手動でブロックを解除することができます (X は上のコマンドで出力された identifier の番号に置き換えてください):

# rfkill event unblock X

固定 IP 設定が DHCP に戻る

未解決のバグのため、デフォルトの接続を固定 IP にしたとき、nm-applet は正しく設定を保存できず、自動 DHCP に戻ります。

この問題を解決するにはデフォルトの接続 (例: "Auto eth0") を nm-applet で編集してから、接続の名前を変更し (例: "my eth0")、"Available to all users" のチェックを外して、固定 IP の設定をして、それから Apply をクリックする必要があります。これで新しい接続が指定した名前で保存されます。

さらに、デフォルト接続を自動で接続して欲しくない場合があるかもしれません。そうするには、nm-connection-editor を (root 以外で) 起動してください。接続エディタで、デフォルト接続 (例: "Auto eth0") を編集して "Connect automatically" のチェックを外して Apply をクリックして終了してください。

ノーマルユーザーで接続を編集できない

#PolicyKit パーミッションの設定 を見て下さい。

隠れた無線ネットワークの削除

ステルスが有効になっているネットワークは無線のリストに表示されないので、GUI で削除することは出来ません。次のコマンドでネットワークを削除することが可能です:

# rm /etc/NetworkManager/system-connections/[SSID]

他の接続でもこのコマンドは使えます。

VPN が Gnome で動作しない

Gnome で NetworkManager を使って openconnect や vpnc 接続を設定すると、ダイアログが表示されず以下のエラーが /var/log/errors.log に現れることがあります:

localhost NetworkManager[399]: <error> [1361719690.10506] [nm-vpn-connection.c:1405] get_secrets_cb(): Failed to request VPN secrets #3: (6) No agents were available for this request.

これは GNOME の NM アプレットが /usr/lib/gnome-shell にダイアログスクリプトがあると想定しているのが原因です。NetworkManager のパッケージは /usr/lib/networkmanager に配置します。"一時的な"修正として (このバグをしばらく回避できます)、以下のシンボリックリンクを作成してください:

  • OpenConnect の場合: ln -s /usr/lib/networkmanager/nm-openconnect-auth-dialog /usr/lib/gnome-shell/
  • VPNC (すなわち Cisco VPN) の場合: ln -s /usr/lib/networkmanager/nm-vpnc-auth-dialog /usr/lib/gnome-shell/

他の NM VPN プラグインでも同じように設定してください。

Systemd のボトルネック

時が立つにつれてログファイル (/var/log/journal) が膨大になってしまうことがあります。そうすると NetworkManager を使う場合にブートパフォーマンスに大きな影響を与えます。参照: systemd#少しづつ起動時間が長くなっている

定期的にネットワークが切断される (WiFi)

WiFi ドライバーの中にはベースステーションのスキャン時に問題が発生するものがあります。VPN が切断されたりパケットが消失したり、ウェブページがロードされないなどの症状が起こります。

journalctl -f を実行すると、以下のようなメッセージが定期的にログに残っているならこの問題が関わっています:

NetworkManager[410]: <info>  (wlp3s0): roamed from BSSID 00:14:48:11:20:CF (my-wifi-name) to (none) ((none))

パッチが適用された NetworkManager を使うことでこの種のスキャニングを防ぐことができます: networkmanager-noscanAUR

もしくは、ローミングが重要でない場合、WiFi の接続プロファイルでアクセスポイントの BSSID をロックすることで定期的なスキャンを無効化できます。

Tips and tricks

Wi-Fi パスワードの暗号化

デフォルトでは NetworkManager は /etc/NetworkManager/system-connections/ に存在する接続ファイルに平文でパスワードを保存します。保存されているパスワードを表示するには、以下のコマンドを実行:

# grep -H '^psk=' /etc/NetworkManager/system-connections/*

パスワードにアクセスできるのは root ユーザーだけであり通常ユーザーは GUI の設定からアクセスできます (例: nm-applet)。

平文ではなく暗号化された状態で保存することもできますが、ユーザーごとに接続の設定が必要になります。

Gnome-Keyring を使う

キーリングデーモンを起動してキーリングを解錠する必要があります。

さらに、全てのユーザーでパスワードを保存しないように NetworkManager を設定しなければなりません。GNOME の nm-applet を使う場合、ターミナルから nm-connection-editor を起動してネットワーク接続を選択し、Edit をクリックして、Wifi-Security タブからパスワードの右のアイコンをクリックして Store the password only for this user にチェックを入れてください。

wifi でインターネット接続を共有する

nm を使って数クリックでインターネット接続 (例: 3G または有線) を共有することができます。サポートされた wifi カードが必要になります (Atheros AR9xx や AR5xx を使っているカードがおそらく最適です)。

ファイアウォールがインターネット共有を妨害することもあるので注意してください。

Ad-hoc

  • 接続の共有をできるようにするために dnsmasq パッケージをインストールしてください
  • dnsmasq.conf を修正すると nm に干渉する可能性があります
  • nm-applet -> Create new wireless network をクリック
  • ウィザードに従う (WEP を使用する場合、パスワードの長さは5文字あるいは13文字なければなりません)
  • 次に必要になった時のために設定は保存されます

Real AP

2012年から、インフラストラクチャモード (ad-hoc をサポートしていない Android で必要) は NetworkManager でサポートされています。

参照: http://fedoraproject.org/wiki/Features/RealHotspot

cron ジョブやスクリプトでネットワークが立ち上がっているか確認する

cron ジョブの中にはネットワークが立ち上がっている必要があるジョブもあります。ネットワークが立ち上がっていない場合はジョブを実行しないようにすることができます。そのためには、NetworkManager の nm-tool を使ってネットワークの状態を確認する if テストを追加します。インターフェイスが立ち上がっている場合はテストは通りますが、全てのインターフェイスがダウンになっている場合はテストを通過しません。無線でネットワークにつながっていたり、いなかったりするノートパソコンなどで有用です。

if [ $(nm-tool|grep State|cut -f2 -d' ') == "connected" ]; then
    #Whatever you want to do if the network is online
else
    #Whatever you want to do if the network is offline - note, this and the else above are optional
fi

上記は cron.hourly スクリプトを使って fpupdate を実行し F-Prot ウイルススキャナをアップデートしている場合などに有用です。

ログイン時に自動的に接続する

デフォルトでは、パスワードを入力しないと使えないネットワークの場合 NetworkManager は起動時に自動的に接続しません。自動的に接続するには以下の設定が必要です:

GNOME

  1. nm-applet アイコンを右クリックして Edit Connections を選択し Wireless タブを開いて下さい
  2. 使用したい接続を選択して Edit ボタンをクリックしてください
  3. “Connect Automatically” と “Available to all users” のボックスにチェックを入れて下さい

一度ログアウトしてから再ログインすれば設定は完了です。

ログインのあと自動でキーリングを解除する

NetworkManager はログイン情報を必要とするネットワークに接続するときにログインキーリングにアクセスします。大抵の場合、ログイン時に自動的に解錠されますが、解錠されていない場合、NetworkManager はログイン時に接続することができません。

ノート: 以下の方法は古い情報であり機能する保証はありません。
  • /etc/pam.d/gdm (もしくは /etc/pam.d にある適当なデーモン) を開いて、"auth" と "session" ブロックの最後に以下の行を追加します:
 auth            optional        pam_gnome_keyring.so
 session         optional        pam_gnome_keyring.so  auto_start
  • /etc/pam.d/passwd を開いて、'password' ブロックで以下の行を使います:
 password    optional    pam_gnome_keyring.so
次のログイン時に、パスワードをログイン時に自動的にロック解除するべきかどうか尋ねられるはずです。

SLiM ログインマネージャ

SLiM#SLiM と Gnome Keyring を見て下さい。

特定のデバイスを無視する

時々 NetworkManager に特定のデバイスを無視してもらってアドレスやルートを設定しないのが望ましいことがあります。/etc/NetworkManager/NetworkManager.conf で以下を使うことで MAC やインターフェイス名によってデバイスを無視するよう設定できます:

[keyfile]
unmanaged-devices=mac:00:22:68:1c:59:b1;mac:00:1E:65:30:D1:C4;interface-name:eth0

これを記述した後、NetworkManager を再起動してください。設定したデバイスに触れないように NetworkManager でインターフェイスを設定できるはずです。

接続の高速化

IPv6 を無効にする

NetworkManager の余計な IPv6 クエリーによって接続が遅くなったりネットワークの再接続が起こることがあります。ローカルネットワークで IPv6 をサポートしていない場合、NetworkManager が IPv6 の接続を確立しようとして結局タイムアウトするので、通常よりもネットワークへの接続に時間がかかるかもしれません。解決策は NetworkManager で IPv6 を無効にすることで、これによってネットワーク接続が高速になります。以下は接続するネットワークごとに実行する必要があります。

  • ネットワーク状態アイコンを右クリック。
  • "Edit Connections" をクリック。
  • "Wired" か "Wireless" タブを見る。
  • ネットワークの名前を選択。
  • "Edit" をクリック。
  • "IPv6 Settings" タブを見る。
  • "Method" ドロップダウンから "Ignore/Disabled" を選択。
  • "Save" をクリック。

DHCPCD の ARP probing を無効にして DHCP をスピードアップ

dhcpcd には割り当てられた IP アドレスが実際に取得されているかどうか ARP を使って確認する DHCP 標準 (RFC2131 section 2.2) の勧告の実装が含まれています。家庭ネットワークではほとんどの場合これは不要なので、次の行を /etc/dhcpcd.conf に加えることで接続にかかる時間を5秒間短くできます:

noarp

これは dhcpcd に --noarp を渡すのと同じであり、上述の ARP probing を無効にして、DHCP によるネットワーク接続を高速化します。

OpenDNS サーバーを使う

/etc/resolv.conf.opendns を以下のネームサーバで作成してください:

nameserver 208.67.222.222
nameserver 208.67.220.220

もしくは Google DNS サーバーを使って下さい:

nameserver 8.8.8.8
nameserver 8.8.4.4

そして DHCP サーバーを OpenDNS サーバーに置き換える dispatcher を作って下さい:

/etc/NetworkManager/dispatcher.d/dns-servers-opendns
#!/bin/bash
# Use OpenDNS servers over DHCP discovered servers

cp -f /etc/resolv.conf.opendns /etc/resolv.conf

スクリプトを実行可能にします:

# chmod +x /etc/NetworkManager/dispatcher.d/dns-servers-opendns

DNS キャッシュを有効にする

DNS リクエストは以前のリクエストをローカルに保存することで高速化することが可能です。NetworkManager には dnsmasq を使って DNS キャッシュを有効にするプラグインが存在しますが、今のところデフォルト設定では有効になっていません。しかしながら、以下の手順で簡単に有効にできます。

まずは dnsmasqインストールしてください。次に、/etc/NetworkManager/NetworkManager.conf を編集して次の行を [main] セクションに追加してください:

dns=dnsmasq

そして NetworkManager を再実行するかパソコンを再起動してください。NetworkManager は自動的に dnsmasq を起動し 127.0.0.1 を /etc/resolv.conf に追加します。実際の DNS サーバーは /var/run/NetworkManager/dnsmasq.conf で見つかります。dnsmasq が使われているか確かめるには、dig で同じ DNS ルックアップを二度行なって、それからサーバーとクエリの時間を見て下さい。

MAC アドレスのランダム化の設定

バージョン 1.4.0 現在、NetworkManager では2種類の MAC アドレスランダム化をサポートしています。スキャン時のランダム化と定常的なランダム化です。どちらのモードも /etc/NetworkManager/NetworkManager.conf で設定できます。

無線スキャン時のランダム化はバージョン 1.2.0 からデフォルトで有効になっており、以下の行を /etc/NetworkManager/NetworkManager.conf に追加することで無効にできます:

[device]
wifi.scan-rand-mac-address=no
ヒント: MAC アドレスのランダム化を無効にすることで接続が安定することがあります。[5] を参照。

定常的なランダム化では接続するたびに MAC アドレスが変わります。MAC アドレスでログイン状態を記録するポータルなどで有用です。有効にするには以下のオプションを使用:

[connection]
wifi.cloned-mac-address=random

または:

[connection]
ethernet.cloned-mac-address=random

詳しくは こちら を参照してください。

IPv6 プライバシー拡張の有効化

IPv6#NetworkManager を見てください。

参照