NetworkManager (Português)
O NetworkManager é um programa que provê a detecção e configuração automática de redes para computadores. As funcionalidades do NetworkManager são úteis para redes sem fio e cabeadas. Nas redes sem fio, o NetworkManager terá preferência pelas redes que já conhece, e possui a habilidade para trocar para a rede mais confiável sempre que disponível. Aplicativos preparados para o NetworkManager podem trocar do modo online para o offline. O NetworkManager tem preferência pelas redes cabeadas em detrimento das redes sem fio, e possui suporte a certos tipos de VPN. Foi originalmente desenvolvido pela Red Hat e agora, é hospedado no projeto GNOME.
Instalação
O NetworkManager pode ser instalado com o pacote networkmanager, que contém um daemon, uma interface de linha de comando (nmcli
) e uma interface baseada em curses (nmtui
).
Habilitar NetworkManager
Após a instalação, você deve iniciar/habilitar NetworkManager.service
. Uma vez iniciado o daemon do NetworkManager, ele se conectará automaticamente a todas as "conexões do sistema" disponíveis que já foram configuradas. Quaisquer "conexões de usuário" ou conexões não configuradas precisarão de nmcli ou um miniaplicativo para configurar e conectar.
Interfaces adicionais
- nm-connection-editor para uma interface gráfica de usuário,
-
network-manager-applet para um miniaplicativo de bandeja de sistema (
nm-applet
).
systemctl --type=service
e, em seguida, parar. Veja #Configuração para ativar o serviço NetworkManager.Suporte a banda larga móvel
Instale os pacotes modemmanager, mobile-broadband-provider-info e usb_modeswitch para um suporte a conexão de banda larga móvel. Veja USB 3G Modem#NetworkManager para detalhes.
Suporte a PPPoE / DSL
Instale o pacote rp-pppoe para suporte a conexão PPPoE/DSL. Para realmente adicionar uma conexão PPPoE, use nm-connection-editor
e adicione uma nova conexão DSL/PPPoE.
Suporte a VPN
O NetworkManager desde a versão 1.16 tem suporte nativo ao WireGuard, precisando apenas de seu módulo de kernel wireguard
. Leia o WireGuard na publicação de blog do NetworkManager.
O suporte para outros tipos de VPN é baseado em um sistema de plug-in. Eles são fornecidos nos seguintes pacotes:
- networkmanager-openconnect para OpenConnect
- networkmanager-openvpn para OpenVPN
- networkmanager-pptp para PPTP Client
- networkmanager-vpnc para Vpnc
- networkmanager-strongswan para strongSwan
- networkmanager-fortisslvpn-gitAUR
- networkmanager-iodine-gitAUR
- networkmanager-libreswanAUR
- networkmanager-l2tp
- networkmanager-ssh-gitAUR
- network-manager-sstp
Uso
NetworkManager vem com nmcli(1) e nmtui(1).
Exemplos de nmcli
Lista redes wifi próximas:
$ nmcli device wifi list
Conecta a uma rede wifi:
$ nmcli device wifi connect SSID password senha
Conecta a uma rede oculta:
$ nmcli device wifi connect SSID password senha hidden yes
Conecta a um wifi na interface de rede wlan1
:
$ nmcli device wifi connect SSID password senha ifname wlan1 nome_perfil
Desconecta uma interface:
$ nmcli device disconnect ifname eth0
Reconecta uma interface marcada como desconectada:
$ nmcli connection up uuid UUID
Obtém uma lista de UUIDs:
$ nmcli connection show
Vê uma lista de dispositivos de rede e seus estados:
$ nmcli device
Desliga o wifi:
$ nmcli radio wifi off
Editar uma conexão
Para uma lista compreensiva de configurações, veja nm-settings(5).
Em primeiro lugar você precisa obter lista de conexões:
$ nmcli connection
NAME UUID TYPE DEVICE Conexão cabeada 2 e7054040-a421-3bef-965d-bb7d60b7cecf ethernet enp5s0 Conexão cabeada 1 997f2782-f0fc-301d-bfba-15421a2735d8 ethernet enp0s25 MEU-WIFI-DE-CASA 92a0f7b3-2eba-49ab-a899-24d83978f308 wifi --
Aqui você pode usar a primeira coluna como ID de conexão usada posteriormente. Neste exemplo, escolhemos Conexão cabeada 2
como um ID de conexão.
Você pode ter três métodos para configurar uma conexão após Conexão cabeada 2
ter sido criada:
- Editor interativo do nmcli
-
nmcli connection edit Conexão cabeada 2
.
O uso está bem documentado no editor.
- Interface de linha de comando do nmcli
-
nmcli connection modify Conexão cabeada 2 definição.propriedade valor
. Veja nmcli(1) para seu uso. Por exemplo, você pode alterar sua métrica de rota IPv4 para 200 usando o comandonmcli connection modify 'Conexão cabeada 2' ipv4.route-metric 200
.
- Arquivo de conexão
- Em
/etc/NetworkManager/system-connections/
, modifique o arquivoConexão cabeada 2.nmconnection
correspondente.
Não se esqueça de recarregar o arquivo de configuração comnmcli connection reload
Front-ends
Para configurar e ter acesso fácil ao NetworkManager, a maioria dos usuários desejará instalar um applet. Esse front-end da GUI geralmente reside na bandeja do sistema (ou na área de notificação) e permite a seleção de rede e a configuração do NetworkManager. Vários ambientes de área de trabalho possuem seu próprio applet. Caso contrário, você pode usar #nm-applet.
GNOME
O GNOME tem uma ferramenta embutida, acessível a partir das configurações de Rede.
KDE Plasma
Instale o pacote plasma-nm. Em seguida, adicione-o à barra de tarefas do KDE por meio do menu Opções de painel > Adicionar widgets > Redes.
nm-applet
network-manager-applet é um front-end em GTK 3 que funciona sob ambientes Xorg com uma bandeja de sistema.
Para armazenar conexões secretas, instale e configure GNOME/Keyring.
Esteja ciente de que depois de ativar a opção caixa de seleção Disponibilizar para outros usuários
para uma conexão, o NetworkManager armazena a senha em texto simples, embora o respectivo arquivo seja acessível apenas para root (ou outros usuários via nm-applet
). Veja #Senhas de Wi-Fi criptografadas.
Para executar nm-applet
sem uma bandeja do sistema, você pode usar trayer ou stalonetray. Por exemplo, você pode adicionar um script como este em seu caminho:
nmgui
#!/bin/sh nm-applet 2>&1 > /dev/null & stalonetray 2>&1 > /dev/null killall nm-applet
Quando você fecha a janela stalonetray, ela fecha nm-applet
também, então nenhuma memória extra é usada quando você terminar as configurações de rede.
O applet pode mostrar notificações de eventos, como conexão ou desconexão de uma rede WiFi. Para que essas notificações sejam exibidas, verifique se você tem um servidor de notificação instalado - consulte Notificações na área de trabalho. Se você usar o applet sem um servidor de notificação, poderá ver algumas mensagens em stdout/stderr e o aplicativo poderá ser interrompido. Veja [1].
Para executar nm-applet
com tais notificações desabilitadas, inicie o miniaplicativo com o seguinte comando:
$ nm-applet --no-agent
nm-applet
pode ser iniciado automaticamente com um arquivo desktop de inicialização automática, para adicionar a opção --no-agent, modifique a linha Exec, p.ex.,
Exec=nm-applet --no-agent
--no-agent
, não será possível conectar-se a uma nova rede WiFi criptografada clicando na lista de itens porque nenhuma janela de diálogo de entrada de senha será exibida. journal mostrará no secrets: No agents were available for this request
.Appindicator
Desde a versão 1.18.0, o suporte do Appindicator está disponível no pacote oficial network-manager-applet. Para usar o nm-applet em um ambiente Appindicator, inicie o miniaplicativo com o seguinte comando:
$ nm-applet --indicator
Como alternativa, existe o networkmanager-dmenu-gitAUR, que é um pequeno script para gerenciar as conexões do NetworkManager com o dmenu ou rofi em vez do nm-applet
. Ele fornece todos os recursos essenciais, como conexão com conexões Wi-Fi ou com fio existentes do NetworkManager, conexão a novas conexões Wi-Fi, solicitações de senha, se necessário, conexão VPN existente, habilitação/desabilitação de rede e inicialização da interface gráfica nm-connection-editor, conexão a redes Bluetooth.
Configuração
O NetworkManager exigirá algumas etapas adicionais para poder funcionar corretamente. Certifique-se de ter configurado /etc/hosts
como descrito na seção Configuração de rede#Configurando um hostname.
O NetworkManager possui um arquivo de configuração global em /etc/NetworkManager/NetworkManager.conf
. Arquivos de configuração adicionais podem ser colocados em /etc/NetworkManager/conf.d/
. Geralmente, nenhuma configuração precisa ser feita para os padrões globais.
Após editar um arquivo de configuração, as alterações podem ser aplicadas executando:
# nmcli general reload
Habilitar NetworkManager Wait Online
Se você tiver serviços que falham se eles forem iniciados antes que a rede esteja ativa, você pode usar o NetworkManager-wait-online.service
além do NetworkManager.service
. Isso, no entanto, raramente é necessário porque a maioria dos daemons em rede é inicializada corretamente, mesmo que a rede ainda não tenha sido configurada.
Em alguns casos, o serviço ainda falhará ao iniciar com sucesso na inicialização devido à configuração de tempo limite em /usr/lib/systemd/system/NetworkManager-wait-online.service
ser muito curta. Altere o tempo limite padrão de 30 para um valor mais alto.
Configurar as permissões de PolicyKit
Veja General troubleshooting#Session permissions para como configurar uma sessão de trabalho.
Com uma sessão de trabalho, você tem várias opções para conceder os privilégios necessários ao NetworkManager:
-
Opção 1. Execute um agente de autenticação Polkit ao efetuar login, como
/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
(parte do polkit-gnome). Você será solicitado a fornecer sua senha sempre que adicionar ou remover uma conexão de rede. -
Opção 2. Adicione a si próprio ao grupo
wheel
. Você não precisará inserir sua senha, mas a sua conta de usuário também poderá receber outras permissões, como a capacidade de usar o sudo sem digitar a senha do root. -
Opção 3. Adicione a si próprio ao grupo
network
e crie o seguinte arquivo:
/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; } });
- Todos os usuários do grupo
network
poderão adicionar e remover redes sem uma senha. Isso não funcionará em systemd se você não tiver uma sessão ativa com systemd-logind.
Configurações de proxy
O NetworkManager não lida diretamente com configurações de proxy, mas se você estiver usando o GNOME ou KDE, você pode usar o proxydriver que lida com configurações de proxy usando Informações do NetworkManager. O proxydriver é encontrado no pacote proxydriverAUR.
Para que o proxydriver possa alterar as configurações do proxy, você precisaria executar este comando, como parte do processo de inicialização do GNOME (veja GNOME (Português)#Inicialização automática):
xhost +si:localuser:nome_de_usuário
Veja também as configurações de proxy.
Verificando conectividade
NetworkManager pode tentar alcançar uma página na Internet ao conectar a uma rede. networkmanager está configurado por padrão em /usr/lib/NetworkManager/conf.d/20-connectivity.conf
para verificar a conectividade com o archlinux.org. Para usar um servidor web diferente ou desabilitar a verificação de conectividade, crie /etc/NetworkManager/conf.d/20-connectivity.conf
, veja NetworkManager.conf(5) § CONNECTIVITY SECTION. Segue abaixo um exemplo de uso de servidores do GNOME (não requer o uso de GNOME em si):
/etc/NetworkManager/conf.d/20-connectivity.conf
[connectivity] uri=http://nmcheck.gnome.org/check_network_status.txt
Portais cativos
Para aqueles que estão por trás de um portal cativo (captive portal), o gerenciador de desktop pode abrir automaticamente uma janela solicitando credenciais. Se sua área de trabalho não funcionar, você pode usar o pacote capnet-assist (no entanto, atualmente ele possui um script de dispatcher quebrado do NetworkManager). Como alternativa, você pode criar um script de expedidor do NetworkManager com o seguinte conteúdo:
/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
Você precisará reiniciar NetworkManager.service
ou reiniciar para que isso comece a funcionar. Depois disso, o script do expedidor deve abrir uma janela de login assim que detectar que você está atrás de um portal cativo.
Outra solução é o captive-browser-gitAUR, baseado no Google Chrome.
Cliente DHCP
Por padrão, o NetworkManager usa seu cliente DHCP interno. O plugin DHCPv4 interno baseado na biblioteca n-dhcp4 do nettools, enquanto o plugin DHCPv6 interno é feito de código baseado systemd-networkd.
Para usar o cliente DHCP da ISC, instale dhclient. Para alterar o backend do cliente DHCP, defina a opção main.dhcp=nome_cliente_dhcp
com um arquivo de configuração em /etc/NetworkManager/conf.d/
. Por exemplo:
/etc/NetworkManager/conf.d/dhcp-client.conf
[main] dhcp=dhclient
- Não ative as units systemd enviadas com os pacotes dhclient e dhcpcd. Eles entrarão em conflito com o NetworkManager; consulte a nota em #Instalação para mais detalhes.
- O NetworkManger não suporta dhcpcd ≥ 9.0.0. Veja FS#66231.
Gerenciamento de DNS
O gerenciamento de DNS do NetworkManager é descrito na página wiki do projeto GNOME — Projects/NetworkManager/DNS.
Cache de DNS e encaminhamento condicional
O NetworkManager possui um plugin para habilitar o cache DNS e encaminhamento condicional (anteriormente chamado "DNS dividido" na documentação do NetworkManager) usando dnsmasq ou systemd-resolved. As vantagens dessa configuração são que as pesquisas de DNS serão armazenadas em cache, encurtando os tempos de resolução e as pesquisas de DNS dos hosts de VPN serão roteadas para os servidores DNS da VPN relevantes. Isso é especialmente útil se você estiver conectado a mais de uma VPN.
dnsmasq
Certifique-se que dnsmasq está instalado. Então, defina main.dns=dnsmasq
com um arquivo de configuração em /etc/NetworkManager/conf.d/
:
/etc/NetworkManager/conf.d/dns.conf
[main] dns=dnsmasq
Agora, execute nmcli general reload
como root. NetworkManager vai iniciar automaticamente o dnsmasq e adicionar 127.0.0.1
ao /etc/resolv.conf
. Os servidores DNS originais podem ser localizados no /run/NetworkManager/no-stub-resolv.conf
. Você pode verificar se dnsmasq está sendo usado fazendo a mesma procura DNS duas vezes com drill example.com
e verificando o servidor e tempos de consulta.
- Você não precisa iniciar
dnsmasq.service
ou editar/etc/dnsmasq.conf
. O NetworkManager iniciará o dnsmasq sem usar o serviço systemd e sem ler o(s) arquivo(s) de configuração padrão do dnsmasq. - A instância do dnsmasq iniciada pelo NetworkManager será vinculada a
127.0.0.1:53
, você pode executar qualquer software (incluindodnsmasq.service
) no mesmo endereço e porta.
Configuração personalizada do dnsmasq
Configurações personalizadas podem ser criadas para o dnsmasq criando arquivos de configuração em /etc/NetworkManager/dnsmasq.d/
. Por exemplo, para alterar o tamanho do cache DNS (armazenado na RAM):
/etc/NetworkManager/dnsmasq.d/cache.conf
cache-size=1000
dnsmasq --test --conf-file=/dev/null --conf-dir=/etc/NetworkManager/dnsmasq.d
.Veja dnsmasq(8) para todas as opções disponíveis.
IPv6
Habilitar o dnsmasq
no NetworkManager pode interromper as pesquisas de DNS somente do IPv6 (ou seja, drill -6 [hostname
}) que, de outra forma, funcionariam. Para resolver isso, a criação do arquivo a seguir configurará o dnsmasq para também ouvir o loopback do IPv6:
/etc/NetworkManager/dnsmasq.d/ipv6-listen.conf
listen-address=::1
Além disso, o dnsmasq
também não prioriza o DNS IPv6 upstream. Infelizmente, o NetworkManager não faz isso (Bug do Ubuntu). Uma solução alternativa seria desabilitar o DNS IPv4 na configuração do NetworkManager, supondo que exista.
DNSSEC
A instância dnsmasq iniciada pelo NetworkManager por padrão não validará DNSSEC desde que seja iniciada com a opção --proxy-dnssec
. Ele irá confiar em qualquer informação DNSSEC obtida do servidor DNS upstream.
Para que o dnsmasq valide corretamente o DNSSEC, quebrando assim a resolução de DNS com servidores de nomes que não suportam ele, crie o seguinte arquivo de configuração:
/etc/NetworkManager/dnsmasq.d/dnssec.conf
conf-file=/usr/share/dnsmasq/trust-anchors.conf dnssec
systemd-resolved
O NetworkManager pode usar o systemd-resolved como um resolvedor e cache de DNS. Certifique-se de que systemd-resolved esteja configurado corretamente e que systemd-resolved.service
esteja iniciado antes de usá-lo.
systemd-resolved vai ser usado automaticamente se /etc/resolv.conf
é um link simbólico para /run/systemd/resolve/stub-resolv.conf
, /run/systemd/resolve/resolv.conf
ou /usr/lib/systemd/resolv.conf
.
Você pode habilitá-lo explicitamente definindo main.dns=systemd-resolved
com um arquivo de configuração em /etc/NetworkManager/conf.d/
:
/etc/NetworkManager/conf.d/dns.conf
[main] dns=systemd-resolved
Resolvedor de DNS com um assinante do openresolv
Se o openresolv tem um assinante para seu resolvedor de DNS local, configure o assinante e configure o NetworkManager para usar o openresolv.
Porque o NetworkManager anuncia uma única "interface" para o resolvconf, não é possível implementar encaminhamento condicional entre duas conexões do NetworkManager. Veja issue 153 do NetworkManager.
Isso pode ser parcialmente mitigado se você definir private="*"
no /etc/resolvconf.conf
[3][link inativo 2021-05-17 ⓘ]. Quaisquer consultas por domínios que não estejam na lista de domínios de pesquisa não serão encaminhados. Elas serão tratadas conforme a configuração do resolvedor local. Por exemplo, encaminhadas para outro servidor DNS ou resolvidas recursivamente a partir da raiz do DNS.
Servidores DNS personalizados
Configurando servidores DNS globais personalizados
Para definir servidores DNS para todas as conexões, especifique-as em NetworkManager.conf(5) usando a sintaxe servers=endereçoservidorip1,endereçoservidorip2,endereçoservidorip3
em uma seção chamada [global-dns-domain-*]
. Por exemplo:
/etc/NetworkManager/conf.d/dns-servers.conf
[global-dns-domain-*] servers=::1,127.0.0.1
- Se você usa plugin de dnsmasq ou systemd-resolved do NetworkManager ou assinantes de openresolv, então não especifique endereços de loopback com a opção
servers=
, pois isso pode quebrar a resolução de DNS. - Os servidores especificados não são enviados para systemd-resolved, os servidores DNS da conexão são usados.
Configurando servidores DNS personalizados em uma conexão
Configurando servidores DNS personalizados em uma conexão (GUI)
A configuração vai depender do tipo de front-end usado; o processo geralmente envolve clicar com botão direito no miniaplicativo, editar (ou criar) um perfil e, então, escolher o tipo de DHCP como Automático (especifique endereços). OS endereços DNS precisarão ser inseridos e são geralmente dessa formato: 127.0.0.1, Servidor-DNS-um, ...
.
Configurando servidores DNS personalizados em uma conexão (nmcli / arquivo de conexão)
Para configurar servidores DNS por conexão, você pode usar o campo dns
(e os dns-search
e dns-options
associados) nas configurações da conexão.
Se method
estiver definido para auto
(quando você usa DHCP), você precisa definir ignore-auto-dns
para yes
.
/etc/resolv.conf
Por padrão, /etc/resolv.conf
é gerenciado pelo NetworkManager a menos que ele seja um link simbólico.
Ele pode ser configurado para escrever por meio do openresolv ou para não tocar.
O uso do openresolv permite que o NetworkManager coexista com outro software com suporte a resolvconf ou, por exemplo, para executar um cache DNS local e um resolvedor de DNS dividido para o qual o openresolv tem um assinante.
O NetworkManager também oferece hooks via os scripts dispatchers que podem ser usados para alterar o /etc/resolv.conf
após as alterações de rede. Veja #Serviços de rede com o NetworkManager dispatcher e NetworkManager(8) para mais informações.
- Se o NetworkManager estiver configurado para usar dnsmasq ou systemd-resolved, os endereços loopback apropriados serão escritos em
/etc/resolv.conf
. - O arquivo
resolv.conf
que o NetworkManager escreve, ou que escreveria em/etc/resolv.conf
, pode ser encontrado em/run/NetworkManager/resolv.conf
. - Um arquivo
resolv.conf
com os servidores de nome obtidos e domínios de pesquisa podem ser encontrados em/run/NetworkManager/no-stub-resolv.conf
.
/etc/resolv.conf não gerenciado
Para evitar que o NetworkManager toque no /etc/resolv.conf
, defina main.dns=none
com um arquivo de configuração em /etc/NetworkManager/conf.d/
:
/etc/NetworkManager/conf.d/dns.conf
[main] dns=none
main.systemd-resolved=false
, de forma que o NetworkManager não envie a configuração DNS para systemd-resolved.main.dns=none
.Após isso, o /etc/resolv.conf
pode ser um link simbólico quebrado que você precisará remover. Então, basta criar um novo arquivo /etc/resolv.conf
.
Usar openresolv
rc-manager=resolvconf
quando systemd-resolvconf estiver instalado. systemd-resolved fornece suporte limitado à interface do resolvconf e o NetworkManager possui suporte a se comunicar com systemd-resolved por meio de D-Bus sem usar resolvconf.Para configurar o NetworkManager para usar openresolv, defina main.rc-manager=resolvconf
com um arquivo de configuração em /etc/NetworkManager/conf.d/
:
/etc/NetworkManager/conf.d/rc-manager.conf
[main] rc-manager=resolvconf
Firewall
Você pode atribuir uma zona firewalld com base na sua conexão atual. Por exemplo, um firewall restritivo no trabalho e um menos restritivo no domicílio.
Isso também pode ser feito com o NetworkManager dispatcher.
Configuração de 802.1x / PEAP
Uma rede PEAP e 802.1x pode ser adicionada adicionando um arquivo de configuração ao /etc/NetworkManager/system-connections/nome
.
Aqui está um exemplo de arquivo de configuração para IPv4 com IPv6 desativado:
/etc/NetworkManager/system-connections/nome
[ipv6] method=ignore [ipv4] method=auto [connection] #id=XXXXXXXXX #uuid=XXXXXXXXX type=802-11-wireless #timestamp=XXXX [802-11-wireless-security] key-mgmt=wpa-eap [802-11-wireless] ssid=ssid mode=infrastructure #seen-bssids=XXXXXXXXX security=802-11-wireless-security [802-1x] eap=peap; identity=user password=password phase2-auth=mschapv2
A cerquilha (#) define comentários.
Serviços de rede com o NetworkManager dispatcher
Existem alguns serviços de rede que você não desejará executar até que o NetworkManager exiba uma interface. O NetworkManager tem a capacidade de iniciar serviços quando você se conecta a uma rede e os interrompe quando você desconecta (por exemplo, ao usar NFS, SMB e NTPd).
Para ativar o recurso, você precisa habilitar e iniciar o NetworkManager-dispatcher.service
.
Quando o serviço estiver ativo, os scripts poderão ser adicionados ao diretório /etc/NetworkManager/dispatcher.d
.
Os scripts devem pertencer ao root, caso contrário o distribuidor não os executará. Para maior segurança, defina o proprietário e grupo para root:
# chown root:root /etc/NetworkManager/dispatcher.d/10-script.sh
Certifique-se que o arquivo tem as permissões corretas:
# chmod 755 /etc/NetworkManager/dispatcher.d/10-script.sh
Os scripts serão executados em ordem alfabética no momento da conexão e em ordem alfabética inversa no momento da desconexão. Para garantir a ordem em que aparecem, é comum usar caracteres numéricos antes do nome do script (por exemplo, 10-portmap
ou 30-netfs
(o que garante que portmapper esteja ativo antes que as montagens do NFS sejam tentadas).
Scripts vão receber os seguintes argumentos:
-
Nome da interface: p. ex.,
eth0
- Status da interface: up ou down
- Status da VPN: vpn-up ou vpn-down
Evitando o esgotamento de tempo limite do dispatcher
Se o acima está funcionando, então esta seção não é relevante. No entanto, há um problema geral relacionado à execução de scripts do dispatcher que demoram mais para serem executados. Inicialmente, foi utilizado um tempo limite interno de apenas três segundos. Se o script chamado não foi concluído a tempo, ele foi morto. Mais tarde, o tempo limite foi estendido para cerca de 20 segundos (veja o Rastreador de erros para mais informações). Se o tempo limite ainda criar o problema, uma solução alternativa poderá ser modificar o arquivo de serviço do distribuidor /usr/lib/systemd/system/NetworkManager-dispatcher.service
para permanecer ativo após a saída:
/etc/systemd/system/NetworkManager-dispatcher.service.d/remain_after_exit.conf
[Service] RemainAfterExit=yes
Agora, inicie e habilite o serviço modificado NetworkManager-dispatcher
service.
RemainAfterExit
a ele impedirá que o dispatcher feche. Infelizmente, o dispatcher tem para fechar antes que possa executar seus scripts novamente. Com ele, o dispatcher não irá expirar, mas também não será fechado, o que significa que os scripts só serão executados uma vez por inicialização. Portanto, não adicione a linha a menos que o tempo limite esteja causando um problema.Exemplos de dispatcher
Montar pasta remota com sshfs
Como o script é executado em um ambiente muito restritivo, você precisa exportar SSH_AUTH_SOCK
para se conectar ao seu agente SSH. Existem diferentes maneiras de conseguir isso, veja esta mensagem para obter mais informações. O exemplo abaixo funciona com GNOME Keyring, e irá pedir a senha se você ainda não estiver desbloqueado. Caso o NetworkManager conecte-se automaticamente no login, é provável que o gnome-keyring ainda não tenha iniciado e a exportação irá falhar (daí o sleep). O UUID
para correspondência pode ser encontrado com o comando nmcli connection status
ou nmcli connection list
.
#!/bin/sh USER='nome_de_usuário' REMOTE='usuário@host:/caminho/remoto' LOCAL='/caminho/local' interface=$1 status=$2 if [ "$CONNECTION_UUID" = "uuid" ]; then case $status in up) 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
Montagem de compartilhamentos SMB
Alguns compartilhamentos SMB estão disponíveis apenas em determinadas redes ou locais (por exemplo, em casa). Você pode usar o distribuidor para montar apenas compartilhamentos SMB que estejam presentes em seu local atual.
O script a seguir verificará se nos conectamos a uma rede específica e montamos os compartilhamentos de acordo:
/etc/NetworkManager/dispatcher.d/30-mount-smb.sh
#!/bin/sh # Localiza o UUID de conexão com "nmcli connection show" no terminal. # Todos os tipos de conexão do NetworkManager têm suporte: sem fio, VPN, com fio... if [ "$2" = "up" ]; then if [ "$CONNECTION_UUID" = "uuid" ]; then mount /seu/ponto/de/montagem & # adicione mais compartilhamentos conforme necessário fi fi
O script a seguir desmontará todos os compartilhamentos SMB antes de um software ter iniciado a desconexão de uma rede específica:
/etc/NetworkManager/dispatcher.d/pre-down.d/30-umount-smb.sh
#!/bin/sh if [ "$CONNECTION_UUID" = "uuid" ]; then umount -a -l -t cifs fi
pre-down.d
, conforme mostrado acima, caso contrário, ele desmontará todos os compartilhamentos em qualquer alteração de estado de conexão.O script a seguir tentará desmontar todos os compartilhamentos SMB após uma desconexão inesperada de uma rede específica:
/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
- Desde o NetworkManager 0.9.8, os eventos pre-down e down não são executados no desligamento ou reinicialização, veja este relatório de erro para mais informações.
- Os scripts de umount anteriores ainda são propensos a deixar os aplicativos que realmente acessam a montagem para "travar".
Uma alternativa é usar o script como visto em NFS#Using a NetworkManager dispatcher:
/etc/NetworkManager/dispatcher.d/30-smb.sh
#!/bin/bash # Descubra O UUID da conexão com "nmcli con show" no terminal. # Todos os tipos de conexão do NetworkManager têm suporte: wireless, VPN, wired... WANTED_CON_UUID="CHANGE-ME-NOW-9c7eff15-010a-4b1c-a786-9b4efa218ba9" if [[ "$CONNECTION_UUID" == "$WANTED_CON_UUID" ]]; then # Parâmetro do script $1: Nome da conexão do NetworkManager, não usado # Parâmetro do script $2: eventos despachado case "$2" in "up") mount -a -t cifs ;; "pre-down");& "vpn-pre-down") umount -l -a -t cifs >/dev/null ;; esac fi
noauto
, remove esta opção de montagem ou usa auto
para permitir que o despachante gerencie essas montagens.Crie um link simbólico dentro de /etc/NetworkManager/dispatcher.d/pre-down
para pegar os eventos pre-down
:
# ln -s ../30-smb.sh /etc/NetworkManager/dispatcher.d/pre-down.d/30-smb.sh
Montagem de compartilhamentos NFS
Veja NFS#Using a NetworkManager dispatcher.
Usar dispatcher para ativar rede sem fio automaticamente dependendo de cabo LAN estar conectado
A ideia é ligar o Wi-Fi apenas quando o cabo LAN estiver desconectado (por exemplo, ao desconectá-lo de um laptop) e para que o Wi-Fi seja desativado automaticamente, assim que o cabo LAN for conectado novamente.
Crie o seguinte script de dispatcher[4], substituindo LAN_interface
pelo seu.
/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 fi
en
, p.ex., enp0s5
Usar dispatcher para conectar a uma VPN após uma conexão de rede ser estabelecida
Neste exemplo, queremos nos conectar automaticamente a uma conexão VPN definida anteriormente após a conexão a uma rede Wi-Fi específica. A primeira coisa a fazer é criar o script de dispatcher que define o que fazer depois de estarmos conectados à rede.
iwgetid
./etc/NetworkManager/dispatcher.d/vpn-up
#!/bin/sh VPN_NAME="nome da conexão VPN definido no NetworkManager" ESSID="ESSID da rede Wi-Fi (não o nome da conexão)" 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
Se você quiser se conectar automaticamente à VPN para todas as redes Wi-Fi, use a seguinte definição do ESSID: ESSID=$(iwgetid -r)
. Lembre-se de definir as permissões do script de acordo com isso.
A tentativa de se conectar com o script acima ainda pode falhar com NetworkManager-dispatcher.service
reclamando sobre "nenhum segredo de VPN válido", por causa de como os segredos VPN são armazenados. Felizmente, existem diferentes opções para fornecer ao script acima acesso à sua senha de VPN.
1: Um deles requer a edição do arquivo de configuração de conexão VPN para fazer com que o NetworkManager armazene os segredos por si só, em vez de dentro de um chaveiro que será inacessível por root: abra /etc/NetworkManager/system-connections/nome de sua conexão VPN
e altere as password-flags
e secret-flags
de 1
para 0
.
Se isso não funcionar sozinho, talvez seja necessário criar um passwd-file
em um local seguro com as mesmas permissões e propriedade que o script do dispatcher, contendo o seguinte:
/caminho/para/arquivo-passwd
vpn.secrets.password:SUA_SENHA
O script deve ser alterado de acordo, para que obtenha a senha do arquivo:
/etc/NetworkManager/dispatcher.d/vpn-up
#!/bin/sh VPN_NAME="nome de conexão VPN definida no NetworkManager" ESSID="ESSID de rede Wi-Fi (nenhum nome de conexão)" 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: Alternativamente, altere a password-flags
e coloque a senha diretamente no arquivo de configuração adicionando a seção vpn-secrets
:
[vpn] .... password-flags=0 [vpn-secrets] password=senha_senha
Usar dispatcher para desabilitar IPv6 em conexões de provedor de VPN
Muitos provedores de VPN comercial possuem suporte apenas a IPv4. Isso significa que todo o tráfego IPv6 ignora a VPN e acaba por se tornar virtualmente desnecessário. Para evitar isso, o dispatcher pode ser usado para desabilitar todo o tráfego IPv5 para o período em que a conexão VPN está ativa.
/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
OpenNTPD
Veja OpenNTPD#Using NetworkManager dispatcher.
Testando
Os miniaplicativos do NetworkManager são projetados para serem carregados no início da sessão, portanto, nenhuma configuração adicional deve ser necessária para a maioria dos usuários. Se você já desativou suas configurações de rede anteriores e desconectou-se da sua rede, agora pode testar se o NetworkManager funcionará. O primeiro passo é iniciar NetworkManager.service
.
Alguns miniaplicativos fornecerão um arquivo .desktop
para que o miniaplicativo NetworkManager possa ser carregado através do menu do aplicativo. Se isso não acontecer, você terá que descobrir o comando para usar ou efetuar logout e efetuar login novamente para iniciar o miniaplicativo. Depois que o applet é iniciado, ele provavelmente começará a pesquisar conexões de rede com a autoconfiguração com um servidor DHCP.
Para iniciar o miniaplicativo do GNOME nos gerenciadores de janela não compatíveis com xdg, como awesome:
nm-applet --sm-disable &
Para endereços IP estáticos, você terá que configurar o NetworkManager para entendê-los. O processo geralmente envolve clicar com o botão direito do mouse no applet e selecionar algo como 'Editar conexões'.
Dicas e truques
Senhas de Wi-Fi criptografadas
Por padrão, o NetworkManager armazena senhas em texto não criptografado nos arquivos de conexão em /etc/NetworkManager/system-connections/
. Para imprimir as senhas armazenadas, use o seguinte comando:
# grep -r '^psk=' /etc/NetworkManager/system-connections/
As senhas são acessíveis ao usuário root no sistema de arquivos e aos usuários com acesso às configurações através da GUI (por exemplo, nm-applet
).
É preferível salvar as senhas em formato criptografado em um chaveiro, em vez de texto não criptografado. A desvantagem de usar um chaveiro é que as conexões precisam ser configuradas para cada usuário.
Usando GNOME Keyring
O daemon do conjunto de chaves deve ser iniciado e o chaveiro precisa ser desbloqueado para que o seguinte funcione.
Além disso, o NetworkManager precisa ser configurado para não armazenar a senha para todos os usuários. Usando o GNOME nm-applet
, execute nm-connection-editor
em um terminal, selecione uma conexão de rede, clique em Editar
, selecione Segurança Wi-Fi
e clique no ícone à direita da senha e marque Armazenar a senha somente para este usuário
.
Usando KDE Wallet
Usando o plasma-nm do KDE, clique no applet, clique no ícone Configurações
na parte superior direita, clique em uma conexão de rede, na guia Configurações gerais
, desmarque Todos os usuários podem se conectar nesta rede
. Se a opção estiver marcada, as senhas ainda serão armazenadas em texto não criptografado, mesmo que um daemon de chaveiro esteja em execução.
Se a opção foi selecionada anteriormente e você desmarcá-la, você pode ter que usar a opção reset
primeiro para fazer a senha desaparecer do arquivo. Como alternativa, exclua a conexão primeiro e configure-a novamente.
Compartilhando conexão internet pelo Wi-Fi
Você pode compartilhar sua conexão com a Internet (por exemplo, 3G ou com fio) com apenas alguns cliques. Por favor, note que um firewall pode interferir no compartilhamento de internet.
Você precisará de uma placa Wi-Fi que tenha suporte ao modo AP. Veja Software access point#Wi-Fi device must support AP mode para detalhes.
Instale o pacote dnsmasq para poder realmente compartilhar a conexão.
Crie a conexão compartilhada:
- Clique no miniaplicativo e escolha Criar nova rede sem fio.
- Siga o assistente (escolha WPA2 ou superior, certifique-se de usar pelo menos 8 caracteres, pois tamanhos menores falharão).
- Escolha Hotspot ou Ad-hoc como modo Wi-Fi.
A conexão será salva e permanecerá armazenada para a próxima vez que você precisar dela.
Compartilhando conexão internet por Ethernet
Cenário: o seu dispositivo está conectado à Internet através de wi-fi e pretende compartilhar a conexão à Internet a outros dispositivos através da rede ethernet.
Requisitos:
- Instale o pacote dnsmasq para ser capaz de compartilhar a conexão.
- Seu dispositivo conectado à internet e outros dispositivos estarem conectados por um cabo ethernet adequado (isso geralmente significa um cabo cross ou um switch entre eles).
- Compartilhamento de Internet não estar bloqueado por um firewall.
Etapas:
- Executar
nm-connection-editor
do terminal. - Adicionar uma nova conexão ethernet.
- Dê um nome sensato. Por exemplo, "Internet compartilhada"
- Acesse "Configurações IPv4".
- Para "Método:" selecione "Compartilhado com outros computadores".
- Salve
Agora, você deve ter uma nova opção "Internet compartilhada" sob as conexões cabeadas no NetworkManager.
Verificando se a conectividade está ativa dentro de um script ou trabalho cron
Alguns trabalhos de cron exigem conectividade para serem bem-sucedidos. Você pode evitar a execução desses trabalhos quando a rede estiver inoperante. Para isso, adicione um teste if para redes que consulte a nm-tool do NetworkManager e verifique o estado da rede. O teste mostrado aqui é bem-sucedido se qualquer interface estiver ativa e falhará se todos estiverem inativos. Isso é conveniente para laptops que podem ser conectados, podem estar sem fio ou podem estar fora da rede.
if [ $(nm-tool|grep State|cut -f2 -d' ') == "connected" ]; then #Qualquer coisa que você deseje fazer se a rede estiver online else #Qualquer coisa que você deseje fazer se a rede estiver offline - note, isso e qualquer outra coisa acima é opcional fi
Isso é útil para um script cron.hourly
que executa o fpupdate para a atualização da assinatura do scanner de vírus F-Prot, como exemplo. Outra maneira que pode ser útil, com uma pequena modificação, é diferenciar entre redes usando várias partes da saída do nm-tool; por exemplo, como a rede sem fio ativa é denotada com um asterisco, você pode usar o nome da rede e, em seguida, o grep para um asterisco literal.
Conectar a uma rede com segredo na inicialização
Por padrão, o NetworkManager não se conectará a redes que exigem um segredo automaticamente na inicialização. Isso ocorre porque ele bloqueia essas conexões para o usuário que faz isso por padrão, conectando-se somente depois de terem efetuado login. Para alterar isso, faça o seguinte:
- Clique com o botão direito do mouse no ícone do
nm-applet
em seu painel e selecione Editar conexões e abra a guia Sem fio - Selecione a conexão com a qual você deseja trabalhar e clique no botão Editar
- Marque as caixas "Conectar automaticamente" e "Disponível para todos os usuários"
- Adicionalmente, certifique-se que em "Segurança Wi-Fi", "Armazenar senha para todos os usuários (não criptografado)" esteja selecionado
Encerre e inicie novamente a sessão para completar.
OpenConnect com senha no KWallet
Enquanto você pode digitar os dois valores no momento da conexão, o plasma-nm 0.9.3.2-1 e acima são capazes de obter o nome de usuário e a senha do OpenConnect diretamente do KWallet.
Abra o "Gerenciador de carteiras do KDE" e procure a sua conexão OpenConnect VPN em "Gerenciamento de rede | Mapas". Clique em "Mostrar valores" e insira suas credenciais na chave "VpnSecrets" neste formulário (substitua "nome_de_usuário" e "senha"):
form:main:username%SEP%nome_de_usuário%SEP%form:main:password%SEP%senha
Da próxima vez que você se conectar, o nome de usuário e a senha deverão aparecer na caixa de diálogo "Segredos de VPN".
Ignorar dispositivos específicos
Às vezes, pode ser desejado que o NetworkManager ignore dispositivos específicos e não tente configurar endereços e rotas para eles. Você pode rapidamente e facilmente ignorar dispositivos por MAC ou por nome de interface usando o seguinte em /etc/NetworkManager/conf.d/unmanaged.conf
:
[keyfile] unmanaged-devices=mac:00:22:68:1c:59:b1;mac:00:1E:65:30:D1:C4;interface-name:eth0
Após editar o arquivo, execute nmcli general reload
como root. Em seguida, você deve ser capaz de configurar interfaces sem o NetworkManager alterar o que você definiu.
Configurando aleatorização de endereço MAC
A aleatorização de MAC pode ser usada para aumentar a privacidade, não revelando seu endereço MAC real à rede.
O NetworkManager oferece suporte a dois tipos de aleatorização de endereços MAC: aleatorização durante a digitalização e para conexões de rede. Ambos os modos podem ser configurados modificando o /etc/NetworkManager/NetworkManager.conf
ou criando um arquivo de configuração separado no /etc/NetworkManager/conf.d/
, que é recomendado já que o primeiro arquivo de configuração acima pode ser substituído pelo NetworkManager.
A aleatorização durante a varredura de Wi-Fi é ativada por padrão, mas pode ser desativada adicionando as seguintes linhas ao /etc/NetworkManager/NetworkManager.conf
ou a um arquivo de configuração dedicado em /etc/NetworkManager/conf.d
:
/etc/NetworkManager/conf.d/wifi_rand_mac.conf
[device] wifi.scan-rand-mac-address=no
A aleatorização de MAC para conexões de rede pode ser definida para modos diferentes para interfaces sem fio e Ethernet. Veja a publicação de blog do GNOME para mais detalhes sobre os diferentes modos.
Em termos de aleatorização de MAC, os modos mais importantes são stable
e random
. stable
gera um endereço MAC aleatório quando você se conecta a uma nova rede e associa os dois permanentemente. Isso significa que você usará o mesmo endereço MAC sempre que se conectar a essa rede. Em contraste, random
irá gerar um novo endereço MAC toda vez que você se conectar a uma rede, nova ou previamente conhecida. Você pode configurar a aleatorização do MAC adicionando a configuração desejada em /etc/NetworkManager/conf.d
:
/etc/NetworkManager/conf.d/wifi_rand_mac.conf
[device-mac-randomization] # "yes" já é o padrão para fazer varredura wifi.scan-rand-mac-address=yes [connection-mac-randomization] # Aleatoriza o MAC para cada conexão ethernet ethernet.cloned-mac-address=random # Gera um MAC aleatório para cada WiFi e associa a dois permanentemente. wifi.cloned-mac-address=stable
Veja a seguinte publicação de blog do GNOME para mais detalhes.
Habilitar extensões de privacidade IPv6
Veja IPv6 (Português)#NetworkManager.
Trabalhando com conexões cabeadas
Por padrão, o NetworkManager gera um perfil de conexão para cada conexão Ethernet com fio que encontrar. No momento em que gera a conexão, ele não sabe se haverá mais adaptadores Ethernet disponíveis. Por isso, ele chama a primeira conexão com fio "Conexão cabeada 1". Você pode evitar gerar essa conexão, configurando no-auto-default
(consulte NetworkManager.conf(5)) ou simplesmente excluindo-a. Em seguida, o NetworkManager se lembrará de não gerar uma conexão para essa interface novamente.
Você também pode editar a conexão (e persistir no disco) ou excluí-la. O NetworkManager não irá gerar novamente uma nova conexão. Então, você pode mudar o nome para o que você quiser. Você pode usar algo como o nm-connection-editor para esta tarefa.
Usando iwd como o backend de Wi-Fi
Instale networkmanager-iwdAUR ou habilite o backend experimental iwd criando o seguinte arquivo de configuração:
/etc/NetworkManager/conf.d/wifi_backend.conf
[device] wifi.backend=iwd
Executando em um espaço de nomes de rede
Se você deseja executar o NetworkManager dentro de um espaço de nomes de rede (por exemplo, para gerenciar um dispositivo específico que deve ser usado por aplicativos selecionados), abaixe o dispositivo antes de movê-lo para o espaço de nomes:
$ ip link set dev MEU_DISPOSITIVO down $ ip link set dev MEU_DISPOSITIVO netns MEU_ESPAÇO_DE_NOMES $ ip netns exec MEU_ESPAÇO_DE_NOMES NetworkManager ... $ ip netns exec MEU_ESPAÇO_DE_NOMES killall NetworkManager
caso contrário, o NetworkManager falhará posteriormente ao estabelecer a conexão com um erro device is strictly unmanaged
.
Solução de problemas
Nenhum prompt para senha de redes Wi-Fi seguras
Ao tentar se conectar a uma rede Wi-Fi protegida, nenhum prompt de senha é exibido e nenhuma conexão é estabelecida. Isso acontece quando nenhum pacote de chaveiro é instalado. Uma solução fácil é instalar o gnome-keyring. Se você quiser que as senhas sejam armazenadas em formato criptografado, siga GNOME Keyring para configurar o gnome-keyring-daemon.
Gerenciamento de rede desabilitado
Quando o NetworkManager for desligado, mas o arquivo pid (estado) não for removido, você verá uma mensagem Network management disabled
. Se isso acontecer, remova o arquivo manualmente:
# rm /var/lib/NetworkManager/NetworkManager.state
Problemas com cliente DHCP interno
Se você tiver problemas para obter um endereço IP usando o cliente DHCP interno, considere usar outro cliente DHCP, consulte #Cliente DHCP para obter instruções. Essa solução alternativa pode resolver problemas em grandes redes sem fio, como o eduroam.
Problemas DHCP com dhclient
Se você tiver problemas ao obter um endereço IP via DHCP, tente adicionar o seguinte ao seu /etc/dhclient.conf
:
interface "eth0" { send dhcp-client-identifier 01:aa:bb:cc:dd:ee:ff; }
sendo aa:bb:cc:dd:ee:ff
o endereço MAC desta NIC. O endereço MAC pode ser localizado usando o comando ip link show interface
com o pacote iproute2.
Modem 3G não detectado
Veja USB 3G Modem#NetworkManager.
Desligando WLAN em laptops
Às vezes o NetworkManager não funciona quando você desabilita o seu adaptador Wi-Fi com um botão em seu laptop e tenta habilitá-lo novamente depois. Isso geralmente é um problema com rfkill. Para verificar se o driver notifica rfkill sobre o status do adaptador sem fio, use:
$ watch -n1 rfkill list all
Se um identificador permanecer bloqueado depois de ligar o adaptador, você pode tentar desbloqueá-lo manualmente (onde X é o número do identificador fornecido pela saída acima):
# rfkill event unblock X
Reversão de configurações de endereço IP estático para DHCP
Devido a um erro não resolvido, ao alterar as conexões padrão para um endereço IP estático, o nm-applet
pode não armazenar adequadamente a alteração de configuração e voltará ao DHCP automático.
Para contornar este problema você tem que editar a conexão padrão (por exemplo, "Auto eth0") em nm-applet
, alterar o nome da conexão (por exemplo "meu eth0"), desmarque a caixa de seleção "Disponível para todos os usuários", altere suas configurações de endereço IP estático conforme desejado e clique em Aplicar. Isso salvará uma nova conexão com o nome fornecido.
Em seguida, você desejará fazer com que a conexão padrão não seja conectada automaticamente. Para fazer isso, execute nm-connection-editor
(não como root). No editor de conexão, edite a conexão padrão (por exemplo, "Auto eth0") e desmarque "Conectar automaticamente". Clique em Aplicar e feche o editor de conexão.
Não é possível editar conexões como usuário normal
Veja #Configurar as permissões de PolicyKit.
Esquecer rede sem fio oculta
Como as redes ocultas não são exibidas na lista de seleção da tela de redes sem fio, elas não podem ser esquecidas (removidas) com a GUI. Você pode excluir um com o seguinte comando:
# rm /etc/NetworkManager/system-connections/SSID
Isso funciona para qualquer outra conexão.
VPN não funciona no GNOME
Ao configurar conexões OpenConnect ou vpnc no NetworkManager enquanto estiver usando o GNOME, você algumas vezes nunca verá a caixa de diálogo aparecer e o seguinte erro aparecerá em /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.
Isso é causado pelo fato do miniaplicativo de NM do GNOME esperar que os scripts de diálogo estejam em /usr/lib/gnome-shell
, quando os pacotes do NetworkManager os colocam em /usr/lib/networkmanager
.
Como uma correção "temporária" (este bug já existe há algum tempo), faça os seguintes links simbólicos:
- Para OpenConnect:
ln -s /usr/lib/networkmanager/nm-openconnect-auth-dialog /usr/lib/gnome-shell/
- Para VPNC (isto é, Cisco VPN):
ln -s /usr/lib/networkmanager/nm-vpnc-auth-dialog /usr/lib/gnome-shell/
Isso pode precisar ser feito para qualquer outro plug-in de VPN do NM, mas esses são os dois mais comuns.
Impossibilidade de se conectar a redes sem fio europeias visíveis
Os chips WLAN são fornecidos com um padrão domínio regulatório. Se o seu ponto de acesso não operar dentro dessas limitações, você não conseguirá se conectar à rede. Consertar isso é fácil:
- Instale crda
- Descomente o código de país correto em
/etc/conf.d/wireless-regdom
- Reinicie o sistema, pois a configuração está como somente leitura na inicialização
Conexão automática a VPN na inicialização não funciona
O problema ocorre quando o sistema (ou seja, o NetworkManager em execução como usuário root) tenta estabelecer uma conexão VPN, mas a senha não está acessível porque está armazenada no GNOME Keyring de um usuário específico.
Uma solução é manter a senha em sua VPN em texto simples, conforme descrito na etapa (2.) de #Usar dispatcher para conectar a uma VPN após uma conexão de rede ser estabelecida.
Você não precisa mais usar o dispatcher descrito na etapa (1.) para se conectar automaticamente, se você usar a nova opção "autoconectar VPN" na interface gráfica do nm-applet
.
Gargalo no systemd
Com o tempo, os arquivos de log (/var/log/journal
) podem se tornar muito grandes. Isso pode ter um grande impacto no desempenho da inicialização ao usar o NetworkManager, consulte: Systemd (Português)#Tempo de inicialização aumentando com o tempo.
Desconexões de rede regulares, latência, pacotes perdidos (WiFi)
O NetworkManager faz uma varredura a cada 2 minutos.
Alguns drivers de WiFi apresentam problemas ao procurar estações base enquanto conectados/associados. Os sintomas incluem desconexões/reconexões de VPN e perda de pacotes, páginas da Web que não podem ser carregadas e, em seguida, atualizadas corretamente.
A execução journalctl -f
indicará que isso está ocorrendo, mensagens como as seguintes estarão contidas nos logs em intervalos regulares.
NetworkManager[410]: <info> (wlp3s0): roamed from BSSID 00:14:48:11:20:CF (my-wifi-name) to (none) ((none))
Existe uma versão corrigida do NetworkManager que deve evitar esse tipo de verificação: networkmanager-noscanAUR.
Como alternativa, se o roaming não for importante, o comportamento de varredura periódica poderá ser desabilitado bloqueando o BSSID do ponto de acesso no perfil de conexão WiFi.
Impossibilidade de ligar o Wi-Fi com laptop Lenovo (IdeaPad, Legion, etc.)
Há um problema com o módulo ideapad_laptop
em alguns modelos da Lenovo, devido ao driver wi-fi relatar incorretamente um bloco virtual. A placa ainda pode ser manipulada com netctl
, mas os gerenciadores como o NetworkManager quebram. Você pode verificar se este é o problema, verificando a saída de rfkill list
depois de alternar sua chave de hardware e ver que o bloco de software persiste.
Descarregar o módulo ideapad_laptop
deve corrigir isso. (atenção: isso também pode desabilitar o teclado e o touchpad do laptop!).
Desligar envido de hostname
O NetworkManager, por padrão, envia o nome do host para o servidor DHCP. O envio de nome de host só pode ser desativado por conexão não globalmente (Bug 768076 do GNOME).
Para desabilitar o envio do seu nome de host para o servidor DHCP para uma conexão específica, adicione o seguinte ao seu arquivo de conexão de rede:
/etc/NetworkManager/system-connections/seu_arquivo_de_conexão
... [ipv4] dhcp-send-hostname=false ... [ipv6] dhcp-send-hostname=false ...
nm-applet desaparece no i3wm
Se você usar o xfce4-notifyd.service
para notificações, deverá editar a unidade e adicionar o seguinte:
/etc/systemd/user/xfce4-notifyd.service.d/display_env.conf
[Service] Environment="DISPLAY=:0.0"
Depois de recarregar os daemons, reinicie o xfce4-notifyd.service
. Saia do i3 e reinicie-o novamente, e o miniaplicativo deverá aparecer na área de notificação.
Ícones de bandeja do nm-applet exibidos incorretamente
Atualmente, os ícones da área de notificação do nm-applet são desenhados uns em cima dos outros, ou seja, o ícone exibindo a força sem fio pode ser exibido na parte superior do ícone, indicando que não há conexão com fio. Isso aparentemente é um problema/bug do GTK3: https://gitlab.gnome.org/GNOME/gtk/issues/1280 .
Uma versão corrigida do GTK3 existe no AUR, que aparentemente corrige o erro do ícone da área de notificação: gtk3-classicAUR .
Unit dbus-org.freedesktop.resolve1.service não encontrado
Se systemd-resolved.service
não tiver sido iniciado, NetworkManager vai tentar iniciá-lo usando D-Bus e vai falhar:
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 ")
Isso é porque o NetworkManager vai tentar enviar informações DNS para systemd-resolved independentemente da configuração main.dns=
no NetworkManager.conf(5).[6]
Isso pode ser desabilitado com um arquivo de configuração em /etc/NetworkManager/conf.d/
:
/etc/NetworkManager/conf.d/no-systemd-resolved.conf
[main] systemd-resolved=false
Veja FS#62138.
Segredos eram necessários, mas não fornecidos
Se você tenta se conectar a uma rede usando o dispositivo nmcli device wifi connect SSID password senha
e recebe o seguinte erro:
Erro: Ativação da conexão falhou: (7) Segredos foram requisitados, mas não fornecidos
O erro pode ser resolvido excluindo o perfil de conexão e criando um novo:
$ nmcli connection delete SSID $ nmcli device wifi connect SSID password senha
Conexão WPA Empresarial com o NetworkManager
Se você tentar se conectar a uma rede WPA Empresarial como 'eduroam' com o NetworkManager com o backend iwd, o NetworkManager receberá o seguinte erro:
Connection 'eduroam' is not avialable on device wlan0 because profile is not compatible with device (802.1x connections must have IWD provisioning files)
Isso ocorre porque o NetworkManager não consegue configurar uma rede WPA Enterprise. Portanto, você deve configurá-lo usando um arquivo de configuração do iwd /var/lib/iwd/essid.8021x
como descrito em iwd (Português)#WPA Empresarial.