iwd (Português)
O iwd (iNet wireless daemon) é um daemon sem fio para Linux escrito pela Intel. O objetivo principal do projeto é otimizar a utilização de recursos, não dependendo de nenhuma biblioteca externa e, em vez disso, utilizando os recursos fornecidos pelo Kernel Linux na máxima extensão possível.
O iwd pode funcionar no modo autônomo ou em combinação com gerentes de rede abrangentes, como ConnMan, systemd-networkd e NetworkManager.
Instalação
Uso
O pacote iwd fornece o programa cliente iwctl
, o daemon iwd
e a ferramenta de monitoramento Wi-Fi iwmon
.
Inicie/habilite iwd.service
para que possa ser controlado usando o comando iwctl
.
iwctl
Para obter um prompt interativo, faça:
$ iwctl
O prompt interativo é exibido com um prefixo de [iwd]#
.
- No prompt
iwctl
você pode concluir automaticamente os comandos e nomes de dispositivos pressionandoTab
. - Para sair do prompt interativo, envie EOF pressionando
Ctrl+d
. - Você pode usar todos os comandos como argumentos de linha de comando sem inserir um prompt interativo. Por exemplo:
iwctl device wlp3s0 show
.
Para listar todos os comandos disponíveis:
[iwd]# help
Conectar a uma rede
Primeiro, se você não souber o nome do seu dispositivo sem fio, liste todos os dispositivos Wi-Fi:
[iwd]# device list
Em seguida, para procurar redes:
[iwd]# station dispositivo scan
Você pode listar todas as redes disponíveis:
[iwd]# station dispositivo get-networks
Por fim, para conectar-se a uma rede:
[iwd]# station dispositivo connect SSID
station
e Tab
Tab
, os dispositivos disponíveis são mostrados, digite a primeiras letras do dispositivo e Tab
para completar. Do mesmo modo, digite connect
e Tab
Tab
para ver a lista de redes disponíveis. Então, digite as primeiras letras da rede desejada seguida de Tab
para completar o comando.Se uma senha for necessária, você será solicitado a digitá-la. Como alternativa, você pode fornece-la como argumento da linha de comando:
$ iwctl --passphrase senha station dispositivo connect SSID
- O
iwd
armazena automaticamente as senhas da rede no diretório/var/lib/iwd
e os usa para se conectar automaticamente no futuro. Veja #Configuração de rede. - Para conectar-se a uma rede com espaços no SSID, o nome da rede deve estar entre aspas duplas.
- O iwd suporta apenas senhas PSK de 8 a 63 caracteres codificados em ASCII. A seguinte mensagem de erro será fornecida se os requisitos não forem atendidos:
PMK generation failed. Ensure Crypto Engine is properly configured
.
Conecte-se a uma rede usando WPS/WSC
Se sua rede estiver configurada de forma que você possa conectar-se a ela pressionando um botão (Wikipedia:Wi-Fi Protected Setup), verifique primeiro se o seu dispositivo de rede também é capaz de usar este procedimento de configuração.
[iwd]# wsc list
Então, desde que seu dispositivo apareça na lista acima,
[iwd]# wsc dispositivo push-button
e pressione o botão no seu roteador. O procedimento também funciona se o botão foi pressionado antes, menos de 2 minutos antes.
Se sua rede precisar validar um número PIN para conectar-se dessa maneira, verifique o comando help
saída para ver como fornecer as opções corretas para o comando wsc
.
Desconectar de uma rede
Para desconectar-se de uma rede:
[iwd]# station dispositivo disconnect
Mostrar informações do dispositivo e da conexão
Para exibir os detalhes de um dispositivo Wi-Fi, como endereço MAC:
[iwd]# device dispositivo show
Para exibir o estado da conexão, incluindo a rede conectada de um dispositivo Wi-Fi:
[iwd]# station dispositivo show
Gerenciar redes conhecidas
Para listar as redes às quais você se conectou anteriormente:
[iwd]# known-networks list
Para esquecer uma rede conhecida:
[iwd]# known-networks SSID forget
Configuração de rede
Por padrão, iwd
guarda a configuração de rede no diretório /var/lib/iwd
. O arquivo de configuração é nomeado como rede.tipo
onde rede é o SSID e tipo é o tipo da rede, como "open", "wep", "psk", "8021x". O arquivo é usado para guardar o PreSharedKey
criptografado e opcionalmente a Passphrase
e pode ser criada pelo usuário sem invocar o iwctl
. O arquivo pode também ser usado para outras configurações referentes àquele SSID. Para mais configurações, veja iwd.network(5).
WPA-PSK
Um exemplo pequeno de arquivo para se conectar a uma rede protegida por WPA-PSK ou WPA2-PSK com o SSID "spaceship" e senha "test1234":
/var/lib/iwd/spaceship.psk
[Security] PreSharedKey=aafb192ce2da24d8c7805c956136f45dd612103f086034c402ed266355297295
a PreSharedKey
pode ser calculada do SSID e a senha do WiFi usando o wpa_passphrase (do wpa_supplicant) ou wpa-pskAUR:
$ wpa_passphrase spaceship test1234
network={ ssid="spaceship" #psk="test1234" psk=aafb192ce2da24d8c7805c956136f45dd612103f086034c402ed266355297295 }
- Se o SSID contém espaços ou outros caracteres especiais, ele deve estar entre aspas para ser lido corretamente pelo wpa_passphrase executado pelo shell.
- O SSID da rede é usado como nome do arquivo quando somente contém caracteres alfanuméricos ou
- _
. Se tem quaisquer outros caracteres, o nome vai ser um=
-caractere seguido por uma versão do SSID codificada em hexadecimal.
WPA Empresarial
EAP-PWD
Para conectar-se a um ponto de acesso corporativo protegido por EAP-PWD, é necessário criar um arquivo chamado: essid.8021x
na pasta /var/lib/iwd
com o seguinte conteúdo:
/var/lib/iwd/essid.8021x
[Security] EAP-Method=PWD EAP-Identity=seu_e-mail_empresarial EAP-Password=sua_senha [Settings] AutoConnect=True
Se você não deseja se conectar automaticamente ao ponto de acesso, defina a opção como False e conecte manualmente ao ponto de acesso via iwctl
. O mesmo se aplica à senha, se você não quiser armazená-la em texto sem formatação, deixe a opção fora do arquivo e apenas conecte-se ao AP da empresa.
EAP-PEAP
Como o EAP-PWD, você também precisa criar um essid.8021x
na pasta Antes de prosseguir com a gravação do arquivo de configuração, este também é um bom momento para descobrir qual certificado CA sua organização usa. Para MSCHAPv2 funcionar você também precisa instalar ppp. Veja MS-CHAPv2 para mais informação. Este é um arquivo de configuração de exemplo que usa autenticação de senha MSCHAPv2:
/var/lib/iwd/essid.8021x
[Security] EAP-Method=PEAP [email protected] EAP-PEAP-CACert=/path/to/root.crt EAP-PEAP-ServerDomainMask=radius.realm.edu EAP-PEAP-Phase2-Method=MSCHAPV2 [email protected] EAP-PEAP-Phase2-Password=hunter2 [Settings] AutoConnect=true
TTLS-PAP
Como o EAP-PWD, você também precisa criar um essid.8021x
na pasta Antes de prosseguir com a gravação do arquivo de configuração, este também é um bom momento para descobrir qual certificado CA sua organização usa. Este é um exemplo de arquivo de configuração que usa autenticação de senha PAP:
/var/lib/iwd/essid.8021x
[Security] EAP-Method=TTLS [email protected] 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 oferece uma configuration assistant tool (CAT), que infelizmente não suporta iwd. No entanto, o instalador, que você pode baixar clicando no botão de download e selecionando sua universidade, é apenas um script Python. É fácil extrair as opções de configuração necessárias, incluindo o certificado e a máscara de domínio do servidor.
A tabela a seguir contém um mapeamento das opções de configuração do iwd para variáveis de script de instalação do CAT eduroam.
Opção de configuração de Iwd | Variável de Script CAT |
---|---|
nome do arquivo | um de Config.ssids
|
EAP-Method |
Config.eap_outer
|
EAP-Identity |
Config.anonymous_identity
|
EAP-PEAP-CACert |
Config.CA
|
EAP-PEAP-ServerDomainMask |
um de Config.servers
|
EAP-PEAP-Phase2-Method |
Config.eap_inner
|
EAP-PEAP-Phase2-Identity |
username@Config.user_realm
|
-
EAP-Identity
pode não ser necessário pelo seu provedor Eduroam; nesse caso, você pode usaranonymous
nesta área. - Se sua
EAP-PEAP-ServerDomainMask
começa comDNS:
, somente use a parte depois doDNS:
.
Outros casos
Mais exemplos de testes podem ser encontrados nos casos de teste do repositório upstream.
Configuração opcional
O arquivo /etc/iwd/main.conf
pode ser usado para a configuração principal. Veja iwd.config(5).
Desativar a conexão automática para uma rede específica
Criar/editar o arquivo /var/lib/iwd/rede.tipo
. Adicione a seguinte seção a ele:
/var/lib/iwd/spaceship.psk (por exemplo)
[Settings] AutoConnect=false
Desativar verificação periódica para redes disponíveis
Por padrão, quando iwd
estiver desconectado, ele verifica periodicamente as redes disponíveis. Para desativar a verificação periódica (para sempre verificar manualmente), criar/editar o arquivo /etc/iwd/main.conf
e adicione a seguinte seção a ele:
/etc/iwd/main.conf
[Scan] DisablePeriodicScan=true
Ativar configuração de rede embutida
Desde a versão 0.19, o iwd pode atribuir endereços IP e configurar rotas usando um cliente DHCP embutido ou com configuração estática. É uma boa alternativa para clientes DHCP independentes.
Para ativar o recurso de configuração de rede do iwd, crie/edite o arquivo /etc/iwd/main.conf
e adicione a seguinte seção a ele:
/etc/iwd/main.conf
[General] EnableNetworkConfiguration=true
Também é possível definir métricas de rota com RoutePriorityOffset
:
/etc/iwd/main.conf
[Network] RoutePriorityOffset=300
IPv6 support
Desde a versão 1.10, iwd suporta IPv6, mas isso é desabilitado por padrão. Para habilitar, adicione a seguinte linha no arquivo de configuração:
/etc/iwd/main.conf
[Network] EnableIPv6=true
Esta configuração é necessária caso queira usar o DHCPv6 ou IPv6 estático. Pode também ser configurado para redes em específico.
Definindo o endereço IP estático na configuração de rede
Adicione a seguinte seção ao arquivo /var/lib/iwd/rede.tipo
. Por exemplo:
/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
Selecione o gerenciador de DNS
No momento, o iwd suporta dois gerenciadores de DNS -systemd-resolved e resolvconf.
Adicione a seguinte seção ao /etc/iwd/main.conf
para systemd-resolved
:
/etc/iwd/main.conf
[Network] NameResolvingService=systemd
Para resolvconf
:
/etc/iwd/main.conf
[Network] NameResolvingService=resolvconf
Negar que o usuário do console (local) modifique as configurações
Por padrão o iwd
A interface D-Bus permite qualquer usuário do console ao qual se conectar iwd
daemon e modifique as configurações, mesmo que esse usuário não seja um usuário root.
Se você não quiser permitir que o usuário do console modifique as configurações, mas permita a leitura das informações de status, crie um arquivo de configuração do D-Bus da seguinte maneira.
/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>
Solução de problemas
Depuração detalhada do TLS
Isso pode ser útil se você tiver problemas para configurar o MSCHAPv2 ou TTLS. Você pode definir o seguinte variável de ambiente via trecho drop-in:
/etc/systemd/system/iwd.service.d/tls-debug.conf
[Service] Environment=IWD_TLS_DEBUG=TRUE
Verifique os logs do iwd posteriormente via journalctl -u iwd.service
Problemas de conexão após a reinicialização
Um pool de baixa entropia pode causar problemas de conexão, particularmente perceptíveis após a reinicialização. Vejo Random number generation for suggestions to increase the entropy pool.
O dispositivo sem fio não é renomeado pelo udev
Desde a versão 1.0, iwd desabilita o renomeamento do dispositivo sem fio. Ele instala o seguinte arquivo de configuração de rede do systemd que previne udev de renomear a interface para wlp#s#
:
/usr/lib/systemd/network/80-iwd.link
[Match] Type=wlan [Link] NamePolicy=keep kernel
Como resultado, o nome do link sem fio wlan#
é mantido após a inicialização. Isto resolve uma condição de corrida entre iwd e udev no renomeamento da interface como explicado em iwd udev interface renaming.
Se isso resultar em problemas, tente mascará-lo com:
# ln -s /dev/null /etc/systemd/network/80-iwd.link