「NetworkManager」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(同期)
 
(3人の利用者による、間の97版が非表示)
1行目: 1行目:
 
[[Category:ネットワークマネージャ]]
 
[[Category:ネットワークマネージャ]]
 
[[Category:Red Hat]]
 
[[Category:Red Hat]]
  +
[[Category:DHCP]]
[[cs:NetworkManager]]
 
 
[[de:Networkmanager]]
 
[[de:Networkmanager]]
 
[[en:NetworkManager]]
 
[[en:NetworkManager]]
[[es:NetworkManager]]
 
 
[[fr:NetworkManager]]
 
[[fr:NetworkManager]]
[[it:NetworkManager]]
 
 
[[pt:NetworkManager]]
 
[[pt:NetworkManager]]
[[ru:NetworkManager]]
 
[[tr:NetworkManager]]
 
 
[[zh-hans:NetworkManager]]
 
[[zh-hans:NetworkManager]]
 
{{Related articles start}}
 
{{Related articles start}}
 
{{Related|ネットワーク設定}}
 
{{Related|ネットワーク設定}}
{{Related|ワイヤレス設定}}
+
{{Related|ワイヤレスネットワーク設定}}
{{Related|Netctl}}
 
{{Related|Wicd}}
 
 
{{Related articles end}}
 
