iwd
iwd (iNet wireless daemon) は Intel によって書かれた Linux 用の無線デーモンです。プロジェクトの中心的な目標は、外部ライブラリに依存せず、Linux カーネルが提供する機能を最大限に活用することにより、リソース使用率を最適化することです。
iwd はスタンドアロンでも動作しますが ConnMan、systemd-networkd や NetworkManager のような包括的なネットワークマネージャーとの組み合わせて使うこともできます。
インストール
使用方法
iwd パッケージにはクライアントプログラムの iwctl
とデーモンの iwd
、そして Wi-Fi 監視ツールの iwmon
が含まれています。
iwd.service
を起動・有効化)したら、iwctl
コマンドを使って制御することができます。
iwctl
対話型プロンプトを表示するには、次のようにします:
$ iwctl
対話型プロンプトは、プレフィックスが、[iwd]#
と表示されます。
使用可能なすべてのコマンドの一覧を表示するには:
[iwd]# help
ネットワークに接続する
先ず、ワイヤレスデバイス名がわからない場合は、すべての Wi-Fiデバイスを一覧表示します:
[iwd]# device list
次に、ネットワークをスキャンします:
[iwd]# station device scan
利用可能なすべてのネットワークを一覧表示できます:
[iwd]# station device get-networks
最後に、ネットワークに接続するには:
[iwd]# station device connect SSID
パスフレーズが必要な場合は、入力を求められます。コマンドライン引数として指定することもできます:
$ iwctl --passphrase passphrase station device connect SSID
WPS/WSC を使用してネットワークに接続する
ボタンを押してネットワークに接続できるように設定されている場合 (Wikipedia:ja:Wi-Fi Protected Setup) は、まず、ネットワークデバイスがこのセットアップ手順を使用できることを確認してください。
[iwd]# wsc list
次に、デバイスが上記のリストに表示されている場合、
[iwd]# wsc device push-button
それから、ルーターのボタンを押します。この手順は、2分以内にボタンを事前に押した場合にも機能します。
ネットワークがその方法で接続するために、PIN 番号を検証する必要がある場合は、help コマンド出力をチェックして、wsc
コマンドに適切なオプションを提供する方法を確認してください。
ネットワークから切断する
ネットワークから切断するには:
[iwd]# station device disconnect
デバイスと接続情報を表示する
MAC アドレスなどの WiFi デバイスの詳細を表示するには:
[iwd]# device device show
WiFi デバイスの接続ネットワークを含む接続状態を表示するには:
[iwd]# station device show
既知のネットワークの管理
以前に接続したネットワークを一覧表示するには:
[iwd]# known-networks list
既知のネットワークを忘れるには:
[iwd]# known-networks SSID forget
ネットワーク設定
デフォルトでは、iwd はネットワーク設定を /var/lib/iwd
ディレクトリに保存します。設定ファイルの名前は、network.type
となります。network はネットワーク SSID で .type はネットワークタイプ(.open、.wep、.psk または .8021x)です。このファイルは暗号化された事前共有鍵
と、オプションでクリアテキストのパスフレーズ
を保存するために使用され、ユーザー iwctl を呼び出さずに作成することもできます。このファイルは、そのネットワーク SSID に関連する他の設定にも使用できます。詳細な設定については、iwd.network(5) を参照してください。
WPA-PSK
SSID "spaceship" とパスフレーズ "test1234" を使用して WPA-PSK または WPA2-PSK で保護されたネットワークに接続するための最小限のサンプルファイル:
/var/lib/iwd/spaceship.psk
[Security] PreSharedKey=aafb192ce2da24d8c7805c956136f45dd612103f086034c402ed266355297295
パスフレーズから事前共有鍵を計算するには、次の二つの方法のいずれかを使用できます:
- 設定ファイルにクリアテキストでパスフレーズを入力します:
/var/lib/iwd/spaceship.psk
[Security] Passphrase=test1234
事前共有鍵は、最初の接続時にファイルに追加されます。
/var/lib/iwd/spaceship.psk
[Security] Passphrase=test1234 PreSharedKey=aafb192ce2da24d8c7805c956136f45dd612103f086034c402ed266355297295
- もしくは、事前共有鍵は、wpa_passphrase (wpa_supplicant から) または wpa-pskAUR を使用して、SSID とパスフレーズから計算できます。詳細については wpa_supplicant#wpa_passphrase で接続する を参照してください。
WPA Enterprise
EAP-PWD
EAP-PWD で保護されたエンタープライズアクセスポイントに接続するには /var/lib/iwd
フォルダに以下の内容で essid.8021x
という名前のファイルを作成する必要があります:
/var/lib/iwd/essid.8021x
[Security] EAP-Method=PWD EAP-Identity=your_enterprise_email EAP-Password=your_password [Settings] AutoConnect=True
アクセスポイントに自動接続したくない場合、Autoconnect オプションを False に設定して iwctl
で手動でアクセスポイントに接続してください。パスワードを平文で保存したくない場合は、ファイルからパスワードの設定を外してください。
EAP-PEAP
EAP-PWD と同様に、フォルダー内に essid.8021x
を作成する必要があります。設定ファイルの作成に進む前に、組織が使用している CA 証明証を確認する良い機会でもあります。これは MSCHAPv2 パスワード認証を使用する設定ファイルの例です:
/var/lib/iwd/essid.8021x
[Security] EAP-Method=PEAP EAP-Identity=anonymous@realm.edu EAP-PEAP-CACert=/path/to/root.crt EAP-PEAP-ServerDomainMask=radius.realm.edu EAP-PEAP-Phase2-Method=MSCHAPV2 EAP-PEAP-Phase2-Identity=johndoe@realm.edu EAP-PEAP-Phase2-Password=hunter2 [Settings] AutoConnect=true
MsCHAPv2 パスワードは、暗号化されたハッシュとして保存することもできます。正しい md4 ハッシュは次のように計算できます: (パスワードの後に EOF を挿入し、Enter キーを押さないでください)
$ iconv -t utf16le | openssl md4
結果のハッシュは、EAP-PEAP-Phase2-Password-Hash
キー内に保存する必要があります。
TTLS-PAP
EAP-PWD と同様に、フォルダー中に essid.8021x
を作成する必要があります。設定ファイルの作成に進む前に、組織が使用している CA 証明書を確認する良い機会でもあります。これは、PAP パスワード認証を使用する設定ファイルの例です:
/var/lib/iwd/essid.8021x
[Security] EAP-Method=TTLS EAP-Identity=anonymous@uni-test.de EAP-TTLS-CACert=cert.pem EAP-TTLS-ServerDomainMask=*.uni-test.de EAP-TTLS-Phase2-Method=Tunneled-PAP EAP-TTLS-Phase2-Identity=user EAP-TTLS-Phase2-Password=password [Settings] AutoConnect=true
Eduroam
Eduroam は 設定アシスタントツール(CAT) を提供していますが、残念ながら iwd には対応していません。しかし、ダウンロードボタンをクリックし、大学を選択してダウンロードできるインストーラは単なる Python スクリプトです。証明書やサーバのドメインマスクなど、必要な設定オプションを簡単に抽出することができます。
以下の表は、iwd の設定オプションと eduroam CAT のインストールスクリプトの変数の対応を示します。
Iwd 設定オプション | CAT スクリプト変数 |
---|---|
file name | Config.ssids の一つ
|
EAP-Method |
Config.eap_outer
|
EAP-Identity |
Config.anonymous_identity
|
EAP-PEAP-CACert |
Config.CA
|
EAP-PEAP-ServerDomainMask |
Config.servers の一つ
|
EAP-PEAP-Phase2-Method |
Config.eap_inner
|
EAP-PEAP-Phase2-Identity |
ユーザー名@Config.user_realm
|
その他のケース
その他のテスト例は、上流リポジトリの テストケースにあります。
任意設定
メインの設定は /etc/iwd/main.conf
ファイルで行います。
iwd.config(5) を参照してください。
特定のネットワークで自動接続を無効化
/var/lib/iwd/network.type
ファイルを作成・編集してください (network はネットワークの SSID に、type は "open", "wep", "psk", "8021x" のどれかのネットワークタイプに置き換えてください)。そしてファイルに以下のセクションを追加してください:
/var/lib/iwd/spaceship.psk
[Settings] Autoconnect=false
利用可能なネットワークの定期スキャンを無効にする
デフォルトでは、 iwd
は切断状態の場合、利用可能なネットワークを定期的にスキャンします。定期スキャンを無効にする(常に手動でスキャンする)には、/etc/iwd/main.conf
ファイルを作成/編集し、以下のセクションを追加します:
/etc/iwd/main.conf
[Scan] DisablePeriodicScan=true
内蔵ネットワーク設定の有効化
バージョン 0.19 以降、iwd は内蔵の DHCP クライアントまたは静的な設定を使用して、IPアドレスの割り当てとルートの設定を行うことができます。これは、スタンドアロン DHCP クライアントの良い代替手段です。
iwd のネットワーク設定機能を有効にするには、//etc/iwd/main.conf
を作成・編集し、以下のセクションを追加します:
/etc/iwd/main.conf
[General] EnableNetworkConfiguration=true
また、RoutePriorityOffset
でルートメトリックを設定する機能もあります:
/etc/iwd/main.conf
[Network] RoutePriorityOffset=300
IPv6 support
バージョン 1.10 以降、iwd は IPv6 をサポートしていますが、デフォルトでは無効になっています。IPv6 を有効にするには、設定ファイルに以下を追加します:
/etc/iwd/main.conf
[Network] EnableIPv6=true
この設定は、DHCPv6 または 静的 IPv6 設定のどちらを使用する場合でも必要です。ネットワーク毎に設定することもできます。
ネットワーク構成での静的 IP アドレスの設定
次のセクションを /var/lib/iwd/network.type
ファイルに追加します。例えば:
/var/lib/iwd/spaceship.psk
[IPv4] Address=192.168.1.10 Netmask=255.255.255.0 Gateway=192.168.1.1 Broadcast=192.168.1.255 DNS=192.168.1.1
DNS マネージャーの選択
現在、iwd は systemd-resolved と resolvconf の二つの DNS マネージャーをサポートしています。
systemd-resolved
の場合、次のセクションを /etc/iwd/main.conf
に追加します:
/etc/iwd/main.conf
[Network] NameResolvingService=systemd
resolvconf
の場合:
/etc/iwd/main.conf
[Network] NameResolvingService=resolvconf
コンソール (ローカル) ユーザーが設定を変えられないようにする
デフォルトでは iwd
の D-Bus インターフェイスは (たとえユーザーが "root" でなくても) 誰でも iwd
デーモンに接続して設定を変更できるようになっています。
コンソールユーザーが設定を編集できないようにしたい場合、以下のように D-Bus 設定ファイルを作成してください:
/etc/dbus-1/system.d/iwd-strict.conf
<!-- prevent local users from changing iwd settings, but allow reading status information. overrides some part of /usr/share/dbus-1/system.d/iwd-dbus.conf. --> <!-- This configuration file specifies the required security policies for iNet Wireless Daemon to work. --> <!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd"> <busconfig> <policy at_console="true"> <deny send_destination="net.connman.iwd"/> <allow send_destination="net.connman.iwd" send_interface="org.freedesktop.DBus.Properties" send_member="GetAll" /> <allow send_destination="net.connman.iwd" send_interface="org.freedesktop.DBus.Properties" send_member="Get" /> <allow send_destination="net.connman.iwd" send_interface="org.freedesktop.DBus.ObjectManager" send_member="GetManagedObjects" /> <allow send_destination="net.connman.iwd" send_interface="net.connman.iwd.Device" send_member="RegisterSignalLevelAgent" /> <allow send_destination="net.connman.iwd" send_interface="net.connman.iwd.Device" send_member="UnregisterSignalLevelAgent" /> </policy> </busconfig>
トラブルシューティング
詳細な TLS デバッグ
これは、MSCHAPv2 または TTLS の設定に問題がある場合に役立ちます。 ドロップインスニペット を使用して、次の環境変数を設定できます。
/etc/systemd/system/iwd.service.d/tls-debug.conf
[Service] Environment=IWD_TLS_DEBUG=TRUE
その後、root で journalctbl -u iwd.service
を実行して、iwd ログを確認します。
起動後の iwd.service の再起動
一部のマシンでは、起動後に動作するために iwd.service
を再起動する必要があると報告されています。FS#63912 と thread 251432 を参照してください。これはおそらく、Linux カーネルとサービスの起動が早すぎて、ワイヤレスネットワークカードの電源がオンになる前に、iwd が起動するために発生します。回避策として、ユニットを拡張して、遅延時間を追加します。
[Service] ExecStartPre=/usr/bin/sleep 2
次に systemd マネージャーの設定をリロードします。
再起動後の接続の問題
エントロピープールが低いと、特に再起動後に顕著な接続の問題が発生する可能性があります。エントロピープールを増やすための提案については、乱数生成 を参照してください。
ワイヤレスデバイスが udev によって名前が変更されない
バージョン 1.0 以降、iwd は無線デバイスの予測可能な名前変更を無効にします。これは以下の systemd ネットワークリンク設定ファイルをインストールすることで、 udev がインターフェースの名前を wlp#s#
に変更するのを防ぎます。
/usr/lib/systemd/network/80-iwd.link
[Match] Type=wlan [Link] NamePolicy=keep kernel
その結果、ワイヤレスリンク名 wlan#
は起動後も保持されます。これにより、iwd udev インターフェイス名前変更で説明されているように、インターフェイスの名前変更に関する iwd と udev 間の競合状態を解決しました。
もし、これが問題になるなら、次のコマンドでマスクしてみてください。
# ln -s /dev/null /etc/systemd/network/80-iwd.link
AP モードで DHCP が使えない
AP モードで iwd に接続する場合、クライアントは DHCP で IP アドレスを受け取れない場合があります。そのため、管理対象のインターフェイス上で、 iwd によるネットワーク設定を有効にする必要があります。
/etc/iwd/main.conf
[General] EnableNetworkConfiguration=True
上記のファイルが存在しない場合は、作成する必要があります。
参照
- Getting Started with iwd
- Network Configuration Settings
- More Examples for WPA Enterprise
- The IWD thread on the Arch Linux Forums
- 2017 Update on new WiFi daemon for Linux by Marcel Holtmann - YouTube
- The New Wi-Fi Experience for Linux - Marcel Holtmann, Intel - YouTube
- How to set up a simple access point with iwd