Quiero configurar mi /etc/network/interfaces
para 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_supplicant
nivel.
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_supplicant
seleccionaremos automáticamente la configuración correspondiente.
Respuesta2
Para configurarlo /etc/network/interfaces
para 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 guessnet
para ayudar al sistema a elegir una configuración.
sudo apt-get install guessnet
Luego, usamos guessnet
en la estrofa de mapeo:
mapping ra0
script /usr/sbin/guessnet-ifupdown # <-- We added this
map home work
Guessnet
actú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 ra0
que 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 dhclient
admita wpa_supplicant-<device>.conf
archivos 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í.