Configurar la interfaz inalámbrica para múltiples ubicaciones

Configurar la interfaz inalámbrica para múltiples ubicaciones

Quiero configurar mi /etc/network/interfacespara detectar diferentes puntos de acceso y conectarme a ellos en consecuencia. Este es el estado actual de este archivo:

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

Esto detecta con éxito una conexión Ethernet y se conecta a MyNet cuando esté disponible. ¿Cómo lo configuro para que pueda detectar múltiples puntos de acceso?

AquíParece ser la respuesta, pero no pude entender las instrucciones.

Probé varias GUI (nm, wicd, etc.), pero ninguna parece funcionar en mi computadora portátil. De todos modos, prefiero hacerlo mediante la línea de comando.

Respuesta1

Para abordar múltiples configuraciones/ssids wifi, será mejor que trabaje en el wpa_supplicantnivel.

Simplemente deja tu interfaz como:

auto ra0
iface ra0 inet dhcp

Instale wpa_supplicant con:

apt get install wpasupplicant

Puede definir varias ubicaciones en wpa_supplicant.conf, donde el SSID determina qué configuración se utilizará. Como en:

network={
    ssid="ssid2"
    psk="ssid2 PASSWORD"
}

network={
    ssid="ssid1"
    psk="ssid1 PASSWORD"
}

Reinicie el servicio cada vez que agregue una configuración para un nuevo SSID.

Al conectarse a un AP, dependiendo del nombre SSID, wpa_supplicantseleccionaremos automáticamente la configuración correspondiente.

Respuesta2

Para configurarlo /etc/network/interfacespara trabajar con múltiples ubicaciones, debe comprender la diferencia entre interfaces lógicas y físicas. Las interfaces físicas corresponden a los dispositivos de hardware que ha instalado en su sistema y están identificadas mediante un esquema de nombres particular (wlan0, wlan1, eth0, ra0, etc.).

En su /etc/network/interfaces, puede especificar solo una configuración para cada interfaz física, por lo que aquí es donde entran en juego las interfaces lógicas. Puede tener varias interfaces lógicas para una interfaz física. Esto se llama mapeo. Para asignar una interfaz lógica a una interfaz física, agregue esto a/etc/network/interfaces

mapping ra0 # map physical interface ra0...
    map home work # ...to 'home' and 'work' logical interfaces

Luego, escribe la configuración para cada una de estas 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

Por supuesto, esto no va a funcionar porque el sistema no sabe qué interfaz usar, por lo que usaremos guessnetpara ayudar al sistema a elegir una configuración.

sudo apt-get install guessnet

Luego, usamos guessneten la estrofa de mapeo:

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

Guessnetactúa probando las redes según algunos criterios (direcciones IP, ESSID, MAC) y eligiendo la configuración que no falla esas pruebas. En el siguiente ejemplo, si hay una red con ESSID 'Work' disponible, la interfaz ra0que definimos anteriormente se conectará a ella y aplicará esta configuración:

iface work inet dhcp 
 test wireless essid Work # We test if the ESSID of the network is 'Work'
 wpa-ssid Work
 wpa-psk 00d8f778e1e86be0961aa767564d7364ee44fcbd704e4e31ee6c4af0f855c32f

Respuesta3

En nuestro caso queríamos dedicar diferentes WLAN a dispositivos específicos. Para hacer eso creamos una plantilla 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

Luego creó las configuraciones así:

==> /etc/wpa_supplicant/wpa_supplicant-wlan0.conf <==
network={
    ssid="net0"
    psk="secretpass0"
}

==> /etc/wpa_supplicant/wpa_supplicant-wlan1.conf <==
network={
    ssid="net1"
    psk="secretpass1"
}

y los comencé de la siguiente manera:

systemctl enable --now wpa_supplicant@wlan0
systemctl enable --now wpa_supplicant@wlan1

Advertencia:

Curiosamente, parece haber ignorado mi servicio y ejecutarlo en 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

Tal vez la pila de red de Debian dhclientadmita wpa_supplicant-<device>.confarchivos directamente y lo haga automáticamente (tenga en cuenta que mis archivos /etc/network/interfaces* están vacíos). Si ese es el caso, entonces todo lo que necesita son diferentes configuraciones para diferentes dispositivos... pero de todos modos, esto funciona para nosotros. Por favor comente si descubre por qué esto es así.

información relacionada