Quero configurar o meu /etc/network/interfaces
para detectar diferentes pontos de acesso e conectar-me a eles de acordo. Este é o estado atual deste arquivo:
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
allow-hotplug eth0
iface eth0 inet dhcp
auto ra0
iface ra0 inet dhcp
wpa-ssid MyNet
wpa-psk 00d8f778e1e86be0961aa767564d7364ee44fcbd704e4e31ee6c4af0f855c32f
Isso detecta com êxito uma conexão Ethernet e se conecta ao MyNet quando estiver disponível. Como posso configurá-lo para detectar vários pontos de acesso?
Aquiparece ser a resposta, mas não consegui entender as instruções.
Eu tentei várias GUIs (nm, wicd, etc.), mas nenhuma delas parece funcionar no meu laptop. De qualquer forma, prefiro fazer isso via linha de comando.
Responder1
Para abordar várias configurações/ssids de wifi, é melhor trabalhar no wpa_supplicant
nível.
Basta deixar sua interface como:
auto ra0
iface ra0 inet dhcp
Instale wpa_supplicant com:
apt get install wpasupplicant
Você pode definir vários locais em wpa_supplicant.conf
, onde o SSID determina qual configuração será usada. Como em:
network={
ssid="ssid2"
psk="ssid2 PASSWORD"
}
network={
ssid="ssid1"
psk="ssid1 PASSWORD"
}
Reinicie o serviço sempre que adicionar uma configuração para um novo SSID.
Ao conectar-se a um AP, dependendo do nome SSID, wpa_supplicant
selecione automaticamente a configuração correspondente.
Responder2
Para configurar /etc/network/interfaces
para funcionar com vários locais, você precisa entender a diferença entre interfaces lógicas e físicas. As interfaces físicas correspondem aos dispositivos de hardware que você instalou em seu sistema e são identificadas por um esquema de nomenclatura específico (wlan0, wlan1, eth0, ra0, etc).
No seu arquivo /etc/network/interfaces
, você pode especificar apenas uma configuração para cada interface física, então é aqui que as interfaces lógicas entram em ação. Você pode ter diversas interfaces lógicas para uma interface física. Isso é chamado de mapeamento. Para mapear uma interface lógica para uma interface física, você adiciona isto a/etc/network/interfaces
mapping ra0 # map physical interface ra0...
map home work # ...to 'home' and 'work' logical interfaces
Em seguida, você escreve a configuração para cada uma destas interfaces:
iface home inet dhcp # configuration stanza for 'home' logical interface
wpa-ssid Home
wpa-psk 00d8f778e1e86be0961aa767564d7364ee44fcbd704e4e31ee6c4af0f855c32f
iface work inet dhcp # configuration stanza for 'work' logical interface
wpa-ssid Work
wpa-psk 00d8f778e1e86be0961aa767564d7364ee44fcbd704e4e31ee6c4af0f855c32f
Claro, isso não vai funcionar porque o sistema não sabe qual interface usar, então usaremos guessnet
para ajudar o sistema a escolher uma configuração.
sudo apt-get install guessnet
Então, usamos guessnet
na estrofe de mapeamento:
mapping ra0
script /usr/sbin/guessnet-ifupdown # <-- We added this
map home work
Guessnet
atua testando as redes de acordo com alguns critérios (endereços IP, ESSID, MAC) e escolhendo a configuração que não falha nesses testes. No exemplo a seguir, se houver uma rede com ESSID 'Work' disponível, a interface ra0
que definimos anteriormente irá se conectar a ela e aplicar esta configuração:
iface work inet dhcp
test wireless essid Work # We test if the ESSID of the network is 'Work'
wpa-ssid Work
wpa-psk 00d8f778e1e86be0961aa767564d7364ee44fcbd704e4e31ee6c4af0f855c32f
Responder3
No nosso caso, queríamos dedicar diferentes wlans a dispositivos específicos. Para fazer isso, criamos um modelo systemd:
# cat /usr/lib/systemd/system/wpa_supplicant\@.service
[Unit]
Description=WPA supplicant for %i
Before=network.target
After=dbus.service
Wants=network.target
IgnoreOnIsolate=true
[Service]
ExecStart=/sbin/wpa_supplicant -s -O /run/wpa_supplicant-%i -c/etc/wpa_supplicant/wpa_supplicant-%i.conf -i%i
[Install]
WantedBy=multi-user.target
Em seguida, criei as configurações assim:
==> /etc/wpa_supplicant/wpa_supplicant-wlan0.conf <==
network={
ssid="net0"
psk="secretpass0"
}
==> /etc/wpa_supplicant/wpa_supplicant-wlan1.conf <==
network={
ssid="net1"
psk="secretpass1"
}
e os iniciei da seguinte maneira:
systemctl enable --now wpa_supplicant@wlan0
systemctl enable --now wpa_supplicant@wlan1
Embargo:
Estranhamente, parece ter ignorado meu serviço e executado em dhcpcd
:
# ps ax|grep wpa
653 ? Ss 0:00 wpa_supplicant -B -c/etc/wpa_supplicant/wpa_supplicant-wlan1.conf -iwlan1
668 ? Ss 0:00 wpa_supplicant -B -c/etc/wpa_supplicant/wpa_supplicant-wlan0.conf -iwlan0
# systemctl status 668
● dhcpcd.service - DHCP Client Daemon
Loaded: loaded (/lib/systemd/system/dhcpcd.service; enabled; vendor preset: enabled)
Drop-In: /etc/systemd/system/dhcpcd.service.d
└─wait.conf
Active: active (running) since Sat 2023-07-08 21:16:25 BST; 1min 23s ago
Docs: man:dhcpcd(8)
Process: 545 ExecStart=/usr/sbin/dhcpcd -w -q (code=exited, status=0/SUCCESS)
Tasks: 3 (limit: 1993)
Memory: 4.3M
CPU: 775ms
CGroup: /system.slice/dhcpcd.service
├─653 wpa_supplicant -B -c/etc/wpa_supplicant/wpa_supplicant-wlan1.conf -iwlan1
├─668 wpa_supplicant -B -c/etc/wpa_supplicant/wpa_supplicant-wlan0.conf -iwlan0
└─701 /usr/sbin/dhcpcd -w -q
Talvez a pilha de rede Debian dhclient
suporte wpa_supplicant-<device>.conf
arquivos diretamente e faça isso automaticamente (observe que meus arquivos /etc/network/interfaces* estão vazios). Se for esse o caso, tudo que você precisa são configurações diferentes para dispositivos diferentes... mas de qualquer forma, isso funciona para nós. Por favor, comente se você descobrir por que isso acontece.