「NetworkManager」の版間の差分
(→DHCP client: 翻訳を修正) |
(同期) |
||
(4人の利用者による、間の116版が非表示) | |||
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}} |
||
− | [ |
+ | [https://networkmanager.dev/ NetworkManager] は、システムがネットワークに自動的に接続できるようにするためにネットワークの検出と設定の機能を提供するプログラムです。NetworkManager の機能は無線ネットワークと有線ネットワークの両方で有用です。無線ネットワークでは、NetworkManager は既知の無線ネットワークを優先するようになっており、最も信頼性のあるネットワークに切り替える機能もあります。NetworkManager 対応のアプリケーションはオンラインモードとオフラインモードの切り替えが可能です。また、NetworkManager は無線接続よりも有線接続を優先するようになっており、モデム接続と特定の種類の VPN に対応しています。NetworkManager は元々 Red Hat によって開発されていましたが、現在では [[GNOME]] プロジェクトによってホストされています。 |
− | {{Warning| |
+ | {{Warning|デフォルトでは、機密情報 (Wi-Fi のパスワードなど) は root ユーザからファイルシステムでアクセス可能であり、さらに GUI (''nm-applet'' など) を介して設定にアクセスできるユーザからもアクセス可能です。[[#Wi-Fi パスワードの暗号化]] を参照してください。}} |
== インストール == |
== インストール == |
||
− | NetworkManager は |
+ | NetworkManager は {{Pkg|networkmanager}} パッケージで[[インストール]]できます。このパッケージには、デーモン、コマンドラインインターフェイス ({{ic|nmcli}})、そして curses ベースのインターフェイス ({{ic|nmtui}}) が含まれています。 |
− | === NetworkManager を有効 |
+ | === NetworkManager を有効化する === |
− | インストール |
+ | インストールしたら、{{ic|NetworkManager.service}} を[[起動/有効化]]する必要があります。NetworkManager デーモンが起動すると、既に構成されている利用可能な "システム接続" に自動的に接続します。"ユーザ接続" や未構成の接続を設定したり接続したりするには、''nmcli'' やアプレットが必要です。 |
+ | {{Note| |
||
− | === 追加のインターフェース === |
||
+ | * ネットワークを設定しようとするサービスが他に動いていないことを確認しなければなりません。事実、ネットワーキングサービスが複数動いていると、互いに干渉してしまいます。現在動作中のサービスの完全なリストは {{ic|1=systemctl --type=service}} で見られます。衝突の恐れのあるサービスは[[停止]]してください。NetworkManager サービスを有効化する方法は [[#設定]] を見てください。 |
||
+ | * [[systemd-resolved]] が[[起動]]されていない場合、エラーメッセージがログに溢れ始めます。詳細は [[#Unit dbus-org.freedesktop.resolve1.service not found]] を見てください。 |
||
+ | }} |
||
− | + | === 追加のインターフェイス === |
|
+ | |||
− | * {{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]] |
+ | NetworkManager 1.16 から [[WireGuard]] のネイティブなサポートが追加されました。必要なのは {{ic|wireguard}} カーネルモジュールだけです。詳細は [https://blogs.gnome.org/thaller/2019/03/15/wireguard-in-networkmanager/ NetworkManager のブログ記事の WireGuard] を見てください。 |
− | + | その他の VPN タイプに対するサポートはプラグインなシステムをベースとしています。以下のパッケージで提供されています: |
|
− | * {{Pkg|networkmanager-openconnect}} |
+ | * {{Pkg|networkmanager-openconnect}}: [[OpenConnect]] 用 |
− | * {{Pkg|networkmanager-openvpn}} |
+ | * {{Pkg|networkmanager-openvpn}}: [[OpenVPN]] 用 |
− | * {{Pkg|networkmanager-pptp}} |
+ | * {{Pkg|networkmanager-pptp}}: [[PPTP クライアント]]用 |
− | * {{Pkg|networkmanager- |
+ | * {{Pkg|networkmanager-strongswan}}: [[strongSwan]] 用 |
− | * {{Pkg|networkmanager- |
+ | * {{Pkg|networkmanager-vpnc}} |
− | * {{AUR|networkmanager-fortisslvpn |
+ | * {{AUR|networkmanager-fortisslvpn}} |
* {{AUR|networkmanager-iodine-git}} |
* {{AUR|networkmanager-iodine-git}} |
||
* {{AUR|networkmanager-libreswan}} |
* {{AUR|networkmanager-libreswan}} |
||
− | * {{ |
+ | * {{Pkg|networkmanager-l2tp}} |
* {{AUR|networkmanager-ssh-git}} |
* {{AUR|networkmanager-ssh-git}} |
||
* {{Pkg|network-manager-sstp}} |
* {{Pkg|network-manager-sstp}} |
||
− | {{Warning|1=VPN サポート |
+ | {{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 例 === |
||
− | PPPoE / DSL 接続のサポートが必要な場合は {{pkg|rp-pppoe}} を[[インストール]]してください。実際に使うためには、{{ic|1=nm-connection-editor}} から新しい DSL/PPPoE 接続を追加してください。 |
||
+ | 近くの Wi-Fi ネットワークを一覧表示します: |
||
− | == グラフィカルフロントエンド == |
||
+ | $ nmcli device wifi list |
||
− | NetworkManager を簡単に使えるようにするためのアプレットをインストールすることができます。この GUI フロントエンドはシステムトレイ(や通知エリア)に収納され、NetworkManager のネットワーク選択や設定が可能です。異なるデスクトップにあわせて様々なアプレットが存在します。その他に [[#nm-applet]] を使うこともできます。 |
||
+ | |||
+ | 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' ''設定''.''プロパティ'' ""}} |
||
+ | |||
+ | ; 接続ファイル |
||
+ | : {{ic|/etc/NetworkManager/system-connections/}} で、対応する {{ic|有線接続 2.nmconnection}} ファイルを変更します。<br>{{ic|nmcli connection reload}} で設定ファイルをリロードすることを忘れないでください。 |
||
+ | |||
+ | == フロントエンド == |
||
+ | |||
+ | [[デスクトップ環境]]と統合するために、ほとんどのユーザはアプレットをインストールしたいと考えるでしょう。アプレットはネットワークの選択や設定を容易にするだけでなく、機密情報をセキュアに保存するために必要なエージェントも提供します。様々なデスクトップ環境は独自のアプレットを持っています。デスクトップ環境に独自のアプレットが存在しない場合、[[#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}} はあ |
+ | {{Pkg|network-manager-applet}} は、システムトレイのある Xorg 環境で機能する GTK 3 フロントエンドです。 |
− | 接続情報を保存するには [[GNOME |
+ | 接続に関する機密情報 (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}} オプションを有効 |
+ | 接続の設定で {{ic|Make available to other users}} チェックボックスオプションを有効化すると、NetworkManager はその接続のパスワードを平文で保存することに注意してください。とはいえ、パスワードが含まれるファイルは root (及び {{ic|nm-applet}} を通して他のユーザ) からしかアクセスできません。[[#Wi-Fi パスワードの暗号化]] を見てください。 |
− | + | {{Pkg|trayer}} か {{Pkg|stalonetray}} を使うことで、システムトレイ無しで {{ic|nm-applet}} を実行することができます。例えば、以下のようなスクリプトをパスに追加することができます: |
|
{{hc|nmgui|<nowiki> |
{{hc|nmgui|<nowiki> |
||
93行目: | 175行目: | ||
</nowiki>}} |
</nowiki>}} |
||
− | + | ''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}} を実行するには、アプレットを以下のコマンドで起動してください: |
+ | $ 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 |
||
− | === コマンドライン === |
||
− | + | === 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= |
||
+ | [main] |
||
+ | dns=systemd-resolved |
||
+ | }} |
||
+ | |||
+ | ===== openresolv サブスクライバのある DNS リゾルバ ===== |
||
+ | |||
+ | ローカルの [[DNS リゾルバ]]へのサブスクライバ (加入者) が [[openresolv]] に存在している場合、サブスクライバをセットアップし、[[#openresolv を使う|openresolv を使用するように NetworkManager を設定してください]]。 |
||
+ | |||
+ | 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 共有のみをマウントすることができます。 |
||
− | LAN ケーブルが接続されていない場合にのみ Wi-Fi をオンにして、LAN ケーブルが接続されたら (ノートパソコンがドックに接続された場合など) Wi-Fi を自動的に無効化することができます。 |
||
+ | 以下のスクリプトは、特定のネットワークに接続していることを確認し、それに応じて共有をマウントします: |
||
− | 以下の 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> |
||
+ | {{hc|/etc/NetworkManager/dispatcher.d/30-mount-smb.sh|<nowiki> |
||
#!/bin/sh |
#!/bin/sh |
||
+ | # 接続 UUID はターミナルで "nmcli connection show" を実行して確認してください。 |
||
− | if [ "$1" = "LAN_interface" ]; then |
||
+ | # 全種類の 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=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 インターフェイスが切断されていれば、ネットワーク接続が利用できなくなってしまいます。 |
||
+ | |||
+ | {{hc|/etc/NetworkManager/dispatcher.d/wlan_auto_toggle.sh|2= |
||
+ | #!/bin/sh |
||
+ | |||
+ | 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 |
+ | 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 |
+ | nmcli connection up id "$VPN_NAME" |
fi |
fi |
||
;; |
;; |
||
down) |
down) |
||
if iwgetid | grep -qs ":\"$ESSID\""; then |
if iwgetid | grep -qs ":\"$ESSID\""; then |
||
− | if nmcli |
+ | if nmcli connection show --active | grep "$VPN_NAME"; then |
− | nmcli |
+ | nmcli connection down id "$VPN_NAME" |
fi |
fi |
||
fi |
fi |
||
290行目: | 749行目: | ||
</nowiki>}} |
</nowiki>}} |
||
− | 全ての Wi-Fi ネットワークで VPN の接続を |
+ | 全ての 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 の接続情報の保存方法] が問題です)。その場合、以下を試してみてください: |
||
− | : |
+ | 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= |
+ | password=''パスワード'' |
− | {{Note|NetworkManager 接続エディタを開き、VPN パスワード/ |
+ | {{Note|NetworkManager の接続エディタを再び開き、VPN のパスワード/機密情報を保存し直す必要があるかもしれません。}} |
− | ==== |
+ | ==== ディスパッチャを使って、VPN プロバイダの接続時に IPv6 を無効化する ==== |
− | + | 多くの[[:カテゴリ: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 |
||
− | + | 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=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 内部のクライアントを使います。 |
||
− | * NetworkManger は{{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 & |
||
− | === NetworkManager の無効化 === |
||
+ | 固定 IP アドレスの場合は、NetworkManager にそのことを伝えなければなりません。手順としては通常、アプレットを右クリックし、'接続を編集する' ('Edit Connections') などのような項目を選択します。 |
||
− | ''dbus'' によってサービスが自動的に起動してしまうこともあります。''systemctl'' でサービスをマスクすることで完全に無効化できます: |
||
− | # systemctl mask NetworkManager |
||
− | # systemctl mask NetworkManager-dispatcher |
||
+ | == ヒントとテクニック == |
||
− | === /etc/resolv.conf === |
||
+ | === Wi-Fi パスワードの暗号化 === |
||
− | NetworkManager の {{ic|/etc/resolv.conf}} 管理モードは、 {{ic|main.rc-manager}} 設定で設定されています。デフォルトの {{ic|auto}} モードでは、 {{ic|/etc/resolv.conf}} の管理方法が次の順序で選択されます。 |
||
+ | デフォルトでは、NetworkManager はパスワードを平文で {{ic|/etc/NetworkManager/system-connections/}} 内の設定ファイルに保存します。保存されているパスワードを表示するには、以下のコマンドを使ってください: |
||
− | * {{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}} と同じです。 |
||
+ | # grep -r '^psk=' /etc/NetworkManager/system-connections/ |
||
− | 詳細は、 {{man|5|NetworkManager.conf}} のマニュアルページを参照してください。 |
||
+ | パスワードは root ユーザからファイルシステムでアクセス可能であり、さらに GUI (例: {{ic|nm-applet}}) を通して設定にアクセスできるユーザからもアクセス可能です。 |
||
− | {{Tip|openresolv を使用すると、 NetworkManager を他の ''resolvconf'' の場合サポートソフトウェアと共存させることができます。たとえば、 openresolv が [[openresolv#Subscribers|subscriber]] を持つローカル DNS キャッシングおよびスプリット DNS リゾルバを実行できます。 openresolv で NetworkManager を使用している場合、条件付き転送は[https://gitlab.freedesktop.org/NetworkManager/NetworkManager/issues/153 まだ完全にはサポートされていません]}} |
||
+ | パスワードは、平文ではなく、キーリングの中で暗号化された形で保存するのが望ましいです。しかし、これの欠点は、それぞれのユーザで接続をセットアップしなけれならないことです。 |
||
− | ''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}} を参照してください。 |
||
+ | キーリングを読み書きするために、利用可能なシークレットエージェントが存在していなければなりません。いかのどれかを使用できます: |
||
− | {{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}} にあります。 |
||
− | }} |
||
+ | * {{ic|nmcli}} で {{ic|--ask}} オプションを使う。 |
||
− | ===== 管理対象外の /etc/resolv.conf ===== |
||
+ | * [[#フロントエンド]] に挙げられているグラフィカルインターフェイス |
||
+ | シークレットエージェントが利用できないと、{{ic|no secrets: No agents were available for this request.}} というエラーで認証が失敗します。 |
||
− | NetworkManager が {{ic|/etc/resolv.conf}} に干渉しないようにするには、{{ic|/etc/NetworkManager/conf.d/}} の設定ファイルで {{ic|1=main.dns=none}} を設定します。 |
||
+ | ==== GNOME Keyring を使う ==== |
||
− | {{hc|/etc/NetworkManager/conf.d/dns.conf|2= |
||
− | [main] |
||
− | dns=none |
||
− | }} |
||
+ | 以下の方法を使うには、GNOME Keyring のキーリングデーモンが開始されていて、キーリングがアンロックされている必要があります。 |
||
− | {{Tip|NetworkManager が DNS 設定を [[systemd-resolved]] に送信しないように、{{ic|1=main.systemd-resolved=false}} を設定することもできます。}} |
||
+ | さらに、全ユーザのパスワードを保存しないように NetworkManager を設定する必要があります。GNOME の {{Pkg|network-manager-applet}} を使って、ターミナルから {{ic|nm-connection-editor}} を実行し、ネットワーク接続を選択し、''編集'' (''Edit'') をクリックし、''Wi-Fi セキュリティー'' (''Wi-Fi Security'') タブを選択し、パスワード入力欄の右のアイコンをクリックして、''このユーザーのパスワードのみ保存する'' (''Store the password only for this user'') にチェックを入れてください。 |
||
− | {{Note|[[#DNS キャッシングと条件付きフォワーディング]] を参照して、NetworkManager を {{ic|1=main.dns=none}} ではなく、 [https://wiki.archlinux.jp/index.php/Dnsmasq dnsmasq] や [[systemd-resolved]] などの他の DNS バックエンドを使用して設定してください。}} |
||
+ | ==== KDE Wallet を使う ==== |
||
− | その後、 {{ic|/etc/resolv.conf}} は壊れたシンボリックリンクになるかもしれませんので、削除する必要があります。次に、新しい {{ic|/etc/resolv.conf}} ファイルを作成します。 |
||
+ | KDE の {{Pkg|plasma-nm}} を使う場合、アプレットをクリックし、右上の ''設定'' アイコンをクリックし、ネットワーク接続を選択し、''一般設定'' (''General configuration'') タブを選択し、''すべてのユーザはこのネットワークに接続可能'' (''All users may connect to this network'') のチェックを外してください。このオプションにチェックが入っていると、たとえキーリングデーモンが実行されていたとしても、パスワードが平文で保存されてしまいます。 |
||
− | ===== openresolv を使用 ===== |
||
+ | 以前このオプションにチェックが入っていて、後にチェックを外した場合、ファイルからパスワードを消すために {{ic|reset}} オプションを使用する必要がある場合があります。あるいは、接続を削除し、再度セットアップしてください。 |
||
− | {{Tip|NetworkManager は、{{ic|/etc/resolv.conf}} が不変であるか、システムの {{ic|resolv.conf}} ファイルの一つへのシンボリックリンクでない限り、自動的に ''resolvconf'' を使います。}} |
||
+ | === Wi-Fi でインターネット接続を共有する === |
||
− | {{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 だけでなく) が動作しなくなります。 |
||
− | }} |
||
+ | 数クリックでインターネット接続 (例: 3G、有線) を共有することができます。ただし、[[ファイアウォール]]はインターネット共有を妨害する場合があることに注意してください。 |
||
− | [[openresolv]] を使用するように NetworkManager を明示的に設定するには、 {{ic|1=main.rc-manager=resolvconf}} を {{ic|/etc/NetworkManager/conf.d/}} の設定ファイルで設定します。 |
||
+ | AP モードをサポートする Wi-Fi カードが必要になります。詳細は [[ソフトウェアアクセスポイント#Wi-Fi デバイスが AP モードをサポートしていること]] を見てください。 |
||
− | {{hc|/etc/NetworkManager/conf.d/rc-manager.conf|2= |
||
− | [main] |
||
− | rc-manager=resolvconf |
||
− | }} |
||
+ | 接続を共有できるようにするために {{Pkg|dnsmasq}} パッケージを[[インストール]]してください。NetworkManager は ({{ic|dnsmasq.service}} とは独立に) 独自の ''dnsmasq'' インスタンスを DHCP サーバとして開始することに注意してください。これに関する注意事項は [[#dnsmasq]] を見てください。 |
||
− | == テスト == |
||
+ | 共有された接続を作成してください: |
||
− | ログイン時に NetworkManager アプレットがロードされるようになっているので、ほとんどの場合さらに設定をする必要はありません。既に前のネットワーク設定を無効にしてネットワークから切断している場合、NetworkManager が動作するかどうかテストすることができます。まず {{ic|NetworkManager.service}} を[[デーモン|起動]]してください。 |
||
+ | * アプレットをクリックし、''新規 Wi-Fi ネットワークを作成'' (''Create new wireless network'') を選んでください。 |
||
− | アプレットは {{ic|.desktop}} ファイルを提供するので、NetworkManager アプレットはアプリケーションメニューからロードすることができます。アプレットがない場合、コマンドを探すか、一度ログアウトしてからログインしなおしてアプレットを起動してください。アプレットが起動すれば、DHCP サーバーの自動設定によってネットワーク接続のポーリングを開始します。 |
||
+ | * ウィザードに従ってください (WPA2 以上を選んでください。パスワードは 8 文字以上にしてください。さもないと失敗します)。 |
||
+ | * Wi-Fi モードとして[[Fedora:Features/RealHotspot|ホットスポット]]かアドホックを選択してください。 |
||
+ | これで、次回必要になるときのために接続は保存されます。 |
||
− | [[Awesome]] などの xdg 非互換のウィンドウマネージャで GNOME アプレットを起動するには: |
||
+ | {{Note|Android はアドホックネットワークへの接続をサポートしていません。Android と接続を共有するには、インフラストラクチャモードを使用してください (つまり、Wi-Fi モードを "ホットスポット" に設定する)。}} |
||
− | nm-applet --sm-disable & |
||
+ | === イーサネットでインターネット接続を共有する === |
||
− | 固定 IP を使うには NetworkManager を設定する必要があります。アプレットを右クリックして 'Edit Connections' などを選択してください。 |
||
+ | シナリオ: デバイスが Wi-Fi 経由でインターネットに接続されていて、イーサネットで他のデバイスとインターネット接続を共有したいと考えている場合。 |
||
− | == トラブルシューティング == |
||
+ | 要件: |
||
− | 一般的な問題に対する修正。 |
||
+ | * 接続を共有できるようにするために {{Pkg|dnsmasq}} パッケージと {{Pkg|nm-connection-editor}} パッケージを[[インストール]]してください。NetworkManager は ({{ic|dnsmasq.service}} とは独立に) 独自の ''dnsmasq'' インスタンスを DHCP サーバとして開始することに注意してください。これに関する注意事項は [[#dnsmasq]] を見てください。 |
||
− | === PPTP トンネルを使って通信できない === |
||
+ | * インターネットに接続されたデバイスとその他のデバイスが適切なイーサネットケーブルで接続されていること (これは通常、間をクロスオーバーケーブルやスイッチで繋ぐことを意味します)。 |
||
+ | * インターネット共有が[[ファイアウォール]]によってブロックされていないこと。 |
||
+ | 手順: |
||
− | PPTP 接続のログインが成功すると、適切な VPN IP の ppp0 インターフェースが表示されますが、リモートの IP に ping できません。これは標準の Arch の pppd に MPPE (Microsoft Point-to-Point Encryption) サポートがないのが原因です。まず標準の Arch の {{Pkg|ppp}} を使って予期通り動作するか試すことを推奨します。 |
||
− | + | * ターミナルから {{ic|nm-connection-editor}} を実行してください。 |
|
+ | * 新しいイーサネット接続を追加してください。 |
||
+ | * 何かわかりやすい名前を付けてください。例えば "Shared Internet"。 |
||
+ | * "IPv4 設定" ("IPv4 Settings") を開いてください。 |
||
+ | * "メソッド:" ("Method:") で "他のコンピューターへ共有" ("Shared to other computers") を選択してください。 |
||
+ | * 保存 |
||
+ | これで、NetworkManager の有線接続に "Shared Internet" という新しいオプションができたはずです。 |
||
− | PEAP の MSCHAPv2 type-2 認証を使う WPA2-Enterprise ワイヤレスネットワークでは標準の ppp パッケージではなく ppp-mppe が必要になることがあります。[[netctl]] では ppp-mppe がなくても設定いらずで動きます。いずれにしても、MSCHAPv2 は攻撃されやすいため使用が推奨されていません。ただし他の方法にすることはできないのが普通です。この [https://www.cloudcracker.com/blog/2012/07/29/cracking-ms-chap-v2/ 記事] を参照してください。 |
||
+ | === cron ジョブやスクリプトでネットワークが立ち上がっているか確認する === |
||
− | === Network management disabled === |
||
+ | {{Out of date|''nm-tool'' は NetworkManager から削除されました [https://gitlab.freedesktop.org/NetworkManager/NetworkManager/commit/bb8c75bd536d4f8fb80a4366025a279078f0ec81]。代わりに ''nmcli'' を使用するべきです。}} |
||
− | 時々 NetworkManager を終了したときに pid (state) ファイルが削除されずに 'Network management disabled' というメッセージが表示されることがあります。これが発生した場合は、手動でファイルを削除する必要があります: |
||
+ | 一部の ''cron'' ジョブではネットワークが立ち上がっている必要があり、ネットワークが落ちている状態でそのようなジョブを実行したくない場合があります。そうするには、NetworkManager の ''nm-tool'' にクエリして、ネットワークの状態をチェックする '''if''' テストを追加してください。このテストは、何らかのインターフェイスが立ち上がっていれば成功し、インターフェイスが全て落ちている場合は失敗します。これは、ある時は有線接続されていて、ある時は無線で、またある時はネットワークから切断されているようなノート PC で便利です。 |
||
− | # rm /var/lib/NetworkManager/NetworkManager.state |
||
+ | {{bc|<nowiki> |
||
− | === resolv.conf をカスタマイズする === |
||
+ | 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。 |
||
− | [[resolv.conf]] を見て下さい。{{Pkg|dhclient}} を使いたい場合、[[Arch User Repository|AUR]] の {{AUR|networkmanager-dispatch-resolv}}{{Broken package link|{{aur-mirror|networkmanager-dispatch-resolv}}}} パッケージを試すことができます。 |
||
+ | === ブート時にシークレットを使ってネットワークに接続する === |
||
− | === dhclient と DHCP に関する問題 === |
||
+ | デフォルトでは、NetworkManager はシークレットを要求するネットワークにはブート時に自動的に接続しません。NetworkManager では、そのようなネットワークは、そのネットワークをデフォルトで使用するユーザがログインした後にのみ、接続されるからです。この動作を変更するには、以下を行ってください: |
||
− | 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''}} コマンドを使うことでわかります。 |
||
+ | # パネルの {{ic|nm-applet}} のアイコンを右クリックし、"接続を編集する" を選択し、Wi-Fi タブを開いてください。 |
||
− | === dhcpcd と DHCP に関する問題 === |
||
+ | # 使いたい接続を選択し、編集ボタンをクリックしてください。 |
||
+ | # “Connect Automatically” と “Available to all users” のボックスにチェックを入れてください。 |
||
+ | # 加えて、"Wi-Fi Security" タブで "Store password for all users (not encrypted)" が選択されていることを確認してください。 |
||
+ | ログアウトし、ログインし直せば完了です。 |
||
− | ルーターによっては、{{ic|/etc/dhcpcd.conf}} ({{ic|dhcpd.conf}} とは別のファイルです) 内の次の行をコメントアウトしないと正しく接続できないことがあります: |
||
− | require dhcp_server_identifier |
||
− | ネットワーク上で複数の DHCP サーバーを使ってなければこの修正によって問題が起こることはありません。詳細は [https://technet.microsoft.com/en-us/library/cc977442.aspx このページ] を見て下さい。 |
||
− | === |
+ | === OpenConnect で KWallet 内のパスワードを使う === |
+ | 接続時にユーザ名とパスワードを入力することはできますが、{{Pkg|plasma-nm}} 0.9.3.2-1 から、[[KWallet]] から直接 OpenConnect のユーザ名とパスワードを取得することが可能になりました。 |
||
− | ホストネームが接続しているルーターに送信されるかどうかは、使用している NetworkManager プラグインによります。標準の "keyfile" プラグインはデフォルト設定ではホストネームを送信しません。ホストネームを送信するようにしたいときは、以下を {{ic|/etc/NetworkManager/NetworkManager.conf}} に追加してください: |
||
+ | "KDE Wallet Manager" を開き、"Network Management|Maps" で対象の OpenConnect VPN 接続を見つけてください。"Show values" をクリックし、認証情報を以下の形式で "VpnSecrets" に入力してください (''ユーザ名'' と ''パスワード'' の部分は適宜置き換えてください): |
||
− | {{hc|/etc/NetworkManager/NetworkManager.conf|2= |
||
+ | |||
− | [keyfile] |
||
+ | form:main:username%SEP%''ユーザ名''%SEP%form:main:password%SEP%''パスワード'' |
||
− | hostname=''your_hostname'' |
||
+ | |||
+ | 次回の接続時に、ユーザ名とパスワードが "VPN secrets" ダイアログボックスに入力されるはずです。 |
||
+ | |||
+ | === 特定のデバイスを無視する === |
||
+ | |||
+ | NetworkManager で特定のデバイスを無視し、そのデバイスに対してはアドレスとルート (route) の設定を試みないようにすることが望ましい場合があります。{{ic|/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 |
||
+ | |||
+ | ファイルを編集したら、{{ic|nmcli general reload}} を root として実行してください。その後、NetworkManager があなたの設定を変更することなく、インターフェイスを構成できるようになっているはずです。 |
||
+ | |||
+ | === MAC アドレスのランダム化を設定する === |
||
+ | |||
+ | {{Note|1=(安定した) リンク接続[https://bbs.archlinux.org/viewtopic.php?id=220101]や、MAC アドレスに基づいてデバイスを制限したりネットワーク容量に制限を設けているネットワークへの接続には、MAC アドレスのランダム化を無効化する必要がある場合があります。}} |
||
+ | |||
+ | MAC アドレスのランダム化は、本物の MAC アドレスをネットワークに開示しないことで、プライバシーを向上させることができます。 |
||
+ | |||
+ | NetworkManager は2種類の MAC アドレスランダム化をサポートしています: スキャン中のランダム化とネットワーク接続におけるランダム化です。どちらのモードも、{{ic|/etc/NetworkManager/NetworkManager.conf}} を変更するか、{{ic|/etc/NetworkManager/conf.d/}} 内に別の設定ファイルを作成することで設定できます (前者は NetworkManager によって上書きされる場合があるので、後者が推奨されます)。 |
||
+ | |||
+ | Wi-Fi スキャン中のランダム化はデフォルトで有効化されていますが、以下の行を {{ic|/etc/NetworkManager/NetworkManager.conf}} か {{ic|/etc/NetworkManager/conf.d}} 内の別の設定ファイルに追加することで無効化することができます: |
||
+ | |||
+ | {{hc|/etc/NetworkManager/conf.d/wifi_rand_mac.conf|2= |
||
+ | [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 のブログ記事]を参照してください。 |
||
− | {{ic|[keyfile]}} 下のオプションはデフォルトの {{ic|/etc/NetworkManager/system-connections}} のパスのネットワーク接続に適用されます。 |
||
+ | MAC アドレスランダム化に関して、最も重要なモードは {{ic|stable}} と {{ic|random}} です。{{ic|stable}} は、新しいネットワークに接続した時にランダムな MAC アドレスを生成し、そのネットワークと MAC アドレスを永続的に関連付けます。これはつまり、そのネットワークに接続すると毎回同じ MAC アドレスが使用されることを意味します。それとは対照的に、{{ic|random}} は、ネットワークに接続する度に、そのネットワークが新しかろうが既知であろうが、新しい MAC アドレスを生成します。{{ic|/etc/NetworkManager/conf.d}} 内に設定ファイルを追加してこの MAC アドレスランダム化を設定することができます: |
||
− | また、(NetworkManager が自動的に起動する) DHCP クライアントを設定して送信させることもできます。NetworkManager はデフォルトで {{Pkg|dhclient}} を利用しますが、インストールされていない場合は、NetworkManager 内蔵の DHCP 機能にフォールバックします。''dhclient'' でホストネームを送信するには設定を変更する必要があります。''dhcpcd'' はデフォルトでホストネームを送信します。 |
||
+ | {{hc|/etc/NetworkManager/conf.d/wifi_rand_mac.conf|2= |
||
− | まず、どの DHCP クライアントが使われているのか確認 (以下の例では ''dhclient''): |
||
+ | [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 |
||
+ | }} |
||
+ | 詳細は [https://blogs.gnome.org/thaller/2016/08/26/mac-address-spoofing-in-networkmanager-1-4-0/ GNOME ブログ記事]を参照してください。 |
||
− | {{hc|<nowiki># journalctl -b | egrep "dhc"</nowiki>| |
||
+ | |||
− | ... |
||
+ | === IPv6 プライバシー拡張を有効にする === |
||
− | 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 |
||
+ | [[IPv6#NetworkManager]] を参照してください。 |
||
− | 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. |
||
+ | === 接続ごとに一意の DUID を設定する === |
||
− | Nov 17 21:03:20 zenbook dhclient[2949]: RCV: Reply message on wlan0 from fe80::126f:3fff:fe0c:2dc. |
||
+ | |||
+ | DHCPv6 Unique Identifier (DUID) は、DHCPv6 クライアントが DHCPv6 サーバに対して自身を識別するために使用する値です。NetworkManager は3種類の DUID をサポートしています: |
||
+ | |||
+ | * DUID-UUID ([[RFC:6355|RFC 6355]]): Universally Unique IDentifier (UUID) から生成されます。 |
||
+ | * DUID-LL ([[RFC:3315|RFC 3315]]): リンク層アドレス (別名 MAC アドレス) から生成されます。 |
||
+ | * DUID-LLT ([[RFC:3315|RFC 3315]]): リンク層アドレスとタイムスタンプから生成されます。 |
||
+ | |||
+ | NetworkManager の内部 DHCP クライアントが使用されている場合 (デフォルト)、machine-id ({{ic|/etc/machine-id}}) から生成されたグローバルで永続的な DUID-UUID で自身を識別します。これは、すべての接続が同じ UUID を共有することを意味し、プライバシーの侵害となる可能性があります。 |
||
+ | |||
+ | 幸いなことに、NetworkManager は、接続の stable-id とホストごとの一意のキーから派生した、接続ごとの一意の DUID を提供できます。{{ic|/etc/NetworkManager/conf.d}} 内に次の設定を追加することで、これを有効にすることができます: |
||
+ | |||
+ | {{hc|/etc/NetworkManager/conf.d/duid.conf|2= |
||
+ | [connection] |
||
+ | ipv6.dhcp-duid=stable-uuid |
||
}} |
}} |
||
+ | {{ic|stable-ll}} および {{ic|stable-llt}} の値もサポートされています。詳細については、{{man|5|nm-settings|ipv6 setting}} の {{ic|dhcp-duid}} の説明を参照してください。 |
||
− | ==== ホストネームを DHCP サーバーに送るように dhclient を設定する ==== |
||
+ | === 有線接続の操作 === |
||
− | サンプル設定ファイルをコピー: |
||
+ | NetworkManager は、デフォルトで、有線イーサネット接続を検出するたびにそれぞれに対して接続プロファイルを生成します。接続を生成する時点では、利用可能なイーサネットアダプターがさらにあるかどうかはわかりません。そのため、最初の有線接続は "有線接続 1" となります。{{ic|no-auto-default}} ({{man|5|NetworkManager.conf}} を参照) を設定するか、単に削除することで、この接続を生成しないようにできます。そうすれば、NetworkManager はこのインターフェイスの接続を二度と生成しないように記憶します。 |
||
− | # cp /usr/share/dhclient/dhclient.conf.example /etc/dhclient.conf |
||
+ | また、接続を編集 (およびディスクに永続化) したり、削除したりすることもできます。NetworkManager は新しい接続を再生成することはありません。それから、名前を好きなものに変更することができます。この作業には {{Pkg|nm-connection-editor}} などを使うことができます。 |
||
− | ファイルの中身を見てください。重要なのは以下の行です: |
||
+ | === Wi-Fi バックエンドとして iwd を使用する === |
||
− | {{hc|/etc/dhclient.conf|2=send host-name = pick-first-value(gethostname(), "ISC-dhclient");}} |
||
+ | {{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 既知の問題]を考慮してください。}} |
||
− | ==== 特定の DHCP クライアントを使うように NetworkManager を設定する ==== |
||
+ | [https://iwd.wiki.kernel.org/networkmanager 実験的な iwd バックエンド]を有効化するには、{{Pkg|iwd}} を[[インストール]]してから、以下の設定ファイルを作成してください: |
||
− | NetworkManager で使用する DHCP クライアントを明示的に設定したい場合、グローバルな設定ファイルで設定できます: |
||
− | {{hc| |
+ | {{hc|/etc/NetworkManager/conf.d/wifi_backend.conf|2= |
+ | [device] |
||
+ | wifi.backend=iwd |
||
+ | }} |
||
+ | または、{{AUR|networkmanager-iwd}} をインストールすることもできます。これは、''iwd'' のみで動作する ''NetworkManager'' をビルドするように設定された修正パッケージです。主な違いは、''iwd'' が必要であり、''wpa_supplicant'' はビルド後にアンインストールできることです。 |
||
− | 上記のオプションが設定されていない場合、{{ic|1=dhcp=dhclient}} がデフォルトで使われます。 |
||
+ | {{Note|1=''iwd'' に切り替えた後、[https://iwd.wiki.kernel.org/networkmanager#converting_network_profiles 既存の NetworkManager ネットワークプロファイルを変換する]必要がある場合があります。}} |
||
− | それから {{ic|NetworkManager.service}} を[[systemd#ユニットを使う|再起動]]してください。 |
||
+ | === ネットワーク名前空間内で実行する === |
||
− | {{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)。}} |
||
+ | ネットワーク名前空間内で NetworkManager を実行する場合 (たとえば、選択したアプリケーションで使用する必要がある特定のデバイスを管理する場合)、その名前空間に移動させる前にデバイスを落としてください: |
||
− | === デフォルトの route が見つからない === |
||
+ | |||
+ | $ 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 は後で {{ic|device is strictly unmanaged}} エラーにより接続の確立に失敗します。 |
||
+ | |||
+ | === VPN に自動的に接続する === |
||
+ | |||
+ | NetworkManager は、インターネットへの接続時に VPN に自動的に接続するように (ネットワーク毎に) 設定できます。VPN 接続自体は、GNOME の NetworkManager フロントエンドで追加できますが、VPN を自動的に使用するようにするには、{{ic|nmcli}} を使用しなければなりません。他のフロントエンドにはこの制限はない場合があります。 |
||
+ | |||
+ | まず、対象の VPN が全ユーザで利用可能であることを確認してください。GNOME では、{{ic|details}} タブ内のあるボックスにチェックを入れれば良いです。{{ic|Identity}} タブのパスワード入力欄内の右側にあるアイコンをクリックし、{{ic|Store the password for all users}} を選択してください。 |
||
+ | |||
+ | そして、VPN 接続の UUID を見つけ、インターネット接続の {{ic|connection.secondaries}} にその UUID を追加してください: |
||
+ | |||
+ | # UUID=$(nmcli --get-values connection.uuid connection show ''VPN接続の名前'') |
||
+ | # nmcli connection modify ''インターネット接続の名前'' connection.secondaries "$UUID" |
||
+ | |||
+ | NetworkManager を再起動して、設定したインターネット接続に接続したら、自動的に VPN に接続されるようになっているはずです。 |
||
+ | |||
+ | == トラブルシューティング == |
||
+ | |||
+ | === セキュアな Wi-Fi ネットワークのパスワードプロンプトが表示されない === |
||
+ | |||
+ | セキュアな Wi-Fi ネットワークに接続しようとすると、パスワードのプロンプトが表示されず、接続が確立されません。これは、キーリングのパッケージがインストールされていない時に起こります。簡単な解決法は、{{Pkg|gnome-keyring}} をインストールすることです。パスワードを暗号化して保存したい場合は、[[GNOME Keyring]] に書かれてある指示に従い、''gnome-keyring-daemon'' をセットアップしてください。 |
||
+ | |||
+ | === Network management disabled === |
||
+ | |||
+ | 時々、NetworkManager を終了したときに pid (state) ファイルが削除されずに {{ic|Network management disabled}} というメッセージが表示されることがあります。これが発生した場合は、そのファイルを手動で削除してください: |
||
+ | |||
+ | # rm /var/lib/NetworkManager/NetworkManager.state |
||
+ | |||
+ | === 内蔵 DHCP クライアントに関する問題 === |
||
+ | |||
+ | 内臓の DHCP クライアントを使用すると IP アドレスの取得に問題が発生する場合、他の DHCP クライアントを使用することを検討してください (手順は [[#DHCP クライアント]] を見てください)。この回避策は、eduroam などの巨大なワイヤレスネットワークにおける問題を解決するかもしれません。 |
||
+ | |||
+ | === dhclient における DHCP の問題 === |
||
+ | |||
+ | 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 ''インターフェイス''}} コマンドを使って確認できます。 |
||
− | KDE4 システムでは、NetworkManager でワイヤレス接続を確立したときにデフォルトの route が作られません。ワイヤレス接続の route 設定を変更してデフォルトの選択 "Use only for resources on this connection" を削除すれば問題は解決します。 |
||
=== 3G モデムが検知されない === |
=== 3G モデムが検知されない === |
||
− | [[USB 3G モデム# |
+ | [[USB 3G モデム#NetworkManager]] を参照してください。 |
− | === |
+ | === ノートパソコンで WLAN をオフにする === |
− | + | 時々、ノートパソコンに付いているスイッチを使って Wi-Fi アダプタを無効化し、再び有効化しようとすると NetworkManager が機能しなくなることがあります。これは、しばしば ''rfkill'' の問題であることがあります。ドライバが ''rfkill'' にワイヤレスアダプタの状態について通知しているかどうか確認するには、以下のコマンドを使ってください: |
|
$ watch -n1 rfkill list all |
$ watch -n1 rfkill list all |
||
− | アダプタ |
+ | アダプタを切り替えた後にどれかの識別子がブロックされたままになる場合、手動でアンロックしてみることができます (X の部分は、上記のコマンドで得られた識別子の番号です): |
# rfkill event unblock X |
# rfkill event unblock X |
||
− | === 固定 IP 設定が DHCP に戻る === |
+ | === 固定 IP アドレスの設定が DHCP に戻る === |
− | 未解決のバグ |
+ | とある未解決のバグにより、デフォルトの接続を固定 IP アドレスに変更すると、{{ic|nm-applet}} が設定の変更を適切に保存せずに、自動 DHCP に戻ってしまいます。 |
− | この問題を |
+ | この問題を回避するには、{{ic|nm-applet}} でデフォルトの設定 (例: "Auto eth0") を編集し、接続名を変更 (例: "my eth0") し、"Available to all users" チェックボックスのチェックを外し、固定 IP アドレスの設定を好きに変更し、'''Apply''' をクリックしてください。これで、指定した名前で新しい接続が保存されます。 |
− | + | そうしたら、デフォルトの接続に自動的に接続しないようにしたいと思うでしょう。そうするには、まず {{ic|nm-connection-editor}} を実行してください (root としてでは'''ありません''')。接続エディタで、デフォルトの接続 (例: "Auto eth0") を編集し、"Connect automatically" のチェックを外してください。'''Apply''' をクリックし、接続エディタを閉じてください。 |
|
− | === |
+ | === 通常ユーザとして接続を編集できない === |
− | [[#PolicyKit パーミッション |
+ | [[#PolicyKit のパーミッションをセットアップする]] を参照してください。 |
− | === 隠れた |
+ | === 隠されたワイヤレスネットワークを削除する === |
− | + | 隠されたネットワークはワイヤレスの選択リストに表示されないので、GUI から削除することができません。以下のコマンドでそのようなネットワークを削除できます: |
|
− | # rm /etc/NetworkManager/system-connections/ |
+ | # rm /etc/NetworkManager/system-connections/''SSID'' |
− | 他の接続でも |
+ | これは、他の接続でも使えます。 |
− | === VPN が |
+ | === VPN が GNOME で動作しない === |
− | + | GNOME を使用している時に NetworkManager で OpenConnect や vpnc の接続をセットアップすると、ダイアログボックスが表示されず、以下のエラーが {{ic|/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. |
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 が、ダイアログスクリプトが {{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/}} |
* OpenConnect の場合: {{ic|ln -s /usr/lib/networkmanager/nm-openconnect-auth-dialog /usr/lib/gnome-shell/}} |
||
− | * VPNC ( |
+ | * VPNC (つまり Cisco VPN) の場合: {{ic|ln -s /usr/lib/networkmanager/nm-vpnc-auth-dialog /usr/lib/gnome-shell/}} |
− | 他の |
+ | これは、他の NetworkManager VPN プラグインでも行う必要がある場合がありますが、上記が最も一般的です。 |
+ | === 検出されてはいるのにヨーロッパのワイヤレスネットワークに接続できない === |
||
− | === Systemd のボトルネック === |
||
+ | WLAN チップにはデフォルトの[[ネットワーク設定/ワイヤレス#規制範囲に従う|規制範囲]]が設定されています。アクセスポイントがその規制内で動作しない場合、そのネットワークに接続することはできません。これは簡単に解決できます: |
||
− | 時が立つにつれてログファイル ({{ic|/var/log/journal}}) が膨大になってしまうことがあります。そうすると NetworkManager を使う場合にブートパフォーマンスに大きな影響を与えます。参照: [[systemd#少しづつ起動時間が長くなっている]]。 |
||
+ | # {{Pkg|wireless-regdb}} を[[インストール]]してください。 |
||
− | === 定期的にネットワークが切断される (WiFi) === |
||
+ | # {{ic|/etc/conf.d/wireless-regdom}} で適切な国名コードをアンコメントしてください。 |
||
+ | # システムを再起動してください。この設定はブート時にしか読み込まれないからです。 |
||
+ | === ブート時の VPN への自動接続が機能しない === |
||
− | WiFi ドライバーの中にはベースステーションのスキャン時に問題が発生するものがあります。VPN が切断されたりパケットが消失したり、ウェブページがロードされないなどの症状が起こります。 |
||
+ | この問題は、システム (つまり、root ユーザとして動作している NetworkManager) が VPN 接続を確立しようと試みたが、パスワードが特定のユーザの GNOME Keyring 内に保存されているためにアクセスできなかった場合に発生します。 |
||
− | {{ic|journalctl -f}} を実行すると、以下のようなメッセージが定期的にログに残っているならこの問題が関わっています: |
||
+ | 解決策は、[[#ディスパッチャを使って、ネットワーク接続が確立された後に VPN に接続する]] の手順 2 で説明されている通りに、VPN のパスワードを平文で保存することです。 |
||
− | NetworkManager[410]: <info> (wlp3s0): roamed from BSSID 00:14:48:11:20:CF (my-wifi-name) to (none) ((none)) |
||
+ | {{ic|nm-applet}} GUI で新しい "auto-connect VPN" オプションを使用している場合は、自動接続するために 手順 1 で説明されているディスパッチャを使用する必要はありません。 |
||
− | パッチが適用された NetworkManager を使うことでこの種のスキャニングを防ぐことができます: {{AUR|networkmanager-noscan}}。 |
||
+ | === Systemd のボトルネック === |
||
− | もしくは、ローミングが重要でない場合、WiFi の接続プロファイルでアクセスポイントの BSSID をロックすることで定期的なスキャンを無効化できます。 |
||
+ | 時が立つにつれてログファイル ({{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 ==== |
||
− | + | 特定の接続で 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 |
||
− | === DNS キャッシュを有効にする === |
||
+ | 変更は即座に {{ic|/etc/NetworkManager/system-connections/vpn.example.com.nmconnection}} に反映されるはずです。 |
||
− | DNS リクエストは以前のリクエストをローカルに保存することで高速化することが可能です。NetworkManager には dnsmasq を使って DNS キャッシュを有効にするプラグインが存在しますが、今のところデフォルト設定では有効になっていません。しかしながら、以下の手順で簡単に有効にできます。 |
||
+ | OpenSSL に関しては、[https://wiki.openssl.org/index.php/OpenSSL_3.0#Providers OpenSSL wiki] で説明されている通りに {{ic|/etc/ssl/openssl.cnf}} を編集してください。 |
||
− | まずは {{Pkg|dnsmasq}} を[[pacman|インストール]]してください。次に、{{ic|/etc/NetworkManager/NetworkManager.conf}} を編集して次の行を {{ic|[main]}} セクションに追加してください: |
||
+ | 具体的には、{{ic|[provider_sect]}} セクションの最後に {{ic|1=legacy = legacy_sect}} を追加してください。{{ic|[default_sect]}} で {{ic|1=activate = 1}} のコメントを外してください。最後に、{{ic|1=activate = 1}} という行も含む新しいセクション {{ic|[legacy_sect]}} を追加してください。他のほとんどの既存の構成セクションを除外すると、最終結果は次のようになります: |
||
− | dns=dnsmasq |
||
+ | {{hc|/etc/ssl/openssl.cnf|2= |
||
− | そして NetworkManager を再実行するかパソコンを再起動してください。NetworkManager は自動的に dnsmasq を起動し 127.0.0.1 を {{ic|/etc/resolv.conf}} に追加します。実際の DNS サーバーは {{ic|/var/run/NetworkManager/dnsmasq.conf}} で見つかります。dnsmasq が使われているか確かめるには、dig で同じ DNS ルックアップを二度行なって、それからサーバーとクエリの時間を見て下さい。 |
||
+ | openssl_conf = openssl_init |
||
+ | [openssl_init] |
||
− | === MAC アドレスのランダム化の設定 === |
||
+ | providers = provider_sect |
||
+ | [provider_sect] |
||
− | バージョン 1.4.0 現在、NetworkManager では2種類の MAC アドレスランダム化をサポートしています。スキャン時のランダム化と定常的なランダム化です。どちらのモードも {{ic|/etc/NetworkManager/NetworkManager.conf}} で設定できます。 |
||
+ | default = default_sect |
||
+ | legacy = legacy_sect |
||
+ | [default_sect] |
||
− | 無線スキャン時のランダム化はバージョン 1.2.0 からデフォルトで有効になっており、以下の行を {{ic|/etc/NetworkManager/NetworkManager.conf}} に追加することで無効にできます: |
||
+ | activate = 1 |
||
+ | [legacy_sect] |
||
− | [device] |
||
+ | activate = 1 |
||
− | wifi.scan-rand-mac-address=no |
||
+ | }} |
||
+ | 最後に、{{ic|NetworkManager.service}} を[[再起動]]して、新しい OpenSSL 設定を有効化してください。 |
||
− | {{Tip|1=MAC アドレスのランダム化を無効にすることで接続が安定することがあります。[https://bbs.archlinux.org/viewtopic.php?id=220101] を参照。}} |
||
+ | === OpenSSL の "unsupported protocol" エラーで WPA Enterprise の接続の認証に失敗する === |
||
− | 定常的なランダム化では接続するたびに MAC アドレスが変わります。MAC アドレスでログイン状態を記録するポータルなどで有用です。有効にするには以下のオプションを使用: |
||
+ | {{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 での認証は、ログに以下のエラーを吐いて失敗します: |
||
− | [connection] |
||
− | wifi.cloned-mac-address=random |
||
+ | {{bc| |
||
− | または: |
||
+ | 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 |
||
− | [connection] |
||
+ | wpa_supplicant[3320]: wlp3s0: CTRL-EVENT-EAP-FAILURE EAP authentication failed |
||
− | ethernet.cloned-mac-address=random |
||
+ | }} |
||
+ | 正しいアプローチは、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'' でなら可能です。 |
||
− | 詳しくは [https://blogs.gnome.org/thaller/2016/08/26/mac-address-spoofing-in-networkmanager-1-4-0/ こちら] を参照してください。 |
||
+ | まず、以下のコマンドの出力から、問題のある Wi-Fi 接続の名前を手に入れてください: |
||
− | === IPv6 プライバシー拡張の有効化 === |
||
+ | $ nmcli connection show |
||
− | [[IPv6#NetworkManager]] を見てください。 |
||
+ | |||
+ | 接続名は ''Example WiFi'' であると仮定します。以下のように ''nmcli'' を使用してください: |
||
+ | |||
+ | $ nmcli connection modify Example\ WiFi 802-1x.phase1-auth-flags 32 |
||
+ | |||
+ | 変更は即座に {{ic|/etc/NetworkManager/system-connections/Example\ WiFi.nmconnection}} に反映されるはずです。 |
||
+ | |||
+ | 最後に、{{ic|NetworkManager.service}} を[[再起動]]して、新しい OpenSSL の設定を有効化してください。 |
||
== 参照 == |
== 参照 == |
||
+ | |||
* [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 プロジェクトによってホストされています。
目次
- 1 インストール
- 2 使い方
- 3 フロントエンド
- 4 設定
- 5 ネットワークサービスで NetworkManager dispatcher を使用する
- 5.1 ディスパッチャのタイムアウトを防ぐ
- 5.2 ディスパッチャの例
- 5.2.1 タイムゾーンを自動的に設定する
- 5.2.2 sshfs でリモートディレクトリをマウントする
- 5.2.3 SMB 共有をマウントする
- 5.2.4 NFS 共有をマウントする
- 5.2.5 ディスパッチャを使って、LAN ケーブルが挿入されているかに応じて Wi-Fi を自動的にオンオフする
- 5.2.6 ディスパッチャを使って、ネットワーク接続が確立された後に VPN に接続する
- 5.2.7 ディスパッチャを使って、VPN プロバイダの接続時に IPv6 を無効化する
- 5.2.8 OpenNTPD
- 5.2.9 systemd-timesyncd で DHCP 経由で受信した NTP サーバを動的に設定する
- 6 テスト
- 7 ヒントとテクニック
- 7.1 Wi-Fi パスワードの暗号化
- 7.2 Wi-Fi でインターネット接続を共有する
- 7.3 イーサネットでインターネット接続を共有する
- 7.4 cron ジョブやスクリプトでネットワークが立ち上がっているか確認する
- 7.5 ブート時にシークレットを使ってネットワークに接続する
- 7.6 OpenConnect で KWallet 内のパスワードを使う
- 7.7 特定のデバイスを無視する
- 7.8 MAC アドレスのランダム化を設定する
- 7.9 IPv6 プライバシー拡張を有効にする
- 7.10 接続ごとに一意の DUID を設定する
- 7.11 有線接続の操作
- 7.12 Wi-Fi バックエンドとして iwd を使用する
- 7.13 ネットワーク名前空間内で実行する
- 7.14 VPN に自動的に接続する
- 8 トラブルシューティング
- 8.1 セキュアな Wi-Fi ネットワークのパスワードプロンプトが表示されない
- 8.2 Network management disabled
- 8.3 内蔵 DHCP クライアントに関する問題
- 8.4 dhclient における DHCP の問題
- 8.5 3G モデムが検知されない
- 8.6 ノートパソコンで WLAN をオフにする
- 8.7 固定 IP アドレスの設定が DHCP に戻る
- 8.8 通常ユーザとして接続を編集できない
- 8.9 隠されたワイヤレスネットワークを削除する
- 8.10 VPN が GNOME で動作しない
- 8.11 検出されてはいるのにヨーロッパのワイヤレスネットワークに接続できない
- 8.12 ブート時の VPN への自動接続が機能しない
- 8.13 Systemd のボトルネック
- 8.14 定期的なネットワーク接続断、遅延、パケットロス (WiFi)
- 8.15 Lenovo ラップトップ (IdeaPad、Legion など) で Wi-Fi をオンにできない
- 8.16 ホスト名の送信をオフにする
- 8.17 nm-applet が i3wm で消える
- 8.18 Unit dbus-org.freedesktop.resolve1.service not found
- 8.19 Secrets were required, but not provided
- 8.20 iwd での WPA Enterprise 接続
- 8.21 Failed to request VPN secrets
- 8.22 OpenSSL の "ca md too weak" エラーで OpenVPN の接続に失敗する
- 8.23 OpenSSL の "unsupported protocol" エラーで WPA Enterprise の接続の認証に失敗する
- 9 参照
インストール
NetworkManager は networkmanager パッケージでインストールできます。このパッケージには、デーモン、コマンドラインインターフェイス (nmcli
)、そして curses ベースのインターフェイス (nmtui
) が含まれています。
NetworkManager を有効化する
インストールしたら、NetworkManager.service
を起動/有効化する必要があります。NetworkManager デーモンが起動すると、既に構成されている利用可能な "システム接続" に自動的に接続します。"ユーザ接続" や未構成の接続を設定したり接続したりするには、nmcli やアプレットが必要です。
追加のインターフェイス
- nm-connection-editor: グラフィカルユーザインターフェイス。
- network-manager-applet: システムトレイアプレット (
nm-applet
)。
モバイルブロードバンドサポート
NetworkManager はモバイルブロードバンド接続のサポートに ModemManager を使用します。
modemmanager と usb_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 タイプに対するサポートはプラグインなシステムをベースとしています。以下のパッケージで提供されています:
- networkmanager-openconnect: OpenConnect 用
- networkmanager-openvpn: OpenVPN 用
- networkmanager-pptp: PPTP クライアント用
- networkmanager-strongswan: strongSwan 用
- networkmanager-vpnc
- networkmanager-fortisslvpnAUR
- networkmanager-iodine-gitAUR
- networkmanager-libreswanAUR
- networkmanager-l2tp
- networkmanager-ssh-gitAUR
- network-manager-sstp
使い方
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/Keyring、KDE Wallet、KeePassXC など) をインストールし設定してください。
接続の設定で Make available to other users
チェックボックスオプションを有効化すると、NetworkManager はその接続のパスワードを平文で保存することに注意してください。とはいえ、パスワードが含まれるファイルは root (及び nm-applet
を通して他のユーザ) からしかアクセスできません。#Wi-Fi パスワードの暗号化 を見てください。
trayer か stalonetray を使うことで、システムトレイ無しで 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
Appindicator
バージョン 1.18.0 から、Appindicator のサポートが公式の network-manager-applet パッケージで利用可能になりました。nm-applet を Appindicator の環境で使うには、アプレットを以下のコマンドで起動してください:
$ nm-applet --indicator
フロントエンドのもう一つの選択肢は networkmanager-dmenu-gitAUR です。これは、NetworkManager の接続を nm-applet
ではなく dmenu や rofi で管理する小さなスクリプトです。このスクリプトには必須の機能が全て揃っています。例えば: NetworkManager の既存の Wi-Fi 接続や有線接続に接続する、新しい Wi-Fi 接続に接続する、必要に応じてパスフレーズを要求する、既存の VPN 接続に接続する、ネットワークを有効化/無効化する、nm-connection-editor GUI を起動する、Bluetooth ネットワークに接続する。
switchboard
Pantheon の switchboard は、switchboard-plug-network と nm-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_TIMEOUT
を 60
からより大きい値に変更してください。
PolicyKit のパーミッションをセットアップする
デフォルトでは、アクティブなローカルセッションのユーザは全員パスワード無しでほぼ全てのネットワーク設定を変更することができます。セッションの種類を確認する方法については、一般的なトラブルシューティング#セッションのパーミッション を見てください。ほとんどの場合、特に設定しなくても全て動作するはずです。
一部のアクション (システムのホスト名を変更するなど) においては、管理者のパスワードが必要です。そのような場合、自身のユーザを wheel
グループに追加し、パスワードのプロンプトを表示する Polkit の認証エージェントを実行する必要があります。
リモートセッションの場合 (例えば、ヘッドレス VNC)、NetworkManager を使用するために必要な特権を得る方法は複数あります:
- 自身を
wheel
グループに追加する。アクションの度にパスワードを入力する必要があります。注意点として、wheel
グループに追加すると他の権限 (root パスワードを入力せずに sudo を実行できるなど) も付与される場合があります。 - 自身を
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 は直接プロクシ設定を扱いませんが、GNOME や KDE を使っている場合、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
キャプティブポータル
キャプティブポータルが存在している場合、デスクトップマネージャが、資格情報を求めるウィンドウを自動的に開く場合があります。あなたのデスクトップ環境がこれを行わない場合、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
DNS の管理
NetworkManager の DNS 管理については、GNOME プロジェクトの wiki ページ Projects/NetworkManager/DNS で説明されています。
DNS キャッシングと条件付きフォワーディング
NetworkManager には、dnsmasq または systemd-resolved を使用して DNS キャッシングと条件付きフォワーディングを有効化するプラグインが存在します (以前は、"条件付きフォワーディング" は NetworkManager のドキュメントで "split DNS" と呼ばれていました)。このセットアップには、DNS ルックアップがキャッシュされるので名前解決の時間が短縮され、VPN ホストの DNS ルックアップが、関連する VPN の DNS サーバに転送されるという長所があります。これは、複数の VPN に接続する場合に特に便利です。
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.conf
に 127.0.0.1
を追加します。元の DNS サーバは /run/NetworkManager/no-stub-resolv.conf
を見れば分かります。dnsmasq が使用されているかどうかは、drill example.com
で同じ DNS ルックアップを2度行ってサーバとクエリの時間を計測すれば確認できます。
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 で 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.conf
で private_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-search
と dns-options
) を使うことで、接続毎に DNS サーバをセットアップすることができます。
method
が auto
に設定されている場合 (DHCP を使用する場合)、ignore-auto-dns
を yes
に設定する必要があります。
/etc/resolv.conf
NetworkManager の /etc/resolv.conf
管理モードは、main.rc-manager
で設定されます。networkmanager パッケージはこれを、上流のデフォルトである auto
ではなく、symlink
に設定します。設定と値は NetworkManager.conf(5) man ページでドキュメント化されています。
また、NetworkManager は、ネットワークの変更後に /etc/resolv.conf
を変更するために使用できる、いわゆるディスパッチャスクリプトを介したフックも提供します。詳細は #ネットワークサービスで NetworkManager dispatcher を使用する と NetworkManager(8) を参照してください。
管理対象外の /etc/resolv.conf
NetworkManager が /etc/resolv.conf
に干渉しないようにするには、/etc/NetworkManager/conf.d/
の設定ファイルで main.dns=none
を設定してください:
/etc/NetworkManager/conf.d/dns.conf
[main] dns=none
その後、/etc/resolv.conf
が壊れたシンボリックリンクになり、削除する必要が生じるかもしれません。その場合、新しい /etc/resolv.conf
ファイルを作成してください。
openresolv を使う
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 には、(例えば NFS や SMB、NTPd を使用する時などに) ネットワークに接続したらサービスを開始し、切断したらサービスを停止する機能があります。
この機能を有効化するには、NetworkManager-dispatcher.service
を有効化し、かつ起動する必要があります。
このサービスを有効化したら、/etc/NetworkManager/dispatcher.d
内にスクリプトを追加することができます。
スクリプトは root によって所有されていなければなりません。ディスパッチャは、root によって所有されていないスクリプトを実行しません。セキュリティを高めるために、スクリプトのグループ所有権も root に設定してください:
# chown root:root /etc/NetworkManager/dispatcher.d/10-script.sh
スクリプトファイルを実行可能にするのを忘れないでください。
スクリプトは、ネットワークへの接続時にはアルファベット順で実行され、切断時には逆アルファベット順で実行されます。実行される順番を保証するために、スクリプトの名前の前に数字を置くのが一般的です (例: 10-portmap
、30-netfs
。こうすることで、NFS がマウントを試みる前に、portmapper が立ち上がります)。
スクリプトは以下の引数を受け取ります:
- インターフェイス名: 例えば
eth0
- アクション: up、down、vpn-up、vpn-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
サービスを開始し、かつ有効化してください。
ディスパッチャの例
タイムゾーンを自動的に設定する
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 status
か nmcli 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
以下のスクリプトは、特定のネットワークから予期せずに切断されてしまった時に、全ての 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
代替案は、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
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
ディスパッチャを使って、ネットワーク接続が確立された後に VPN に接続する
この例では、特定の Wi-Fi ネットワークに接続した後に、以前定義された VPN 接続に自動的に接続したいと思います。最初にすべきことは、そのネットワークに接続した後にすることを定義するディスパッチャスクリプトを作成することです。
/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-flags
と secret-flags
を 1
から 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=パスワード
ディスパッチャを使って、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つ以上の接続を並行して管理する場合、up
、dhcp4-change
、dhcp6-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 モードとしてホットスポットかアドホックを選択してください。
これで、次回必要になるときのために接続は保存されます。
イーサネットでインターネット接続を共有する
シナリオ: デバイスが 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 ジョブやスクリプトでネットワークが立ち上がっているか確認する
一部の 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 では、そのようなネットワークは、そのネットワークをデフォルトで使用するユーザがログインした後にのみ、接続されるからです。この動作を変更するには、以下を行ってください:
- パネルの
nm-applet
のアイコンを右クリックし、"接続を編集する" を選択し、Wi-Fi タブを開いてください。 - 使いたい接続を選択し、編集ボタンをクリックしてください。
- “Connect Automatically” と “Available to all users” のボックスにチェックを入れてください。
- 加えて、"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 アドレスのランダム化を設定する
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 アドレスランダム化に関して、最も重要なモードは stable
と random
です。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 setting の dhcp-duid
の説明を参照してください。
有線接続の操作
NetworkManager は、デフォルトで、有線イーサネット接続を検出するたびにそれぞれに対して接続プロファイルを生成します。接続を生成する時点では、利用可能なイーサネットアダプターがさらにあるかどうかはわかりません。そのため、最初の有線接続は "有線接続 1" となります。no-auto-default
(NetworkManager.conf(5) を参照) を設定するか、単に削除することで、この接続を生成しないようにできます。そうすれば、NetworkManager はこのインターフェイスの接続を二度と生成しないように記憶します。
また、接続を編集 (およびディスクに永続化) したり、削除したりすることもできます。NetworkManager は新しい接続を再生成することはありません。それから、名前を好きなものに変更することができます。この作業には nm-connection-editor などを使うことができます。
Wi-Fi バックエンドとして iwd を使用する
実験的な iwd バックエンドを有効化するには、iwd をインストールしてから、以下の設定ファイルを作成してください:
/etc/NetworkManager/conf.d/wifi_backend.conf
[device] wifi.backend=iwd
または、networkmanager-iwdAUR をインストールすることもできます。これは、iwd のみで動作する NetworkManager をビルドするように設定された修正パッケージです。主な違いは、iwd が必要であり、wpa_supplicant はビルド後にアンインストールできることです。
ネットワーク名前空間内で実行する
ネットワーク名前空間内で 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 チップにはデフォルトの規制範囲が設定されています。アクセスポイントがその規制内で動作しない場合、そのネットワークに接続することはできません。これは簡単に解決できます:
- wireless-regdb をインストールしてください。
/etc/conf.d/wireless-regdom
で適切な国名コードをアンコメントしてください。- システムを再起動してください。この設定はブート時にしか読み込まれないからです。
ブート時の 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
の出力を確認し、ソフトブロックされ続けるかどうか確認してください。
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 の設定を有効化してください。