Configure a interface sem fio para vários locais

Configure a interface sem fio para vários locais

Quero configurar o meu /etc/network/interfacespara 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_supplicantní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_supplicantselecione automaticamente a configuração correspondente.

Responder2

Para configurar /etc/network/interfacespara 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 guessnetpara ajudar o sistema a escolher uma configuração.

sudo apt-get install guessnet

Então, usamos guessnetna estrofe de mapeamento:

mapping ra0
        script /usr/sbin/guessnet-ifupdown # <-- We added this
        map home work

Guessnetatua 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 ra0que 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 dhclientsuporte wpa_supplicant-<device>.confarquivos 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.

informação relacionada