NetworkManager
NetworkManager はネットワークの検知とシステムの設定を自動で行いネットワークに接続するプログラムです。NetworkManager の機能は無線・有線両方のネットワークに使うことができます。無線ネットワークでは、NetworkManager は既知の無線ネットワークを優先し、一番信頼性のあるネットワークに切り替えることができます。NetworkManager 対応アプリケーションはオンラインとオフラインを切り替えることが可能です。また、NetworkManager では無線接続よりも有線接続が優先され、モデム接続や特定の VPN に対応しています。NetworkManager はもともとは Red Hat によって開発されていましたが、現在では GNOME プロジェクトによってホストされています。
目次
- 1 インストール
- 2 グラフィカルフロントエンド
- 3 設定
- 4 テスト
- 5 トラブルシューティング
- 5.1 PPTP トンネルを使って通信できない
- 5.2 Network management disabled
- 5.3 resolv.conf をカスタマイズする
- 5.4 dhclient と DHCP に関する問題
- 5.5 dhcpcd と DHCP に関する問題
- 5.6 ホストネームの問題
- 5.7 デフォルトの route が見つからない
- 5.8 3G モデムが検知されない
- 5.9 ラップトップで WLAN をオフに切り替える
- 5.10 固定 IP 設定が DHCP に戻る
- 5.11 ノーマルユーザーで接続を編集できない
- 5.12 隠れた無線ネットワークの削除
- 5.13 VPN が Gnome で動作しない
- 5.14 Systemd のボトルネック
- 5.15 定期的にネットワークが切断される (WiFi)
- 6 ヒントとテクニック
- 7 参照
インストール
NetworkManager は公式リポジトリにある networkmanager パッケージでインストールできます。これには、デーモンとコマンドラインインターフェース (nmcli
)、cursesベースのテキストインターフェース (nmtui
)が含まれます。
NetworkManager を有効にする
インストール後、NetworkManger.service
を 開始/有効 します。NetworkManger デーモンが起動すると、すでに構成されている使用可能な "system connections" に自動的に接続します。"user connections" または未接続の場合は、構成および接続するために、nmcli またはアプレットが必要です。
追加のインターフェース
- nm-connection-editor: グラフィカルインターフェース。
- network-manager-applet: システムトレイアプレット (
nm-applet
).
VPN サポート
NetworkManager 1.16 から WireGuard に対応しました。詳細は [1] を参照してください。
NetworkManager の VPN サポートはプラグインシステムをベースにしています。NetworkManager で VPN のサポートが必要なときは以下のパッケージの中から必要なものをインストールしてください:
- networkmanager-openconnect
- networkmanager-openvpn
- networkmanager-pptp
- networkmanager-vpnc
- networkmanager-l2tpAUR
- networkmanager-strongswan
Mobile broadband support
モバイル回線に接続するためには、modemmanagerか mobile-broadband-provider-info 、または usb_modeswitch をインストールしてください。 詳しくは USB 3G モデム#Network Manager を確認してください。
PPPoE / DSL サポート
PPPoE / DSL 接続のサポートが必要な場合は rp-pppoe をインストールしてください。実際に使うためには、nm-connection-editor
から新しい DSL/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 パッケージをインストールしてください [3]。
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 や [4] を見て解決してください。
コマンドライン
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
nmtui は networkmanager のグラフィックフロントエンドで curses を使っています。X のない環境でネットワークを設定・管理するのに便利です。networkmanager パッケージにはバージョン 0.9.10 から nmtui が含まれています。
もしくは 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
にあります。他の設定ファイルは /etc/NetworkManager/conf.d/
以下に置くことが出来ます。通常、グローバルなデフォルト設定ファイルに設定を加える必要はありません。
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) と状態 (インターフェイスは up か down、vpn 接続は vpn-up か vpn-down) です。起動する順番を正確に決めるために、しばしばスクリプトの名前の前に数字が使われます (例: 10_portmap
や 30_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 は失敗します。UUID
は nmcli con status
や nmcli 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
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-applet
の Make the VPN connection available to all users オプションを有効にしている場合、接続が失敗して NetworkManager が 'no valid VPN secrets' と表示することがあります (VPN の接続情報の保存方法 が問題です)。その場合、以下を試してみてください:
- 2. VPN の接続ファイルを編集して NetworkManager が接続情報をキーリングではなく自分で保存するようにしてください [5]:
/etc/NetworkManager/system-connections/name of your VPN connection
を開いてpassword-flags
とsecret-flags
を1
から0
に変更します。
もしくは設定ファイルに vpn-secrets
セクションを追加して直接パスワードを記述します:
[vpn] .... password-flags=0 [vpn-secrets] password=your_password
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
以下のスクリプトは特定のネットワークから切断する前に全ての CIFS をアンマウントします:
/etc/NetworkManager/dispatcher.d/pre-down.d/mount_cifs
#!/bin/bash umount -a -l -t cifs
忘れずに上述のようにスクリプトにパーミッションを設定してください。
dispatcher の中で /etc/fstab
のマウントを解析する他のスクリプト例は NFS#NetworkManager dispatcher にあります。
プロクシ設定
NetworkManager は直接プロクシ設定を扱いませんが、GNOME や KDE を使っている場合、NetworkManager の情報を使ってプロクシ設定を管理する proxydriver を使うことができます。AUR の proxydriverAUR パッケージを探して下さい。
proxydriver でプロクシ設定を変更できるようにするには、GNOME スタートアッププロセスの一部として、次のコマンドを実行する必要があります (System -> Preferences -> Startup Applications):
xhost +si:localuser:your_username
参照: プロキシ設定
DHCP client
NetworkManagerはデフォルトでは DHCP クライアントは内部のものを使います。DHCPv4 プラグインは nettools' n-dhcp4 ライブラリが基になっていて、DHCPv6 プラグインは systemd-networkd
のコードが基となっています。
NetworkManager は他の DHCP クライアントを使うことができ、そのためには次の好きな方をインストールしてください:
DHCP クライアントのバックエンドを変えたい場合は、/etc/NetworkManager/conf.d/
にある設定ファイルで main.dhcp=dhcp_client_name
を設定してください。例:
/etc/NetworkManager/conf.d/dhcp-client.conf
[main] dhcp=dhclient
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 を使いたい場合、AUR の networkmanager-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
を再起動してください。
デフォルトの route が見つからない
KDE4 システムでは、NetworkManager でワイヤレス接続を確立したときにデフォルトの route が作られません。ワイヤレス接続の route 設定を変更してデフォルトの選択 "Use only for resources on this connection" を削除すれば問題は解決します。
3G モデムが検知されない
USB 3G モデム#Network_Manager を参照してください。
ラップトップで WLAN をオフに切り替える
ラップトップについているスイッチを使って WiFi アダプタを無効にしてその後また有効にした時に NetworkManager が動作しないことがしばしばあります。これはほとんど rfkill
の問題です。公式リポジトリから rfkill[リンク切れ: 置換パッケージ: util-linux] をインストールして、ドライバが 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 をロックすることで定期的なスキャンを無効化できます。
ヒントとテクニック
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 でサポートされています。
参照: https://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 は起動時に自動的に接続しません。自動的に接続するには以下の設定が必要です:
nm-applet
アイコンを右クリックして Edit Connections を選択し Wireless タブを開いて下さい- 使用したい接続を選択して Edit ボタンをクリックしてください
- “Connect Automatically” と “Available to all users” のボックスにチェックを入れて下さい
一度ログアウトしてから再ログインすれば設定は完了です。
ログインのあと自動でキーリングを解除する
NetworkManager はログイン情報を必要とするネットワークに接続するときにログインキーリングにアクセスします。大抵の場合、ログイン時に自動的に解錠されますが、解錠されていない場合、NetworkManager はログイン時に接続することができません。
GNOME
/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 アドレスが変わります。MAC アドレスでログイン状態を記録するポータルなどで有用です。有効にするには以下のオプションを使用:
[connection] wifi.cloned-mac-address=random
または:
[connection] ethernet.cloned-mac-address=random
詳しくは こちら を参照してください。
IPv6 プライバシー拡張の有効化
IPv6#NetworkManager を見てください。