¿Cómo configurar múltiples redes WiFi?


113

Voy y regreso de casa a la escuela con mi Pi. Acabo de tener el WiFi funcionando anoche en casa usando en wpa.conflugar de hacerlo, wpa_supplicant.confya que el libro que estaba usando tenía el camino para eso. He notado que muchos parecen usar, wpa_supplicantpero no estoy seguro de por qué ...

De todos modos, sé cómo hacer que la IP WiFi sea estática para mi red doméstica, pero ¿cómo configuro las cosas para conectarme automáticamente a la WiFi de mi escuela y usar una IP estática diferente para esa red?

Para la red, ¿acabo de agregar otro network={}en mi wpa.confarchivo? Para la segunda IP estática, ¿cómo puedo vincular eso a la red de la escuela?

Respuestas:


106

Edite /etc/wpa_supplicant/wpa_supplicant.conf y agregue id_str = "school" debajo de la información de wpa de las escuelas e id_str = "home" debajo de la información de wpa de su hogar. Su archivo ahora debería ser similar a esto:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
    ssid="SCHOOLS NETWORK NAME"
    psk="SCHOOLS PASSWORD"
    id_str="school"
}

network={
    ssid="HOME NETWORK NAME"
    psk="HOME PASSWORD"
    id_str="home"
}

Luego configure / etc / network / interfaces con iface school inet static y iface home inet static para que tenga el siguiente aspecto:

Esto se aplica a Raspbian Wheezy antes del 2015-05-05 para más adelante (y Jessie) Vea cómo configuro redes / WiFi / IP estática

auto lo

iface lo inet loopback
iface eth0 inet dhcp

allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf

iface school inet static
address <school address>
gateway <school gateway>
netmask <school netmask>

iface home inet static
address <home address>
gateway <home gateway>
netmask <home netmask>

Vale la pena señalar: si entiendo la documentación correctamente, para utilizar este enfoque, debe tener una propiedad id_str para CADA red en su archivo wpa_supplicant.conf. De lo contrario, esto no funcionará. ¿Puedes confirmar?
PICyourBrain

No creo que este sea el caso.
les

3
Este enfoque funciona, sin embargo, ¿es posible cambiar WiFi sin tener que reiniciar el Pi?
MetalGodwin

2
Si no se id_strda, el valor será default.
Raptor

1
@MetalGodwin Puede usar wpa_clicomo se sugiere aquí: raspberrypi.org/forums/viewtopic.php?t=179387
haré el

34

Recientemente me topé con una aplicación de consola que clasifica toda la configuración inalámbrica. También puede usar esta herramienta para configurar la interfaz LAN.

sudo apt-get install wicd-curses

Instalará muchos otros paquetes, pero ejecuta su propio demonio en segundo plano. Esto administra las redes y asegura que te conectes a las que deseas. Ejecútalo con:

sudo wicd-curses

Captura de pantalla de wicd-curses

Si recibe un mensaje que dice que no se detectaron redes, presione P(debe ser mayúscula, use [SHIFT] p) y escriba wlan0 en el campo de la interfaz inalámbrica y presione F10 para guardar.

  1. R para actualizar la lista.
  2. Use los cursores en el teclado para navegar arriba y abajo en la lista
  3. Presione hacia la derecha para configurar la conexión inalámbrica
  4. Presione hacia abajo varias veces y marque "Conectarse automáticamente a esta red"
  5. Presione hacia abajo varias veces y escriba su contraseña en el campo clave
  6. Presione F10 para guardar
  7. Comience desde 1 para hacer esto nuevamente para cualquier otra red

ingrese la descripción de la imagen aquí

Puede que tenga que presionar Cpara conectarse al punto de acceso. Si estaba conectado por cable, lo más probable es que elimine la interfaz LAN y active la conexión inalámbrica.

También gestiona la conexión, por lo que se volverá a conectar a cualquier punto de acceso inalámbrico configurado si se desconecta por cualquier motivo, pero también intentará conectarse a cualquier red disponible, como en los escritorios Windows, Macintosh o Linux.

¡Espero eso ayude!


2
Este tipo de herramienta es exactamente lo que estaba buscando. toda la flexibilidad ofrecida por la GUI, pero en su lugar terminal. ¡Gracias!
FoamyGuy

Voto a favor: Después de ejecutar esto, hice un escaneo avanzado de IP de las dos subredes y mi Rpi3 aparece en ambas. Curiosamente, cuando fui a instalar esto inicialmente, me dijo que ya tenía la última versión.
SDsolar

Un detalle menor: para obtener un alcance adicional, estoy usando wlan1 con una antena externa, por lo que en maldiciones tuve que ir a preferencias para especificar ese adaptador. No había necesidad de apagar wlan0 pero lo hice de todos modos con sudo ifcongig wlan0 abajo.
SDsolar

32

Con el Jessielanzamiento de Raspbian , no tiene que editar el interfacearchivo. Basta con actualizar el wpa_supplicantarchivo con múltiples redes. Así es como se ve:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
    ssid="SCHOOLS NETWORK NAME"
    psk="SCHOOLS PASSWORD"
    id_str="school"
}

network={
    ssid="HOME NETWORK NAME"
    psk="HOME PASSWORD"
    id_str="home"
}

Esto funcionó para mí y mi wifi siempre está conectado a la lista de redes disponibles mencionadas en el archivo anterior. Espero eso ayude.


23

En realidad, puede agregar la opción de prioridad. Al igual que:

network={
      ssid="open"
      key_mgmt=NONE
      id_str="open"
      priority=3
}

network={
        ssid="secure"
        key_mgmt=WPA-EAP
        proto=WPA2
        group=CCMP
        pairwise=CCMP
        eap=TLS
        ca_cert="/etc/certs/cacert.pem"
        client_cert="/etc/certs/client.pem"
        private_key="/etc/certs/client.key"
        private_key_passwd="somepwd"
        identity="me"
        priority=5
}

network={
        ssid="AndroidAP"
        key_mgmt=WPA-PSK
        proto=WPA2
        pairwise=CCMP
        group=CCMP
        psk="SomeP4ssw0rd"
        priority=4
}


network={
        ssid="Spooky"
        key_mgmt=NONE
        group=WEP104
        psk="A4ABC2FC27412D4D23CAEBCA23"
        priority=2
}

network={
        ssid="another"
        key_mgmt=WPA-PSK
        proto=WPA2
        pairwise=CCMP
        group=CCMP
        psk="A very long and secret passphrase here"
        priority=1
}

prioridad: cuando hay varias redes disponibles simultáneamente, se selecciona la que tiene el valor de prioridad más alto.

id_str: para cada red, puede asignar a este parámetro un valor específico (una cadena). Si no se proporciona ninguno, se usa "predeterminado" como cadena de texto. Esta cadena se usa en / etc / network / interfaces como un identificador de interfaz virtual. Esto permite crear bloques de configuración específicos para cada red. El único requisito es tener la interfaz física utilizando el método "manual inet" (esto es IMPRESCINDIBLE).


Solo verificando dos veces aquí, ¿la prioridad está encerrada en asteriscos? Por lo que leí, no se supone que estén encerrados en doble asterisco, pero podría estar equivocado aquí.
ericmjl

@ericmjl Intentó en negrita el código, lo editaré.
Patrick Cook

¿Hay alguna manera de volver a escanear automáticamente y ver si hay una red de mayor prioridad disponible y cambiar?
Michal

@Michal Sí, tiene un proceso en segundo plano en ejecución que hace exactamente eso.
les

@les ¿Cómo funcionaría eso, qué comando?
luckydonald