iwd
IWD (iNet wireless daemon) は Intel によって書かれた Linux 用の無線デーモンです。プロジェクトの中心的な目標は、外部ライブラリに依存せず、Linux カーネルが提供する機能を最大限に活用することにより、リソース使用率を最適化することです。
iwd はスタンドアロンでも動作しますが ConnMan、systemd-networkd や NetworkManager のような包括的なネットワークマネージャーとの組み合わせて使うこともできます。
インストール
使用方法
iwd パッケージにはクライアントプログラムの iwctl
とデーモンの iwd
、そして Wi-Fi 監視ツールの iwmon
が含まれています。
iwd デーモンを実行したら (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
To calculate the presharedkey from the passphrase, one of these two methods can be used:
- Enter the passphrase in cleartext in the configuration file:
/var/lib/iwd/spaceship.psk
[Security] Passphrase=test1234
The presharedkey will be appended to the file at the first connect:
/var/lib/iwd/spaceship.psk
[Security] Passphrase=test1234 PreSharedKey=aafb192ce2da24d8c7805c956136f45dd612103f086034c402ed266355297295
- Or the presharedkey can be calculated from the SSID and the passphrase using wpa_passphrase (from wpa_supplicant) or wpa-pskAUR. See wpa_supplicant#Connecting with wpa_passphrase for more details.
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
Like EAP-PWD, you also need to create a essid.8021x
in the folder. Before you proceed to write the configuration file, this is also a good time to find out which CA certificate your organization uses. For MSCHAPv2 to work you also need to install ppp. Please see MS-CHAPv2 for more infos. This is an example configuration file that uses MSCHAPv2 password authentication:
/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
TTLS-PAP
Like EAP-PWD, you also need to create a essid.8021x
in the folder. Before you proceed to write the configuration file, this is also a good time to find out which CA certificate your organization uses. This is an example configuration file that uses PAP password authentication:
/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 offers a configuration assistant tool (CAT), which unfortunately does not support iwd. However, the installer, which you can download by clicking on the download button then selecting your university, is just a Python script. It is easy to extract the necessary configuration options, including the certificate and server domain mask.
The following table contains a mapping of iwd configuration options to eduroam CAT install script variables.
Iwd Configuration Option | CAT Script Variable |
---|---|
file name | one of Config.ssids
|
EAP-Method |
Config.eap_outer
|
EAP-Identity |
Config.anonymous_identity
|
EAP-PEAP-CACert |
Config.CA
|
EAP-PEAP-ServerDomainMask |
one of Config.servers
|
EAP-PEAP-Phase2-Method |
Config.eap_inner
|
EAP-PEAP-Phase2-Identity |
username@Config.user_realm
|
Other cases
More example tests can be found in the test cases of the upstream repository.
任意設定
メインの設定は /etc/iwd/main.conf
ファイルで行います。
ネットワーク (SSID) の設定は /var/lib/iwd
ディレクトリを使用します。
特定のネットワークで自動接続を無効化
/var/lib/iwd/network.type
ファイルを作成・編集してください (network はネットワークの SSID に、type は "open", "wep", "psk", "8021x" のどれかのネットワークタイプに置き換えてください)。そしてファイルに以下のセクションを追加してください:
/var/lib/iwd/spaceship.psk
[Settings] Autoconnect=false
Disable periodic scan for available networks
By default when iwd
is in disconnected state, it periodically scans for available networks. To disable periodic scan (so as to always scan manually), create / edit file /etc/iwd/main.conf
and add the following section to it:
/etc/iwd/main.conf
[Scan] DisablePeriodicScan=true
Enable built-in network configuration
Since version 0.19, iwd can assign IP address(es) and set up routes using a built-in DHCP client or with static configuration. It is a good alternative to standalone DHCP clients.
To activate iwd's network configuration feature, create/edit /etc/iwd/main.conf
and add the following section to it:
/etc/iwd/main.conf
[General] EnableNetworkConfiguration=true
There is also ability to set route metric with RoutePriorityOffset
:
/etc/iwd/main.conf
[Network] RoutePriorityOffset=300
IPv6 support
Since version 1.10, iwd supports IPv6, but it is disabled by default. To enable it, add the following to the configuration file:
/etc/iwd/main.conf
[Network] EnableIPv6=true
This setting is required whether you want to use DHCPv6 or static IPv6 configuration. It can also be set on a per-network basis.
Setting static IP address in network configuration
Add the following section to /var/lib/iwd/network.type
file. For example:
/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
Select DNS manager
At the moment, iwd supports two DNS managers—systemd-resolved and resolvconf.
Add the following section to /etc/iwd/main.conf
for systemd-resolved
:
/etc/iwd/main.conf
[Network] NameResolvingService=systemd
For 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>
Troubleshooting
Verbose TLS debugging
This can be useful, if you have trouble setting up MSCHAPv2 or TTLS. You can set the following environment variable via a drop-in snippet:
/etc/systemd/system/iwd.service.d/tls-debug.conf
[Service] Environment=IWD_TLS_DEBUG=TRUE
Check the iwd logs afterwards via journalctl -u iwd.service
Connect issues after reboot
A low entropy pool can cause connection problems in particular noticeable after reboot. See Random number generation for suggestions to increase the entropy pool.
Wireless device is not renamed by udev
Since version 1.0, iwd disables predictable renaming of wireless device. It installs the following systemd network link configuration file which prevents udev from renaming the interface to wlp#s#
:
/usr/lib/systemd/network/80-iwd.link
[Match] Type=wlan [Link] NamePolicy=keep kernel
As a result the wireless link name wlan#
is kept after boot. This resolved a race condition between iwd and udev on interface renaming as explained in iwd udev interface renaming.
If this results in issues try masking it with:
# ln -s /dev/null /etc/systemd/network/80-iwd.link