{{Related articles end}}
[http://projects.gnome.org/NetworkManager/ NetworkManager] はネットワークの検知とシステムの設定を自動で行いネットワークに接続するプログラムです。NetworkManager の機能は無線有線両方のネットワークに使うことがきます。無線ネットワークでは、NetworkManager は既知の無線ネットワークを優先一番信頼性のあるネットワークに切り替えることができます。NetworkManager 対応アプリケーションはオンラインとオフライン切り替えることが可能です。また、NetworkManager は無線接続よりも有線接続優先され、モデム接続特定の VPN に対応しています。NetworkManager はもともとは Red Hat によって開発されていましたが、現在では [[GNOME]] プロジェクトによってホストされています。
+
[https://networkmanager.dev/ NetworkManager] は、システムがネットワーク自動的に接続きるようにするためにネットワークの検出と設定の機能を提供するプログラムです。NetworkManager の機能は無線ネットワークと有線ネットワークの両方で有用です。無線ネットワークでは、NetworkManager は既知の無線ネットワークを優先するようになっており最も信頼性のあるネットワークに切り替える機能もあります。NetworkManager 対応アプリケーションはオンラインモードとオフラインモードの切り替えが可能です。また、NetworkManager は無線接続よりも有線接続優先するようになっており、モデム接続特定の種類の VPN に対応しています。NetworkManager は元々 Red Hat によって開発されていましたが、現在では [[GNOME]] プロジェクトによってホストされています。
   
{{Warning|デフォルトでは、Secrets (WiFi パスワードなど) はファイルシステム root ユーザーと、GUI を介して設定にアクセスできるユーザー (nm-applet など) がアクセスできます。[[NetworkManager#Wi-Fi パスワードの暗号化|Wi-Fi パスワードの暗号化]] を参照してください。}}
+
{{Warning|デフォルトでは、機密情報 (Wi-Fi パスワードなど) は root ユーザからファイルシステムでアクセス可能であり、さらに GUI (''nm-applet'' など) を介して設定にアクセスできるユーザからもアクセス可能です。[[#Wi-Fi パスワードの暗号化]] を参照してください。}}
   
 
== インストール ==
 
== インストール ==
   
NetworkManager は[[公式リポジトリ]]にある {{Pkg|networkmanager}} パッケージでインストールできます。こには、デーモンコマンドラインインターフェス ({{ic|nmcli}})、cursesベースのテキストインターフェス ({{ic|nmtui}})が含まれます。
+
NetworkManager は {{Pkg|networkmanager}} パッケージで[[インストール]]できます。このパッケージには、デーモンコマンドラインインターフェス ({{ic|nmcli}})、そして curses ベースのインターフェス ({{ic|nmtui}}) が含まれています。
   
=== NetworkManager を有効する ===
+
=== NetworkManager を有効する ===
   
インストール、{{ic|NetworkManager.service}} を [[systemd#ユニットを使う|開始/有効]]ます。NetworkManager デーモンが起動すると、すでに構成されている使用可能な "system connections" に自動的に接続します。"user connections" または接続の場合は、構成および接続するために、nmcli またはアプレットが必要です。
+
インストールしたら、{{ic|NetworkManager.service}} を[[起動/有効]]する必要があります。NetworkManager デーモンが起動すると、に構成されている用可能な "システム接続" に自動的に接続します。"ユーザ接続" 未構成接続を設定したり接続したりするに''nmcli'' アプレットが必要です。
   
  +
{{Note|
=== 追加のインターフェース ===
 
  +
* ネットワークを設定しようとするサービスが他に動いていないことを確認しなければなりません。事実、ネットワーキングサービスが複数動いていると、互いに干渉してしまいます。現在動作中のサービスの完全なリストは {{ic|1=systemctl --type=service}} で見られます。衝突の恐れのあるサービスは[[停止]]してください。NetworkManager サービスを有効化する方法は [[#設定]] を見てください。
  +
* [[systemd-resolved]] が[[起動]]されていない場合、エラーメッセージがログに溢れ始めます。詳細は [[#Unit dbus-org.freedesktop.resolve1.service not found]] を見てください。
  +
}}
   
* {{Pkg|nm-connection-editor}}: グラフィカルインターフェ
+
=== 追加のインターフェ ===
  +
* {{Pkg|network-manager-applet}}: システムトレイアプレット ({{ic|nm-applet}}).
 
  +
* {{Pkg|nm-connection-editor}}: グラフィカルユーザインターフェイス。
  +
* {{Pkg|network-manager-applet}}: システムトレイアプレット ({{ic|nm-applet}})。
  +
  +
=== モバイルブロードバンドサポート ===
  +
  +
NetworkManager はモバイルブロードバンド接続のサポートに [[ModemManager]] を使用します。
  +
  +
{{Pkg|modemmanager}} と {{Pkg|usb_modeswitch}} を[[インストール]]してください。その後、{{ic|ModemManager.service}} を[[有効化]]し、[[起動]]してください。
  +
  +
ModemManager を認識させるために {{ic|NetworkManager.service}} を[[再起動]]する必要がある場合があります。サービスを再起動し、モデムを挿し直せば、認識されるはずです。
  +
  +
フロントエンド (例えば {{Pkg|nm-connection-editor}}) から接続を追加し、接続タイプにモバイルブロードバンドを選択してください。ISP と料金プランを選んだら、[[Wikipedia:ja:APN|APN]] とその他の設定が {{Pkg|mobile-broadband-provider-info}} にある情報で自動的に書き込まれるはずです。
  +
  +
=== PPPoE / DSL サポート ===
   
  +
PPPoE / DSL サポートに関しては {{Pkg|rp-pppoe}} を[[インストール]]してください。PPPoE 接続を追加するには、{{ic|1=nm-connection-editor}} を使って新しい DSL/PPPoE 接続を追加してください。
{{Note|ネットワークを設定しようとするサービスが他に動いていないことを確認してください。複数のネットワークサービスがあると衝突します。{{ic|1=systemctl --type=service}} で現在動作しているサービスのリストを表示できるので、ネットワークサービスがあったら[[systemd#ユニットを使う|停止]]してください。NetworkManager サービスを有効にする方法は[[#設定|設定]]を見てください。}}
 
   
 
=== VPN サポート ===
 
=== VPN サポート ===
   
NetworkManager 1.16 から [[WireGuard]] に対応しました。詳細は [https://blogs.gnome.org/thaller/2019/03/15/wireguard-in-networkmanager/] を参照してください。
+
NetworkManager 1.16 から [[WireGuard]] のネイティブなサポートが追加されました。必要なのは {{ic|wireguard}} カーネルモジュールだけです。詳細は [https://blogs.gnome.org/thaller/2019/03/15/wireguard-in-networkmanager/ NetworkManager のブログ記事の WireGuard] をてください。
   
NetworkManager の VPN サポートはプラグインシステムをベースしています。NetworkManager で VPN のサポートが必要なときは以下のパッケージの中から必要なものをインストールしください:
+
その他の VPN タイプに対するサポートはプラグインシステムをベースしています。以下のパッケージで提供されています:
   
* {{Pkg|networkmanager-openconnect}} for [[OpenConnect]]
+
* {{Pkg|networkmanager-openconnect}}: [[OpenConnect]]
* {{Pkg|networkmanager-openvpn}} for [[OpenVPN]]
+
* {{Pkg|networkmanager-openvpn}}: [[OpenVPN]]
* {{Pkg|networkmanager-pptp}} for [[PPTP クライアント]]
+
* {{Pkg|networkmanager-pptp}}: [[PPTP クライアント]]
* {{Pkg|networkmanager-vpnc}} for [[Vpnc]]
+
* {{Pkg|networkmanager-strongswan}}: [[strongSwan]]
* {{Pkg|networkmanager-strongswan}} for [[strongSwan]]
+
* {{Pkg|networkmanager-vpnc}}
* {{AUR|networkmanager-fortisslvpn-git}}
+
* {{AUR|networkmanager-fortisslvpn}}
 
* {{AUR|networkmanager-iodine-git}}
 
* {{AUR|networkmanager-iodine-git}}
 
* {{AUR|networkmanager-libreswan}}
 
* {{AUR|networkmanager-libreswan}}
* {{AUR|networkmanager-l2tp}}
+
* {{Pkg|networkmanager-l2tp}}
 
* {{AUR|networkmanager-ssh-git}}
 
* {{AUR|networkmanager-ssh-git}}
 
* {{Pkg|network-manager-sstp}}
 
* {{Pkg|network-manager-sstp}}
   
{{Warning|1=VPN サポート[https://bugzilla.gnome.org/buglist.cgi?quicksearch=networkmanager%20vpn 不安定]す。GUI からデーモンプロセスのオプションが正しく設定されていることを確認し、パッケージリリースされるたび再確認してください [https://bugzilla.gnome.org/show_bug.cgi?id=755350]。}}
+
{{Warning|1=VPN サポートに関連する[https://gitlab.freedesktop.org/NetworkManager/NetworkManager/issues?search=VPN&state=opened バグ]が大量に存在しています。デーモンプロセスのオプションが GUI から適切に設定されていることを確認し、パッケージリリースの度ダブルチェックしてください。}}
   
  +
{{Note|1=<nowiki/>
=== Mobile broadband support ===
 
  +
* VPN 使用時に DNS 解決を完全に機能させるには、[[#DNS キャッシングと条件付きフォワーディング|条件付きフォワーディング]]をセットアップする必要があります。
  +
* これらのプラグインは、ドキュメント化されたコマンドラインインターフェイスが存在しなかったり、アプレットが実行されていないと全く動作しなかったりする場合があります。通常のデスクトップ環境を使用している場合には問題になりません。通常とは異なるものを使用している場合は、接続を設定したりアクティブ化したりする際に必要なダイアログが表示されるようにするために [[#nm-applet]] を実行するべきです。[https://bbs.archlinux.org/viewtopic.php?id=246698]
  +
}}
   
  +
== 使い方 ==
モバイル回線に接続するためには、{{pkg|modemmanager}}か {{pkg|mobile-broadband-provider-info}} 、または {{pkg|usb_modeswitch}} を[[インストール]]してください。 詳しくは [[USB 3G モデム#Network Manager]] を確認してください。
 
   
  +
NetworkManager には {{man|1|nmcli}} と {{man|1|nmtui}} が付属しています。
=== PPPoE / DSL サポート ===
 
  +
  +
=== nmcli 例 ===
  +
  +
近くの Wi-Fi ネットワークを一覧表示します:
  +
  +
$ nmcli device wifi list
  +
  +
Wi-Fi ネットワークに接続します:
  +
  +
$ nmcli device wifi connect ''SSID_または_BSSID'' password ''パスワード''
  +
  +
非表示の Wi-Fi ネットワークに接続します:
  +
  +
$ nmcli device wifi connect ''SSID_または_BSSID'' password ''パスワード'' hidden yes
  +
  +
{{ic|wlan1}} インターフェイスで Wi-Fi に接続します:
  +
  +
$ nmcli device wifi connect ''SSID_または_BSSID'' password ''パスワード'' ifname wlan1 ''プロファイル名''
  +
  +
インターフェイスを切断します:
  +
  +
$ nmcli device disconnect ifname eth0
  +
  +
名前、UUID、タイプ、バッキングデバイスを含む接続のリストを取得します:
  +
  +
$ nmcli connection show
  +
  +
接続を有効にします (つまり、既存のプロファイルでネットワークに接続します):
  +
  +
$ nmcli connection up ''名前_または_uuid''
  +
  +
接続を削除します:
  +
  +
$ nmcli connection delete ''名前_または_uuid''
  +
  +
ネットワークデバイスとその状態のリストを表示します:
  +
  +
$ nmcli device
  +
  +
Wi-Fi をオフにします:
  +
  +
$ nmcli radio wifi off
  +
  +
=== 接続を編集する ===
  +
  +
設定の包括的なリストについては、{{man|5|nm-settings}} を参照してください。
  +
  +
まず、接続のリストを取得する必要があります:
  +
  +
{{hc|$ nmcli connection|<nowiki>
  +
NAME UUID TYPE DEVICE
  +
有線接続 2 e7054040-a421-3bef-965d-bb7d60b7cecf ethernet enp5s0
  +
有線接続 1 997f2782-f0fc-301d-bfba-15421a2735d8 ethernet enp0s25
  +
MY-HOME-WIFI-5G 92a0f7b3-2eba-49ab-a899-24d83978f308 wifi --
  +
</nowiki>}}
  +
  +
ここでは、後で使用する接続 ID として最初の列を使用できます。この例では、{{ic|有線接続 2}} を接続 ID として選択します。
  +
  +
作成後に接続 {{ic|有線接続 2}} を設定するには、次の3つの方法があります:
  +
  +
; nmcli 対話型エディタ
  +
: {{ic|nmcli connection edit '有線接続 2'}}。<br> 使用法はエディタから十分に文書化されています。
  +
  +
; nmcli コマンドラインインターフェイス
  +
: {{ic|nmcli connection modify '有線接続 2' ''設定''.''プロパティ'' ''値''}}。使用方法については {{man|1|nmcli}} を参照してください。例えば、{{ic|nmcli connection modify '有線接続 2' ipv4.route-metric 200}} コマンドを使用して、IPv4 ルートメトリックを 200 に変更できます。
  +
設定を削除するには、次のように空のフィールド ("") を渡します:
  +
: {{ic|nmcli connection modify '有線接続 2' ''設定''.''プロパティ'' ""}}
   
  +
; 接続ファイル
PPPoE / DSL 接続のサポートが必要な場合は {{pkg|rp-pppoe}} を[[インストール]]してください。実際に使うためには、{{ic|1=nm-connection-editor}} から新しい DSL/PPPoE 接続を追加してください。
 
  +
: {{ic|/etc/NetworkManager/system-connections/}} で、対応する {{ic|有線接続 2.nmconnection}} ファイルを変更します。<br>{{ic|nmcli connection reload}} で設定ファイルをリロードすることを忘れないでください。
   
== グラフィカルフロントエンド ==
+
== フロントエンド ==
   
NetworkManager を簡単に使えるようにするためのアプレットをインストールするこきますこの GUI フロンエンドシステムトレイ(や通知エリア)に収納され、NetworkManager のネットワーク選択や設定が可能です。デスクトップにあわせ様々なアプレットが存在します。その他に [[#nm-applet]] を使こともできます。
+
[[デスクトップ環境]]と統合するために、ほとんどユーザはアプレットをインストールしたい考えるしょうアプレットはネットワーク選択や設定を容易にするだけなく、機密情報をセキュアに保存するために必要なエージェントも提供します。様々なデスクトップ環境は独自のアプレットを持っいます。デスクトップ環境に独自のアプレットが存在しない場合、[[#nm-applet]] を使用することもできます。
   
 
=== GNOME ===
 
=== GNOME ===
   
GNOME にはツールが内蔵されており、ネットワーク設定からアクセスできます。
+
[[GNOME]] にはツールが内蔵されており、ネットワーク設定からアクセス可能です。
   
 
=== KDE Plasma ===
 
=== KDE Plasma ===
   
{{Pkg|plasma-nm}} アプレをインストールしてください。
+
{{Pkg|plasma-nm}} ケージ[[インストール]]してください。その後、''パネルオプション > ウィジェットを追加 > ネットワーク'' で KDE タスクバーにアプレットを追加してください。
   
 
=== nm-applet ===
 
=== nm-applet ===
   
{{Pkg|network-manager-applet}} はあらゆる Xorg 環境で動作する GTK+ 3 フロントエンドです (システムトレイに表示されます)
+
{{Pkg|network-manager-applet}} は、システムトレイのある Xorg 環境で機能する GTK 3 フロントエンドです。
   
接続情報を保存するには [[GNOME Keyring]] をインストール設定してください。
+
接続に関する機密情報 (Wi-Fi のパスワードなど) を保存するには、[https://specifications.freedesktop.org/secret-service-spec/latest/ Secret Service D-Bus API] を実装しているアプリケーション ([[GNOME/Keyring]]、[[KDE Wallet]]、[[KeePass|KeePassXC]] など) をインストール設定してください。
   
{{ic|Make available to other users}} オプションを有効すると、NetworkManager はパスワードを平文で保存しま。ただしファイルにアクセスできるのは root だけです (他のユーザーは {{ic|nm-applet}} をしてアクセスす)。[[#Wi-Fi パスワードの暗号化]]を見てください。
+
接続の設定で {{ic|Make available to other users}} チェックボックスオプションを有効すると、NetworkManager はその接続のパスワードを平文で保存することに注意てください。とはいえ、パスワードが含まれるファイルは root (及び {{ic|nm-applet}} をして他のユーザ) からしかアクセスできせん。[[#Wi-Fi パスワードの暗号化]] を見てください。
   
システムトレイを使わずに {{ic|nm-applet}} を起動したい場合、{{Pkg|trayer}} または {{Pkg|stalonetray}} を使います。例えば、以下のようなスクリプトを追加して使うことができます:
+
{{Pkg|trayer}} {{Pkg|stalonetray}} を使うことで、システムトレイ無しで {{ic|nm-applet}} を実行することができます。例えば、以下のようなスクリプトをパスに追加することができます:
   
 
{{hc|nmgui|<nowiki>
 
{{hc|nmgui|<nowiki>
93行目: 175行目:
 
</nowiki>}}
 
</nowiki>}}
   
[[stalonetray]] のウィンドウを閉じると {{ic|nm-applet}} も終了るため、ネットワーク設定で無駄なメモリ消費ることありません。
+
''stalonetray'' のウィンドウを閉じると{{ic|nm-applet}} も閉じま。なので、ネットワーク設定を終えたら余分なメモリ消費されることありません。
   
  +
このアプレットは、Wi-Fi ネットワークの接続や切断などのイベントの通知を表示することができます。これらの通知を表示させるには、通知サーバがインストールされている必要があります ([[デスクトップ通知]] を見てください)。アプレットを通知サーバ無しで使うと、標準出力や標準エラー出力にメッセージが表示され、最悪、アプレットがハングするかもしれません。[https://bugzilla.gnome.org/show_bug.cgi?id=788313] を参照してください。
==== Xfce ====
 
[[Xfce]] でも {{Pkg|network-manager-applet}} は動作しますが、エラーメッセージなど通知を表示するには {{ic|nm-applet}} に加えて FreeDesktop.org の仕様に準拠した[[デスクトップ通知]]デーモンが必要です。xfce のパネル設定では "Notification Area" という名前のアプリになります。通知を有効にするには {{Pkg|xfce4-notifyd}} をインストールしてください。新しい無線ネットワークに接続したときにパスワードの入力プロンプトを表示させるには {{Pkg|gnome-keyring}} などの org.freedesktop.secrets サービスが必要です。
 
   
通知デーモンがないと、{{ic|nm-applet}} アプレット以下のエラーを標準出力に表示ます:
+
通知を無効化した状態で {{ic|nm-applet}} を実行するには、アプレット以下のコマンドで起動てください:
   
  +
$ nm-applet --no-agent
(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
 
   
  +
{{Tip|{{ic|nm-applet}} は[[XDG Autostart|自動起動デスクトップファイル]]によって自動的に起動されるかもしれません。そのような場合に {{ic|--no-agent}} オプションを追加するには、デスクトップファイルの Exec 行を変更してください。つまり:
{{ic|nm-applet}} は問題なく動作しますが、通知は表示されません。
 
   
  +
{{bc|1=Exec=nm-applet --no-agent}}
アプレットが表示されない場合は {{AUR|xfce4-indicator-plugin}} パッケージをインストールしてください [https://askubuntu.com/questions/449658/networkmanager-tray-nm-applet-is-gone-after-upgrade-to-14-04-trusty]。
 
   
  +
}}
==== Openbox ====
 
   
  +
{{Warning|[[i3]] では、nm-applet が {{ic|--no-agent}} オプションで起動された場合、パスワード入力ダイアログが表示されないため、アイテムリストをクリックして新しい暗号化された Wi-Fi ネットワークに接続することができなくなります。[[journal]] には {{ic|no secrets: No agents were available for this request}} と出力されます。}}
Openbox で正しく動作させるには、XFCE と同じ理由で GNOME アプレットに {{Pkg|xfce4-notifyd}} 通知デーモンが必要です。また、システムトレイにアプレットを表示するには {{Pkg|gnome-icon-theme}} パッケージが必要です。
 
   
  +
==== Appindicator ====
認証情報 (Wireless/DSL) を保存するには [[GNOME Keyring]] をインストール・設定してください。
 
   
  +
バージョン 1.18.0 から、Appindicator のサポートが公式の {{Pkg|network-manager-applet}} パッケージで[https://gitlab.archlinux.org/archlinux/packaging/packages/network-manager-applet/-/commit/527448fb2a87d85055f504f463dfe961dccd75c3 利用可能]になりました。nm-applet を Appindicator の環境で使うには、アプレットを以下のコマンドで起動してください:
{{ic|nm-applet}} は autostart ファイルを {{ic|/etc/xdg/autostart/nm-applet.desktop}} にインストールします。これに問題が発生する場合 (例: {{ic|nm-applet}} が二度起動する、全く起動しない)、[[Openbox#autostart]] や [https://bbs.archlinux.org/viewtopic.php?pid=993738] を見て解決してください。
 
   
  +
$ nm-applet --indicator
=== コマンドライン ===
 
   
==== nmcli ====
+
=== networkmanager-dmenu ===
   
  +
フロントエンドのもう一つの選択肢は {{AUR|networkmanager-dmenu-git}} です。これは、NetworkManager の接続を {{ic|nm-applet}} ではなく [[dmenu]] や [[rofi]] で管理する小さなスクリプトです。このスクリプトには必須の機能が全て揃っています。例えば: NetworkManager の既存の Wi-Fi 接続や有線接続に接続する、新しい Wi-Fi 接続に接続する、必要に応じてパスフレーズを要求する、既存の VPN 接続に接続する、ネットワークを有効化/無効化する、''nm-connection-editor'' GUI を起動する、Bluetooth ネットワークに接続する。
{{Pkg|networkmanager}} パッケージにはバージョン 0.8.1 から [http://manpages.ubuntu.com/manpages/maverick/man1/nmcli.1.html nmcli] が含まれています。
 
   
  +
=== switchboard ===
例:
 
   
  +
Pantheon の {{Pkg|switchboard}} は、{{Pkg|switchboard-plug-network}} と {{Pkg|nm-connection-editor}} と組み合わせて使えば、NetworkManager を設定するためのデスクトップ環境に依存しない方法になります。以下のコマンドで実行できます:
* wifi ネットワークに接続するには: {{bc|nmcli dev wifi connect <name> password <password>}}
 
* {{ic|wlan1}} の wifi インターフェイスの wifi に接続するには: {{bc|nmcli dev wifi connect <name> password <password> iface wlan1 [profile name]}}
 
* インターフェイスを切断するには: {{bc|nmcli dev disconnect iface eth0}}
 
* 切断されたインターフェイスに再接続するには: {{bc|nmcli con up uuid <uuid>}}
 
* UUID のリストを表示するには: {{bc|nmcli con show}}
 
* ネットワークデバイスのリストと状態を表示するには: {{bc|nmcli dev}}
 
* wifi をオフにするには: {{bc|nmcli r wifi off}}
 
   
  +
$ io.elementary.settings
==== nmtui ====
 
   
  +
== 設定 ==
''nmtui'' は ''networkmanager'' のグラフィックフロントエンドで curses を使っています。X のない環境でネットワークを設定・管理するのに便利です。{{Pkg|networkmanager}} パッケージにはバージョン 0.9.10 から ''nmtui'' が含まれています。
 
   
  +
NetworkManager を適切に実行させるには、いくつか追加の手順が必要です。[[ネットワーク設定#ホスト名の設定]] で説明されているように、{{ic|/etc/hosts}} が設定されていることを確認してください。
==== nmcli-dmenu ====
 
   
  +
NetworkManager のグローバルな設定ファイルは {{ic|/etc/NetworkManager/NetworkManager.conf}} です。追加の設定ファイルは {{ic|/etc/NetworkManager/conf.d/}} に置くことができます。通常、グローバルなデフォルト値に対して設定を行う必要はありません。
もしくは {{ic|nm-applet}} の代わりに ''dmenu'' を使って NetworkManager の接続を管理する小さなスクリプト {{AUR|networkmanager-dmenu-git}} も存在します。既存の NetworkManager の有線・無線接続に接続したり、新しい無線接続に接続したり、必要であればパスフレーズをリクエストする、既存の VPN 接続に接続する、ネットワークを無効化・有効化する、''nm-connection-editor'' GUI を起動するなどの機能が備わっています。
 
   
  +
設定ファイルを編集したら、以下のコマンドで変更を適用することができます:
== 設定 ==
 
   
  +
# nmcli general reload
NetworkManager には正しく機能させるために必要なことがあります。
 
   
  +
=== NetworkManager-wait-online ===
次に進む前に {{ic|/etc/hosts}} が正しいことを確認してください。この手順を行う前に接続を試すと、NetworkManager が設定を変えてしまうことがあります。[[ネットワーク設定 #ホストネームの設定]] にあるように設定ができていることを確認してください。{{ic|/etc/hosts}} の例:
 
   
  +
{{ic|NetworkManager.service}} を有効化すると、{{ic|NetworkManager-wait-online.service}} も有効化されます。{{ic|NetworkManager-wait-online.service}} は oneshot なシステムサービスで、ネットワークが構成されるまで待機します。このサービスには {{ic|1=WantedBy=network-online.target}} が含まれているため、このサービスが終了するのは、{{ic|network-online.target}} 自体が有効化されている時か、あるいは {{ic|network-online.target}} が他のユニットによって実行された時のみです。[[systemd#ネットワークが稼働した後にサービスを実行する]] も参照してください。
{{hc|/etc/hosts|
 
  +
127.0.0.1 localhost
 
  +
デフォルトでは、{{ic|NetworkManager-wait-online.service}} は、ネットワーク接続が確立されるのを待つ ({{man|1|nm-online}} を参照) のではなく、NetworkManager の起動が完了するのを待ちます。ネットワークの準備が整う前に {{ic|NetworkManager-wait-online.service}} が終了してしまってブート時に一部のサービスが失敗してしまう場合、{{ic|NetworkManager-wait-online.service}} [[ユニットを拡張]]し、{{ic|ExecStart}} 行から {{ic|-s}} を削除してください:
::1 localhost
 
  +
  +
[Service]
  +
ExecStart=
  +
ExecStart=/usr/bin/nm-online -q
  +
  +
ただし、これにより[https://lists.fedoraproject.org/archives/list/users@lists.fedoraproject.org/thread/EGC324JD3HJCGVN7J55WYPRLFDA3TP7N/ 他の問題]が発生する可能性があることに注意してください。
  +
  +
一部のケースで、タイムアウトの設定が短すぎるために、このサービスの起動が失敗してしまう場合があります。サービスを[[編集]]して {{ic|NM_ONLINE_TIMEOUT}} を {{ic|60}} からより大きい値に変更してください。
  +
  +
=== PolicyKit のパーミッションをセットアップする ===
  +
  +
デフォルトでは、アクティブなローカルセッションのユーザは全員パスワード無しでほぼ全てのネットワーク設定を変更することができます。セッションの種類を確認する方法については、[[一般的なトラブルシューティング#セッションのパーミッション]] を見てください。ほとんどの場合、特に設定しなくても全て動作するはずです。
  +
  +
一部のアクション (システムのホスト名を変更するなど) においては、管理者のパスワードが必要です。そのような場合、自身のユーザを {{ic|wheel}} グループに[[ユーザーとグループ#グループ管理|追加]]し、パスワードのプロンプトを表示する [[Polkit#認証エージェント|Polkit の認証エージェント]]を実行する必要があります。
  +
  +
リモートセッションの場合 (例えば、[[TigerVNC#vncserver をバーチャル(ヘッドレス)セッションで起動する|ヘッドレス VNC]])、NetworkManager を使用するために必要な特権を得る方法は複数あります:
  +
  +
# 自身を {{ic|wheel}} グループに[[ユーザーとグループ#グループ管理|追加]]する。アクションの度にパスワードを入力する必要があります。注意点として、{{ic|wheel}} グループに追加すると他の権限 (root パスワードを入力せずに [[sudo]] を実行できるなど) も付与される場合があります。
  +
# 自身を {{ic|network}} グループに[[ユーザーとグループ#グループ管理|追加]]し、以下の内容で {{ic|/etc/polkit-1/rules.d/50-org.freedesktop.NetworkManager.rules}} を作成する: {{bc|<nowiki>
  +
polkit.addRule(function(action, subject) {
  +
if (action.id.indexOf("org.freedesktop.NetworkManager.") == 0 && subject.isInGroup("network")) {
  +
return polkit.Result.YES;
  +
}
  +
});
  +
</nowiki>}} {{ic|network}} グループ内の全ユーザがパスワード無しでネットワークの追加と削除を行えるようになります (これは、Polkit 認証エージェントを実行する必要がないことを意味します。なので、この方法は SSH セッションでも使えます。)。
  +
  +
=== プロクシ設定 ===
  +
  +
NetworkManager は直接プロクシ設定を扱いませんが、[[GNOME]] や [[KDE]] を使っている場合、NetworkManager の情報を使ってプロクシ設定を管理する {{AUR|proxydriver}}{{Broken package link|package not found}} を使うことができます。
  +
  +
''proxydriver'' でプロクシ設定を変更できるようにするには、GNOME スタートアッププロセスの一部として、次のコマンドを実行する必要があります ([[GNOME#自動起動]] を参照):
  +
  +
$ xhost +si:localuser:''ユーザ名''
  +
  +
参照: [[プロキシ設定]]
  +
  +
=== 接続の確認 ===
  +
  +
NetworkManager は、ネットワークに接続した後にウェブサーバへの接続を試みて、キャプティブポータルなどが存在しないか確認します。デフォルトの接続先ホスト ({{ic|/usr/lib/NetworkManager/conf.d/20-connectivity.conf}} で設定されています) は [https://ping.archlinux.org ping.archlinux.org] (redirect.archlinux.org の CNAME エイリアス) です。別のウェブサーバを使う、または接続チェックを無効化するには、{{ic|/etc/NetworkManager/conf.d/20-connectivity.conf}} を作成してください ({{man|5|NetworkManager.conf|CONNECTIVITY SECTION}} を参照)。以下は、GNOME のサーバを使用する例です ([[GNOME]] を使用する必要はありません):
  +
  +
{{hc|/etc/NetworkManager/conf.d/20-connectivity.conf|<nowiki>
  +
[connectivity]
  +
uri=http://nmcheck.gnome.org/check_network_status.txt
  +
</nowiki>}}
  +
  +
NetworkManager の接続チェックを無効化するには、以下の設定を使用してください。これは、接続チェックを無効化する VPN に接続している場合に便利です。
  +
  +
{{hc|/etc/NetworkManager/conf.d/20-connectivity.conf|<nowiki>
  +
[connectivity]
  +
enabled=false
  +
</nowiki>}}
  +
  +
{{Note|自動的な接続チェックはプライバシーの問題を引き起こす可能性がありますが、Arch Linux のデフォルトの接続先 URL は如何なるアクセスも記録しません。[https://gitlab.archlinux.org/archlinux/infrastructure/-/commit/fabccd0f61e5dea3925e8a0c6a46d56d5750c121#a4f34381bbb18ea77bfb3dd11a8aeca707078fca_0_26] [https://gitlab.archlinux.org/archlinux/infrastructure/-/blob/master/roles/ping/templates/nginx.d.conf.j2] を参照してください。}}
  +
  +
=== キャプティブポータル ===
  +
  +
[[Wikipedia:ja:キャプティブポータル|キャプティブポータル]]が存在している場合、デスクトップマネージャが、資格情報を求めるウィンドウを自動的に開く場合があります。あなたのデスクトップ環境がこれを行わない場合、{{Pkg|capnet-assist}} パッケージを使用することができます (しかし現在、このパッケージの NetworkManager ディスパッチャスクリプトは壊れています)。あるいは、NetworkManager ディスパッチャスクリプトを以下の内容で作成することもできます:
  +
  +
{{hc|/etc/NetworkManager/dispatcher.d/90-open_captive_portal|<nowiki>
  +
#!/bin/sh -e
  +
# Script to dispatch NetworkManager events
  +
#
  +
# Runs shows a login webpage on walled garden networks.
  +
# See NetworkManager(8) for further documentation of the dispatcher events.
  +
  +
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
  +
  +
if [ -x "/usr/bin/logger" ]; then
  +
logger="/usr/bin/logger -s -t captive-portal"
  +
else
  +
logger=":"
  +
fi
  +
  +
wait_for_process() {
  +
PNAME=$1
  +
while [ -z "$(/usr/bin/pgrep $PNAME)" ]; do
  +
sleep 3;
  +
done
  +
}
  +
  +
#launch the browser, but on boot we need to wait that nm-applet starts
  +
start_browser() {
  +
local user="$1"
  +
local display="$2"
  +
  +
export DISPLAY="$display"
  +
wait_for_process nm-applet
  +
  +
export XAUTHORITY="/home/$user/.Xauthority"
  +
  +
$logger "Running browser as '$user' with display '$display' to login in captive portal"
  +
sudo -u "$user" --preserve-env=DISPLAY,XAUTHORITY -H xdg-open http://capnet.elementary.io 2>&1 > /dev/null
  +
}
  +
  +
# Run the right scripts
  +
case "$2" in
  +
connectivity-change)
  +
$logger -p user.debug "dispatcher script triggered on connectivity change: $CONNECTIVITY_STATE"
  +
if [ "$CONNECTIVITY_STATE" = "PORTAL" ]; then
  +
# Match last column of who's output with ' :[at least one digit] '
  +
who | awk '$NF ~ /\(:[0-9]+\)/ { print $1 " " substr($NF, 2, length($NF)-2) };' | \
  +
while read user display; do
  +
start_browser $user $display || $logger -p user.err "Failed for user: '$user' display: '$display'"
  +
done
  +
fi
  +
;;
  +
*)
  +
# In a down phase
  +
exit 0
  +
;;
  +
esac
  +
</nowiki>}}
  +
  +
スクリプトには[[実行可能属性]]を付与してください。しかし、このスクリプトは X が使用されていることを仮定しており、単純に http ページを開きます。必ずしも動作するとは限らないかもしれません。
  +
  +
このスクリプトを実行するには、{{ic|NetworkManager.service}} を[[再起動]]するか、システムを再起動する必要があります。そうしたら、ディスパッチャスクリプトはキャプティブポータルを検知するとログインウィンドウを開くはずです。
  +
  +
簡潔な解決策は [https://github.com/Seme4eg/captive-portal-sh captive-portal-sh] です。これはキャプティブポータル URL を取得し、デフォルトのブラウザで開くシェルスクリプトです (Wayland のみ)。
  +
  +
別の解決策は Google Chrome ベースの {{AUR|captive-browser-git}} です。
  +
  +
=== DHCP クライアント ===
  +
  +
デフォルトでは、NetworkManager は自身の内蔵 DHCP クライアントを使用します。内蔵 DHCPv4 プラグインは [https://nettools.github.io/n-dhcp4/ nettools の n-dhcp4] ライブラリをベースにしていますが、内蔵 DHCPv6 プラグインは systemd-networkd ベースのコードから作られています。
  +
  +
別の DHCP クライアントを使用するには、以下の代替実装のどれかを[[インストール]]してください:
  +
  +
* {{Pkg|dhclient}} - [[dhclient]]
  +
* {{Pkg|dhcpcd}} - [[dhcpcd]]
  +
  +
DHCP クライアントのバックエンドを変更するには、{{ic|/etc/NetworkManager/conf.d/}} 内に設定ファイルを作成して、そのファイル内で {{ic|1=main.dhcp=''DHCP_クライアント名''}} オプションを設定してください。例えば:
  +
  +
{{hc|1=/etc/NetworkManager/conf.d/dhcp-client.conf|2=
  +
[main]
  +
dhcp=dhclient
 
}}
 
}}
   
  +
{{Note|
nss-myhostname を使っていない場合:
 
  +
* NetworkManger は IPv6 に dhcpcd を使用することをサポートしていません。[https://gitlab.freedesktop.org/NetworkManager/NetworkManager/issues/5 NetworkManager issue #5] を参照してください。dhcpcd が DHCP クライアントとして設定されている場合、NetworkManager は DHCPv6 に対しては内臓の DHCP クライアントを使用します。
  +
* {{Pkg|dhclient}} パッケージと {{Pkg|dhcpcd}} パッケージに同梱されている systemd ユニットは有効化しないでください。NetworkManager と競合してしまいます。詳細は [[#インストール]] セクションに書かれているノートを見てください。
  +
}}
   
  +
=== DNS の管理 ===
{{hc|/etc/hosts|
 
  +
127.0.0.1 my-laptop localhost
 
  +
NetworkManager の DNS 管理については、GNOME プロジェクトの wiki ページ [https://wiki.gnome.org/Projects/NetworkManager/DNS Projects/NetworkManager/DNS] で説明されています。
::1 my-laptop localhost
 
  +
  +
==== DNS キャッシングと条件付きフォワーディング ====
  +
  +
NetworkManager には、[[dnsmasq]] または [[systemd-resolved]] を使用して DNS キャッシングと条件付きフォワーディングを有効化するプラグインが存在します ([https://gitlab.freedesktop.org/NetworkManager/NetworkManager/merge_requests/143 以前は]、"条件付きフォワーディング" は NetworkManager のドキュメントで "split DNS" と呼ばれていました)。このセットアップには、DNS ルックアップがキャッシュされるので名前解決の時間が短縮され、VPN ホストの DNS ルックアップが、関連する VPN の DNS サーバに転送されるという長所があります。これは、複数の VPN に接続する場合に特に便利です。
  +
  +
{{Note|{{ic|/etc/resolv.conf}} が {{ic|/run/systemd/resolve/stub-resolv.conf}} や {{ic|/run/systemd/resolve/resolv.conf}}、{{ic|/lib/systemd/resolv.conf}}、{{ic|/usr/lib/systemd/resolv.conf}} へのシンボリックリンクである場合、NetworkManager は systemd-resolved を自動的に選択します。dnsmasq を使用するには、まずシンボリックリンクを削除する必要があります。その後で、NetworkManager を再起動してください。}}
  +
  +
===== dnsmasq =====
  +
  +
{{Pkg|dnsmasq}} がインストールされていることを確認してください。そして、{{ic|/etc/NetworkManager/conf.d/}} 内の設定ファイル (無い場合は作成してください) で {{ic|1=main.dns=dnsmasq}} を設定してください:
  +
  +
{{hc|/etc/NetworkManager/conf.d/dns.conf|2=
  +
[main]
  +
dns=dnsmasq
 
}}
 
}}
   
  +
次に、{{ic|nmcli general reload}} を root として実行してください。NetworkManager は自動的に dnsmasq を起動し、{{ic|/etc/resolv.conf}} に {{ic|127.0.0.1}} を追加します。元の DNS サーバは {{ic|/run/NetworkManager/no-stub-resolv.conf}} を見れば分かります。dnsmasq が使用されているかどうかは、{{ic|drill example.com}} で同じ DNS ルックアップを2度行ってサーバとクエリの時間を計測すれば確認できます。
=== NetworkManager を有効にする ===
 
   
  +
{{Note|
NetworkManager は {{ic|NetworkManager.service}} を使って[[systemd#ユニットを使う|操作]]します。NetworkManager デーモンが起動すると、自動的に設定済みの有効な "システム接続" に接続します。"ユーザー接続"や設定していない接続には {{ic|nmcli}} やアプレットを使って設定・接続する必要があります。
 
  +
* {{ic|dnsmasq.service}} を起動したり、{{ic|/etc/dnsmasq.conf}} を編集したりする必要はありません。NetworkManager は、その systemd サービスを使わず、さらに dnsmasq のデフォルトの設定ファイルを読み込まずに dnsmasq を起動します。
  +
* NetworkManager によって起動された dnsmasq インスタンスは {{ic|127.0.0.1:53}} にバインドされます。なので、これと同じアドレスとポートで他のソフトウェア ({{ic|dnsmasq.service}} も含む) を実行することはできません。
  +
}}
   
  +
====== dnsmasq のカスタム設定 ======
NetworkManager のグローバルな設定ファイルは {{ic|/etc/NetworkManager/NetworkManager.conf}} にあります。他の設定ファイルは {{ic|/etc/NetworkManager/conf.d/}} 以下に置くことが出来ます。通常、グローバルなデフォルト設定ファイルに設定を加える必要はありません。
 
   
  +
{{ic|/etc/NetworkManager/dnsmasq.d/}} 内に設定ファイルを作成することで、''dnsmasq'' のカスタム設定を作成することができます。例えば、DNS キャッシュ (RAM 内に格納されます) のサイズを変更するには:
=== NetworkManager Wait Online を有効にする ===
 
ネットワークが立ち上がる前にサービスが起動して失敗する場合、NetworkManager サービスにプラスして {{ic|NetworkManager-wait-online.service}} を使って下さい。ただし、ネットワークが設定されていないときでも殆どのネットワークデーモンは正しく立ち上がるので、これが必要になるのは稀です。
 
   
  +
{{hc|/etc/NetworkManager/dnsmasq.d/cache.conf|2=
それでもサービスが正しく起動できない場合 {{ic|/usr/lib/systemd/system/NetworkManager-wait-online.service}} のタイムアウト設定が短すぎることが原因です。デフォルトのタイムアウトである 30 から高い値に修正してください。
 
  +
cache-size=1000
  +
}}
   
  +
設定ファイルの構文は以下のコマンドで確認できます:
=== PolicyKit パーミッションの設定 ===
 
   
  +
$ dnsmasq --test --conf-file=/dev/null --conf-dir=/etc/NetworkManager/dnsmasq.d
ワーキングセッションの設定については[[一般的なトラブルシューティング#セッションのパーミッション]]を参照してください。
 
   
  +
利用可能な全てのオプションについては {{man|8|dnsmasq}} を参照してください。
ワーキングセッションで、NetworkManager に必要な特権を与える方法は複数存在します:
 
   
  +
====== IPv6 ======
''方法 1.'' ログイン時に {{ic|/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1}} ({{Pkg|polkit-gnome}} に含まれています) などの [[PolicyKit]] 認証エージェントを実行する。ネットワーク接続を追加・削除したときにパスワードを求められるようになります。
 
   
  +
{{Accuracy|NetworkManager は {{ic|::1}} を {{ic|/etc/resolv.conf}} に追加しないため、以下の方法では問題を解決できません。{{ic|@::1}} を手動で drill に渡さない限り、{{ic|Error: error sending query: No (valid) nameservers defined in the resolver}} というエラーで失敗します。}}
''方法 2.'' ユーザーを {{ic|wheel}} グループに追加する。パスワードを入力する必要はなくなりますが、root パスワードを入力せずに [[sudo]] を使えるなど、他の権限もユーザーアカウントに与えてしまうことになります。
 
   
  +
NetworkManager で {{ic|dnsmasq}} を有効化すると、IPv6 のみの DNS ルックアップ (つまり、{{ic|drill -6 [hostname]}}) が機能しなくなる場合があります (しかし、それ以外では機能する)。この問題を解決するには、以下のファイルを作成し、IPv6 ループバックもリッスンするように ''dnsmasq'' を設定してください:
''方法 3.'' ユーザーを {{ic|network}} グループに追加して以下のファイルを作成する:
 
{{hc|/etc/polkit-1/rules.d/50-org.freedesktop.NetworkManager.rules|<nowiki>
 
polkit.addRule(function(action, subject) {
 
if (action.id.indexOf("org.freedesktop.NetworkManager.") == 0 && subject.isInGroup("network")) {
 
return polkit.Result.YES;
 
}
 
});</nowiki>}}
 
{{ic|network}} グループの全てのユーザーはパスワードなしでネットワークを追加・削除できるようになります。[[ディスプレイマネージャ#systemd-logind を使う|systemd-logind]] でアクティブセッションを作っていない場合、この方法は systemd では動きません。
 
   
  +
{{hc|/etc/NetworkManager/dnsmasq.d/ipv6-listen.conf|2=
=== ネットワークサービスと NetworkManager dispatcher===
 
  +
listen-address=::1
  +
}}
   
  +
さらに、{{ic|dnsmasq}} は上流の IPv6 DNS を優先しません。残念ながら、NetworkManager も IPv6 DNS を優先しません ([https://bugs.launchpad.net/ubuntu/+source/network-manager/+bug/936712 Ubuntu Bug])。回避策は、NetworkManager の設定で IPv6 DNS を無効化することです (IPv4 DNS があると仮定します)。
NetworkManager がインターフェースを立ち上げるまで動かしたくないネットワークサービスというのが相当数存在します。[[Network Time Protocol daemon|NTPd]] や様々なタイプのネットワークファイルシステムマウント (例: '''netfs''') が好例です。NetworkManager には、あなたがネットワークに接続したときにこれらのサービスを起動して、切断したときにサービスを停止する機能があります。この機能を有効にするには {{ic|NetworkManager-dispatcher.service}} を[[systemd#ユニットを使う|起動]]してください。
 
   
  +
====== DNSSEC ======
機能を有効にすれば、スクリプトを {{ic|/etc/NetworkManager/dispatcher.d}} ディレクトリに追加することができます。スクリプトは実行可能でユーザーのパーミッションがなければなりません。セキュリティ上、スクリプトの所有者を '''root:root''' にして書き込み権限を所有者だけに与えるとよいでしょう。
 
   
  +
NetworkManager によってデフォルトで開始される dnsmasq インスタンスは、{{ic|--proxy-dnssec}} オプションを渡して開始されるため、[[DNSSEC]] を検証しません。なので、上流の DNS サーバからの DNSSEC 情報を何でも信頼します。
接続時にアルファベット順でスクリプトは実行され、切断時にはアルファベットの逆順で実行されます。スクリプトには2つの引数が渡されます: インターフェースの名前 (例: ''eth0'') と状態 (インターフェイスは ''up'' か ''down''、vpn 接続は ''vpn-up'' か ''vpn-down'') です。起動する順番を正確に決めるために、しばしばスクリプトの名前の前に数字が使われます (例: {{ic|10_portmap}} や {{ic|30_netfs}} (これでポートマップが NFS マウントよりも先に実行されます)。
 
   
  +
dnsmasq に DNSSEC を適切に検証させるには、以下の設定ファイルを作成してください (これにより、DNSSEC をサポートしない名前サーバでの DNS 解決が機能しなくなります):
{{Warning|パブリックネットワークに接続する場合、起動するサービスや接続するサーバーに注意してください。パブリックネットワークに接続している際に間違ったサービスを起動するとセキュリティホールとなる可能性があります。}}
 
   
  +
{{hc|/etc/NetworkManager/dnsmasq.d/dnssec.conf|2=
==== 3秒タイムアウトを止める ====
 
  +
conf-file=/usr/share/dnsmasq/trust-anchors.conf
  +
dnssec
  +
}}
   
  +
===== systemd-resolved =====
上の設定で動作するなら、このセクションは関係ありません。ただし、実行するのに3秒以上かかる dispatcher スクリプトを動かす場合は共通の問題があります。NetworkManager は内部的に3秒タイムアウトを使っており (詳しくは[https://bugzilla.redhat.com/show_bug.cgi?id=982734 バグトラッカー]を参照) 3秒以上時間がかかっているスクリプトを自動的に殺します。この場合、{{ic|/usr/lib/systemd/system/NetworkManager-dispatcher.service}} にある dispatcher サービスファイルを有効にしつづけるように修正が必要です。以下の内容でサービスファイル {{ic|/etc/systemd/system/NetworkManager-dispatcher.service}} を作成してください:
 
   
  +
NetworkManager は [[systemd-resolved]] を DNS リゾルバ及び DNS キャッシュとして使用することができます。まず先に、''systemd-resolved'' が適切に設定されていて、{{ic|systemd-resolved.service}} が[[開始]]されていることを確認してください。
.include /usr/lib/systemd/system/NetworkManager-dispatcher.service
 
[Service]
 
RemainAfterExit=yes
 
   
  +
{{ic|/etc/resolv.conf}} が {{ic|/run/systemd/resolve/stub-resolv.conf}} や {{ic|/run/systemd/resolve/resolv.conf}}、{{ic|/usr/lib/systemd/resolv.conf}} への[[systemd-resolved#DNS|シンボリックリンク]]である場合、systemd-resolved は自動的に使用されます。
作成したら修正を加えた {{ic|NetworkManager-dispatcher}} スクリプトを有効にしてください。
 
   
  +
{{ic|/etc/NetworkManager/conf.d/}} 内の設定ファイルで {{ic|1=main.dns=systemd-resolved}} を設定することで、これを明示的に有効化することもできます:
==== OpenNTPD を起動 ====
 
   
  +
{{hc|/etc/NetworkManager/conf.d/dns.conf|2=
{{AUR|networkmanager-dispatcher-openntpd}} パッケージをインストールしてください。
 
  +
[main]
  +
dns=systemd-resolved
  +
}}
   
  +
===== openresolv サブスクライバのある DNS リゾルバ =====
==== リモートフォルダを sshfs でマウント ====
 
   
  +
ローカルの [[DNS リゾルバ]]へのサブスクライバ (加入者) が [[openresolv]] に存在している場合、サブスクライバをセットアップし、[[#openresolv を使う|openresolv を使用するように NetworkManager を設定してください]]。
スクリプトは制限的な環境で実行されるので、SSH エージェントに接続するには {{ic|SSH_AUTH_SOCK}} を export する必要があります。複数の方法が存在します、詳しくは [https://bbs.archlinux.org/viewtopic.php?pid=1042030#p1042030 このメッセージ] を見て下さい。以下の例は [[GNOME Keyring]] と一緒に動作し、ロックが解除されていない場合にパスワードを尋ねます。NetworkManager がログイン時に自動的に接続する場合は、''gnome-keyring'' は起動せず export は失敗します。{{ic|UUID}} は {{ic|nmcli con status}} や {{ic|nmcli con list}} コマンドで確認できます。
 
  +
  +
NetworkManager は単一の "インターフェイス" を ''resolvconf'' に広告するため、2つの NetworkManager 接続間で条件付きフォワーディングを行うのは不可能です。[https://gitlab.freedesktop.org/NetworkManager/NetworkManager/issues/153 NetworkManager issue 153] を参照してください。
  +
  +
この問題は {{ic|/etc/resolvconf.conf}} で {{ic|1=private_interfaces="*"}} を設定すれば、部分的に緩和できます [https://roy.marples.name/projects/openresolv/configuration/]。検索ドメインリストに無いドメインのクエリは、フォワーディングされません。そのようなクエリは、他の DNS サーバにフォワーディングされるか、DNS ルートサーバから回帰的に解決されるなどして、ローカルのリゾルバの設定に従って処理されます。
  +
  +
==== カスタム DNS サーバ ====
  +
  +
===== カスタムグローバル DNS サーバの設定 =====
  +
  +
全ての接続に対して DNS サーバを設定するには、{{man|5|NetworkManager.conf}} 内で {{ic|[global-dns-domain-*]}} というセクション内で {{ic|1=servers=''serveripaddress1'',''serveripaddress2'',''serveripaddress3''}} という構文を使ってDNS サーバを指定してください。例えば:
  +
  +
{{hc|/etc/NetworkManager/conf.d/dns-servers.conf|2=
  +
[global-dns-domain-*]
  +
servers=::1,127.0.0.1
  +
}}
  +
  +
{{Note|
  +
* [[#DNS キャッシングと条件付きフォワーディング|NetworkManager の dnsmasq か systemd-resolved プラグイン]]、または [[#openresolv サブスクライバのある DNS リゾルバ|openresolv サブスクライバ]]を使用する場合、{{ic|1=servers=}} オプションにループバックアドレスを指定しないでください。DNS 解決が機能しなくなる可能性があります。
  +
* 指定されたサーバは [[systemd-resolved]] に送られず、接続の DNS サーバが代わりに使用されます。[https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/1366 NetworkManager issue 1366] と [https://github.com/systemd/systemd/issues/33754 systemd issue 33754] を参照。
  +
}}
  +
  +
===== 接続でのカスタム DNS サーバの設定 =====
  +
  +
====== 接続でのカスタム DNS サーバの設定 (GUI) ======
  +
  +
セットアップ方法は、使用するフロントエンドの種類に依ります。手順としては通常、アプレットを右クリックし、プロファイルを編集 (または作成) し、DHCP タイプに ''自動 (アドレスのみ)'' (''Automatic (specify addresses)'') を選択するというものです。DNS アドレスを入力する必要があり、通常、{{ic|127.0.0.1, ''DNS-server-one'', ...}} という形です。
  +
  +
====== 接続でのカスタム DNS サーバの設定 (nmcli / 設定ファイル) ======
  +
  +
[[#接続を編集する|接続の設定]]で {{ic|dns}} フィールド (及び、関連する {{ic|dns-search}} と {{ic|dns-options}}) を使うことで、接続毎に DNS サーバをセットアップすることができます。
  +
  +
{{ic|method}} が {{ic|auto}} に設定されている場合 (DHCP を使用する場合)、{{ic|ignore-auto-dns}} を {{ic|yes}} に設定する必要があります。
  +
  +
==== /etc/resolv.conf ====
  +
  +
NetworkManager の {{ic|/etc/resolv.conf}} 管理モードは、{{ic|main.rc-manager}} で設定されます。{{Pkg|networkmanager}} パッケージはこれを、上流のデフォルトである {{ic|auto}} ではなく、{{ic|symlink}} に設定します。設定と値は {{man|5|NetworkManager.conf}} man ページでドキュメント化されています。
  +
  +
{{Tip|openresolv を使用すると、NetworkManager は、''resolvconf'' によってサポートされている他のソフトウェアと共存できます。例えば、openresolv が [[openresolv#Subscribers|subscriber]] を持つローカル DNS キャッシングおよび分割 DNS リゾルバを実行できます。openresolv で NetworkManager を使用する場合、条件付きフォワーディングは[https://gitlab.freedesktop.org/NetworkManager/NetworkManager/issues/153 まだ完全にサポートされていない]ことに注意してください。}}
  +
  +
また、''NetworkManager'' は、ネットワークの変更後に {{ic|/etc/resolv.conf}} を変更するために使用できる、いわゆるディスパッチャスクリプトを介したフックも提供します。詳細は [[#ネットワークサービスで NetworkManager dispatcher を使用する]] と {{man|8|NetworkManager}} を参照してください。
  +
  +
{{Note|
  +
* NetworkManager が [[#dnsmasq|dnsmasq]] または [[systemd-resolved]] のいずれかを使用するように設定されている場合、適切なループバックアドレスが {{ic|/etc/resolv.conf}} に書き込まれます。
  +
* NetworkManager が書き込む {{ic|resolv.conf}}、または {{ic|/etc/resolv.conf}} に書き込む内容は、{{ic|/run/NetworkManager/resolv.conf}} で見られます。
  +
* 取得したネームサーバーと検索ドメインを含む {{ic|resolv.conf}} ファイルは、{{ic|/run/NetworkManager/no-stub-resolv.conf}} にあります。
  +
}}
  +
  +
===== 管理対象外の /etc/resolv.conf =====
  +
  +
NetworkManager が {{ic|/etc/resolv.conf}} に干渉しないようにするには、{{ic|/etc/NetworkManager/conf.d/}} の設定ファイルで {{ic|1=main.dns=none}} を設定してください:
  +
  +
{{hc|/etc/NetworkManager/conf.d/dns.conf|2=
  +
[main]
  +
dns=none
  +
}}
  +
  +
{{Tip|NetworkManager が DNS 設定を [[systemd-resolved]] に送信しないように、{{ic|1=main.systemd-resolved=false}} を設定することもできます。}}
  +
  +
{{Note|{{ic|1=main.dns=none}} を使うのではなく、[[dnsmasq]] や [[systemd-resolved]] などの他の DNS バックエンドを使用するように NetworkManager を設定する方法については、[[#DNS キャッシングと条件付きフォワーディング]] を見てください。}}
  +
  +
その後、{{ic|/etc/resolv.conf}} が壊れたシンボリックリンクになり、削除する必要が生じるかもしれません。その場合、新しい {{ic|/etc/resolv.conf}} ファイルを作成してください。
  +
  +
===== openresolv を使う =====
  +
  +
{{Note|NetworkManager は、{{Pkg|systemd-resolvconf}} によって提供されている systemd-resolved の ''resolvconf'' インターフェイスの使用をサポートしていません ({{man|1|resolvectl|COMPATIBILITY WITH RESOLVCONF(8)}})。
  +
* [[systemd-resolved]] を使用する際は {{ic|1=main.rc-manager=resolvconf}} を設定しないでください。代わりに、[[systemd-resolved#DNS|/etc/resolv.conf シンボリックリンクを適切に作成する]]か、[[#systemd-resolved|systemd-resolved を使用するように NetworkManager を明示的に設定]]してください。
  +
* systemd-resolved を使用しない場合は、{{Pkg|systemd-resolvconf}} パッケージがインストールされていないことを確認してください。{{ic|systemd-resolved.service}} が起動されていないと、このパッケージは、resolvconf を使用する全てのネットワーキングソフトウェア (NetworkManager だけではありません) の機能を破壊します。
  +
}}
  +
  +
[[openresolv]] を使用するように NetworkManager を設定するには、{{ic|/etc/NetworkManager/conf.d/}} 内の設定ファイルで {{ic|1=main.rc-manager=resolvconf}} を設定してください:
  +
  +
{{hc|/etc/NetworkManager/conf.d/rc-manager.conf|2=
  +
[main]
  +
rc-manager=resolvconf
  +
}}
  +
  +
=== ファイアウォール ===
  +
  +
現在の接続に基づいて [[Firewalld#NetworkManager を使ったゾーン管理|firewalld ゾーンを割り当てる]]ことができます。たとえば、職場では制限の厳しいファイアウォールを使用し、自宅では制限の少ないファイアウォールを使用します。
  +
  +
これは、[[#ネットワークサービスで NetworkManager dispatcher を使用する|NetworkManager dispatcher]] を使用して行うこともできます。
  +
  +
== ネットワークサービスで NetworkManager dispatcher を使用する ==
  +
  +
NetworkManager がインターフェイスを立ち上げるまで実行したくないようなネットワークサービスはたくさんあります。NetworkManager には、(例えば [[NFS]] や [[SMB]]、[[NTPd]] を使用する時などに) ネットワークに接続したらサービスを開始し、切断したらサービスを停止する機能があります。
  +
  +
この機能を有効化するには、{{ic|NetworkManager-dispatcher.service}} を[[有効化]]し、かつ[[起動]]する必要があります。
  +
  +
このサービスを有効化したら、{{ic|/etc/NetworkManager/dispatcher.d}} 内にスクリプトを追加することができます。
  +
  +
スクリプトは '''root''' によって所有されていなければなりません。ディスパッチャは、root によって所有されていないスクリプトを実行しません。セキュリティを高めるために、スクリプトのグループ[[所有権]]も root に設定してください:
  +
  +
# chown root:root /etc/NetworkManager/dispatcher.d/''10-script.sh''
  +
  +
スクリプトファイルを[[実行可能属性|実行可能]]にするのを忘れないでください。
  +
  +
スクリプトは、ネットワークへの接続時にはアルファベット順で実行され、切断時には逆アルファベット順で実行されます。実行される順番を保証するために、スクリプトの名前の前に数字を置くのが一般的です (例: {{ic|10-portmap}}、{{ic|30-netfs}}。こうすることで、NFS がマウントを試みる前に、''portmapper'' が立ち上がります)。
  +
  +
スクリプトは以下の引数を受け取ります:
  +
  +
* '''インターフェイス名:''' 例えば {{ic|eth0}}
  +
* '''アクション:''' ''up''、''down''、''vpn-up''、''vpn-down'' など (完全なリストは {{man|8|NetworkManager-dispatcher}} を見てください)
  +
  +
{{Warning|外部ネットワークや公開ネットワークに接続する場合は、どのサービスを起動するのか、どのサーバにサービスは接続できるのかに注意してください。公開ネットワークに接続する際に間違ったサービスを起動してしまうとセキュリティホールを作ってしまう可能性があります。}}
  +
  +
=== ディスパッチャのタイムアウトを防ぐ ===
  +
  +
上記がうまくいっているのであれば、このセクションは関係しません。しかし、ディスパッチャのスクリプトの実行に時間が掛かってしまうという一般的な問題があります。最初は、3 秒だけの内部タイムアウトが使用されていました。呼ばれたスクリプトが時間内に完了しないと、そのスクリプトは kill されていました。後に、タイムアウトは約 20 秒に延長されました (詳細は [https://bugzilla.redhat.com/show_bug.cgi?id=982734 Bugtracker] を参照)。タイムアウトのせいで依然として問題が発生する場合は、{{ic|NetworkManager-dispatcher.service}} に対する[[ドロップインファイル]]を使って、終了後もアクティブ状態を維持するように設定することで問題を回避できます:
  +
  +
{{hc|/etc/systemd/system/NetworkManager-dispatcher.service.d/remain_after_exit.conf|2=
  +
[Service]
  +
RemainAfterExit=yes
  +
}}
  +
  +
その後、変更した {{ic|NetworkManager-dispatcher}} サービスを開始し、かつ有効化してください。
  +
  +
{{Warning|{{ic|RemainAfterExit}} 行を追加すると、ディスパッチャが閉じられなくなります。残念ながら、ディスパッチャは、スクリプトを再び実行する前に'''閉じなければなりません'''。先の設定により、ディスパッチャはタイムアウトしませんが、閉じられもしません。これは、スクリプトはブート毎に 1 度しか実行されないことを意味します。なので、タイムアウトが実際に問題を起こしていない限り、この行を追加しないでください。}}
  +
  +
=== ディスパッチャの例 ===
  +
  +
==== タイムゾーンを自動的に設定する ====
  +
  +
{{AUR|tzupdate}} をインストールし、以下の実行可能なスクリプトを作成してください:
  +
  +
{{hc|/etc/NetworkManager/dispatcher.d/update-timezone.sh|<nowiki>
  +
#! /bin/bash
  +
# Automatically set time zone when connected to the network
  +
iface=$1
  +
action=$2
  +
  +
if [[ $iface != lo && $action == up ]]; then
  +
tz=$(tzupdate -s 1 -p 2>/dev/null)
  +
if [[ -n $tz && -r /usr/share/zoneinfo/$tz ]]; then
  +
timedatectl set-timezone $tz
  +
fi
  +
fi
  +
</nowiki>}}
  +
  +
条件式 {{ic|<nowiki>$iface != lo</nowiki>}} は、必要に応じて特定のインターフェイスとマッチするように変更してください。
  +
  +
==== sshfs でリモートディレクトリをマウントする ====
  +
  +
このスクリプトは非常に制限された環境内で実行されるため、SSH エージェントに接続するためには {{ic|SSH_AUTH_SOCK}} 変数をエクスポートする必要があります。これを行う方法はいくつかあります (詳細は[https://bbs.archlinux.org/viewtopic.php?pid=1042030#p1042030 このメッセージ]を見てください)。以下の例は [[GNOME Keyring]] を使って動作し、キーリングがまだアンロックされていない場合はパスワードを要求します。NetworkManager がログイン時に自動的にネットワークに接続するような状況では、''gnome-keyring'' がまだ開始されておらず、変数のエクスポートが失敗する可能性が高いです (そのために sleep コマンドがあります)。接続とマッチする {{ic|UUID}} は、{{ic|nmcli connection status}} か {{ic|nmcli connection list}} を実行すれば確認できます。
   
 
{{bc|<nowiki>
 
{{bc|<nowiki>
232行目: 597行目:
 
case $status in
 
case $status in
 
up)
 
up)
  +
# sleep 10
export SSH_AUTH_SOCK=$(find /tmp -maxdepth 1 -type s -user "$USER" -name 'ssh')
 
  +
SSH_AUTH_SOCK=$(find /tmp -maxdepth 1 -type s -user "$USER" -name 'ssh')
  +
export SSH_AUTH_SOCK
 
su "$USER" -c "sshfs $REMOTE $LOCAL"
 
su "$USER" -c "sshfs $REMOTE $LOCAL"
 
;;
 
;;
242行目: 609行目:
 
</nowiki>}}
 
</nowiki>}}
   
  +
==== SMB 共有をマウントする ====
==== dispatcher を使って LAN ケーブルが接続されているかどうかに応じて自動的に Wi-Fi を切り替える ====
 
  +
  +
[[SMB]] 共有は特定のネットワークや場所 (例えば自宅) でしか利用できないことがあります。ディスパッチャを使えば、現在の場所で利用可能な SMB 共有のみをマウントすることができます。
  +
  +
以下のスクリプトは、特定のネットワークに接続していることを確認し、それに応じて共有をマウントします:
  +
  +
{{hc|/etc/NetworkManager/dispatcher.d/30-mount-smb.sh|<nowiki>
  +
#!/bin/sh
  +
  +
# 接続 UUID はターミナルで "nmcli connection show" を実行して確認してください。
  +
# 全種類の NetworkManager 接続がサポートされています: 無線、VPN、有線など。
  +
if [ "$2" = "up" ]; then
  +
if [ "$CONNECTION_UUID" = "uuid" ]; then
  +
mount /your/mount/point &
  +
# add more shares as needed
  +
fi
  +
fi
  +
</nowiki>}}
  +
  +
以下のスクリプトは、ソフトウェアが特定のネットワークからの切断を開始する前に、全ての SMB 共有をアンマウントします:
  +
  +
{{hc|/etc/NetworkManager/dispatcher.d/pre-down.d/30-umount-smb.sh|<nowiki>
  +
#!/bin/sh
  +
  +
if [ "$CONNECTION_UUID" = "uuid" ]; then
  +
umount -a -l -t cifs
  +
fi
  +
</nowiki>}}
  +
  +
{{Note|このスクリプトは上記の通り {{ic|pre-down.d}} サブディレクトリに配置してください。さもないと、接続状態が変わる度に毎回、全ての共有がアンマウントされてしまいます。}}
  +
  +
以下のスクリプトは、特定のネットワークから予期せずに切断されてしまった時に、全ての SMB 共有のアンマウントを試みます:
  +
  +
{{hc|/etc/NetworkManager/dispatcher.d/40-umount-smb.sh|<nowiki>
  +
#!/bin/sh
  +
  +
if [ "$CONNECTION_UUID" = "uuid" ]; then
  +
if [ "$2" = "down" ]; then
  +
umount -a -l -t cifs
  +
fi
  +
fi
  +
</nowiki>}}
  +
  +
{{Note|
  +
* NetworkManager 0.9.8 から、''pre-down'' と ''down'' のイベントはシャットダウン時や再起動時に実行されなくなりました。詳細は[https://bugzilla.gnome.org/show_bug.cgi?id&#61;701242 このバグレポート]を見てください。
  +
* 上記 2 つの ''umount'' スクリプトでは、マウントに実際にアクセスしているアプリケーションが 'ハング' してしまう傾向が依然としてあります。
  +
}}
  +
  +
代替案は、[[NFS#NetworkManager dispatcher を使う]] にあるスクリプトを使うことです:
  +
  +
{{hc|/etc/NetworkManager/dispatcher.d/30-smb.sh|<nowiki>
  +
#!/bin/sh
  +
  +
# 接続 UUID はターミナルで "nmcli connection show" を実行して確認してください。
  +
# 全種類の NetworkManager 接続がサポートされています: 無線、VPN、有線など。
  +
WANTED_CON_UUID="CHANGE-ME-NOW-9c7eff15-010a-4b1c-a786-9b4efa218ba9"
  +
  +
if [ "$CONNECTION_UUID" = "$WANTED_CON_UUID" ]; then
  +
  +
# スクリプトパラメータ $1: ネットワークインターフェイス名 (未使用)
  +
# スクリプトパラメータ $2: ディスパッチされたイベント
  +
  +
case "$2" in
  +
"up")
  +
mount -a -t cifs
  +
;;
  +
"down"|"pre-down"|"vpn-pre-down")
  +
umount -l -a -t cifs >/dev/null
  +
;;
  +
esac
  +
fi
  +
</nowiki>}}
  +
  +
{{Note|このスクリプトは {{ic|noauto}} オプションのマウントは無視します。これらのマウントをディスパッチャが管理できるようにするには、このオプションを取り除くか、{{ic|auto}} を使ってください。}}
  +
  +
{{ic|pre-down}} イベントをキャッチできるようにするために {{ic|/etc/NetworkManager/dispatcher.d/pre-down/}} 内にシンボリックリンクを作成してください:
  +
  +
# ln -s ../30-smb.sh /etc/NetworkManager/dispatcher.d/pre-down.d/30-smb.sh
  +
  +
==== NFS 共有をマウントする ====
  +
  +
[[NFS#NetworkManager dispatcher を使う]] を見てください。
  +
  +
==== ディスパッチャを使って、LAN ケーブルが挿入されているかに応じて Wi-Fi を自動的にオンオフする ====
  +
  +
アイディアとしては、LAN ケーブルが抜かれた時にのみ Wi-Fi をオンにし (例えば、ラップトップのドックから取り外された時など)、LAN ケーブルが挿入されたら Wi-Fi を自動的に無効化します。
  +
  +
以下のディスパッチャスクリプト[https://superuser.com/questions/233448/disable-wlan-if-wired-cable-network-is-available]を作成してください。{{ic|1=''LAN_interface''}} の部分はあなたの LAN インターフェイスに置き換えてください。
   
  +
コンピュータがオンの時に LAN インターフェイスが接続され、コンピュータがオフの時に切断された場合のフェイルセーフがあることに注意してください。このフェイルセーフがないと、コンピュータがオンに戻っても Wi-Fi は依然としてオフであり、LAN インターフェイスが切断されていれば、ネットワーク接続が利用できなくなってしまいます。
LAN ケーブルが接続されていない場合にのみ Wi-Fi をオンにして、LAN ケーブルが接続されたら (ノートパソコンがドックに接続された場合など) Wi-Fi を自動的に無効化することができます。
 
   
  +
{{hc|/etc/NetworkManager/dispatcher.d/wlan_auto_toggle.sh|2=
以下の dispatcher スクリプトを作成してください ([https://superuser.com/questions/233448/disable-wlan-if-wired-cable-network-is-available ソース])、{{ic|1=LAN_interface}} は適当なインターフェイスに置き換えてください:
 
{{hc|/etc/NetworkManager/dispatcher.d/wlan_auto_toggle.sh|<nowiki>
 
 
#!/bin/sh
 
#!/bin/sh
   
if [ "$1" = "LAN_interface" ]; then
+
if [ "$1" = "''LAN_interface''" ]; then
 
case "$2" in
 
case "$2" in
 
up)
 
up)
259行目: 712行目:
 
;;
 
;;
 
esac
 
esac
  +
elif [ "$(nmcli -g GENERAL.STATE device show LAN_interface)" = "20 (unavailable)" ]; then
  +
nmcli radio wifi on
 
fi
 
fi
  +
}}
</nowiki>}}
 
  +
{{Note|インターフェイスは [[#nmcli|nmcli]] で確認できます。有線 (LAN) インターフェイスは先頭が {{ic|en}} となります。例: {{ic|1=enp0s5}}。}}
 
  +
{{Note|[[#nmcli 例|nmcli]] を使えばインターフェイスの一覧を得られます。イーサネット (LAN) インターフェイスの名前は {{ic|en}} で始まります (例: {{ic|1=enp0s5}})。}}
  +
  +
==== ディスパッチャを使って、ネットワーク接続が確立された後に VPN に接続する ====
  +
  +
この例では、特定の Wi-Fi ネットワークに接続した後に、以前定義された VPN 接続に自動的に接続したいと思います。最初にすべきことは、そのネットワークに接続した後にすることを定義するディスパッチャスクリプトを作成することです。
   
  +
{{Accuracy|A scripting without {{ic|iwgetid}} does work too and may be more reliable? (議論: [[:en:Talk:NetworkManager#Fixes for automatic VPN dispatcher script]])}}
==== dispatcher を使ってネットワーク接続が確立された後に VPN に接続する ====
 
   
  +
{{Note|このスクリプトでは {{ic|iwgetid}} を使うために {{Pkg|wireless_tools}} を必要とします。}}
この例では特定の WiFi ネットワークの接続後に予め定義した VPN に自動的に接続します。最初にネットワークに接続した後にすることを定義した dispatcher スクリプトを作成する必要があります。
 
   
:1. dispatcher スクリプトを作成:
 
 
{{hc|/etc/NetworkManager/dispatcher.d/vpn-up|<nowiki>
 
{{hc|/etc/NetworkManager/dispatcher.d/vpn-up|<nowiki>
 
#!/bin/sh
 
#!/bin/sh
  +
VPN_NAME="NetworkManager に定義されている VPN 接続の名前"
VPN_NAME="name of VPN connection defined in NetworkManager"
 
ESSID="Wi-Fi network ESSID (not connection name)"
+
ESSID="Wi-Fi ネットワークの ESSID (接続名ではない)"
   
 
interface=$1 status=$2
 
interface=$1 status=$2
277行目: 736行目:
 
up|vpn-down)
 
up|vpn-down)
 
if iwgetid | grep -qs ":\"$ESSID\""; then
 
if iwgetid | grep -qs ":\"$ESSID\""; then
nmcli con up id "$VPN_NAME"
+
nmcli connection up id "$VPN_NAME"
 
fi
 
fi
 
;;
 
;;
 
down)
 
down)
 
if iwgetid | grep -qs ":\"$ESSID\""; then
 
if iwgetid | grep -qs ":\"$ESSID\""; then
if nmcli con show --active | grep "$VPN_NAME"; then
+
if nmcli connection show --active | grep "$VPN_NAME"; then
nmcli con down id "$VPN_NAME"
+
nmcli connection down id "$VPN_NAME"
 
fi
 
fi
 
fi
 
fi
290行目: 749行目:
 
</nowiki>}}
 
</nowiki>}}
   
全ての Wi-Fi ネットワークで VPN の接続を自動的にして欲しい場合は、ESSID は次のように定義ます: {{ic|1=ESSID=$(iwgetid -r)}}。[[#ネットワークサービス NetworkManager dispatcher|上述]]のようにスクリプトのパーミッションを忘れずに設定してください。
+
全ての Wi-Fi ネットワークで VPN の接続を試みたい場合は、次の ESSID 定義を使用できます: {{ic|1=ESSID=$(iwgetid -r)}}。スクリプトのパーミッションを[[#ネットワークサービス NetworkManager dispatcher を使用する|適宜]]設定することを忘れないでください。
   
  +
[https://developer.gnome.org/NetworkManager/0.9/secrets-flags.html VPN の機密情報が保管される方法]により、上記のスクリプトで VPN への接続しようとしても、{{ic|NetworkManager-dispatcher.service}} が 'no valid VPN secrets' というエラーで失敗する場合があります。幸運なことに、スクリプトから VPN のパスワードにアクセスする方法は他にもあります。
{{ic|nm-applet}} の ''Make the VPN connection available to all users'' オプションを有効にしている場合、接続が失敗して NetworkManager が 'no valid VPN secrets' と表示することがあります ([https://developer.gnome.org/NetworkManager/0.9/secrets-flags.html VPN の接続情報の保存方法] が問題です)。その場合、以下を試してみてください:
 
   
:2. VPN 接続ファイルを編集して NetworkManager が接続情報をキーリングではなく自で保存るようにしてください [https://bugzilla.redhat.com/show_bug.cgi?id=710552]: {{ic|/etc/NetworkManager/system-connections/''name of your VPN connection''}} を開いて {{ic|password-flags}} と {{ic|secret-flags}} を {{ic|1}} から {{ic|0}} に変更します
+
1: それらの方法の1つでは、VPN 接続の設定ファイルを編集して、[https://bugzilla.redhat.com/show_bug.cgi?id=710552 root からはアクセスできない]キーリングではなく自機密情報を保存させるように NetworkManager を設定する必要があります: {{ic|/etc/NetworkManager/system-connections/''VPN接続の名前''}} を開き、{{ic|password-flags}} と {{ic|secret-flags}} を {{ic|1}} から {{ic|0}} に変更してください
  +
  +
それだけではうまく行かない場合は、以下の内容で {{ic|passwd-file}} を安全な場所にディスパッチャスクリプトと同じパーミッションと所有権で作成する必要があるかもしれません:
  +
  +
{{hc|/path/to/passwd-file|
  +
vpn.secrets.password:パスワード
  +
}}
  +
  +
ファイルからパスワードを得られるようにするために、スクリプトは適宜変更する必要があります:
  +
  +
{{hc|/etc/NetworkManager/dispatcher.d/vpn-up|<nowiki>
  +
#!/bin/sh
  +
VPN_NAME="NetworkManager に定義されている VPN 接続の名前"
  +
ESSID="Wi-Fi ネットワークの ESSID (接続名ではない)"
  +
  +
interface=$1 status=$2
  +
case $status in
  +
up|vpn-down)
  +
if iwgetid | grep -qs ":\"$ESSID\""; then
  +
nmcli connection up id "$VPN_NAME" passwd-file /path/to/passwd-file
  +
fi
  +
;;
  +
down)
  +
if iwgetid | grep -qs ":\"$ESSID\""; then
  +
if nmcli connection show --active | grep "$VPN_NAME"; then
  +
nmcli connection down id "$VPN_NAME"
  +
fi
  +
fi
  +
;;
  +
esac
  +
</nowiki>}}
  +
  +
2: あるいは、{{ic|password-flags}} を変更して、設定ファイル内に {{ic|vpn-secrets}} セクションを追加してパスワードを直接書き込むという方法もあります:
   
もしくは設定ファイルに {{ic|vpn-secrets}} セクションを追加して直接パスワードを記述します:
 
 
[vpn]
 
[vpn]
 
....
 
....
302行目: 792行目:
 
 
 
[vpn-secrets]
 
[vpn-secrets]
password=your_password
+
password=''パスワード''
   
{{Note|NetworkManager 接続エディタを開き、VPN パスワード/シークレット再度保存す必要があ。}}
+
{{Note|NetworkManager 接続エディタを再び開き、VPN パスワード/機密情報を保存し直す必要があるかもしれせん。}}
   
==== dispatcher を使って CIFS 共有マウント処理 ====
+
==== ディスパッチャを使って、VPN プロバイダ接続時に IPv6 無効化する ====
   
CIFS 共有中に特定ネットワクや場所 (例: 中) を使ってるときだけ使えるものがあります。ディスパッチャを使うことで現在の場所応じCIFS 共有をマウントすることできます。
+
多く[[:カテゴリ:VPN プロバイダー|商用 VPN プロバイダー]] IPv4 みをサポトしています。つまり、IPv6トラフィックは全て VPNバイパスし、事実上、使い物にならなくなります。ディスパッチャを使って、VPN 接続されいる時は全ての IPv6ラフィックを無効化することで、この問題を回避できます。
   
  +
{{hc|/etc/NetworkManager/dispatcher.d/10-vpn-ipv6|<nowiki>
以下のスクリプトは特定のネットワークに接続されているかどうか確認してから共有をマウントします:
 
  +
#!/bin/sh
{{hc|/etc/NetworkManager/dispatcher.d/mount_cifs|<nowiki>
 
  +
#!/bin/bash
 
if [ "$2" = "up" ]; then
+
case "$2" in
  +
vpn-up)
if [ "$CONNECTION_UUID" = "uuid" ]; then
 
  +
echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6
mount /your/mount/point &
 
  +
;;
# add more shares as needed
 
  +
vpn-down)
fi
 
  +
echo 0 > /proc/sys/net/ipv6/conf/all/disable_ipv6
fi
 
  +
;;
  +
esac
 
</nowiki>}}
 
</nowiki>}}
{{Note|[[#nmcli|nmcli]] を使うことで uuid のリストを取得できます。}}
 
   
  +
代替案としては、ディスパッチャを使って、VPN 接続に使用しているデバイスの IPv6 モードを一時的に {{ic|link-local}} に設定することもできます。これにより、NetworkManager が、IPv6 が無効化されていることについて警告をログに大量出力することを防ぐことができます。このスクリプトは、複数のデバイスや接続が IPv6 接続を提供している場合、動作しません。しかし、複数のデバイスを反復させることで応用することができます。注意点として、接続に対して何らかの変更が加えられた場合 ({{man|1|nmcli}} や[[デスクトップ環境]]の機能を使った場合)、そのデバイスに対する接続全体が再適用され、IPv6 が再有効化されます (その接続で有効化されている場合)。
以下のスクリプトは特定のネットワークから切断する前に全ての CIFS をアンマウントします:
 
  +
{{hc|/etc/NetworkManager/dispatcher.d/pre-down.d/mount_cifs|<nowiki>
 
  +
{{hc|/etc/NetworkManager/dispatcher.d/10-vpn-ipv6|<nowiki>
#!/bin/bash
 
  +
#!/bin/sh
umount -a -l -t cifs
 
  +
  +
case "$2" in
  +
vpn-up)
  +
nmcli device modify "${DEVICE_IFACE}" ipv6.method link-local
  +
;;
  +
vpn-down)
  +
nmcli device reapply "${DEVICE_IFACE}"
  +
;;
  +
esac
 
</nowiki>}}
 
</nowiki>}}
{{Note|
 
* 上記のスクリプトは {{ic|pre-down.d}} サブディレクトリに保存しないと、接続状態が変わったときに全ての共有がアンマウントされてしまいます。
 
* NetworkManager 0.9.8 から、'pre-down' や 'down' はシャットダウンや再起動時に実行されなくなりました。したがって上記のスクリプトはネットワークから手動で切断したときにのみ機能します。詳しくは [https://bugzilla.gnome.org/show_bug.cgi?id&#61;701242 このバグレポート] を参照。}}
 
   
  +
==== OpenNTPD ====
忘れずに[[#ネットワークサービスと NetworkManager dispatcher|上述]]のようにスクリプトにパーミッションを設定してください。
 
   
  +
[[OpenNTPD#NetworkManager dispatcher を使う]] を参照してください。
dispatcher の中で {{ic|/etc/fstab}} のマウントを解析する他のスクリプト例は [[NFS#NetworkManager dispatcher]] にあります。
 
   
  +
==== systemd-timesyncd で DHCP 経由で受信した NTP サーバを動的に設定する ====
=== プロクシ設定 ===
 
   
  +
異なるネットワーク間 (例: 会社の LAN、自宅の Wi-Fi、その他の様々な Wi-Fi) でローミングする場合、timesyncd によって使用されている NTP サーバを DHCP によって提供されているものに設定したい場合があります。ただし、NetworkManager 自体は systemd-timesyncd と通信して NTP サーバを設定することはできません。
NetworkManager は直接プロクシ設定を扱いませんが、GNOME や KDE を使っている場合、NetworkManager の情報を使ってプロクシ設定を管理する [http://marin.jb.free.fr/proxydriver/ proxydriver] を使うことができます。[[Arch User Repository|AUR]] の {{AUR|proxydriver}} パッケージを探して下さい。
 
   
  +
ディスパッチャを使うことで、この問題を回避できます。
proxydriver でプロクシ設定を変更できるようにするには、GNOME スタートアッププロセスの一部として、次のコマンドを実行する必要があります (System -> Preferences -> Startup Applications):
 
   
  +
systemd-timesyncd の設定ようのオーバーレイディレクトリ {{ic|/etc/systemd/timesyncd.conf.d}} を[[作成]]してください (まだ存在していない場合)。{{ic|/etc/NetworkManager/dispatcher.d}} 内に以下を追加してください:
xhost +si:localuser:''your_username''
 
   
  +
{{hc|/etc/NetworkManager/dispatcher.d/10-update-timesyncd|<nowiki>
参照: [[プロキシ設定]]
 
  +
#!/bin/sh
   
  +
[ -z "$CONNECTION_UUID" ] && exit 0
=== DHCP client ===
 
  +
INTERFACE="$1"
  +
ACTION="$2"
   
  +
case $ACTION in
NetworkManager はデフォルトでは DHCP クライアントは内部のものを使います。DHCPv4 プラグインは [https://nettools.github.io/n-dhcp4/ nettools' n-dhcp4] ライブラリが基になっていて、DHCPv6 プラグインは {{ic|systemd-networkd}} のコードが基となっています。
 
  +
up | dhcp4-change | dhcp6-change)
  +
[ -n "$DHCP4_NTP_SERVERS" ] || exit 0
  +
mkdir -p /etc/systemd/timesyncd.conf.d
  +
cat <<-THE_END >"/etc/systemd/timesyncd.conf.d/${CONNECTION_UUID}.conf"
  +
[Time]
  +
NTP=$DHCP4_NTP_SERVERS
  +
THE_END
  +
systemctl restart systemd-timesyncd.service
  +
;;
  +
down)
  +
rm -f "/etc/systemd/timesyncd.conf.d/${CONNECTION_UUID}.conf"
  +
systemctl restart systemd-timesyncd.service
  +
;;
  +
esac
  +
</nowiki>}}
   
  +
NetworkManager が新しいネットワーク接続を設定する ({{ic|1=ACTION=up}}) か、既存の接続の更新を取得する ({{ic|1=ACTION=dhcp4-change}} または {{ic|1=ACTION=dhcp6-change}}) 度に、接続データに NTP サーバ ({{ic|DHCP4_NTP_SERVERS}}) に関する情報が含まれていると、接続固有のオーバーレイ設定ファイルが {{ic|/etc/systemd/timesyncd.conf.d}} に書き込まれ、このファイルには、提供された NTP サーバ (1台または複数) の情報が記述されます。提供された NTP サーバが含まれます。接続が停止される ({{ic|1=ACTION=down}}) と、接続固有のオーバーレイファイルは削除されます。systemd-timesyncd の設定が変更されるたびに、サービスは再起動され、更新された設定を取得します。NetworkManager で 2つ以上の接続を並行して管理する場合、{{ic|up}}、{{ic|dhcp4-change}}、{{ic|dhcp6-change}}、そして {{ic|down}} アクションが任意の順序で来るかもしれないので、設定内の異なる NTP サーバ名が上書きされないように接続固有の設定ファイルを意図的に使用しています。
NetworkManager は他の DHCP クライアントを使うことができ、そのためには次の好きな方をインストールしてください:
 
   
  +
== テスト ==
* {{Pkg|dhclient}} - ISCの DHCP クライアント。
 
* {{Pkg|dhcpcd}} - [[dhcpcd]]。
 
   
  +
NetworkManager アプレットはログイン時にロードされるようになっているので、ほとんどのユーザにとって追加の設定は必要ないはずです。以前のネットワーク設定を無効化し、ネットワークから切断されているならば、NetworkManager が動作するかどうかをテストできます。まず始めに、{{ic|NetworkManager.service}} を[[起動]]してください。
{{Note|
 
* NetworkManager は、 dhcpcd を IPv6 のために使うことを、サポートしていません (詳しくは [https://gitlab.freedesktop.org/NetworkManager/NetworkManager/issues/5 NetworkManager issue #5] )。DHCP クライアントとして dhcpcd を設定している場合には、 DHCPv6 内部のクライアントを使います。
 
* NetworkManager は{{Pkg|dhcpcd}} のバージョン 9.0.0 以上をサポートしなくなりました。詳細は {{Bug|66231}} を見てください。
 
* {{Pkg|dhclient}} や {{Pkg|dhclient}} が提供する systemd ユニットを有効にしないでください。NetworkManager と干渉します。
 
}}
 
   
  +
一部のアプレットは、NetworkManager アプレットをアプリケーションメニューからロードできるようにするために、{{ic|.desktop}} ファイルを提供しています。デスクトップファイルが提供されていない場合は、アプレットを使用するためのコマンドを見つけるか、アプレットをロードするために一度ログアウトして再度ログインする必要があります。アプレットが開始されれば、DHCP サーバを使って自動設定によるネットワーク接続のポーリングが開始されるでしょう。
DHCP クライアントのバックエンドを変えたい場合は、{{ic|/etc/NetworkManager/conf.d/}} にある設定ファイルで {{ic|1=main.dhcp=''dhcp_client_name''}} を設定してください。例:
 
   
  +
[[awesome]] などの XDG 非互換のウィンドウマネージャで GNOME のアプレットを開始するには:
{{hc|1=/etc/NetworkManager/conf.d/dhcp-client.conf|2=
 
[main]
 
dhcp=dhclient
 
}}
 
   
  +
nm-applet --sm-disable &
=== dnsmasq ===
 
   
  +
固定 IP アドレスの場合は、NetworkManager にそのことを伝えなければなりません。手順としては通常、アプレットを右クリックし、'接続を編集する' ('Edit Connections') などのような項目を選択します。
{{Pkg|dnsmasq}} がインストールされていることを確認します。次に、{{ic|/etc/NetworkManager/conf.d/}} の設定ファイルを使用して {{ic|1=main.dns=dnsmasq}} を設定します。
 
   
  +
== ヒントとテクニック ==
{{hc|/etc/NetworkManager/conf.d/dns.conf|2=
 
[main]
 
dns=dnsmasq
 
}}
 
   
  +
=== Wi-Fi パスワードの暗号化 ===
次に、root として {{ic|nmcli general reload}} を実行します。 NetworkManager は自動的に dnsmasq を起動し、 {{ic|/etc/resolv.conf}} に {{ic|127.0.0.1}} を追加します。元の DNS サーバは {{ic|/run/NetworkManager/no-stub-resolv.conf}} にあります。 dnsmasq が使用されていることを確認するには、 {{ic|drill example.com}} を使用して同じ DNS ルックアップを2回実行し、サーバーとクエリの時間を確認します。
 
   
  +
デフォルトでは、NetworkManager はパスワードを平文で {{ic|/etc/NetworkManager/system-connections/}} 内の設定ファイルに保存します。保存されているパスワードを表示するには、以下のコマンドを使ってください:
{{Note|
 
* {{ic|dnsmasq.service}} を起動したり、 {{ic|/etc/dnsmasq.conf}} を編集したりする必要はありません。 NetworkManager は、 systemd サービスを使用せず、dnsmasq のデフォルト設定ファイルを読み込まずに dnsmasq を起動します。
 
* NetworkManager によって起動された dnsmasq インスタンスは {{ic|127.0.0.1:53}} にバインドされます。同じアドレスとポートで他のソフトウェア ({{ic|dnsmasq.service}} を含む) を実行することはできません。
 
}}
 
   
  +
# grep -r '^psk=' /etc/NetworkManager/system-connections/
=== systemd-resolved ===
 
   
  +
パスワードは root ユーザからファイルシステムでアクセス可能であり、さらに GUI (例: {{ic|nm-applet}}) を通して設定にアクセスできるユーザからもアクセス可能です。
NetworkManager は、 [[systemd-resolved]] を DNS リゾルバおよびキャッシュとして使用できます。使用する前に、 ''systemd-resolved'' が正しく設定され、{{ic|systemd-resolved.service}} が [https://wiki.archlinux.jp/index.php/Systemd#.E3.83.A6.E3.83.8B.E3.83.83.E3.83.88.E3.82.92.E4.BD.BF.E3.81.86 スタート] してることを確認してください。
 
   
  +
パスワードは、平文ではなく、キーリングの中で暗号化された形で保存するのが望ましいです。しかし、これの欠点は、それぞれのユーザで接続をセットアップしなけれならないことです。
{{ic|/etc/resolv.conf}} が [https://wiki.archlinux.jp/index.php/Systemd-resolved#DNS symlink] から {{ic|/run/systemd/resolve/stub-resolv.conf}}、 {{ic|/run/systemd/resolve/resolv.conf}}、 または {{ic|/usr/lib/systemd/resolv.conf}} に設定されている場合は、自動的に systemd-resolved が使用されます。
 
   
  +
キーリングを読み書きするために、利用可能なシークレットエージェントが存在していなければなりません。いかのどれかを使用できます:
{{ic|1=main.dns=systemd-resolved}} を {{ic|/etc/NetworkManager/conf.d/}} 設定すると、明示的に有効にできます。
 
   
  +
* {{ic|nmcli}} で {{ic|--ask}} オプションを使う。
{{hc|/etc/NetworkManager/conf.d/dns.conf|2=
 
  +
* [[#フロントエンド]] に挙げられているグラフィカルインターフェイス
[main]
 
dns=systemd-resolved
 
}}
 
   
  +
シークレットエージェントが利用できないと、{{ic|no secrets: No agents were available for this request.}} というエラーで認証が失敗します。
=== NetworkManager の無効化 ===
 
   
  +
==== GNOME Keyring を使う ====
''dbus'' によってサービスが自動的に起動してしまうこともあります。''systemctl'' でサービスをマスクすることで完全に無効化できます:
 
# systemctl mask NetworkManager
 
# systemctl mask NetworkManager-dispatcher
 
   
  +
以下の方法を使うには、GNOME Keyring のキーリングデーモンが開始されていて、キーリングがアンロックされている必要があります。
=== /etc/resolv.conf ===
 
   
  +
さらに、全ユーザのパスワードを保存しないように NetworkManager を設定する必要があります。GNOME の {{Pkg|network-manager-applet}} を使って、ターミナルから {{ic|nm-connection-editor}} を実行し、ネットワーク接続を選択し、''編集'' (''Edit'') をクリックし、''Wi-Fi セキュリティー'' (''Wi-Fi Security'') タブを選択し、パスワード入力欄の右のアイコンをクリックして、''このユーザーのパスワードのみ保存する'' (''Store the password only for this user'') にチェックを入れてください。
NetworkManager の {{ic|/etc/resolv.conf}} 管理モードは、 {{ic|main.rc-manager}} 設定で設定されています。デフォルトの {{ic|auto}} モードでは、 {{ic|/etc/resolv.conf}} の管理方法が次の順序で選択されます。
 
   
  +
==== KDE Wallet を使う ====
* {{ic|/etc/resolv.conf}} が [https://wiki.archlinux.jp/index.php/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E3%83%91%E3%83%BC%E3%83%9F%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%A8%E5%B1%9E%E6%80%A7#.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB.E3.81.AE.E5.B1.9E.E6.80.A7 不変] の場合、ファイルは [https://wiki.archlinux.jp/index.php?title=NetworkManager&action=submit#.E7.AE.A1.E7.90.86.E5.AF.BE.E8.B1.A1.E5.A4.96.E3.81.AE_.2Fetc.2Fresolv.conf はまったく変更されません。] です。これは {{ic|1=main.rc-manager=unmanaged}} と同じです。
 
* {{ic|/etc/resolv.conf}} が {{ic|/run/systemd/resolve/stub-resolv.conf}}、 {{ic|/run/systemd/resolv.conf}}、または {{ic|/usr/lib/systemd/resolv.conf}} へのシンボリックリンクの場合、[[#systemd-resolved|systemd-resolved が使用されています]] これは {{ic|1=main.rc-manager=systemd-resolved}} と同じです。
 
* {{ic|/usr/bin/resolvconf}} が存在する場合は、[https://wiki.archlinux.jp/index.php?title=NetworkManager&action=submit#openresolv_.E3.82.92.E4.BD.BF.E7.94.A8 resolvconfを使用] これは {{ic|1=main.rc-manager=resolvconf}} と同じです。
 
* {{ic|/etc/resolv.conf}} が通常のファイルの場合、 NetworkManager はそのファイルに直接書き込みます。これは {{ic|1=main.rc-manager=file}} と同じです。
 
   
  +
KDE の {{Pkg|plasma-nm}} を使う場合、アプレットをクリックし、右上の ''設定'' アイコンをクリックし、ネットワーク接続を選択し、''一般設定'' (''General configuration'') タブを選択し、''すべてのユーザはこのネットワークに接続可能'' (''All users may connect to this network'') のチェックを外してください。このオプションにチェックが入っていると、たとえキーリングデーモンが実行されていたとしても、パスワードが平文で保存されてしまいます。
詳細は、 {{man|5|NetworkManager.conf}} のマニュアルページを参照してください。
 
   
  +
以前このオプションにチェックが入っていて、後にチェックを外した場合、ファイルからパスワードを消すために {{ic|reset}} オプションを使用する必要がある場合があります。あるいは、接続を削除し、再度セットアップしてください。
{{Tip|openresolv を使用すると、 NetworkManager を他の ''resolvconf'' の場合サポートソフトウェアと共存させることができます。たとえば、 openresolv が [[openresolv#Subscribers|subscriber]] を持つローカル DNS キャッシングおよびスプリット DNS リゾルバを実行できます。 openresolv で NetworkManager を使用している場合、条件付き転送は[https://gitlab.freedesktop.org/NetworkManager/NetworkManager/issues/153 まだ完全にはサポートされていません]}}
 
   
  +
=== Wi-Fi でインターネット接続を共有する ===
''NetworkManager'' は、いわゆる dispatcher スクリプト経由のフックも提供しています。これは、ネットワークの変更後に {{ic|/etc/resolv.conf}} を変更するために使用できます。詳細は、 [https://wiki.archlinux.jp/index.php/NetworkManager#.E3.83.8D.E3.83.83.E3.83.88.E3.83.AF.E3.83.BC.E3.82.AF.E3.82.B5.E3.83.BC.E3.83.93.E3.82.B9.E3.81.A8_NetworkManager_dispatcher NetworkManager dispatcher] および {{man|8|NetworkManager}} を参照してください。
 
   
  +
数クリックでインターネット接続 (例: 3G、有線) を共有することができます。ただし、[[ファイアウォール]]はインターネット共有を妨害する場合があることに注意してください。
{{Note|
 
* NetworkManager が [[#dnsmasq|dnsmasq]] または [[#systemd-resolved|systemd-resolved]] のいずれかを使用するように設定されている場合、適切なループバックアドレスが {{ic|/etc/resolv.conf}} に書き込まれます。
 
* NetworkManager が {{ic|resolv.conf}} に書き込む、または書き込む {{ic|/etc/resolv.conf}} ファイルは、 {{ic|/run/NetworkManager/resolv.conf}} にあります。
 
* 取得したネームサーバと検索ドメインを含む {{ic|resolv.conf}} ファイルは {{ic|/run/NetworkManager/no-stub-resolv.conf}} にあります。
 
}}
 
   
  +
AP モードをサポートする Wi-Fi カードが必要になります。詳細は [[ソフトウェアアクセスポイント#Wi-Fi デバイスが AP モードをサポートしていること]] を見てください。
===== 管理対象外の /etc/resolv.conf =====
 
   
  +
接続を共有できるようにするために {{Pkg|dnsmasq}} パッケージを[[インストール]]してください。NetworkManager は ({{ic|dnsmasq.service}} とは独立に) 独自の ''dnsmasq'' インスタンスを DHCP サーバとして開始することに注意してください。これに関する注意事項は [[#dnsmasq]] を見てください。
NetworkManager が {{ic|/etc/resolv.conf}} に干渉しないようにするには、{{ic|/etc/NetworkManager/conf.d/}} の設定ファイルで {{ic|1=main.dns=none}} を設定します。
 
   
  +
共有された接続を作成してください:
{{hc|/etc/NetworkManager/conf.d/dns.conf|2=
 
[main]
 
dns=none
 
}}
 
   
  +
* アプレットをクリックし、''新規 Wi-Fi ネットワークを作成'' (''Create new wireless network'') を選んでください。
{{Tip|NetworkManager が DNS 設定を [[systemd-resolved]] に送信しないように、{{ic|1=main.systemd-resolved=false}} を設定することもできます。}}
 
  +
* ウィザードに従ってください (WPA2 以上を選んでください。パスワードは 8 文字以上にしてください。さもないと失敗します)。
  +
* Wi-Fi モードとして[[Fedora:Features/RealHotspot|ホットスポット]]かアドホックを選択してください。
   
  +
これで、次回必要になるときのために接続は保存されます。
{{Note|[[#DNS キャッシングと条件付きフォワーディング]] を参照して、NetworkManager を {{ic|1=main.dns=none}} ではなく、 [https://wiki.archlinux.jp/index.php/Dnsmasq dnsmasq] や [[systemd-resolved]] などの他の DNS バックエンドを使用して設定してください。}}
 
   
  +
{{Note|Android はアドホックネットワークへの接続をサポートしていません。Android と接続を共有するには、インフラストラクチャモードを使用してください (つまり、Wi-Fi モードを "ホットスポット" に設定する)。}}
その後、 {{ic|/etc/resolv.conf}} は壊れたシンボリックリンクになるかもしれませんので、削除する必要があります。次に、新しい {{ic|/etc/resolv.conf}} ファイルを作成します。
 
   
  +
=== イーサネットでインターネット接続を共有する ===
===== openresolv を使用 =====
 
   
  +
シナリオ: デバイスが Wi-Fi 経由でインターネットに接続されていて、イーサネットで他のデバイスとインターネット接続を共有したいと考えている場合。
{{Tip|NetworkManager は、{{ic|/etc/resolv.conf}} が不変であるか、システムの {{ic|resolv.conf}} ファイルの一つへのシンボリックリンクでない限り、自動的に ''resolvconf'' を使います。}}
 
   
  +
要件:
{{Note|NetworkManager は、 {{Pkg|systemd-resolvconf}} によって提供される system-resolved の ''resolvconf'' インターフェイス [https://man.archlinux.org/man/resolvectl.1#COMPATIBILITY_WITH_RESOLVCONF(8) resolvectl COMPATIBILITY WITH RESOLVCONF(8)] の使用をサポートしていません。
 
* [[systemd-resolved]] を使用する場合は、 {{ic|1=main.rc-manager=resolvconf}} を設定せず、 [https://wiki.archlinux.jp/index.php/Systemd-resolved#DNS /etc/resolv.conf へのシンボリックリンクを正しく作成します。] または [https://wiki.archlinux.org/index.php/NetworkManager#systemd-resolved NetworkManager を構成して、明示的に systemed-resolved を使用する] 設定してください。
 
* systemd-resolvconf を使用しない場合は、 {{Pkg|systemd-resolvconf}} パッケージがインストールされていないことを確認してください。 {{ic|systemd-resolved.service}} を起動しないと、 resolvconf を使用するすべてのネットワークソフトウェア (NetworkManager だけでなく) が動作しなくなります。
 
}}
 
   
  +
* 接続を共有できるようにするために {{Pkg|dnsmasq}} パッケージと {{Pkg|nm-connection-editor}} パッケージを[[インストール]]してください。NetworkManager は ({{ic|dnsmasq.service}} とは独立に) 独自の ''dnsmasq'' インスタンスを DHCP サーバとして開始することに注意してください。これに関する注意事項は [[#dnsmasq]] を見てください。
[[openresolv]] を使用するように NetworkManager を明示的に設定するには、 {{ic|1=main.rc-manager=resolvconf}} を {{ic|/etc/NetworkManager/conf.d/}} の設定ファイルで設定します。
 
  +
* インターネットに接続されたデバイスとその他のデバイスが適切なイーサネットケーブルで接続されていること (これは通常、間をクロスオーバーケーブルやスイッチで繋ぐことを意味します)。
  +
* インターネット共有が[[ファイアウォール]]によってブロックされていないこと。
   
  +
手順:
{{hc|/etc/NetworkManager/conf.d/rc-manager.conf|2=
 
[main]
 
rc-manager=resolvconf
 
}}
 
   
  +
* ターミナルから {{ic|nm-connection-editor}} を実行してください。
== テスト ==
 
  +
* 新しいイーサネット接続を追加してください。
  +
* 何かわかりやすい名前を付けてください。例えば "Shared Internet"。
  +
* "IPv4 設定" ("IPv4 Settings") を開いてください。
  +
* "メソッド:" ("Method:") で "他のコンピューターへ共有" ("Shared to other computers") を選択してください。
  +
* 保存
   
  +
これで、NetworkManager の有線接続に "Shared Internet" という新しいオプションができたはずです。
ログイン時に NetworkManager アプレットがロードされるようになっているので、ほとんどの場合さらに設定をする必要はありません。既に前のネットワーク設定を無効にしてネットワークから切断している場合、NetworkManager が動作するかどうかテストすることができます。まず {{ic|NetworkManager.service}} を[[デーモン|起動]]してください。
 
   
  +
=== cron ジョブやスクリプトでネットワークが立ち上がっているか確認する ===
アプレットは {{ic|.desktop}} ファイルを提供するので、NetworkManager アプレットはアプリケーションメニューからロードすることができます。アプレットがない場合、コマンドを探すか、一度ログアウトしてからログインしなおしてアプレットを起動してください。アプレットが起動すれば、DHCP サーバーの自動設定によってネットワーク接続のポーリングを開始します。
 
   
  +
{{Out of date|''nm-tool'' は NetworkManager から削除されました [https://gitlab.freedesktop.org/NetworkManager/NetworkManager/commit/bb8c75bd536d4f8fb80a4366025a279078f0ec81]。代わりに ''nmcli'' を使用するべきです。}}
[[Awesome]] などの xdg 非互換のウィンドウマネージャで GNOME アプレットを起動するには:
 
   
  +
一部の ''cron'' ジョブではネットワークが立ち上がっている必要があり、ネットワークが落ちている状態でそのようなジョブを実行したくない場合があります。そうするには、NetworkManager の ''nm-tool'' にクエリして、ネットワークの状態をチェックする '''if''' テストを追加してください。このテストは、何らかのインターフェイスが立ち上がっていれば成功し、インターフェイスが全て落ちている場合は失敗します。これは、ある時は有線接続されていて、ある時は無線で、またある時はネットワークから切断されているようなノート PC で便利です。
nm-applet --sm-disable &
 
   
  +
{{bc|<nowiki>
固定 IP を使うには NetworkManager を設定する必要があります。アプレットを右クリックして 'Edit Connections' などを選択してください。
 
  +
if [ $(nm-tool|grep State|cut -f2 -d' ') == "connected" ]; then
  +
# ネットワークがオンラインの時に実行したいコード
  +
else
  +
# ネットワークがオフラインの時に実行したいコード (注記: この部分と上の else は任意です)
  +
fi
  +
</nowiki>}}
   
  +
これは、例えば F-Prot ウイルススキャナのシグネチャを更新するために ''fpupdate'' を実行する {{ic|cron.hourly}} で便利です。また、''nm-tool'' の出力の様々な部分を使えば、ネットワークを識別することもできます。例えば、アクティブなワイヤレスネットワークにはアスタリスクが付くので、ネットワーク名を grep して、その後でアスタリスクを grep しますs。
== トラブルシューティング ==
 
   
  +
=== ブート時にシークレットを使ってネットワークに接続する ===
=== 安全な Wi-Fi ネットワークのパスワードの入力を求めるプロンプトが表示されない ===
 
   
  +
デフォルトでは、NetworkManager はシークレットを要求するネットワークにはブート時に自動的に接続しません。NetworkManager では、そのようなネットワークは、そのネットワークをデフォルトで使用するユーザがログインした後にのみ、接続されるからです。この動作を変更するには、以下を行ってください:
セキュリティで保護されたWi-Fiネットワークに接続しようとすると、パスワードの入力を求めるプロンプトは表示されず、接続は確立されません。これは、keyring・パッケージがインストールされていない場合に発生します。簡単な解決策は、{{Pkg|gnome-keyring}} をインストールすることです。パスワードを暗号化して保存したい場合は、[[GNOME Keyring]] に従って ''gnome-keyring-daemon'' を設定します。
 
   
  +
# パネルの {{ic|nm-applet}} のアイコンを右クリックし、"接続を編集する" を選択し、Wi-Fi タブを開いてください。
=== Network management disabled ===
 
  +
# 使いたい接続を選択し、編集ボタンをクリックしてください。
  +
# “Connect Automatically” と “Available to all users” のボックスにチェックを入れてください。
  +
# 加えて、"Wi-Fi Security" タブで "Store password for all users (not encrypted)" が選択されていることを確認してください。
   
  +
ログアウトし、ログインし直せば完了です。
時々 NetworkManager を終了したときに pid (state) ファイルが削除されずに 'Network management disabled' というメッセージが表示されることがあります。これが発生した場合は、手動でファイルを削除する必要があります:
 
   
  +
=== OpenConnect で KWallet 内のパスワードを使う ===
# rm /var/lib/NetworkManager/NetworkManager.state
 
   
  +
接続時にユーザ名とパスワードを入力することはできますが、{{Pkg|plasma-nm}} 0.9.3.2-1 から、[[KWallet]] から直接 OpenConnect のユーザ名とパスワードを取得することが可能になりました。
=== dhclient と DHCP に関する問題 ===
 
   
  +
"KDE Wallet Manager" を開き、"Network Management|Maps" で対象の OpenConnect VPN 接続を見つけてください。"Show values" をクリックし、認証情報を以下の形式で "VpnSecrets" に入力してください (''ユーザ名'' と ''パスワード'' の部分は適宜置き換えてください):
DHCP を使って IP を取得するときに問題が起こるときは、以下を {{ic|/etc/dhclient.conf}} に追加してみてください:
 
interface "eth0" {
 
send dhcp-client-identifier 01:aa:bb:cc:dd:ee:ff;
 
}
 
{{ic|aa:bb:cc:dd:ee:ff}} は NIC の MAC アドレスに置き換えてください。MAC アドレスは {{Pkg|iproute2}} パッケージの {{ic|ip link show ''interface''}} コマンドを使うことでわかります。
 
   
  +
form:main:username%SEP%''ユーザ名''%SEP%form:main:password%SEP%''パスワード''
=== dhcpcd と DHCP に関する問題 ===
 
   
  +
次回の接続時に、ユーザ名とパスワードが "VPN secrets" ダイアログボックスに入力されるはずです。
ルーターによっては、{{ic|/etc/dhcpcd.conf}} ({{ic|dhcpd.conf}} とは別のファイルです) 内の次の行をコメントアウトしないと正しく接続できないことがあります:
 
require dhcp_server_identifier
 
ネットワーク上で複数の DHCP サーバーを使ってなければこの修正によって問題が起こることはありません。詳細は [https://technet.microsoft.com/en-us/library/cc977442.aspx このページ] を見て下さい。
 
   
  +
=== 特定のデバイスを無視する ===
=== ホストネームの問題 ===
 
   
  +
NetworkManager で特定のデバイスを無視し、そのデバイスに対してはアドレスとルート (route) の設定を試みないようにすることが望ましい場合があります。{{ic|/etc/NetworkManager/conf.d/unmanaged.conf}} で以下のオプションを使うことで、MAC またはインターフェイス名によって特定のデバイスを無視することができます:
ホストネームが接続しているルーターに送信されるかどうかは、使用している NetworkManager プラグインによります。標準の "keyfile" プラグインはデフォルト設定ではホストネームを送信しません。ホストネームを送信するようにしたいときは、以下を {{ic|/etc/NetworkManager/NetworkManager.conf}} に追加してください:
 
   
  +
[keyfile]
{{hc|/etc/NetworkManager/NetworkManager.conf|2=
 
  +
unmanaged-devices=mac:00:22:68:1c:59:b1;mac:00:1E:65:30:D1:C4;interface-name:eth0
[keyfile]
 
hostname=''your_hostname''
 
}}
 
   
  +
ファイルを編集したら、{{ic|nmcli general reload}} を root として実行してください。その後、NetworkManager があなたの設定を変更することなく、インターフェイスを構成できるようになっているはずです。
{{ic|[keyfile]}} 下のオプションはデフォルトの {{ic|/etc/NetworkManager/system-connections}} のパスのネットワーク接続に適用されます。
 
   
  +
=== MAC アドレスのランダム化を設定する ===
また、(NetworkManager が自動的に起動する) DHCP クライアントを設定して送信させることもできます。NetworkManager はデフォルトで {{Pkg|dhclient}} を利用しますが、インストールされていない場合は、NetworkManager 内蔵の DHCP 機能にフォールバックします。''dhclient'' でホストネームを送信するには設定を変更する必要があります。''dhcpcd'' はデフォルトでホストネームを送信します。
 
   
  +
{{Note|1=(安定した) リンク接続[https://bbs.archlinux.org/viewtopic.php?id=220101]や、MAC アドレスに基づいてデバイスを制限したりネットワーク容量に制限を設けているネットワークへの接続には、MAC アドレスのランダム化を無効化する必要がある場合があります。}}
まず、どの DHCP クライアントが使われているのか確認 (以下の例では ''dhclient''):
 
   
  +
MAC アドレスのランダム化は、本物の MAC アドレスをネットワークに開示しないことで、プライバシーを向上させることができます。
{{hc|<nowiki># journalctl -b | egrep "dhc"</nowiki>|
 
...
 
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.
 
}}
 
   
  +
NetworkManager は2種類の MAC アドレスランダム化をサポートしています: スキャン中のランダム化とネットワーク接続におけるランダム化です。どちらのモードも、{{ic|/etc/NetworkManager/NetworkManager.conf}} を変更するか、{{ic|/etc/NetworkManager/conf.d/}} 内に別の設定ファイルを作成することで設定できます (前者は NetworkManager によって上書きされる場合があるので、後者が推奨されます)。
==== ホストネームを DHCP サーバーに送るように dhclient を設定する ====
 
   
  +
Wi-Fi スキャン中のランダム化はデフォルトで有効化されていますが、以下の行を {{ic|/etc/NetworkManager/NetworkManager.conf}} か {{ic|/etc/NetworkManager/conf.d}} 内の別の設定ファイルに追加することで無効化することができます:
サンプル設定ファイルをコピー:
 
   
  +
{{hc|/etc/NetworkManager/conf.d/wifi_rand_mac.conf|2=
# cp /usr/share/dhclient/dhclient.conf.example /etc/dhclient.conf
 
  +
[device]
  +
wifi.scan-rand-mac-address=no
  +
}}
   
  +
ネットワーク接続における MAC アドレスランダム化は、無線インターフェイスとイーサネットインターフェイスで別々のモードを設定することができます。モードに関する詳細は [https://blogs.gnome.org/thaller/2016/08/26/mac-address-spoofing-in-networkmanager-1-4-0/ GNOME のブログ記事]を参照してください。
ファイルの中身を見てください。重要なのは以下の行です:
 
   
  +
MAC アドレスランダム化に関して、最も重要なモードは {{ic|stable}} と {{ic|random}} です。{{ic|stable}} は、新しいネットワークに接続した時にランダムな MAC アドレスを生成し、そのネットワークと MAC アドレスを永続的に関連付けます。これはつまり、そのネットワークに接続すると毎回同じ MAC アドレスが使用されることを意味します。それとは対照的に、{{ic|random}} は、ネットワークに接続する度に、そのネットワークが新しかろうが既知であろうが、新しい MAC アドレスを生成します。{{ic|/etc/NetworkManager/conf.d}} 内に設定ファイルを追加してこの MAC アドレスランダム化を設定することができます:
{{hc|/etc/dhclient.conf|2=send host-name = pick-first-value(gethostname(), "ISC-dhclient");}}
 
   
  +
{{hc|/etc/NetworkManager/conf.d/wifi_rand_mac.conf|2=
IP アドレスの更新を強制することで DHCP サーバーからホストネームを確認できるようになるはずです。
 
  +
[device-mac-randomization]
  +
# "yes" は既にスキャンにおけるデフォルトです。
  +
wifi.scan-rand-mac-address=yes
 
 
  +
[connection-mac-randomization]
==== 特定の DHCP クライアントを使うように NetworkManager を設定する ====
 
  +
# 全てのイーサネット接続に対して MAC をランダム化する
  +
ethernet.cloned-mac-address=random
  +
# 各 Wi-Fi に対してランダムな MAC を生成し、それらを関連付ける。
  +
wifi.cloned-mac-address=stable
  +
}}
   
  +
詳細は [https://blogs.gnome.org/thaller/2016/08/26/mac-address-spoofing-in-networkmanager-1-4-0/ GNOME ブログ記事]を参照してください。
NetworkManager で使用する DHCP クライアントを明示的に設定したい場合、グローバルな設定ファイルで設定できます:
 
   
  +
=== IPv6 プライバシー拡張を有効にする ===
{{hc|1=/etc/NetworkManager/NetworkManager.conf|2=dhcp=internal}}
 
   
  +
[[IPv6#NetworkManager]] を参照してください。
上記のオプションが設定されていない場合、{{ic|1=dhcp=dhclient}} がデフォルトで使われます。
 
   
  +
=== 接続ごとに一意の DUID を設定する ===
それから {{ic|NetworkManager.service}} を[[systemd#ユニットを使う|再起動]]してください。
 
   
  +
DHCPv6 Unique Identifier (DUID) は、DHCPv6 クライアントが DHCPv6 サーバに対して自身を識別するために使用する値です。NetworkManager は3種類の DUID をサポートしています:
{{Note|1={{Pkg|dhcpcd}} のサポートは {{Pkg|networkmanager}}-1.0.0-2 で [https://projects.archlinux.org/svntogit/packages.git/commit/trunk?h=packages/networkmanager&id=a1df79cbcebaec0c043789eb31965e57d17b6cdb 無効] になっています (2015-02-14)。}}
 
   
  +
* DUID-UUID ([[RFC:6355|RFC 6355]]): Universally Unique IDentifier (UUID) から生成されます。
=== デフォルトの route が見つからない ===
 
  +
* DUID-LL ([[RFC:3315|RFC 3315]]): リンク層アドレス (別名 MAC アドレス) から生成されます。
  +
* DUID-LLT ([[RFC:3315|RFC 3315]]): リンク層アドレスとタイムスタンプから生成されます。
   
  +
NetworkManager の内部 DHCP クライアントが使用されている場合 (デフォルト)、machine-id ({{ic|/etc/machine-id}}) から生成されたグローバルで永続的な DUID-UUID で自身を識別します。これは、すべての接続が同じ UUID を共有することを意味し、プライバシーの侵害となる可能性があります。
KDE4 システムでは、NetworkManager でワイヤレス接続を確立したときにデフォルトの route が作られません。ワイヤレス接続の route 設定を変更してデフォルトの選択 "Use only for resources on this connection" を削除すれば問題は解決します。
 
   
  +
幸いなことに、NetworkManager は、接続の stable-id とホストごとの一意のキーから派生した、接続ごとの一意の DUID を提供できます。{{ic|/etc/NetworkManager/conf.d}} 内に次の設定を追加することで、これを有効にすることができます:
=== 3G モデムが検知されない ===
 
   
  +
{{hc|/etc/NetworkManager/conf.d/duid.conf|2=
[[USB 3G モデム#Network_Manager]] を参照してください。
 
  +
[connection]
  +
ipv6.dhcp-duid=stable-uuid
  +
}}
   
  +
{{ic|stable-ll}} および {{ic|stable-llt}} の値もサポートされています。詳細については、{{man|5|nm-settings|ipv6 setting}} の {{ic|dhcp-duid}} の説明を参照してください。
=== ラップトップで WLAN をオフに切り替える ===
 
   
  +
=== 有線接続の操作 ===
ラップトップについているスイッチを使って WiFi アダプタを無効にしてその後また有効にした時に NetworkManager が動作しないことがしばしばあります。これはほとんど {{ic|rfkill}} の問題です。[[公式リポジトリ]]から {{Pkg|rfkill}}{{Broken package link|置換パッケージ: {{Pkg|util-linux}}}} をインストールして、ドライバが {{ic|rfkill}} に無線アダプタの状態を通知しているかどうか確かめるために次のコマンドを実行してください:
 
   
  +
NetworkManager は、デフォルトで、有線イーサネット接続を検出するたびにそれぞれに対して接続プロファイルを生成します。接続を生成する時点では、利用可能なイーサネットアダプターがさらにあるかどうかはわかりません。そのため、最初の有線接続は "有線接続 1" となります。{{ic|no-auto-default}} ({{man|5|NetworkManager.conf}} を参照) を設定するか、単に削除することで、この接続を生成しないようにできます。そうすれば、NetworkManager はこのインターフェイスの接続を二度と生成しないように記憶します。
$ watch -n1 rfkill list all
 
   
  +
また、接続を編集 (およびディスクに永続化) したり、削除したりすることもできます。NetworkManager は新しい接続を再生成することはありません。それから、名前を好きなものに変更することができます。この作業には {{Pkg|nm-connection-editor}} などを使うことができます。
アダプタの切り替えを行った後に identifier がブロックされたままの場合、手動でブロックを解除することができます (X は上のコマンドで出力された identifier の番号に置き換えてください):
 
   
  +
=== Wi-Fi バックエンドとして iwd を使用する ===
# rfkill event unblock X
 
   
  +
{{Note|1=<nowiki/>
=== 固定 IP 設定が DHCP に戻る ===
 
  +
* {{ic|iwd.service}} を有効化したり、[[iwd]] を手動で構成したりしないでください。NetworkManager は自身で iwd を開始し、管理します。
  +
* ''iwd'' に切り替える前に、[https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues?scope=all&utf8=%E2%9C%93&state=opened&search=iwd 既知の問題]を考慮してください。}}
   
  +
[https://iwd.wiki.kernel.org/networkmanager 実験的な iwd バックエンド]を有効化するには、{{Pkg|iwd}} を[[インストール]]してから、以下の設定ファイルを作成してください:
未解決のバグのため、デフォルトの接続を固定 IP にしたとき、{{ic|nm-applet}} は正しく設定を保存できず、自動 DHCP に戻ります。
 
   
  +
{{hc|/etc/NetworkManager/conf.d/wifi_backend.conf|2=
この問題を解決するにはデフォルトの接続 (例: "Auto eth0") を {{ic|nm-applet}} で編集してから、接続の名前を変更し (例: "my eth0")、"Available to all users" のチェックを外して、固定 IP の設定をして、それから '''Apply''' をクリックする必要があります。これで新しい接続が指定した名前で保存されます。
 
  +
[device]
  +
wifi.backend=iwd
  +
}}
   
  +
または、{{AUR|networkmanager-iwd}} をインストールすることもできます。これは、''iwd'' のみで動作する ''NetworkManager'' をビルドするように設定された修正パッケージです。主な違いは、''iwd'' が必要であり、''wpa_supplicant'' はビルド後にアンインストールできることです。
さらに、デフォルト接続を自動で接続して欲しくない場合があるかもしれません。そうするには、{{ic|nm-connection-editor}} を (root 以外で) 起動してください。接続エディタで、デフォルト接続 (例: "Auto eth0") を編集して "Connect automatically" のチェックを外して '''Apply''' をクリックして終了してください。
 
   
  +
{{Note|1=''iwd'' に切り替えた後、[https://iwd.wiki.kernel.org/networkmanager#converting_network_profiles 既存の NetworkManager ネットワークプロファイルを変換する]必要がある場合があります。}}
=== ノーマルユーザーで接続を編集できない ===
 
   
  +
=== ネットワーク名前空間内で実行する ===
[[#PolicyKit パーミッションの設定]] を見て下さい。
 
   
  +
ネットワーク名前空間内で NetworkManager を実行する場合 (たとえば、選択したアプリケーションで使用する必要がある特定のデバイスを管理する場合)、その名前空間に移動させる前にデバイスを落としてください:
=== 隠れた無線ネットワークの削除 ===
 
   
  +
$ ip link set dev ''MY_DEVICE'' down
ステルスが有効になっているネットワークは無線のリストに表示されないので、GUI で削除することは出来ません。次のコマンドでネットワークを削除することが可能です:
 
  +
$ ip link set dev ''MY_DEVICE'' netns ''MY_NAMESPACE''
  +
$ ip netns exec ''MY_NAMESPACE'' NetworkManager
  +
...
  +
$ ip netns exec ''MY_NAMESPACE'' killall NetworkManager
   
  +
そうしないと、NetworkManager は後で {{ic|device is strictly unmanaged}} エラーにより接続の確立に失敗します。
# rm /etc/NetworkManager/system-connections/[SSID]
 
   
  +
=== VPN に自動的に接続する ===
他の接続でもこのコマンドは使えます。
 
   
  +
NetworkManager は、インターネットへの接続時に VPN に自動的に接続するように (ネットワーク毎に) 設定できます。VPN 接続自体は、GNOME の NetworkManager フロントエンドで追加できますが、VPN を自動的に使用するようにするには、{{ic|nmcli}} を使用しなければなりません。他のフロントエンドにはこの制限はない場合があります。
=== VPN が Gnome で動作しない ===
 
   
  +
まず、対象の VPN が全ユーザで利用可能であることを確認してください。GNOME では、{{ic|details}} タブ内のあるボックスにチェックを入れれば良いです。{{ic|Identity}} タブのパスワード入力欄内の右側にあるアイコンをクリックし、{{ic|Store the password for all users}} を選択してください。
Gnome で NetworkManager を使って openconnect や vpnc 接続を設定すると、ダイアログが表示されず以下のエラーが {{ic|/var/log/errors.log}} に現れることがあります:
 
   
  +
そして、VPN 接続の UUID を見つけ、インターネット接続の {{ic|connection.secondaries}} にその UUID を追加してください:
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.
 
   
  +
# UUID=$(nmcli --get-values connection.uuid connection show ''VPN接続の名前'')
これは GNOME の NM アプレットが {{ic|/usr/lib/gnome-shell}} にダイアログスクリプトがあると想定しているのが原因です。NetworkManager のパッケージは {{ic|/usr/lib/networkmanager}} に配置します。"一時的な"修正として (このバグをしばらく回避できます)、以下のシンボリックリンクを作成してください:
 
  +
# nmcli connection modify ''インターネット接続の名前'' connection.secondaries "$UUID"
   
  +
NetworkManager を再起動して、設定したインターネット接続に接続したら、自動的に VPN に接続されるようになっているはずです。
* OpenConnect の場合: {{ic|ln -s /usr/lib/networkmanager/nm-openconnect-auth-dialog /usr/lib/gnome-shell/}}
 
* VPNC (すなわち Cisco VPN) の場合: {{ic|ln -s /usr/lib/networkmanager/nm-vpnc-auth-dialog /usr/lib/gnome-shell/}}
 
   
  +
== トラブルシューティング ==
他の NM VPN プラグインでも同じように設定してください。
 
   
  +
=== セキュアな Wi-Fi ネットワークのパスワードプロンプトが表示されない ===
=== Systemd のボトルネック ===
 
   
  +
セキュアな Wi-Fi ネットワークに接続しようとすると、パスワードのプロンプトが表示されず、接続が確立されません。これは、キーリングのパッケージがインストールされていない時に起こります。簡単な解決法は、{{Pkg|gnome-keyring}} をインストールすることです。パスワードを暗号化して保存したい場合は、[[GNOME Keyring]] に書かれてある指示に従い、''gnome-keyring-daemon'' をセットアップしてください。
時が立つにつれてログファイル ({{ic|/var/log/journal}}) が膨大になってしまうことがあります。そうすると NetworkManager を使う場合にブートパフォーマンスに大きな影響を与えます。参照: [[systemd#少しづつ起動時間が長くなっている]]。
 
   
  +
=== Network management disabled ===
=== 定期的にネットワークが切断される (WiFi) ===
 
   
  +
時々、NetworkManager を終了したときに pid (state) ファイルが削除されずに {{ic|Network management disabled}} というメッセージが表示されることがあります。これが発生した場合は、そのファイルを手動で削除してください:
WiFi ドライバーの中にはベースステーションのスキャン時に問題が発生するものがあります。VPN が切断されたりパケットが消失したり、ウェブページがロードされないなどの症状が起こります。
 
   
  +
# rm /var/lib/NetworkManager/NetworkManager.state
{{ic|journalctl -f}} を実行すると、以下のようなメッセージが定期的にログに残っているならこの問題が関わっています:
 
   
  +
=== 内蔵 DHCP クライアントに関する問題 ===
NetworkManager[410]: <info> (wlp3s0): roamed from BSSID 00:14:48:11:20:CF (my-wifi-name) to (none) ((none))
 
   
  +
内臓の DHCP クライアントを使用すると IP アドレスの取得に問題が発生する場合、他の DHCP クライアントを使用することを検討してください (手順は [[#DHCP クライアント]] を見てください)。この回避策は、eduroam などの巨大なワイヤレスネットワークにおける問題を解決するかもしれません。
パッチが適用された NetworkManager を使うことでこの種のスキャニングを防ぐことができます: {{AUR|networkmanager-noscan}}。
 
   
  +
=== dhclient における DHCP の問題 ===
もしくは、ローミングが重要でない場合、WiFi の接続プロファイルでアクセスポイントの BSSID をロックすることで定期的なスキャンを無効化できます。
 
   
  +
DHCP での IP アドレス取得に問題が発生する場合、以下を {{ic|/etc/dhclient.conf}} に追加してみてください:
=== ホスト名の送信をオフにする ===
 
   
  +
interface "eth0" {
NetworkManager はデフォルトでホスト名を DHCP サーバーに送信します。ホスト名の送信は、グローバルではなく接続ごとにのみ無効にできます ([https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/584 Issue#584])
 
  +
send dhcp-client-identifier 01:''aa:bb:cc:dd:ee:ff'';
  +
}
   
  +
{{ic|''aa:bb:cc:dd:ee:ff''}} は NIC の MAC アドレスです。この MAC アドレスは {{Pkg|iproute2}} パッケージの {{ic|ip link show ''インターフェイス''}} コマンドを使って確認できます。
特定の接続の DHCP サーバーへのホスト名の送信を無効にするには、ネットワーク接続ファイルに以下を追加します。
 
   
  +
=== 3G モデムが検知されない ===
{{hc|/etc/NetworkManager/system-connections/''your_connection_file''|2=
 
...
 
[ipv4]
 
dhcp-send-hostname=false
 
...
 
[ipv6]
 
dhcp-send-hostname=false
 
...
 
}}
 
   
  +
[[USB 3G モデム#NetworkManager]] を参照してください。
=== nm-applet が i3wm で消える ===
 
   
  +
=== ノートパソコンで WLAN をオフにする ===
通知に {{ic|xfce4-notifyd.service}} を使用する場合は、ユニットを [[編集]] して、以下を追加する必要があります。
 
   
  +
時々、ノートパソコンに付いているスイッチを使って Wi-Fi アダプタを無効化し、再び有効化しようとすると NetworkManager が機能しなくなることがあります。これは、しばしば ''rfkill'' の問題であることがあります。ドライバが ''rfkill'' にワイヤレスアダプタの状態について通知しているかどうか確認するには、以下のコマンドを使ってください:
{{hc|/etc/systemd/user/xfce4-notifyd.service.d/display_env.conf|2=
 
[Service]
 
Environment="DISPLAY=:0.0"
 
}}
 
   
  +
$ watch -n1 rfkill list all
デーモンをリロードした後 {{ic|xfce4-notifyd.service}}。 i3 を終了し、再度起動すると、アプレットがトレイに表示されます。
 
   
  +
アダプタを切り替えた後にどれかの識別子がブロックされたままになる場合、手動でアンロックしてみることができます (X の部分は、上記のコマンドで得られた識別子の番号です):
=== nm-applet トレイアイコンが正しく表示されない ===
 
   
  +
# rfkill event unblock X
現在、nm-applet のトレイアイコンは互いに重なり合って描かれています。つまり、ワイヤレス強度を表示するアイコンが、有線接続がないことを示すアイコンの上に表示される場合があります。
 
これは明らかに GTK3 のバグ/問題です [https://gitlab.gnome.org/GNOME/gtk/issues/1280]
 
   
  +
=== 固定 IP アドレスの設定が DHCP に戻る ===
GTK3 のパッチが適用されたバージョンが AUR に存在し、トレイアイコンのバグを修正しているようです:{{AUR|gtk3-classic}}
 
   
  +
とある未解決のバグにより、デフォルトの接続を固定 IP アドレスに変更すると、{{ic|nm-applet}} が設定の変更を適切に保存せずに、自動 DHCP に戻ってしまいます。
=== Unit dbus-org.freedesktop.resolve1.service not found ===
 
   
  +
この問題を回避するには、{{ic|nm-applet}} でデフォルトの設定 (例: "Auto eth0") を編集し、接続名を変更 (例: "my eth0") し、"Available to all users" チェックボックスのチェックを外し、固定 IP アドレスの設定を好きに変更し、'''Apply''' をクリックしてください。これで、指定した名前で新しい接続が保存されます。
{{ic|systemd-resolved.service}} が開始されていない場合、NetworkManager は D-Bus を使用して開始しようとし、失敗します。
 
   
  +
そうしたら、デフォルトの接続に自動的に接続しないようにしたいと思うでしょう。そうするには、まず {{ic|nm-connection-editor}} を実行してください (root としてでは'''ありません''')。接続エディタで、デフォルトの接続 (例: "Auto eth0") を編集し、"Connect automatically" のチェックを外してください。'''Apply''' をクリックし、接続エディタを閉じてください。
dbus-daemon[991]: [system] Activating via systemd: service name='org.freedesktop.resolve1' unit='dbus-org.freedesktop.resolve1.service' requested by ':1.23' (uid=0 pid=1012 comm="/usr/bin/NetworkManager --no-daemon ")
 
dbus-daemon[991]: [system] Activation via systemd failed for unit 'dbus-org.freedesktop.resolve1.service': Unit dbus-org.freedesktop.resolve1.service not found.
 
dbus-daemon[991]: [system] Activating via systemd: service name='org.freedesktop.resolve1' unit='dbus-org.freedesktop.resolve1.service' requested by ':1.23' (uid=0 pid=1012 comm="/usr/bin/NetworkManager --no-daemon ")
 
   
  +
=== 通常ユーザとして接続を編集できない ===
これは、NetworkManager が {{man|5|NetworkManager.conf}} の {{ic|1=main.dns=}} 設定に関係なく、DNS 情報を [[systemd-resolved]] に送信しようとするためです。[https://gitlab.freedesktop.org/NetworkManager/NetworkManager/commit/d4eb4cb45f41b1751cacf71da558bf8f​​0988f383]
 
   
  +
[[#PolicyKit のパーミッションをセットアップする]] を参照してください。
これは、{{ic|/etc/NetworkManager/conf.d/}} の設定ファイルで無効にできます:
 
   
  +
=== 隠されたワイヤレスネットワークを削除する ===
{{hc|/etc/NetworkManager/conf.d/no-systemd-resolved.conf|2=
 
[main]
 
systemd-resolved=false
 
}}
 
   
  +
隠されたネットワークはワイヤレスの選択リストに表示されないので、GUI から削除することができません。以下のコマンドでそのようなネットワークを削除できます:
{{Bug|62138}} を参照してください。
 
   
  +
# rm /etc/NetworkManager/system-connections/''SSID''
=== Secrets が要求されましたが、提供されませんでした ===
 
   
  +
これは、他の接続でも使えます。
{{ic|nmcli device wifi connect''SSID''password''password''}} を使用してネットワークに接続しようとすると、次のエラーが表示されます。
 
   
  +
=== VPN が GNOME で動作しない ===
Error: Connection activation failed: (7) Secrets were required, but not provided
 
   
  +
GNOME を使用している時に NetworkManager で OpenConnect や vpnc の接続をセットアップすると、ダイアログボックスが表示されず、以下のエラーが {{ic|/var/log/errors.log}} に現れることがあります:
このエラーにはさまざまな原因が考えられるため、 [[journal]] を読んでください ({{ic|-u NetworkManager}} でフィルタリングしてください) たとえば、NetworkManager が接続を確立するのに時間がかかりすぎた場合、パスワードが正しくない可能性があります。
 
   
  +
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.
{{bc|
 
NetworkManager[1372]: <warn> [1643991888.3808] device (wlan0): Activation: (wifi) association took too long
 
NetworkManager[1372]: <info> [1643991888.3809] device (wlan0): state change: config -> need-auth (reason 'none', sys-iface-state: 'managed')
 
NetworkManager[1372]: <warn> [1643991888.3838] device (wlan0): Activation: (wifi) asking for new secrets
 
}}
 
   
  +
これは、GNOME NetworkManager Applet が、ダイアログスクリプトが {{ic|/usr/lib/gnome-shell}} にあると想定していることが原因です (NetworkManager のパッケージはダイアログスクリプトを {{ic|/usr/lib/networkmanager}} 内に置きます)。"一時的な" 修正として (このバグはしばらく前から存在しています)、以下のシンボリックリンクを作成してください:
接続プロファイルを削除して、新しいプロファイルを作成してみてください。
 
   
  +
* OpenConnect の場合: {{ic|ln -s /usr/lib/networkmanager/nm-openconnect-auth-dialog /usr/lib/gnome-shell/}}
$ nmcli connection delete ''SSID''
 
  +
* VPNC (つまり Cisco VPN) の場合: {{ic|ln -s /usr/lib/networkmanager/nm-vpnc-auth-dialog /usr/lib/gnome-shell/}}
$ nmcli device wifi connect ''SSID'' password ''password''
 
   
  +
これは、他の NetworkManager VPN プラグインでも行う必要がある場合がありますが、上記が最も一般的です。
MAC アドレスのランダム化を無効にすることもできます。
 
   
  +
=== 検出されてはいるのにヨーロッパのワイヤレスネットワークに接続できない ===
{{hc|/etc/NetworkManager/conf.d/wifi_rand_mac.conf|2=
 
[device]
 
wifi.scan-rand-mac-address=no
 
}}
 
   
  +
WLAN チップにはデフォルトの[[ネットワーク設定/ワイヤレス#規制範囲に従う|規制範囲]]が設定されています。アクセスポイントがその規制内で動作しない場合、そのネットワークに接続することはできません。これは簡単に解決できます:
=== iwd との WPA エンタープライズ接続 ===
 
   
  +
# {{Pkg|wireless-regdb}} を[[インストール]]してください。
[https://wiki.archlinux.org/title/NetworkManager#Using_iwd_as_the_Wi-Fi_backend iwd backend] を使用して NetworkManagerで ''eduroam'' のような WPA エンタープライズネットワークに接続しようとすると、NetworkManager から次のエラーが発生します。
 
  +
# {{ic|/etc/conf.d/wireless-regdom}} で適切な国名コードをアンコメントしてください。
  +
# システムを再起動してください。この設定はブート時にしか読み込まれないからです。
   
  +
=== ブート時の VPN への自動接続が機能しない ===
Connection 'eduroam' is not avialable on device wlan0 because profile is not compatible with device (802.1x connection must have IWD provisioning files).
 
   
  +
この問題は、システム (つまり、root ユーザとして動作している NetworkManager) が VPN 接続を確立しようと試みたが、パスワードが特定のユーザの GNOME Keyring 内に保存されているためにアクセスできなかった場合に発生します。
これは、NetworkManager が WPA Enterprise ネットワークを設定できないためです。そのため、[[iwd#WPA Enterprise]] で説明されているように、iwd 設定ファイル {{ic|/var/lib/iwd/''essid''.8021x}} を使用して設定する必要があります。
 
   
  +
解決策は、[[#ディスパッチャを使って、ネットワーク接続が確立された後に VPN に接続する]] の手順 2 で説明されている通りに、VPN のパスワードを平文で保存することです。
=== VPN で Secrets のリクエストに失敗する ===
 
   
  +
{{ic|nm-applet}} GUI で新しい "auto-connect VPN" オプションを使用している場合は、自動接続するために 手順 1 で説明されているディスパッチャを使用する必要はありません。
もし、このようなエラーが発生したら
 
Failed to request VPN secrets #1: No agents were available for this request.
 
   
  +
=== Systemd のボトルネック ===
パスワードが空であるか、[[NetworkManager#PolicyKit パーミッションの設定|PolicyKit パーミッションの設定]] が必要なためです。
 
   
  +
時が立つにつれてログファイル ({{ic|/var/log/journal}}) が膨大になってしまうことがあります。そうすると NetworkManager を使う場合にブートパフォーマンスに大きな影響を与えます。参照: [[systemd#少しづつ起動時間が長くなっている]]。
== ヒントとテクニック ==
 
   
  +
=== 定期的なネットワーク接続断、遅延、パケットロス (WiFi) ===
=== Wi-Fi パスワードの暗号化 ===
 
   
  +
NetworkManager は2分ごとにスキャンを行います。
デフォルトでは NetworkManager は {{ic|/etc/NetworkManager/system-connections/}} に存在する接続ファイルに平文でパスワードを保存します。保存されているパスワードを表示するには、以下のコマンドを実行:
 
   
  +
一部の WiFi ドライバは、接続/アソシエーション中にベースステーションのスキャンを行うと問題が発生します。症状としては、VPN 接続断/再接続、パケットロス、ウェブページのロードに失敗してリフレッシュすると良くなるなどがあります。
# grep -H '^psk=' /etc/NetworkManager/system-connections/*
 
   
  +
{{ic|journalctl -f}} を root として実行すると、スキャンが行われていることがわかります。以下のようなメッセージが定期的にログに現れます:
パスワードにアクセスできるのは root ユーザーだけであり通常ユーザーは GUI の設定からアクセスできます (例: {{ic|nm-applet}})。
 
   
  +
NetworkManager[410]: <info> (wlp3s0): roamed from BSSID 00:14:48:11:20:CF (my-wifi-name) to (none) ((none))
平文ではなく暗号化された状態で保存することもできますが、ユーザーごとに接続の設定が必要になります。
 
   
  +
ローミングが重要でないならば、WiFi 接続プロファイルでアクセスポイントの BSSID をロックすることにより、定期的なスキャンの挙動を無効化することができます。
====Gnome-Keyring を使う====
 
   
  +
=== Lenovo ラップトップ (IdeaPad、Legion など) で Wi-Fi をオンにできない ===
キーリングデーモンを起動してキーリングを解錠する必要があります。
 
   
  +
これは、Wi-Fi ドライバがソフトブロックを誤って報告することによる、一部の Lenovo モデルにおける {{ic|ideapad_laptop}} モジュールの問題です。カードは依然として {{ic|netctl}} で操作できますが、NetworkManager などのマネージャーは機能しません。この問題が発生しているかどうかを確認するには、ハードウェアのスイッチをオンオフしたあとで {{ic|rfkill list}} の出力を確認し、ソフトブロックされ続けるかどうか確認してください。
さらに、全てのユーザーでパスワードを保存しないように NetworkManager を設定しなければなりません。GNOME の {{ic|nm-applet}} を使う場合、ターミナルから {{ic|nm-connection-editor}} を起動してネットワーク接続を選択し、{{ic|Edit}} をクリックして、{{ic|Wifi-Security}} タブからパスワードの右のアイコンをクリックして {{ic|Store the password only for this user}} にチェックを入れてください。
 
   
  +
{{Accuracy|rfkill の問題を解決するには、{{ic|rfkill.default_state}} と {{ic|rfkill.master_switch_mode}} を使用してみてください ([https://docs.kernel.org/admin-guide/kernel-parameters.html kernel-parameters.html] を参照))。}}
=== wifi でインターネット接続を共有する ===
 
   
  +
{{ic|ideapad_laptop}} モジュールを[[modprobe|アンロード]]すれば、この問題は解決するはずです。('''警告''': これにより、ラップトップのキーボードとタッチパッドも無効になる可能性があります!)
nm を使って数クリックでインターネット接続 (例: 3G または有線) を共有することができます。サポートされた wifi カードが必要になります (Atheros AR9xx や AR5xx を使っているカードがおそらく最適です)。
 
   
  +
=== ホスト名の送信をオフにする ===
[[ファイアウォール]]がインターネット共有を妨害することもあるので注意してください。
 
   
  +
NetworkManager はデフォルトでホスト名を DHCP サーバに送信します。ホスト名の送信は、グローバルには無効化できず、接続毎にしか無効化できません ([https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/584 Issue #584])。
==== Ad-hoc ====
 
   
* 接続の共有できるようにするため {{Pkg|dnsmasq}} パッケージ[[pacman|インストール]]してください
+
特定の接続で DHCP サーバへホスト名の送信無効化するには、以下ネックの設定ファイに追加してください:
* {{ic|dnsmasq.conf}} を修正すると nm に干渉する可能性があります
 
* nm-applet -> Create new wireless network をクリック
 
* ウィザードに従う (WEP を使用する場合、パスワードの長さは5文字あるいは13文字なければなりません)
 
* 次に必要になった時のために設定は保存されます
 
   
  +
{{hc|/etc/NetworkManager/system-connections/''your_connection_file''|2=
==== Real AP ====
 
  +
...
  +
[ipv4]
  +
dhcp-send-hostname=false
  +
...
  +
[ipv6]
  +
dhcp-send-hostname=false
  +
...
  +
}}
   
  +
=== nm-applet が i3wm で消える ===
2012年から、インフラストラクチャモード (ad-hoc をサポートしていない Android で必要) は NetworkManager でサポートされています。
 
   
  +
通知に {{ic|xfce4-notifyd.service}} を使用する場合は、そのユニットを[[編集]]して、以下を追加する必要があります:
参照: https://fedoraproject.org/wiki/Features/RealHotspot
 
   
  +
{{hc|/etc/systemd/user/xfce4-notifyd.service.d/display_env.conf|2=
=== cron ジョブやスクリプトでネットワークが立ち上がっているか確認する ===
 
  +
[Service]
  +
Environment="DISPLAY=:0.0"
  +
}}
   
  +
デーモンをロードし直したら、{{ic|xfce4-notifyd.service}} を[[再起動]]してください。i3 を終了し、再び起動すると、アプレットがトレイに表示されているはずです。
cron ジョブの中にはネットワークが立ち上がっている必要があるジョブもあります。ネットワークが立ち上がっていない場合はジョブを実行しないようにすることができます。そのためには、NetworkManager の {{ic|nm-tool}} を使ってネットワークの状態を確認する '''if''' テストを追加します。インターフェイスが立ち上がっている場合はテストは通りますが、全てのインターフェイスがダウンになっている場合はテストを通過しません。無線でネットワークにつながっていたり、いなかったりするノートパソコンなどで有用です。
 
{{bc|<nowiki>
 
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
 
</nowiki>}}
 
   
  +
=== Unit dbus-org.freedesktop.resolve1.service not found ===
上記は {{ic|cron.hourly}} スクリプトを使って {{ic|fpupdate}} を実行し F-Prot ウイルススキャナをアップデートしている場合などに有用です。
 
   
  +
{{ic|systemd-resolved.service}} が開始されていない場合、NetworkManager は D-Bus を使用して開始しようとし、失敗します:
=== ログイン時に自動的に接続する ===
 
   
  +
dbus-daemon[991]: [system] Activating via systemd: service name='org.freedesktop.resolve1' unit='dbus-org.freedesktop.resolve1.service' requested by ':1.23' (uid=0 pid=1012 comm="/usr/bin/NetworkManager --no-daemon ")
デフォルトでは、パスワードを入力しないと使えないネットワークの場合 NetworkManager は起動時に自動的に接続しません。自動的に接続するには以下の設定が必要です:
 
  +
dbus-daemon[991]: [system] Activation via systemd failed for unit 'dbus-org.freedesktop.resolve1.service': Unit dbus-org.freedesktop.resolve1.service not found.
  +
dbus-daemon[991]: [system] Activating via systemd: service name='org.freedesktop.resolve1' unit='dbus-org.freedesktop.resolve1.service' requested by ':1.23' (uid=0 pid=1012 comm="/usr/bin/NetworkManager --no-daemon ")
   
  +
これは、NetworkManager が {{man|5|NetworkManager.conf}} の {{ic|1=main.dns=}} 設定に関係なく、DNS 情報を [[systemd-resolved]] に送信しようとするためです。[https://gitlab.freedesktop.org/NetworkManager/NetworkManager/commit/d4eb4cb45f41b1751cacf71da558bf8f0988f383]
# {{ic|nm-applet}} アイコンを右クリックして Edit Connections を選択し Wireless タブを開いて下さい
 
# 使用したい接続を選択して Edit ボタンをクリックしてください
 
# “Connect Automatically” と “Available to all users” のボックスにチェックを入れて下さい
 
一度ログアウトしてから再ログインすれば設定は完了です。
 
   
  +
これは、{{ic|/etc/NetworkManager/conf.d/}} 内の設定ファイルで無効にできます:
=== ログインのあと自動でキーリングを解除する ===
 
   
  +
{{hc|/etc/NetworkManager/conf.d/no-systemd-resolved.conf|2=
NetworkManager はログイン情報を必要とするネットワークに接続するときにログインキーリングにアクセスします。大抵の場合、ログイン時に自動的に解錠されますが、解錠されていない場合、NetworkManager はログイン時に接続することができません。
 
  +
[main]
  +
systemd-resolved=false
  +
}}
   
  +
{{Bug|62138}} を参照してください。
==== GNOME ====
 
   
  +
=== Secrets were required, but not provided ===
{{Note|以下の方法は古い情報であり機能する保証はありません。}}
 
* {{ic|/etc/pam.d/gdm}} (もしくは {{ic|/etc/pam.d}} にある適当なデーモン) を開いて、"auth" と "session" ブロックの最後に以下の行を追加します:
 
auth optional pam_gnome_keyring.so
 
session optional pam_gnome_keyring.so auto_start
 
   
  +
ネットワークに接続しようとして以下のエラーが発生する場合:
* {{ic|/etc/pam.d/passwd}} を開いて、'password' ブロックで以下の行を使います:
 
password optional pam_gnome_keyring.so
 
   
  +
{{hc|$ nmcli device wifi connect ''SSID'' password ''パスワード''|
:次のログイン時に、パスワードをログイン時に自動的にロック解除するべきかどうか尋ねられるはずです。
 
  +
Error: Connection activation failed: (7) Secrets were required, but not provided
  +
}}
   
  +
このエラーの原因となりうるものはたくさんあり、[[journal]] を読む必要があります ({{ic|-u NetworkManager}} で出力をフィルタしてください)。例えば、接続の確立に時間がかかりすぎると、NetworkManager はパスワードが正しくなかったと結論づけます:
==== SLiM ログインマネージャ ====
 
[[SLiM#SLiM と Gnome Keyring]] を見て下さい。
 
   
  +
{{bc|
=== 特定のデバイスを無視する ===
 
  +
NetworkManager[1372]: <warn> [1643991888.3808] device (wlan0): Activation: (wifi) association took too long
  +
NetworkManager[1372]: <info> [1643991888.3809] device (wlan0): state change: config -> need-auth (reason 'none', sys-iface-state: 'managed')
  +
NetworkManager[1372]: <warn> [1643991888.3838] device (wlan0): Activation: (wifi) asking for new secrets
  +
}}
   
  +
接続プロファイルを削除し、新しいプロファイルを作成してみてください:
時々 NetworkManager に特定のデバイスを無視してもらってアドレスやルートを設定しないのが望ましいことがあります。{{ic|/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 でインターフェイスを設定できるはずです。
 
   
  +
$ nmcli connection delete ''SSID''
=== 接続の高速化 ===
 
  +
$ nmcli device wifi connect ''SSID'' password ''パスワード''
   
  +
また、MAC アドレスランダム化を無効化してみるのも良いでしょう:
==== IPv6 を無効にする ====
 
   
  +
{{hc|/etc/NetworkManager/conf.d/wifi_rand_mac.conf|2=
NetworkManager の余計な IPv6 クエリーによって接続が遅くなったりネットワークの再接続が起こることがあります。ローカルネットワークで IPv6 をサポートしていない場合、NetworkManager が IPv6 の接続を確立しようとして結局タイムアウトするので、通常よりもネットワークへの接続に時間がかかるかもしれません。解決策は NetworkManager で IPv6 を無効にすることで、これによってネットワーク接続が高速になります。以下は接続するネットワークごとに実行する必要があります。
 
  +
[device]
  +
wifi.scan-rand-mac-address=no
  +
}}
   
  +
=== iwd での WPA Enterprise 接続 ===
* ネットワーク状態アイコンを右クリック。
 
* "Edit Connections" をクリック。
 
* "Wired" か "Wireless" タブを見る。
 
* ネットワークの名前を選択。
 
* "Edit" をクリック。
 
* "IPv6 Settings" タブを見る。
 
* "Method" ドロップダウンから "Ignore/Disabled" を選択。
 
* "Save" をクリック。
 
   
  +
[[#Wi-Fi バックエンドとして iwd を使用する|iwd バックエンド]]と NetworkManager で 'eduroam' などの WPA Enterprise ネットワークに接続しようとした際に、NetworkManager sで以下のエラーが発生します:
==== DHCPCD の ARP probing を無効にして DHCP をスピードアップ ====
 
   
  +
Connection 'eduroam' is not avialable on device wlan0 because profile is not compatible with device (802.1x connections must have IWD provisioning files)
{{ic|dhcpcd}} には割り当てられた IP アドレスが実際に取得されているかどうか ARP を使って確認する DHCP 標準 ([https://www.ietf.org/rfc/rfc2131.txt RFC2131] section 2.2) の勧告の実装が含まれています。家庭ネットワークではほとんどの場合これは不要なので、次の行を {{ic|/etc/dhcpcd.conf}} に加えることで接続にかかる時間を5秒間短くできます:
 
   
  +
NetworkManager は WPA Enterprise ネットワークを設定できないことが原因です。なので、[[iwd#WPA Enterprise]] で説明されているように iwd の設定ファイル {{ic|/var/lib/iwd/''essid''.8021x}} を使って設定する必要があります。
noarp
 
   
  +
=== Failed to request VPN secrets ===
これは {{ic|dhcpcd}} に {{ic|--noarp}} を渡すのと同じであり、上述の ARP probing を無効にして、DHCP によるネットワーク接続を高速化します。
 
   
  +
以下のエラーが発生する場合:
==== OpenDNS サーバーを使う ====
 
   
  +
Failed to request VPN secrets #1: No agents were available for this request.
{{ic|/etc/resolv.conf.opendns}} を以下のネームサーバで作成してください:
 
   
  +
パスワードが空であるか、[[#PolicyKit のパーミッションをセットアップする|PolicyKit のパーミッションをセットアップする]]必要があるかのどちらかです。
nameserver 208.67.222.222
 
nameserver 208.67.220.220
 
   
  +
=== OpenSSL の "ca md too weak" エラーで OpenVPN の接続に失敗する ===
もしくは Google DNS サーバーを使って下さい:
 
   
  +
{{Pkg|openssl}} がバージョン3に更新されたため、レガシーな暗号化アルゴリズムで生成された証明書はデフォルトで拒否されます。このような設定で {{Pkg|networkmanager-openvpn}} を使用しようとすると、ログに次のエラーが記録される可能性があります:
nameserver 8.8.8.8
 
nameserver 8.8.4.4
 
   
  +
{{bc|
そして DHCP サーバーを OpenDNS サーバーに置き換える dispatcher を作って下さい:
 
  +
nm-openvpn[14359]: OpenSSL: error:0A00018E:SSL routines::ca md too weak
  +
nm-openvpn[14359]: Cannot load certificate file /home/archie/.local/share/networkmanagement/certificates/my_issued_cert.crt
  +
nm-openvpn[14359]: Exiting due to fatal error
  +
}}
   
  +
正しいアプローチは、OpenVPN サーバの管理者に、より安全な証明書を生成して再発行してもらうことです。ただし、当面の回避策として、OpenVPN には {{ic|1=tls-cipher "DEFAULT:@SECLEVEL=0"}} が必要です。この設定は、プラグイン GUI からでは無理かもしれませんが、''nmcli'' からなら可能です。これとは別に、OpenSSL で''レガシー''なプロバイダを有効化する必要もあります。
{{hc|/etc/NetworkManager/dispatcher.d/dns-servers-opendns|<nowiki>
 
#!/bin/bash
 
# Use OpenDNS servers over DHCP discovered servers
 
   
  +
まず、以下のコマンドの出力から、問題のある VPN 接続の名前を取得してください:
cp -f /etc/resolv.conf.opendns /etc/resolv.conf</nowiki>}}
 
   
  +
$ nmcli connection show
スクリプトを実行可能にします:
 
   
  +
接続の名前は ''vpn.example.com'' であると仮定します。以下のように ''nmcli'' を使ってください:
# chmod +x /etc/NetworkManager/dispatcher.d/dns-servers-opendns
 
   
  +
$ nmcli connection modify vpn.example.com +vpn.data tls-cipher=DEFAULT:@SECLEVEL=0
=== MAC アドレスのランダム化の設定 ===
 
   
  +
変更は即座に {{ic|/etc/NetworkManager/system-connections/vpn.example.com.nmconnection}} に反映されるはずです。
バージョン 1.4.0 現在、NetworkManager では2種類の MAC アドレスランダム化をサポートしています。スキャン時のランダム化と定常的なランダム化です。どちらのモードも {{ic|/etc/NetworkManager/NetworkManager.conf}} で設定できます。
 
   
  +
OpenSSL に関しては、[https://wiki.openssl.org/index.php/OpenSSL_3.0#Providers OpenSSL wiki] で説明されている通りに {{ic|/etc/ssl/openssl.cnf}} を編集してください。
無線スキャン時のランダム化はバージョン 1.2.0 からデフォルトで有効になっており、以下の行を {{ic|/etc/NetworkManager/NetworkManager.conf}} に追加することで無効にできます:
 
   
  +
具体的には、{{ic|[provider_sect]}} セクションの最後に {{ic|1=legacy = legacy_sect}} を追加してください。{{ic|[default_sect]}} で {{ic|1=activate = 1}} のコメントを外してください。最後に、{{ic|1=activate = 1}} という行も含む新しいセクション {{ic|[legacy_sect]}} を追加してください。他のほとんどの既存の構成セクションを除外すると、最終結果は次のようになります:
[device]
 
wifi.scan-rand-mac-address=no
 
   
  +
{{hc|/etc/ssl/openssl.cnf|2=
{{Tip|1=MAC アドレスのランダム化を無効にすることで接続が安定することがあります。[https://bbs.archlinux.org/viewtopic.php?id=220101] を参照。}}
 
  +
openssl_conf = openssl_init
   
  +
[openssl_init]
定常的なランダム化では接続するたびに MAC アドレスが変わります。MAC アドレスでログイン状態を記録するポータルなどで有用です。有効にするには以下のオプションを使用:
 
  +
providers = provider_sect
   
  +
[provider_sect]
[connection]
 
  +
default = default_sect
wifi.cloned-mac-address=random
 
  +
legacy = legacy_sect
   
  +
[default_sect]
または:
 
  +
activate = 1
 
[connection]
 
ethernet.cloned-mac-address=random
 
   
  +
[legacy_sect]
詳しくは [https://blogs.gnome.org/thaller/2016/08/26/mac-address-spoofing-in-networkmanager-1-4-0/ こちら] を参照してください。
 
  +
activate = 1
  +
}}
   
  +
最後に、{{ic|NetworkManager.service}} を[[再起動]]して、新しい OpenSSL 設定を有効化してください。
=== IPv6 プライバシー拡張の有効化 ===
 
   
  +
=== OpenSSL の "unsupported protocol" エラーで WPA Enterprise の接続の認証に失敗する ===
[[IPv6#NetworkManager]] を見てください。
 
   
  +
{{Pkg|openssl}} がバージョン 3 に更新されたため、[https://www.openssl.org/news/openssl-3.0-notes.html デフォルトで] SSL 3、TLS 1.0、TLS 1.1、そして DTLS 1.0 はセキュリティレベル 0 でのみ動作するようになりました。それよりも低い標準しかサポートしていない Wi-Fi での認証は、ログに以下のエラーを吐いて失敗します:
=== ネットワーク名前空間での実行 ===
 
   
  +
{{bc|
ネットワーク名前空間内で NetworkManager を実行する場合(たとえば、選択したアプリケーションで使用する必要がある特定のデバイスを管理する場合)、名前空間に移動する前にデバイスを停止します。
 
  +
wpa_supplicant[3320]: SSL: SSL3 alert: write (local SSL3 detected an error):fatal:protocol version
  +
wpa_supplicant[3320]: OpenSSL: openssl_handshake - SSL_connect error:0A000102:SSL routines::unsupported protocol
  +
wpa_supplicant[3320]: wlp3s0: CTRL-EVENT-EAP-FAILURE EAP authentication failed
  +
}}
   
  +
正しいアプローチは、WiFi の管理者に TLS 1.3 をサポートしてもらい、さらにオプションで TLS 1.0/1.1、DTLS 1.0、SSL 1-3 を含む低いセキュリティ標準のサポートを落としてもらうことです。しかし、当面の回避策として、TLS 1.0 をデフォルトで許可する方法は複数あります。一つは、手動で OpenSSL にパッチを当てるか、破壊的な変更をもとに戻すことです ([https://github.com/openssl/openssl/commit/7bf2e4d7f0c7ae19b7a8c416910886a7171e9820])。これは、OpenSSL レベル 1 を使用する他の全てのプログラムのセキュリティも低下してしまうため、推奨されません。代わりに、([https://bbs.archlinux.org/viewtopic.php?id=286417#p2104492 BBS#286417] で説明されているように) wpa_supplicant によって使用されるレベルを直接設定することができます。問題のある接続の {{ic|1=[802-1x]}} セクションで {{ic|1=phase1-auth-flags=32}} を設定することで、その接続のみを変更できます。これは GUI からは無理かもしれませんが、''nmcli'' でなら可能です。
$ ip link set dev ''MY_DEVICE'' down
 
$ ip link set dev ''MY_DEVICE'' netns ''MY_NAMESPACE''
 
$ ip netns exec ''MY_NAMESPACE'' NetworkManager
 
...
 
$ ip netns exec ''MY_NAMESPACE'' killall NetworkManager
 
   
  +
まず、以下のコマンドの出力から、問題のある Wi-Fi 接続の名前を手に入れてください:
そうしないと、NetworkManager は後で {{ic|device is strictly unmanaged}} エラーで接続の確立に失敗します。
 
   
  +
$ nmcli connection show
=== VPN に自動的に接続する ===
 
   
  +
接続名は ''Example WiFi'' であると仮定します。以下のように ''nmcli'' を使用してください:
NetworkManager は、インターネットに接続するときに、ネットワークごとに VPN に自動的に接続するように設定できます。 VPN 接続自体は GNOME の NetworkManager フロントエンドに追加できますが、VPN を自動的に使用するには {{ic|nmcli}} を使用する必要があります。他のフロントエンドにはこの制限がない場合があります。
 
   
  +
$ nmcli connection modify Example\ WiFi 802-1x.phase1-auth-flags 32
まず、すべてのユーザが VPN 接続を利用できるようにすることを確認します。GNOME では、これは {{ic|details}} タブの下にあるボックスにチェックを入れることで完了します。{{ic|Identity}} タブのパスワード欄で右側のアイコンをクリックし、{{ic|Store the password for all users}} に設定します。
 
   
  +
変更は即座に {{ic|/etc/NetworkManager/system-connections/Example\ WiFi.nmconnection}} に反映されるはずです。
次に、VPN 接続の UUID を見つけ、それをインターネット接続の {{ic|connection.secondaries}} に追加してください。
 
   
  +
最後に、{{ic|NetworkManager.service}} を[[再起動]]して、新しい OpenSSL の設定を有効化してください。
# UUID=$(nmcli --get-values connection.uuid connection show ''name-of-VPN-connection'')
 
# nmcli connection modify ''name-of-Internet-connection'' connection.secondaries "$UUID"
 
 
これで、NetworkManager が再起動され、設定したインターネット接続に接続すると、VPN に自動的に接続されるはずです。
 
   
 
== 参照 ==
 
== 参照 ==
  +
 
* [https://blogs.gnome.org/dcbw/2015/02/16/networkmanager-for-administrators-part-1/ NetworkManager for Administrators Part 1]
 
* [https://blogs.gnome.org/dcbw/2015/02/16/networkmanager-for-administrators-part-1/ NetworkManager for Administrators Part 1]
  +
* [[Wikipedia:ja:NetworkManager]]
  +
* [https://networkmanager.dev/ NetworkManager 公式ウェブサイト]
  +
  +
{{TranslationStatus|NetworkManager|2024-10-10|817905}}

2024年10月10日 (木) 14:35時点における最新版

関連記事

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

警告: デフォルトでは、機密情報 (Wi-Fi のパスワードなど) は root ユーザからファイルシステムでアクセス可能であり、さらに GUI (nm-applet など) を介して設定にアクセスできるユーザからもアクセス可能です。#Wi-Fi パスワードの暗号化 を参照してください。

目次

インストール

NetworkManager は networkmanager パッケージでインストールできます。このパッケージには、デーモン、コマンドラインインターフェイス (nmcli)、そして curses ベースのインターフェイス (nmtui) が含まれています。

NetworkManager を有効化する

インストールしたら、NetworkManager.service起動/有効化する必要があります。NetworkManager デーモンが起動すると、既に構成されている利用可能な "システム接続" に自動的に接続します。"ユーザ接続" や未構成の接続を設定したり接続したりするには、nmcli やアプレットが必要です。

ノート:
  • ネットワークを設定しようとするサービスが他に動いていないことを確認しなければなりません。事実、ネットワーキングサービスが複数動いていると、互いに干渉してしまいます。現在動作中のサービスの完全なリストは systemctl --type=service で見られます。衝突の恐れのあるサービスは停止してください。NetworkManager サービスを有効化する方法は #設定 を見てください。
  • systemd-resolved起動されていない場合、エラーメッセージがログに溢れ始めます。詳細は #Unit dbus-org.freedesktop.resolve1.service not found を見てください。

追加のインターフェイス

モバイルブロードバンドサポート

NetworkManager はモバイルブロードバンド接続のサポートに ModemManager を使用します。

modemmanagerusb_modeswitchインストールしてください。その後、ModemManager.service有効化し、起動してください。

ModemManager を認識させるために NetworkManager.service再起動する必要がある場合があります。サービスを再起動し、モデムを挿し直せば、認識されるはずです。

フロントエンド (例えば nm-connection-editor) から接続を追加し、接続タイプにモバイルブロードバンドを選択してください。ISP と料金プランを選んだら、APN とその他の設定が mobile-broadband-provider-info にある情報で自動的に書き込まれるはずです。

PPPoE / DSL サポート

PPPoE / DSL サポートに関しては rp-pppoeインストールしてください。PPPoE 接続を追加するには、nm-connection-editor を使って新しい DSL/PPPoE 接続を追加してください。

VPN サポート

NetworkManager 1.16 から WireGuard のネイティブなサポートが追加されました。必要なのは wireguard カーネルモジュールだけです。詳細は NetworkManager のブログ記事の WireGuard を見てください。

その他の VPN タイプに対するサポートはプラグインなシステムをベースとしています。以下のパッケージで提供されています:

警告: VPN サポートに関連するバグが大量に存在しています。デーモンプロセスのオプションが GUI から適切に設定されていることを確認し、パッケージのリリースの度にダブルチェックしてください。
ノート:
  • VPN 使用時に DNS 解決を完全に機能させるには、条件付きフォワーディングをセットアップする必要があります。
  • これらのプラグインは、ドキュメント化されたコマンドラインインターフェイスが存在しなかったり、アプレットが実行されていないと全く動作しなかったりする場合があります。通常のデスクトップ環境を使用している場合には問題になりません。通常とは異なるものを使用している場合は、接続を設定したりアクティブ化したりする際に必要なダイアログが表示されるようにするために #nm-applet を実行するべきです。[1]

使い方

NetworkManager には nmcli(1)nmtui(1) が付属しています。

nmcli 例

近くの Wi-Fi ネットワークを一覧表示します:

$ nmcli device wifi list

Wi-Fi ネットワークに接続します:

$ nmcli device wifi connect SSID_または_BSSID password パスワード

非表示の Wi-Fi ネットワークに接続します:

$ nmcli device wifi connect SSID_または_BSSID password パスワード hidden yes

wlan1 インターフェイスで Wi-Fi に接続します:

$ nmcli device wifi connect SSID_または_BSSID password パスワード ifname wlan1 プロファイル名

インターフェイスを切断します:

$ nmcli device disconnect ifname eth0

名前、UUID、タイプ、バッキングデバイスを含む接続のリストを取得します:

$ nmcli connection show

接続を有効にします (つまり、既存のプロファイルでネットワークに接続します):

$ nmcli connection up 名前_または_uuid

接続を削除します:

$ nmcli connection delete 名前_または_uuid

ネットワークデバイスとその状態のリストを表示します:

$ nmcli device

Wi-Fi をオフにします:

$ nmcli radio wifi off

接続を編集する

設定の包括的なリストについては、nm-settings(5) を参照してください。

まず、接続のリストを取得する必要があります:

$ nmcli connection
NAME                UUID                                  TYPE      DEVICE
有線接続 2          e7054040-a421-3bef-965d-bb7d60b7cecf  ethernet  enp5s0
有線接続 1          997f2782-f0fc-301d-bfba-15421a2735d8  ethernet  enp0s25
MY-HOME-WIFI-5G     92a0f7b3-2eba-49ab-a899-24d83978f308  wifi       --

ここでは、後で使用する接続 ID として最初の列を使用できます。この例では、有線接続 2 を接続 ID として選択します。

作成後に接続 有線接続 2 を設定するには、次の3つの方法があります:

nmcli 対話型エディタ
nmcli connection edit '有線接続 2'
使用法はエディタから十分に文書化されています。
nmcli コマンドラインインターフェイス
nmcli connection modify '有線接続 2' 設定.プロパティ 。使用方法については nmcli(1) を参照してください。例えば、nmcli connection modify '有線接続 2' ipv4.route-metric 200 コマンドを使用して、IPv4 ルートメトリックを 200 に変更できます。

設定を削除するには、次のように空のフィールド ("") を渡します:

nmcli connection modify '有線接続 2' 設定.プロパティ ""
接続ファイル
/etc/NetworkManager/system-connections/ で、対応する 有線接続 2.nmconnection ファイルを変更します。
nmcli connection reload で設定ファイルをリロードすることを忘れないでください。

フロントエンド

デスクトップ環境と統合するために、ほとんどのユーザはアプレットをインストールしたいと考えるでしょう。アプレットはネットワークの選択や設定を容易にするだけでなく、機密情報をセキュアに保存するために必要なエージェントも提供します。様々なデスクトップ環境は独自のアプレットを持っています。デスクトップ環境に独自のアプレットが存在しない場合、#nm-applet を使用することもできます。

GNOME

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

KDE Plasma

plasma-nm パッケージをインストールしてください。その後、パネルオプション > ウィジェットを追加 > ネットワーク で KDE タスクバーにアプレットを追加してください。

nm-applet

network-manager-applet は、システムトレイのある Xorg 環境で機能する GTK 3 フロントエンドです。

接続に関する機密情報 (Wi-Fi のパスワードなど) を保存するには、Secret Service D-Bus API を実装しているアプリケーション (GNOME/KeyringKDE WalletKeePassXC など) をインストールし設定してください。

接続の設定で Make available to other users チェックボックスオプションを有効化すると、NetworkManager はその接続のパスワードを平文で保存することに注意してください。とはいえ、パスワードが含まれるファイルは root (及び nm-applet を通して他のユーザ) からしかアクセスできません。#Wi-Fi パスワードの暗号化 を見てください。

trayerstalonetray を使うことで、システムトレイ無しで nm-applet を実行することができます。例えば、以下のようなスクリプトをパスに追加することができます:

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

stalonetray のウィンドウを閉じると、nm-applet も閉じます。なので、ネットワークの設定を終えたら余分なメモリが消費されることはありません。

このアプレットは、Wi-Fi ネットワークの接続や切断などのイベントの通知を表示することができます。これらの通知を表示させるには、通知サーバがインストールされている必要があります (デスクトップ通知 を見てください)。アプレットを通知サーバ無しで使うと、標準出力や標準エラー出力にメッセージが表示され、最悪、アプレットがハングするかもしれません。[2] を参照してください。

通知を無効化した状態で nm-applet を実行するには、アプレットを以下のコマンドで起動してください:

$ nm-applet --no-agent
ヒント: nm-applet自動起動デスクトップファイルによって自動的に起動されるかもしれません。そのような場合に --no-agent オプションを追加するには、デスクトップファイルの Exec 行を変更してください。つまり:
Exec=nm-applet --no-agent
警告: i3 では、nm-applet が --no-agent オプションで起動された場合、パスワード入力ダイアログが表示されないため、アイテムリストをクリックして新しい暗号化された Wi-Fi ネットワークに接続することができなくなります。journal には no secrets: No agents were available for this request と出力されます。

Appindicator

バージョン 1.18.0 から、Appindicator のサポートが公式の network-manager-applet パッケージで利用可能になりました。nm-applet を Appindicator の環境で使うには、アプレットを以下のコマンドで起動してください:

$ nm-applet --indicator

networkmanager-dmenu

フロントエンドのもう一つの選択肢は networkmanager-dmenu-gitAUR です。これは、NetworkManager の接続を nm-applet ではなく dmenurofi で管理する小さなスクリプトです。このスクリプトには必須の機能が全て揃っています。例えば: NetworkManager の既存の Wi-Fi 接続や有線接続に接続する、新しい Wi-Fi 接続に接続する、必要に応じてパスフレーズを要求する、既存の VPN 接続に接続する、ネットワークを有効化/無効化する、nm-connection-editor GUI を起動する、Bluetooth ネットワークに接続する。

switchboard

Pantheon の switchboard は、switchboard-plug-networknm-connection-editor と組み合わせて使えば、NetworkManager を設定するためのデスクトップ環境に依存しない方法になります。以下のコマンドで実行できます:

$ io.elementary.settings

設定

NetworkManager を適切に実行させるには、いくつか追加の手順が必要です。ネットワーク設定#ホスト名の設定 で説明されているように、/etc/hosts が設定されていることを確認してください。

NetworkManager のグローバルな設定ファイルは /etc/NetworkManager/NetworkManager.conf です。追加の設定ファイルは /etc/NetworkManager/conf.d/ に置くことができます。通常、グローバルなデフォルト値に対して設定を行う必要はありません。

設定ファイルを編集したら、以下のコマンドで変更を適用することができます:

# nmcli general reload

NetworkManager-wait-online

NetworkManager.service を有効化すると、NetworkManager-wait-online.service も有効化されます。NetworkManager-wait-online.service は oneshot なシステムサービスで、ネットワークが構成されるまで待機します。このサービスには WantedBy=network-online.target が含まれているため、このサービスが終了するのは、network-online.target 自体が有効化されている時か、あるいは network-online.target が他のユニットによって実行された時のみです。systemd#ネットワークが稼働した後にサービスを実行する も参照してください。

デフォルトでは、NetworkManager-wait-online.service は、ネットワーク接続が確立されるのを待つ (nm-online(1) を参照) のではなく、NetworkManager の起動が完了するのを待ちます。ネットワークの準備が整う前に NetworkManager-wait-online.service が終了してしまってブート時に一部のサービスが失敗してしまう場合、NetworkManager-wait-online.service ユニットを拡張し、ExecStart 行から -s を削除してください:

[Service]
ExecStart=
ExecStart=/usr/bin/nm-online -q

ただし、これにより他の問題が発生する可能性があることに注意してください。

一部のケースで、タイムアウトの設定が短すぎるために、このサービスの起動が失敗してしまう場合があります。サービスを編集して NM_ONLINE_TIMEOUT60 からより大きい値に変更してください。

PolicyKit のパーミッションをセットアップする

デフォルトでは、アクティブなローカルセッションのユーザは全員パスワード無しでほぼ全てのネットワーク設定を変更することができます。セッションの種類を確認する方法については、一般的なトラブルシューティング#セッションのパーミッション を見てください。ほとんどの場合、特に設定しなくても全て動作するはずです。

一部のアクション (システムのホスト名を変更するなど) においては、管理者のパスワードが必要です。そのような場合、自身のユーザを wheel グループに追加し、パスワードのプロンプトを表示する Polkit の認証エージェントを実行する必要があります。

リモートセッションの場合 (例えば、ヘッドレス VNC)、NetworkManager を使用するために必要な特権を得る方法は複数あります:

  1. 自身を wheel グループに追加する。アクションの度にパスワードを入力する必要があります。注意点として、wheel グループに追加すると他の権限 (root パスワードを入力せずに sudo を実行できるなど) も付与される場合があります。
  2. 自身を 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 グループ内の全ユーザがパスワード無しでネットワークの追加と削除を行えるようになります (これは、Polkit 認証エージェントを実行する必要がないことを意味します。なので、この方法は SSH セッションでも使えます。)。

プロクシ設定

NetworkManager は直接プロクシ設定を扱いませんが、GNOMEKDE を使っている場合、NetworkManager の情報を使ってプロクシ設定を管理する proxydriverAUR[リンク切れ: package not found] を使うことができます。

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

$ xhost +si:localuser:ユーザ名

参照: プロキシ設定

接続の確認

NetworkManager は、ネットワークに接続した後にウェブサーバへの接続を試みて、キャプティブポータルなどが存在しないか確認します。デフォルトの接続先ホスト (/usr/lib/NetworkManager/conf.d/20-connectivity.conf で設定されています) は ping.archlinux.org (redirect.archlinux.org の CNAME エイリアス) です。別のウェブサーバを使う、または接続チェックを無効化するには、/etc/NetworkManager/conf.d/20-connectivity.conf を作成してください (NetworkManager.conf(5) § CONNECTIVITY SECTION を参照)。以下は、GNOME のサーバを使用する例です (GNOME を使用する必要はありません):

/etc/NetworkManager/conf.d/20-connectivity.conf
[connectivity]
uri=http://nmcheck.gnome.org/check_network_status.txt

NetworkManager の接続チェックを無効化するには、以下の設定を使用してください。これは、接続チェックを無効化する VPN に接続している場合に便利です。

/etc/NetworkManager/conf.d/20-connectivity.conf
[connectivity]
enabled=false
ノート: 自動的な接続チェックはプライバシーの問題を引き起こす可能性がありますが、Arch Linux のデフォルトの接続先 URL は如何なるアクセスも記録しません。[3] [4] を参照してください。

キャプティブポータル

キャプティブポータルが存在している場合、デスクトップマネージャが、資格情報を求めるウィンドウを自動的に開く場合があります。あなたのデスクトップ環境がこれを行わない場合、capnet-assist パッケージを使用することができます (しかし現在、このパッケージの NetworkManager ディスパッチャスクリプトは壊れています)。あるいは、NetworkManager ディスパッチャスクリプトを以下の内容で作成することもできます:

/etc/NetworkManager/dispatcher.d/90-open_captive_portal
#!/bin/sh -e
# Script to dispatch NetworkManager events
#
# Runs shows a login webpage on walled garden networks.
# See NetworkManager(8) for further documentation of the dispatcher events.

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

if [ -x "/usr/bin/logger" ]; then
    logger="/usr/bin/logger -s -t captive-portal"
else
    logger=":"
fi

wait_for_process() {
    PNAME=$1
    while [ -z "$(/usr/bin/pgrep $PNAME)" ]; do
        sleep 3;
    done
}

#launch the browser, but on boot we need to wait that nm-applet starts
start_browser() {
    local user="$1"
    local display="$2"

    export DISPLAY="$display"
    wait_for_process nm-applet

    export XAUTHORITY="/home/$user/.Xauthority"

    $logger "Running browser as '$user' with display '$display' to login in captive portal"
    sudo -u "$user" --preserve-env=DISPLAY,XAUTHORITY -H xdg-open http://capnet.elementary.io 2>&1 > /dev/null
}

# Run the right scripts
case "$2" in
    connectivity-change)
    $logger -p user.debug "dispatcher script triggered on connectivity change: $CONNECTIVITY_STATE"
    if [ "$CONNECTIVITY_STATE" = "PORTAL" ]; then
        # Match last column of who's output with ' :[at least one digit] '
        who | awk '$NF ~ /\(:[0-9]+\)/ { print $1 " " substr($NF, 2, length($NF)-2) };' | \
        while read user display; do
            start_browser $user $display || $logger -p user.err "Failed for user: '$user' display: '$display'"
        done
    fi
    ;;
    *)
    # In a down phase
    exit 0
    ;;
esac

スクリプトには実行可能属性を付与してください。しかし、このスクリプトは X が使用されていることを仮定しており、単純に http ページを開きます。必ずしも動作するとは限らないかもしれません。

このスクリプトを実行するには、NetworkManager.service再起動するか、システムを再起動する必要があります。そうしたら、ディスパッチャスクリプトはキャプティブポータルを検知するとログインウィンドウを開くはずです。

簡潔な解決策は captive-portal-sh です。これはキャプティブポータル URL を取得し、デフォルトのブラウザで開くシェルスクリプトです (Wayland のみ)。

別の解決策は Google Chrome ベースの captive-browser-gitAUR です。

DHCP クライアント

デフォルトでは、NetworkManager は自身の内蔵 DHCP クライアントを使用します。内蔵 DHCPv4 プラグインは nettools の n-dhcp4 ライブラリをベースにしていますが、内蔵 DHCPv6 プラグインは systemd-networkd ベースのコードから作られています。

別の DHCP クライアントを使用するには、以下の代替実装のどれかをインストールしてください:

DHCP クライアントのバックエンドを変更するには、/etc/NetworkManager/conf.d/ 内に設定ファイルを作成して、そのファイル内で main.dhcp=DHCP_クライアント名 オプションを設定してください。例えば:

/etc/NetworkManager/conf.d/dhcp-client.conf
[main]
dhcp=dhclient
ノート:
  • NetworkManger は IPv6 に dhcpcd を使用することをサポートしていません。NetworkManager issue #5 を参照してください。dhcpcd が DHCP クライアントとして設定されている場合、NetworkManager は DHCPv6 に対しては内臓の DHCP クライアントを使用します。
  • dhclient パッケージと dhcpcd パッケージに同梱されている systemd ユニットは有効化しないでください。NetworkManager と競合してしまいます。詳細は #インストール セクションに書かれているノートを見てください。

DNS の管理

NetworkManager の DNS 管理については、GNOME プロジェクトの wiki ページ Projects/NetworkManager/DNS で説明されています。

DNS キャッシングと条件付きフォワーディング

NetworkManager には、dnsmasq または systemd-resolved を使用して DNS キャッシングと条件付きフォワーディングを有効化するプラグインが存在します (以前は、"条件付きフォワーディング" は NetworkManager のドキュメントで "split DNS" と呼ばれていました)。このセットアップには、DNS ルックアップがキャッシュされるので名前解決の時間が短縮され、VPN ホストの DNS ルックアップが、関連する VPN の DNS サーバに転送されるという長所があります。これは、複数の VPN に接続する場合に特に便利です。

ノート: /etc/resolv.conf/run/systemd/resolve/stub-resolv.conf/run/systemd/resolve/resolv.conf/lib/systemd/resolv.conf/usr/lib/systemd/resolv.conf へのシンボリックリンクである場合、NetworkManager は systemd-resolved を自動的に選択します。dnsmasq を使用するには、まずシンボリックリンクを削除する必要があります。その後で、NetworkManager を再起動してください。
dnsmasq

dnsmasq がインストールされていることを確認してください。そして、/etc/NetworkManager/conf.d/ 内の設定ファイル (無い場合は作成してください) で main.dns=dnsmasq を設定してください:

/etc/NetworkManager/conf.d/dns.conf
[main]
dns=dnsmasq

次に、nmcli general reload を root として実行してください。NetworkManager は自動的に dnsmasq を起動し、/etc/resolv.conf127.0.0.1 を追加します。元の DNS サーバは /run/NetworkManager/no-stub-resolv.conf を見れば分かります。dnsmasq が使用されているかどうかは、drill example.com で同じ DNS ルックアップを2度行ってサーバとクエリの時間を計測すれば確認できます。

ノート:
  • dnsmasq.service を起動したり、/etc/dnsmasq.conf を編集したりする必要はありません。NetworkManager は、その systemd サービスを使わず、さらに dnsmasq のデフォルトの設定ファイルを読み込まずに dnsmasq を起動します。
  • NetworkManager によって起動された dnsmasq インスタンスは 127.0.0.1:53 にバインドされます。なので、これと同じアドレスとポートで他のソフトウェア (dnsmasq.service も含む) を実行することはできません。
dnsmasq のカスタム設定

/etc/NetworkManager/dnsmasq.d/ 内に設定ファイルを作成することで、dnsmasq のカスタム設定を作成することができます。例えば、DNS キャッシュ (RAM 内に格納されます) のサイズを変更するには:

/etc/NetworkManager/dnsmasq.d/cache.conf
cache-size=1000

設定ファイルの構文は以下のコマンドで確認できます:

$ dnsmasq --test --conf-file=/dev/null --conf-dir=/etc/NetworkManager/dnsmasq.d

利用可能な全てのオプションについては dnsmasq(8) を参照してください。

IPv6
この記事またはセクションの正確性には問題があります。
理由: NetworkManager は ::1/etc/resolv.conf に追加しないため、以下の方法では問題を解決できません。@::1 を手動で drill に渡さない限り、Error: error sending query: No (valid) nameservers defined in the resolver というエラーで失敗します。 (議論: トーク:NetworkManager#)

NetworkManager で dnsmasq を有効化すると、IPv6 のみの DNS ルックアップ (つまり、drill -6 [hostname]) が機能しなくなる場合があります (しかし、それ以外では機能する)。この問題を解決するには、以下のファイルを作成し、IPv6 ループバックもリッスンするように dnsmasq を設定してください:

/etc/NetworkManager/dnsmasq.d/ipv6-listen.conf
listen-address=::1

さらに、dnsmasq は上流の IPv6 DNS を優先しません。残念ながら、NetworkManager も IPv6 DNS を優先しません (Ubuntu Bug)。回避策は、NetworkManager の設定で IPv6 DNS を無効化することです (IPv4 DNS があると仮定します)。

DNSSEC

NetworkManager によってデフォルトで開始される dnsmasq インスタンスは、--proxy-dnssec オプションを渡して開始されるため、DNSSEC を検証しません。なので、上流の DNS サーバからの DNSSEC 情報を何でも信頼します。

dnsmasq に DNSSEC を適切に検証させるには、以下の設定ファイルを作成してください (これにより、DNSSEC をサポートしない名前サーバでの DNS 解決が機能しなくなります):

/etc/NetworkManager/dnsmasq.d/dnssec.conf
conf-file=/usr/share/dnsmasq/trust-anchors.conf
dnssec
systemd-resolved

NetworkManager は systemd-resolved を DNS リゾルバ及び DNS キャッシュとして使用することができます。まず先に、systemd-resolved が適切に設定されていて、systemd-resolved.service開始されていることを確認してください。

/etc/resolv.conf/run/systemd/resolve/stub-resolv.conf/run/systemd/resolve/resolv.conf/usr/lib/systemd/resolv.conf へのシンボリックリンクである場合、systemd-resolved は自動的に使用されます。

/etc/NetworkManager/conf.d/ 内の設定ファイルで main.dns=systemd-resolved を設定することで、これを明示的に有効化することもできます:

/etc/NetworkManager/conf.d/dns.conf
[main]
dns=systemd-resolved
openresolv サブスクライバのある DNS リゾルバ

ローカルの DNS リゾルバへのサブスクライバ (加入者) が openresolv に存在している場合、サブスクライバをセットアップし、openresolv を使用するように NetworkManager を設定してください

NetworkManager は単一の "インターフェイス" を resolvconf に広告するため、2つの NetworkManager 接続間で条件付きフォワーディングを行うのは不可能です。NetworkManager issue 153 を参照してください。

この問題は /etc/resolvconf.confprivate_interfaces="*" を設定すれば、部分的に緩和できます [5]。検索ドメインリストに無いドメインのクエリは、フォワーディングされません。そのようなクエリは、他の DNS サーバにフォワーディングされるか、DNS ルートサーバから回帰的に解決されるなどして、ローカルのリゾルバの設定に従って処理されます。

カスタム DNS サーバ

カスタムグローバル DNS サーバの設定

全ての接続に対して DNS サーバを設定するには、NetworkManager.conf(5) 内で [global-dns-domain-*] というセクション内で servers=serveripaddress1,serveripaddress2,serveripaddress3 という構文を使ってDNS サーバを指定してください。例えば:

/etc/NetworkManager/conf.d/dns-servers.conf
[global-dns-domain-*]
servers=::1,127.0.0.1
ノート:
接続でのカスタム DNS サーバの設定
接続でのカスタム DNS サーバの設定 (GUI)

セットアップ方法は、使用するフロントエンドの種類に依ります。手順としては通常、アプレットを右クリックし、プロファイルを編集 (または作成) し、DHCP タイプに 自動 (アドレスのみ) (Automatic (specify addresses)) を選択するというものです。DNS アドレスを入力する必要があり、通常、127.0.0.1, DNS-server-one, ... という形です。

接続でのカスタム DNS サーバの設定 (nmcli / 設定ファイル)

接続の設定dns フィールド (及び、関連する dns-searchdns-options) を使うことで、接続毎に DNS サーバをセットアップすることができます。

methodauto に設定されている場合 (DHCP を使用する場合)、ignore-auto-dnsyes に設定する必要があります。

/etc/resolv.conf

NetworkManager の /etc/resolv.conf 管理モードは、main.rc-manager で設定されます。networkmanager パッケージはこれを、上流のデフォルトである auto ではなく、symlink に設定します。設定と値は NetworkManager.conf(5) man ページでドキュメント化されています。

ヒント: openresolv を使用すると、NetworkManager は、resolvconf によってサポートされている他のソフトウェアと共存できます。例えば、openresolv が subscriber を持つローカル DNS キャッシングおよび分割 DNS リゾルバを実行できます。openresolv で NetworkManager を使用する場合、条件付きフォワーディングはまだ完全にサポートされていないことに注意してください。

また、NetworkManager は、ネットワークの変更後に /etc/resolv.conf を変更するために使用できる、いわゆるディスパッチャスクリプトを介したフックも提供します。詳細は #ネットワークサービスで NetworkManager dispatcher を使用するNetworkManager(8) を参照してください。

ノート:
  • NetworkManager が dnsmasq または systemd-resolved のいずれかを使用するように設定されている場合、適切なループバックアドレスが /etc/resolv.conf に書き込まれます。
  • NetworkManager が書き込む resolv.conf、または /etc/resolv.conf に書き込む内容は、/run/NetworkManager/resolv.conf で見られます。
  • 取得したネームサーバーと検索ドメインを含む resolv.conf ファイルは、/run/NetworkManager/no-stub-resolv.conf にあります。
管理対象外の /etc/resolv.conf

NetworkManager が /etc/resolv.conf に干渉しないようにするには、/etc/NetworkManager/conf.d/ の設定ファイルで main.dns=none を設定してください:

/etc/NetworkManager/conf.d/dns.conf
[main]
dns=none
ヒント: NetworkManager が DNS 設定を systemd-resolved に送信しないように、main.systemd-resolved=false を設定することもできます。
ノート: main.dns=none を使うのではなく、dnsmasqsystemd-resolved などの他の DNS バックエンドを使用するように NetworkManager を設定する方法については、#DNS キャッシングと条件付きフォワーディング を見てください。

その後、/etc/resolv.conf が壊れたシンボリックリンクになり、削除する必要が生じるかもしれません。その場合、新しい /etc/resolv.conf ファイルを作成してください。

openresolv を使う
ノート: NetworkManager は、systemd-resolvconf によって提供されている systemd-resolved の resolvconf インターフェイスの使用をサポートしていません (resolvectl(1) § COMPATIBILITY WITH RESOLVCONF(8))。

openresolv を使用するように NetworkManager を設定するには、/etc/NetworkManager/conf.d/ 内の設定ファイルで main.rc-manager=resolvconf を設定してください:

/etc/NetworkManager/conf.d/rc-manager.conf
[main]
rc-manager=resolvconf

ファイアウォール

現在の接続に基づいて firewalld ゾーンを割り当てることができます。たとえば、職場では制限の厳しいファイアウォールを使用し、自宅では制限の少ないファイアウォールを使用します。

これは、NetworkManager dispatcher を使用して行うこともできます。

ネットワークサービスで NetworkManager dispatcher を使用する

NetworkManager がインターフェイスを立ち上げるまで実行したくないようなネットワークサービスはたくさんあります。NetworkManager には、(例えば NFSSMBNTPd を使用する時などに) ネットワークに接続したらサービスを開始し、切断したらサービスを停止する機能があります。

この機能を有効化するには、NetworkManager-dispatcher.service有効化し、かつ起動する必要があります。

このサービスを有効化したら、/etc/NetworkManager/dispatcher.d 内にスクリプトを追加することができます。

スクリプトは root によって所有されていなければなりません。ディスパッチャは、root によって所有されていないスクリプトを実行しません。セキュリティを高めるために、スクリプトのグループ所有権も root に設定してください:

# chown root:root /etc/NetworkManager/dispatcher.d/10-script.sh

スクリプトファイルを実行可能にするのを忘れないでください。

スクリプトは、ネットワークへの接続時にはアルファベット順で実行され、切断時には逆アルファベット順で実行されます。実行される順番を保証するために、スクリプトの名前の前に数字を置くのが一般的です (例: 10-portmap30-netfs。こうすることで、NFS がマウントを試みる前に、portmapper が立ち上がります)。

スクリプトは以下の引数を受け取ります:

  • インターフェイス名: 例えば eth0
  • アクション: updownvpn-upvpn-down など (完全なリストは NetworkManager-dispatcher(8) を見てください)
警告: 外部ネットワークや公開ネットワークに接続する場合は、どのサービスを起動するのか、どのサーバにサービスは接続できるのかに注意してください。公開ネットワークに接続する際に間違ったサービスを起動してしまうとセキュリティホールを作ってしまう可能性があります。

ディスパッチャのタイムアウトを防ぐ

上記がうまくいっているのであれば、このセクションは関係しません。しかし、ディスパッチャのスクリプトの実行に時間が掛かってしまうという一般的な問題があります。最初は、3 秒だけの内部タイムアウトが使用されていました。呼ばれたスクリプトが時間内に完了しないと、そのスクリプトは kill されていました。後に、タイムアウトは約 20 秒に延長されました (詳細は Bugtracker を参照)。タイムアウトのせいで依然として問題が発生する場合は、NetworkManager-dispatcher.service に対するドロップインファイルを使って、終了後もアクティブ状態を維持するように設定することで問題を回避できます:

/etc/systemd/system/NetworkManager-dispatcher.service.d/remain_after_exit.conf
[Service]
RemainAfterExit=yes

その後、変更した NetworkManager-dispatcher サービスを開始し、かつ有効化してください。

警告: RemainAfterExit 行を追加すると、ディスパッチャが閉じられなくなります。残念ながら、ディスパッチャは、スクリプトを再び実行する前に閉じなければなりません。先の設定により、ディスパッチャはタイムアウトしませんが、閉じられもしません。これは、スクリプトはブート毎に 1 度しか実行されないことを意味します。なので、タイムアウトが実際に問題を起こしていない限り、この行を追加しないでください。

ディスパッチャの例

タイムゾーンを自動的に設定する

tzupdateAUR をインストールし、以下の実行可能なスクリプトを作成してください:

/etc/NetworkManager/dispatcher.d/update-timezone.sh
#! /bin/bash
# Automatically set time zone when connected to the network
iface=$1
action=$2

if [[ $iface != lo && $action == up ]]; then
    tz=$(tzupdate -s 1 -p 2>/dev/null)
    if [[ -n $tz && -r /usr/share/zoneinfo/$tz ]]; then
	timedatectl set-timezone $tz
    fi
fi

条件式 $iface != lo は、必要に応じて特定のインターフェイスとマッチするように変更してください。

sshfs でリモートディレクトリをマウントする

このスクリプトは非常に制限された環境内で実行されるため、SSH エージェントに接続するためには SSH_AUTH_SOCK 変数をエクスポートする必要があります。これを行う方法はいくつかあります (詳細はこのメッセージを見てください)。以下の例は GNOME Keyring を使って動作し、キーリングがまだアンロックされていない場合はパスワードを要求します。NetworkManager がログイン時に自動的にネットワークに接続するような状況では、gnome-keyring がまだ開始されておらず、変数のエクスポートが失敗する可能性が高いです (そのために sleep コマンドがあります)。接続とマッチする UUID は、nmcli connection statusnmcli connection 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)
      # sleep 10
      SSH_AUTH_SOCK=$(find /tmp -maxdepth 1 -type s -user "$USER" -name 'ssh')
      export SSH_AUTH_SOCK
      su "$USER" -c "sshfs $REMOTE $LOCAL"
      ;;
    down)
      fusermount -u "$LOCAL"
      ;;
  esac
fi

SMB 共有をマウントする

SMB 共有は特定のネットワークや場所 (例えば自宅) でしか利用できないことがあります。ディスパッチャを使えば、現在の場所で利用可能な SMB 共有のみをマウントすることができます。

以下のスクリプトは、特定のネットワークに接続していることを確認し、それに応じて共有をマウントします:

/etc/NetworkManager/dispatcher.d/30-mount-smb.sh
#!/bin/sh

# 接続 UUID はターミナルで "nmcli connection show" を実行して確認してください。
# 全種類の NetworkManager 接続がサポートされています: 無線、VPN、有線など。
if [ "$2" = "up" ]; then
  if [ "$CONNECTION_UUID" = "uuid" ]; then
    mount /your/mount/point & 
    # add more shares as needed
  fi
fi

以下のスクリプトは、ソフトウェアが特定のネットワークからの切断を開始する前に、全ての SMB 共有をアンマウントします:

/etc/NetworkManager/dispatcher.d/pre-down.d/30-umount-smb.sh
#!/bin/sh

if [ "$CONNECTION_UUID" = "uuid" ]; then
  umount -a -l -t cifs
fi
ノート: このスクリプトは上記の通り pre-down.d サブディレクトリに配置してください。さもないと、接続状態が変わる度に毎回、全ての共有がアンマウントされてしまいます。

以下のスクリプトは、特定のネットワークから予期せずに切断されてしまった時に、全ての SMB 共有のアンマウントを試みます:

/etc/NetworkManager/dispatcher.d/40-umount-smb.sh
#!/bin/sh

if [ "$CONNECTION_UUID" = "uuid" ]; then
  if [ "$2" = "down" ]; then
    umount -a -l -t cifs
  fi
fi
ノート:
  • NetworkManager 0.9.8 から、pre-downdown のイベントはシャットダウン時や再起動時に実行されなくなりました。詳細はこのバグレポートを見てください。
  • 上記 2 つの umount スクリプトでは、マウントに実際にアクセスしているアプリケーションが 'ハング' してしまう傾向が依然としてあります。

代替案は、NFS#NetworkManager dispatcher を使う にあるスクリプトを使うことです:

/etc/NetworkManager/dispatcher.d/30-smb.sh
#!/bin/sh

# 接続 UUID はターミナルで "nmcli connection show" を実行して確認してください。
# 全種類の NetworkManager 接続がサポートされています: 無線、VPN、有線など。
WANTED_CON_UUID="CHANGE-ME-NOW-9c7eff15-010a-4b1c-a786-9b4efa218ba9"

if [ "$CONNECTION_UUID" = "$WANTED_CON_UUID" ]; then
    
    # スクリプトパラメータ $1: ネットワークインターフェイス名 (未使用)
    # スクリプトパラメータ $2: ディスパッチされたイベント
    
    case "$2" in
        "up")
            mount -a -t cifs
            ;;
        "down"|"pre-down"|"vpn-pre-down")
            umount -l -a -t cifs >/dev/null
            ;;
    esac
fi
ノート: このスクリプトは noauto オプションのマウントは無視します。これらのマウントをディスパッチャが管理できるようにするには、このオプションを取り除くか、auto を使ってください。

pre-down イベントをキャッチできるようにするために /etc/NetworkManager/dispatcher.d/pre-down/ 内にシンボリックリンクを作成してください:

# ln -s ../30-smb.sh /etc/NetworkManager/dispatcher.d/pre-down.d/30-smb.sh

NFS 共有をマウントする

NFS#NetworkManager dispatcher を使う を見てください。

ディスパッチャを使って、LAN ケーブルが挿入されているかに応じて Wi-Fi を自動的にオンオフする

アイディアとしては、LAN ケーブルが抜かれた時にのみ Wi-Fi をオンにし (例えば、ラップトップのドックから取り外された時など)、LAN ケーブルが挿入されたら Wi-Fi を自動的に無効化します。

以下のディスパッチャスクリプト[6]を作成してください。LAN_interface の部分はあなたの LAN インターフェイスに置き換えてください。

コンピュータがオンの時に LAN インターフェイスが接続され、コンピュータがオフの時に切断された場合のフェイルセーフがあることに注意してください。このフェイルセーフがないと、コンピュータがオンに戻っても Wi-Fi は依然としてオフであり、LAN インターフェイスが切断されていれば、ネットワーク接続が利用できなくなってしまいます。

/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
elif [ "$(nmcli -g GENERAL.STATE device show LAN_interface)" = "20 (unavailable)" ]; then
    nmcli radio wifi on
fi
ノート: nmcli を使えばインターフェイスの一覧を得られます。イーサネット (LAN) インターフェイスの名前は en で始まります (例: enp0s5)。

ディスパッチャを使って、ネットワーク接続が確立された後に VPN に接続する

この例では、特定の Wi-Fi ネットワークに接続した後に、以前定義された VPN 接続に自動的に接続したいと思います。最初にすべきことは、そのネットワークに接続した後にすることを定義するディスパッチャスクリプトを作成することです。

この記事またはセクションの正確性には問題があります。
理由: A scripting without iwgetid does work too and may be more reliable? (議論: en:Talk:NetworkManager#Fixes for automatic VPN dispatcher script) (議論: トーク:NetworkManager#)
ノート: このスクリプトでは iwgetid を使うために wireless_tools を必要とします。
/etc/NetworkManager/dispatcher.d/vpn-up
#!/bin/sh
VPN_NAME="NetworkManager に定義されている VPN 接続の名前"
ESSID="Wi-Fi ネットワークの ESSID (接続名ではない)"

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

全ての Wi-Fi ネットワークで VPN への接続を試みたい場合は、次の ESSID 定義を使用できます: ESSID=$(iwgetid -r)。スクリプトのパーミッションを適宜設定することを忘れないでください。

VPN の機密情報が保管される方法により、上記のスクリプトで VPN への接続しようとしても、NetworkManager-dispatcher.service が 'no valid VPN secrets' というエラーで失敗する場合があります。幸運なことに、スクリプトから VPN のパスワードにアクセスする方法は他にもあります。

1: それらの方法の1つでは、VPN 接続の設定ファイルを編集して、root からはアクセスできないキーリングではなく自身で機密情報を保存させるように NetworkManager を設定する必要があります: /etc/NetworkManager/system-connections/VPN接続の名前 を開き、password-flagssecret-flags1 から 0 に変更してください。

それだけではうまく行かない場合は、以下の内容で passwd-file を安全な場所にディスパッチャスクリプトと同じパーミッションと所有権で作成する必要があるかもしれません:

/path/to/passwd-file
vpn.secrets.password:パスワード

ファイルからパスワードを得られるようにするために、スクリプトは適宜変更する必要があります:

/etc/NetworkManager/dispatcher.d/vpn-up
#!/bin/sh
VPN_NAME="NetworkManager に定義されている VPN 接続の名前"
ESSID="Wi-Fi ネットワークの ESSID (接続名ではない)"

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

2: あるいは、password-flags を変更して、設定ファイル内に vpn-secrets セクションを追加してパスワードを直接書き込むという方法もあります:

 [vpn]
 ....
 password-flags=0
 
 [vpn-secrets]
 password=パスワード
ノート: NetworkManager の接続エディタを再び開き、VPN のパスワード/機密情報を保存し直す必要があるかもしれません。

ディスパッチャを使って、VPN プロバイダの接続時に IPv6 を無効化する

多くの商用 VPN プロバイダーは IPv4 のみをサポートしています。つまり、IPv6 のトラフィックは全て VPN をバイパスし、事実上、使い物にならなくなります。ディスパッチャを使って、VPN に接続されている時は全ての IPv6 トラフィックを無効化することで、この問題を回避できます。

/etc/NetworkManager/dispatcher.d/10-vpn-ipv6
#!/bin/sh

case "$2" in
	vpn-up)
		echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6
		;;
	vpn-down)
		echo 0 > /proc/sys/net/ipv6/conf/all/disable_ipv6
		;;
esac

代替案としては、ディスパッチャを使って、VPN 接続に使用しているデバイスの IPv6 モードを一時的に link-local に設定することもできます。これにより、NetworkManager が、IPv6 が無効化されていることについて警告をログに大量出力することを防ぐことができます。このスクリプトは、複数のデバイスや接続が IPv6 接続を提供している場合、動作しません。しかし、複数のデバイスを反復させることで応用することができます。注意点として、接続に対して何らかの変更が加えられた場合 (nmcli(1)デスクトップ環境の機能を使った場合)、そのデバイスに対する接続全体が再適用され、IPv6 が再有効化されます (その接続で有効化されている場合)。

/etc/NetworkManager/dispatcher.d/10-vpn-ipv6
#!/bin/sh

case "$2" in
	vpn-up)
		nmcli device modify "${DEVICE_IFACE}" ipv6.method link-local
		;;
	vpn-down)
		nmcli device reapply "${DEVICE_IFACE}"
		;;
esac

OpenNTPD

OpenNTPD#NetworkManager dispatcher を使う を参照してください。

systemd-timesyncd で DHCP 経由で受信した NTP サーバを動的に設定する

異なるネットワーク間 (例: 会社の LAN、自宅の Wi-Fi、その他の様々な Wi-Fi) でローミングする場合、timesyncd によって使用されている NTP サーバを DHCP によって提供されているものに設定したい場合があります。ただし、NetworkManager 自体は systemd-timesyncd と通信して NTP サーバを設定することはできません。

ディスパッチャを使うことで、この問題を回避できます。

systemd-timesyncd の設定ようのオーバーレイディレクトリ /etc/systemd/timesyncd.conf.d作成してください (まだ存在していない場合)。/etc/NetworkManager/dispatcher.d 内に以下を追加してください:

/etc/NetworkManager/dispatcher.d/10-update-timesyncd
#!/bin/sh

[ -z "$CONNECTION_UUID" ] && exit 0
INTERFACE="$1"
ACTION="$2"

case $ACTION in
up | dhcp4-change | dhcp6-change)
	[ -n "$DHCP4_NTP_SERVERS" ] || exit 0
	mkdir -p /etc/systemd/timesyncd.conf.d
	cat <<-THE_END >"/etc/systemd/timesyncd.conf.d/${CONNECTION_UUID}.conf"
		[Time]
		NTP=$DHCP4_NTP_SERVERS
	THE_END
	systemctl restart systemd-timesyncd.service
	;;
down)
	rm -f "/etc/systemd/timesyncd.conf.d/${CONNECTION_UUID}.conf"
	systemctl restart systemd-timesyncd.service
	;;
esac

NetworkManager が新しいネットワーク接続を設定する (ACTION=up) か、既存の接続の更新を取得する (ACTION=dhcp4-change または ACTION=dhcp6-change) 度に、接続データに NTP サーバ (DHCP4_NTP_SERVERS) に関する情報が含まれていると、接続固有のオーバーレイ設定ファイルが /etc/systemd/timesyncd.conf.d に書き込まれ、このファイルには、提供された NTP サーバ (1台または複数) の情報が記述されます。提供された NTP サーバが含まれます。接続が停止される (ACTION=down) と、接続固有のオーバーレイファイルは削除されます。systemd-timesyncd の設定が変更されるたびに、サービスは再起動され、更新された設定を取得します。NetworkManager で 2つ以上の接続を並行して管理する場合、updhcp4-changedhcp6-change、そして down アクションが任意の順序で来るかもしれないので、設定内の異なる NTP サーバ名が上書きされないように接続固有の設定ファイルを意図的に使用しています。

テスト

NetworkManager アプレットはログイン時にロードされるようになっているので、ほとんどのユーザにとって追加の設定は必要ないはずです。以前のネットワーク設定を無効化し、ネットワークから切断されているならば、NetworkManager が動作するかどうかをテストできます。まず始めに、NetworkManager.service起動してください。

一部のアプレットは、NetworkManager アプレットをアプリケーションメニューからロードできるようにするために、.desktop ファイルを提供しています。デスクトップファイルが提供されていない場合は、アプレットを使用するためのコマンドを見つけるか、アプレットをロードするために一度ログアウトして再度ログインする必要があります。アプレットが開始されれば、DHCP サーバを使って自動設定によるネットワーク接続のポーリングが開始されるでしょう。

awesome などの XDG 非互換のウィンドウマネージャで GNOME のアプレットを開始するには:

nm-applet --sm-disable &

固定 IP アドレスの場合は、NetworkManager にそのことを伝えなければなりません。手順としては通常、アプレットを右クリックし、'接続を編集する' ('Edit Connections') などのような項目を選択します。

ヒントとテクニック

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

デフォルトでは、NetworkManager はパスワードを平文で /etc/NetworkManager/system-connections/ 内の設定ファイルに保存します。保存されているパスワードを表示するには、以下のコマンドを使ってください:

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

パスワードは root ユーザからファイルシステムでアクセス可能であり、さらに GUI (例: nm-applet) を通して設定にアクセスできるユーザからもアクセス可能です。

パスワードは、平文ではなく、キーリングの中で暗号化された形で保存するのが望ましいです。しかし、これの欠点は、それぞれのユーザで接続をセットアップしなけれならないことです。

キーリングを読み書きするために、利用可能なシークレットエージェントが存在していなければなりません。いかのどれかを使用できます:

  • nmcli--ask オプションを使う。
  • #フロントエンド に挙げられているグラフィカルインターフェイス

シークレットエージェントが利用できないと、no secrets: No agents were available for this request. というエラーで認証が失敗します。

GNOME Keyring を使う

以下の方法を使うには、GNOME Keyring のキーリングデーモンが開始されていて、キーリングがアンロックされている必要があります。

さらに、全ユーザのパスワードを保存しないように NetworkManager を設定する必要があります。GNOME の network-manager-applet を使って、ターミナルから nm-connection-editor を実行し、ネットワーク接続を選択し、編集 (Edit) をクリックし、Wi-Fi セキュリティー (Wi-Fi Security) タブを選択し、パスワード入力欄の右のアイコンをクリックして、このユーザーのパスワードのみ保存する (Store the password only for this user) にチェックを入れてください。

KDE Wallet を使う

KDE の plasma-nm を使う場合、アプレットをクリックし、右上の 設定 アイコンをクリックし、ネットワーク接続を選択し、一般設定 (General configuration) タブを選択し、すべてのユーザはこのネットワークに接続可能 (All users may connect to this network) のチェックを外してください。このオプションにチェックが入っていると、たとえキーリングデーモンが実行されていたとしても、パスワードが平文で保存されてしまいます。

以前このオプションにチェックが入っていて、後にチェックを外した場合、ファイルからパスワードを消すために reset オプションを使用する必要がある場合があります。あるいは、接続を削除し、再度セットアップしてください。

Wi-Fi でインターネット接続を共有する

数クリックでインターネット接続 (例: 3G、有線) を共有することができます。ただし、ファイアウォールはインターネット共有を妨害する場合があることに注意してください。

AP モードをサポートする Wi-Fi カードが必要になります。詳細は ソフトウェアアクセスポイント#Wi-Fi デバイスが AP モードをサポートしていること を見てください。

接続を共有できるようにするために dnsmasq パッケージをインストールしてください。NetworkManager は (dnsmasq.service とは独立に) 独自の dnsmasq インスタンスを DHCP サーバとして開始することに注意してください。これに関する注意事項は #dnsmasq を見てください。

共有された接続を作成してください:

  • アプレットをクリックし、新規 Wi-Fi ネットワークを作成 (Create new wireless network) を選んでください。
  • ウィザードに従ってください (WPA2 以上を選んでください。パスワードは 8 文字以上にしてください。さもないと失敗します)。
  • Wi-Fi モードとしてホットスポットかアドホックを選択してください。

これで、次回必要になるときのために接続は保存されます。

ノート: Android はアドホックネットワークへの接続をサポートしていません。Android と接続を共有するには、インフラストラクチャモードを使用してください (つまり、Wi-Fi モードを "ホットスポット" に設定する)。

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

シナリオ: デバイスが Wi-Fi 経由でインターネットに接続されていて、イーサネットで他のデバイスとインターネット接続を共有したいと考えている場合。

要件:

  • 接続を共有できるようにするために dnsmasq パッケージと nm-connection-editor パッケージをインストールしてください。NetworkManager は (dnsmasq.service とは独立に) 独自の dnsmasq インスタンスを DHCP サーバとして開始することに注意してください。これに関する注意事項は #dnsmasq を見てください。
  • インターネットに接続されたデバイスとその他のデバイスが適切なイーサネットケーブルで接続されていること (これは通常、間をクロスオーバーケーブルやスイッチで繋ぐことを意味します)。
  • インターネット共有がファイアウォールによってブロックされていないこと。

手順:

  • ターミナルから nm-connection-editor を実行してください。
  • 新しいイーサネット接続を追加してください。
  • 何かわかりやすい名前を付けてください。例えば "Shared Internet"。
  • "IPv4 設定" ("IPv4 Settings") を開いてください。
  • "メソッド:" ("Method:") で "他のコンピューターへ共有" ("Shared to other computers") を選択してください。
  • 保存

これで、NetworkManager の有線接続に "Shared Internet" という新しいオプションができたはずです。

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

この記事またはセクションは情報が古くなっています。
理由: nm-tool は NetworkManager から削除されました [7]。代わりに nmcli を使用するべきです。 (Discuss)

一部の cron ジョブではネットワークが立ち上がっている必要があり、ネットワークが落ちている状態でそのようなジョブを実行したくない場合があります。そうするには、NetworkManager の nm-tool にクエリして、ネットワークの状態をチェックする if テストを追加してください。このテストは、何らかのインターフェイスが立ち上がっていれば成功し、インターフェイスが全て落ちている場合は失敗します。これは、ある時は有線接続されていて、ある時は無線で、またある時はネットワークから切断されているようなノート PC で便利です。

if [ $(nm-tool|grep State|cut -f2 -d' ') == "connected" ]; then
    # ネットワークがオンラインの時に実行したいコード
else
    # ネットワークがオフラインの時に実行したいコード (注記: この部分と上の else は任意です)
fi

これは、例えば F-Prot ウイルススキャナのシグネチャを更新するために fpupdate を実行する cron.hourly で便利です。また、nm-tool の出力の様々な部分を使えば、ネットワークを識別することもできます。例えば、アクティブなワイヤレスネットワークにはアスタリスクが付くので、ネットワーク名を grep して、その後でアスタリスクを grep しますs。

ブート時にシークレットを使ってネットワークに接続する

デフォルトでは、NetworkManager はシークレットを要求するネットワークにはブート時に自動的に接続しません。NetworkManager では、そのようなネットワークは、そのネットワークをデフォルトで使用するユーザがログインした後にのみ、接続されるからです。この動作を変更するには、以下を行ってください:

  1. パネルの nm-applet のアイコンを右クリックし、"接続を編集する" を選択し、Wi-Fi タブを開いてください。
  2. 使いたい接続を選択し、編集ボタンをクリックしてください。
  3. “Connect Automatically” と “Available to all users” のボックスにチェックを入れてください。
  4. 加えて、"Wi-Fi Security" タブで "Store password for all users (not encrypted)" が選択されていることを確認してください。

ログアウトし、ログインし直せば完了です。

OpenConnect で KWallet 内のパスワードを使う

接続時にユーザ名とパスワードを入力することはできますが、plasma-nm 0.9.3.2-1 から、KWallet から直接 OpenConnect のユーザ名とパスワードを取得することが可能になりました。

"KDE Wallet Manager" を開き、"Network Management|Maps" で対象の OpenConnect VPN 接続を見つけてください。"Show values" をクリックし、認証情報を以下の形式で "VpnSecrets" に入力してください (ユーザ名パスワード の部分は適宜置き換えてください):

form:main:username%SEP%ユーザ名%SEP%form:main:password%SEP%パスワード

次回の接続時に、ユーザ名とパスワードが "VPN secrets" ダイアログボックスに入力されるはずです。

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

NetworkManager で特定のデバイスを無視し、そのデバイスに対してはアドレスとルート (route) の設定を試みないようにすることが望ましい場合があります。/etc/NetworkManager/conf.d/unmanaged.conf で以下のオプションを使うことで、MAC またはインターフェイス名によって特定のデバイスを無視することができます:

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

ファイルを編集したら、nmcli general reload を root として実行してください。その後、NetworkManager があなたの設定を変更することなく、インターフェイスを構成できるようになっているはずです。

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

ノート: (安定した) リンク接続[8]や、MAC アドレスに基づいてデバイスを制限したりネットワーク容量に制限を設けているネットワークへの接続には、MAC アドレスのランダム化を無効化する必要がある場合があります。

MAC アドレスのランダム化は、本物の MAC アドレスをネットワークに開示しないことで、プライバシーを向上させることができます。

NetworkManager は2種類の MAC アドレスランダム化をサポートしています: スキャン中のランダム化とネットワーク接続におけるランダム化です。どちらのモードも、/etc/NetworkManager/NetworkManager.conf を変更するか、/etc/NetworkManager/conf.d/ 内に別の設定ファイルを作成することで設定できます (前者は NetworkManager によって上書きされる場合があるので、後者が推奨されます)。

Wi-Fi スキャン中のランダム化はデフォルトで有効化されていますが、以下の行を /etc/NetworkManager/NetworkManager.conf/etc/NetworkManager/conf.d 内の別の設定ファイルに追加することで無効化することができます:

/etc/NetworkManager/conf.d/wifi_rand_mac.conf
[device]
wifi.scan-rand-mac-address=no

ネットワーク接続における MAC アドレスランダム化は、無線インターフェイスとイーサネットインターフェイスで別々のモードを設定することができます。モードに関する詳細は GNOME のブログ記事を参照してください。

MAC アドレスランダム化に関して、最も重要なモードは stablerandom です。stable は、新しいネットワークに接続した時にランダムな MAC アドレスを生成し、そのネットワークと MAC アドレスを永続的に関連付けます。これはつまり、そのネットワークに接続すると毎回同じ MAC アドレスが使用されることを意味します。それとは対照的に、random は、ネットワークに接続する度に、そのネットワークが新しかろうが既知であろうが、新しい MAC アドレスを生成します。/etc/NetworkManager/conf.d 内に設定ファイルを追加してこの MAC アドレスランダム化を設定することができます:

/etc/NetworkManager/conf.d/wifi_rand_mac.conf
[device-mac-randomization]
# "yes" は既にスキャンにおけるデフォルトです。
wifi.scan-rand-mac-address=yes
 
[connection-mac-randomization]
# 全てのイーサネット接続に対して MAC をランダム化する
ethernet.cloned-mac-address=random
# 各 Wi-Fi に対してランダムな MAC を生成し、それらを関連付ける。
wifi.cloned-mac-address=stable

詳細は GNOME ブログ記事を参照してください。

IPv6 プライバシー拡張を有効にする

IPv6#NetworkManager を参照してください。

接続ごとに一意の DUID を設定する

DHCPv6 Unique Identifier (DUID) は、DHCPv6 クライアントが DHCPv6 サーバに対して自身を識別するために使用する値です。NetworkManager は3種類の DUID をサポートしています:

  • DUID-UUID (RFC 6355): Universally Unique IDentifier (UUID) から生成されます。
  • DUID-LL (RFC 3315): リンク層アドレス (別名 MAC アドレス) から生成されます。
  • DUID-LLT (RFC 3315): リンク層アドレスとタイムスタンプから生成されます。

NetworkManager の内部 DHCP クライアントが使用されている場合 (デフォルト)、machine-id (/etc/machine-id) から生成されたグローバルで永続的な DUID-UUID で自身を識別します。これは、すべての接続が同じ UUID を共有することを意味し、プライバシーの侵害となる可能性があります。

幸いなことに、NetworkManager は、接続の stable-id とホストごとの一意のキーから派生した、接続ごとの一意の DUID を提供できます。/etc/NetworkManager/conf.d 内に次の設定を追加することで、これを有効にすることができます:

/etc/NetworkManager/conf.d/duid.conf
[connection]
ipv6.dhcp-duid=stable-uuid

stable-ll および stable-llt の値もサポートされています。詳細については、nm-settings(5) § ipv6 settingdhcp-duid の説明を参照してください。

有線接続の操作

NetworkManager は、デフォルトで、有線イーサネット接続を検出するたびにそれぞれに対して接続プロファイルを生成します。接続を生成する時点では、利用可能なイーサネットアダプターがさらにあるかどうかはわかりません。そのため、最初の有線接続は "有線接続 1" となります。no-auto-default (NetworkManager.conf(5) を参照) を設定するか、単に削除することで、この接続を生成しないようにできます。そうすれば、NetworkManager はこのインターフェイスの接続を二度と生成しないように記憶します。

また、接続を編集 (およびディスクに永続化) したり、削除したりすることもできます。NetworkManager は新しい接続を再生成することはありません。それから、名前を好きなものに変更することができます。この作業には nm-connection-editor などを使うことができます。

Wi-Fi バックエンドとして iwd を使用する

ノート:
  • iwd.service を有効化したり、iwd を手動で構成したりしないでください。NetworkManager は自身で iwd を開始し、管理します。
  • iwd に切り替える前に、既知の問題を考慮してください。

実験的な iwd バックエンドを有効化するには、iwdインストールしてから、以下の設定ファイルを作成してください:

/etc/NetworkManager/conf.d/wifi_backend.conf
[device]
wifi.backend=iwd

または、networkmanager-iwdAUR をインストールすることもできます。これは、iwd のみで動作する NetworkManager をビルドするように設定された修正パッケージです。主な違いは、iwd が必要であり、wpa_supplicant はビルド後にアンインストールできることです。

ノート: iwd に切り替えた後、既存の NetworkManager ネットワークプロファイルを変換する必要がある場合があります。

ネットワーク名前空間内で実行する

ネットワーク名前空間内で NetworkManager を実行する場合 (たとえば、選択したアプリケーションで使用する必要がある特定のデバイスを管理する場合)、その名前空間に移動させる前にデバイスを落としてください:

$ ip link set dev MY_DEVICE down
$ ip link set dev MY_DEVICE netns MY_NAMESPACE
$ ip netns exec MY_NAMESPACE NetworkManager
...
$ ip netns exec MY_NAMESPACE killall NetworkManager

そうしないと、NetworkManager は後で device is strictly unmanaged エラーにより接続の確立に失敗します。

VPN に自動的に接続する

NetworkManager は、インターネットへの接続時に VPN に自動的に接続するように (ネットワーク毎に) 設定できます。VPN 接続自体は、GNOME の NetworkManager フロントエンドで追加できますが、VPN を自動的に使用するようにするには、nmcli を使用しなければなりません。他のフロントエンドにはこの制限はない場合があります。

まず、対象の VPN が全ユーザで利用可能であることを確認してください。GNOME では、details タブ内のあるボックスにチェックを入れれば良いです。Identity タブのパスワード入力欄内の右側にあるアイコンをクリックし、Store the password for all users を選択してください。

そして、VPN 接続の UUID を見つけ、インターネット接続の connection.secondaries にその UUID を追加してください:

# UUID=$(nmcli --get-values connection.uuid connection show VPN接続の名前)
# nmcli connection modify インターネット接続の名前 connection.secondaries "$UUID"

NetworkManager を再起動して、設定したインターネット接続に接続したら、自動的に VPN に接続されるようになっているはずです。

トラブルシューティング

セキュアな Wi-Fi ネットワークのパスワードプロンプトが表示されない

セキュアな Wi-Fi ネットワークに接続しようとすると、パスワードのプロンプトが表示されず、接続が確立されません。これは、キーリングのパッケージがインストールされていない時に起こります。簡単な解決法は、gnome-keyring をインストールすることです。パスワードを暗号化して保存したい場合は、GNOME Keyring に書かれてある指示に従い、gnome-keyring-daemon をセットアップしてください。

Network management disabled

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

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

内蔵 DHCP クライアントに関する問題

内臓の DHCP クライアントを使用すると IP アドレスの取得に問題が発生する場合、他の DHCP クライアントを使用することを検討してください (手順は #DHCP クライアント を見てください)。この回避策は、eduroam などの巨大なワイヤレスネットワークにおける問題を解決するかもしれません。

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 インターフェイス コマンドを使って確認できます。

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

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

ノートパソコンで WLAN をオフにする

時々、ノートパソコンに付いているスイッチを使って Wi-Fi アダプタを無効化し、再び有効化しようとすると NetworkManager が機能しなくなることがあります。これは、しばしば rfkill の問題であることがあります。ドライバが rfkill にワイヤレスアダプタの状態について通知しているかどうか確認するには、以下のコマンドを使ってください:

$ watch -n1 rfkill list all

アダプタを切り替えた後にどれかの識別子がブロックされたままになる場合、手動でアンロックしてみることができます (X の部分は、上記のコマンドで得られた識別子の番号です):

# rfkill event unblock X

固定 IP アドレスの設定が DHCP に戻る

とある未解決のバグにより、デフォルトの接続を固定 IP アドレスに変更すると、nm-applet が設定の変更を適切に保存せずに、自動 DHCP に戻ってしまいます。

この問題を回避するには、nm-applet でデフォルトの設定 (例: "Auto eth0") を編集し、接続名を変更 (例: "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 NetworkManager Applet が、ダイアログスクリプトが /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/

これは、他の NetworkManager VPN プラグインでも行う必要がある場合がありますが、上記が最も一般的です。

検出されてはいるのにヨーロッパのワイヤレスネットワークに接続できない

WLAN チップにはデフォルトの規制範囲が設定されています。アクセスポイントがその規制内で動作しない場合、そのネットワークに接続することはできません。これは簡単に解決できます:

  1. wireless-regdbインストールしてください。
  2. /etc/conf.d/wireless-regdom で適切な国名コードをアンコメントしてください。
  3. システムを再起動してください。この設定はブート時にしか読み込まれないからです。

ブート時の VPN への自動接続が機能しない

この問題は、システム (つまり、root ユーザとして動作している NetworkManager) が VPN 接続を確立しようと試みたが、パスワードが特定のユーザの GNOME Keyring 内に保存されているためにアクセスできなかった場合に発生します。

解決策は、#ディスパッチャを使って、ネットワーク接続が確立された後に VPN に接続する の手順 2 で説明されている通りに、VPN のパスワードを平文で保存することです。

nm-applet GUI で新しい "auto-connect VPN" オプションを使用している場合は、自動接続するために 手順 1 で説明されているディスパッチャを使用する必要はありません。

Systemd のボトルネック

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

定期的なネットワーク接続断、遅延、パケットロス (WiFi)

NetworkManager は2分ごとにスキャンを行います。

一部の WiFi ドライバは、接続/アソシエーション中にベースステーションのスキャンを行うと問題が発生します。症状としては、VPN 接続断/再接続、パケットロス、ウェブページのロードに失敗してリフレッシュすると良くなるなどがあります。

journalctl -f を root として実行すると、スキャンが行われていることがわかります。以下のようなメッセージが定期的にログに現れます:

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

ローミングが重要でないならば、WiFi 接続プロファイルでアクセスポイントの BSSID をロックすることにより、定期的なスキャンの挙動を無効化することができます。

Lenovo ラップトップ (IdeaPad、Legion など) で Wi-Fi をオンにできない

これは、Wi-Fi ドライバがソフトブロックを誤って報告することによる、一部の Lenovo モデルにおける ideapad_laptop モジュールの問題です。カードは依然として netctl で操作できますが、NetworkManager などのマネージャーは機能しません。この問題が発生しているかどうかを確認するには、ハードウェアのスイッチをオンオフしたあとで rfkill list の出力を確認し、ソフトブロックされ続けるかどうか確認してください。

この記事またはセクションの正確性には問題があります。
理由: rfkill の問題を解決するには、rfkill.default_staterfkill.master_switch_mode を使用してみてください (kernel-parameters.html を参照))。 (議論: トーク:NetworkManager#)

ideapad_laptop モジュールをアンロードすれば、この問題は解決するはずです。(警告: これにより、ラップトップのキーボードとタッチパッドも無効になる可能性があります!)

ホスト名の送信をオフにする

NetworkManager はデフォルトでホスト名を DHCP サーバに送信します。ホスト名の送信は、グローバルには無効化できず、接続毎にしか無効化できません (Issue #584)。

特定の接続で DHCP サーバへのホスト名の送信を無効化するには、以下をネットワークの設定ファイルに追加してください:

/etc/NetworkManager/system-connections/your_connection_file
...
[ipv4]
dhcp-send-hostname=false
...
[ipv6]
dhcp-send-hostname=false
...

nm-applet が i3wm で消える

通知に xfce4-notifyd.service を使用する場合は、そのユニットを編集して、以下を追加する必要があります:

/etc/systemd/user/xfce4-notifyd.service.d/display_env.conf
[Service]
Environment="DISPLAY=:0.0"

デーモンをロードし直したら、xfce4-notifyd.service再起動してください。i3 を終了し、再び起動すると、アプレットがトレイに表示されているはずです。

Unit dbus-org.freedesktop.resolve1.service not found

systemd-resolved.service が開始されていない場合、NetworkManager は D-Bus を使用して開始しようとし、失敗します:

dbus-daemon[991]: [system] Activating via systemd: service name='org.freedesktop.resolve1' unit='dbus-org.freedesktop.resolve1.service' requested by ':1.23' (uid=0 pid=1012 comm="/usr/bin/NetworkManager --no-daemon ")
dbus-daemon[991]: [system] Activation via systemd failed for unit 'dbus-org.freedesktop.resolve1.service': Unit dbus-org.freedesktop.resolve1.service not found.
dbus-daemon[991]: [system] Activating via systemd: service name='org.freedesktop.resolve1' unit='dbus-org.freedesktop.resolve1.service' requested by ':1.23' (uid=0 pid=1012 comm="/usr/bin/NetworkManager --no-daemon ")

これは、NetworkManager が NetworkManager.conf(5)main.dns= 設定に関係なく、DNS 情報を systemd-resolved に送信しようとするためです。[9]

これは、/etc/NetworkManager/conf.d/ 内の設定ファイルで無効にできます:

/etc/NetworkManager/conf.d/no-systemd-resolved.conf
[main]
systemd-resolved=false

FS#62138 を参照してください。

Secrets were required, but not provided

ネットワークに接続しようとして以下のエラーが発生する場合:

$ nmcli device wifi connect SSID password パスワード
Error: Connection activation failed: (7) Secrets were required, but not provided

このエラーの原因となりうるものはたくさんあり、journal を読む必要があります (-u NetworkManager で出力をフィルタしてください)。例えば、接続の確立に時間がかかりすぎると、NetworkManager はパスワードが正しくなかったと結論づけます:

NetworkManager[1372]: <warn>  [1643991888.3808] device (wlan0): Activation: (wifi) association took too long
NetworkManager[1372]: <info>  [1643991888.3809] device (wlan0): state change: config -> need-auth (reason 'none', sys-iface-state: 'managed')
NetworkManager[1372]: <warn>  [1643991888.3838] device (wlan0): Activation: (wifi) asking for new secrets

接続プロファイルを削除し、新しいプロファイルを作成してみてください:

$ nmcli connection delete SSID
$ nmcli device wifi connect SSID password パスワード

また、MAC アドレスランダム化を無効化してみるのも良いでしょう:

/etc/NetworkManager/conf.d/wifi_rand_mac.conf
[device]
wifi.scan-rand-mac-address=no

iwd での WPA Enterprise 接続

iwd バックエンドと NetworkManager で 'eduroam' などの WPA Enterprise ネットワークに接続しようとした際に、NetworkManager sで以下のエラーが発生します:

 Connection 'eduroam' is not avialable on device wlan0 because profile is not compatible with device (802.1x connections must have IWD provisioning files)

NetworkManager は WPA Enterprise ネットワークを設定できないことが原因です。なので、iwd#WPA Enterprise で説明されているように iwd の設定ファイル /var/lib/iwd/essid.8021x を使って設定する必要があります。

Failed to request VPN secrets

以下のエラーが発生する場合:

Failed to request VPN secrets #1: No agents were available for this request.

パスワードが空であるか、PolicyKit のパーミッションをセットアップする必要があるかのどちらかです。

OpenSSL の "ca md too weak" エラーで OpenVPN の接続に失敗する

openssl がバージョン3に更新されたため、レガシーな暗号化アルゴリズムで生成された証明書はデフォルトで拒否されます。このような設定で networkmanager-openvpn を使用しようとすると、ログに次のエラーが記録される可能性があります:

nm-openvpn[14359]: OpenSSL: error:0A00018E:SSL routines::ca md too weak
nm-openvpn[14359]: Cannot load certificate file /home/archie/.local/share/networkmanagement/certificates/my_issued_cert.crt
nm-openvpn[14359]: Exiting due to fatal error

正しいアプローチは、OpenVPN サーバの管理者に、より安全な証明書を生成して再発行してもらうことです。ただし、当面の回避策として、OpenVPN には tls-cipher "DEFAULT:@SECLEVEL=0" が必要です。この設定は、プラグイン GUI からでは無理かもしれませんが、nmcli からなら可能です。これとは別に、OpenSSL でレガシーなプロバイダを有効化する必要もあります。

まず、以下のコマンドの出力から、問題のある VPN 接続の名前を取得してください:

$ nmcli connection show

接続の名前は vpn.example.com であると仮定します。以下のように nmcli を使ってください:

$ nmcli connection modify vpn.example.com +vpn.data tls-cipher=DEFAULT:@SECLEVEL=0

変更は即座に /etc/NetworkManager/system-connections/vpn.example.com.nmconnection に反映されるはずです。

OpenSSL に関しては、OpenSSL wiki で説明されている通りに /etc/ssl/openssl.cnf を編集してください。

具体的には、[provider_sect] セクションの最後に legacy = legacy_sect を追加してください。[default_sect]activate = 1 のコメントを外してください。最後に、activate = 1 という行も含む新しいセクション [legacy_sect] を追加してください。他のほとんどの既存の構成セクションを除外すると、最終結果は次のようになります:

/etc/ssl/openssl.cnf
openssl_conf = openssl_init

[openssl_init]
providers = provider_sect

[provider_sect]
default = default_sect
legacy = legacy_sect

[default_sect]
activate = 1

[legacy_sect]
activate = 1

最後に、NetworkManager.service再起動して、新しい OpenSSL 設定を有効化してください。

OpenSSL の "unsupported protocol" エラーで WPA Enterprise の接続の認証に失敗する

openssl がバージョン 3 に更新されたため、デフォルトで SSL 3、TLS 1.0、TLS 1.1、そして DTLS 1.0 はセキュリティレベル 0 でのみ動作するようになりました。それよりも低い標準しかサポートしていない Wi-Fi での認証は、ログに以下のエラーを吐いて失敗します:

wpa_supplicant[3320]: SSL: SSL3 alert: write (local SSL3 detected an error):fatal:protocol version
wpa_supplicant[3320]: OpenSSL: openssl_handshake - SSL_connect error:0A000102:SSL routines::unsupported protocol
wpa_supplicant[3320]: wlp3s0: CTRL-EVENT-EAP-FAILURE EAP authentication failed

正しいアプローチは、WiFi の管理者に TLS 1.3 をサポートしてもらい、さらにオプションで TLS 1.0/1.1、DTLS 1.0、SSL 1-3 を含む低いセキュリティ標準のサポートを落としてもらうことです。しかし、当面の回避策として、TLS 1.0 をデフォルトで許可する方法は複数あります。一つは、手動で OpenSSL にパッチを当てるか、破壊的な変更をもとに戻すことです ([10])。これは、OpenSSL レベル 1 を使用する他の全てのプログラムのセキュリティも低下してしまうため、推奨されません。代わりに、(BBS#286417 で説明されているように) wpa_supplicant によって使用されるレベルを直接設定することができます。問題のある接続の [802-1x] セクションで phase1-auth-flags=32 を設定することで、その接続のみを変更できます。これは GUI からは無理かもしれませんが、nmcli でなら可能です。

まず、以下のコマンドの出力から、問題のある Wi-Fi 接続の名前を手に入れてください:

$ nmcli connection show

接続名は Example WiFi であると仮定します。以下のように nmcli を使用してください:

$ nmcli connection modify Example\ WiFi 802-1x.phase1-auth-flags 32

変更は即座に /etc/NetworkManager/system-connections/Example\ WiFi.nmconnection に反映されるはずです。

最後に、NetworkManager.service再起動して、新しい OpenSSL の設定を有効化してください。

参照

翻訳ステータス: このページは en:NetworkManager の翻訳バージョンです。最後の翻訳日は 2024-10-10 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。