No he hecho esto antes personalmente, pero aquí hay información para que se dirija en la dirección correcta.
Desde la perspectiva del protocolo, definitivamente es posible tener una sola radio que funcione como AP y STA cliente. Funciona mejor (o tal vez sea casi obligatorio) si el AP que está creando y el que se está uniendo como cliente están en el mismo canal. Hacer que la tarjeta de radio tenga que seguir cambiando de canal a las solicitudes de servicio es una receta para la pérdida de fotogramas y un rendimiento terrible.
En cuanto al software, se está volviendo posible. Varios controladores de tarjetas 802.11 en Linux admiten el concepto de VAP (AP virtuales) que permite que una sola tarjeta actúe como varios AP (múltiples SSID, incluso BSSID) al mismo tiempo. Contrariamente a la intuición, el término VAP significa cualquier tipo de interfaz virtual en la misma tarjeta 802.11, independientemente de si la interfaz virtual está en modo AP o no. Entonces, en estos combos de tarjeta/controlador, podría crear dos VAP:un VAP en modo STA
El controlador MadWifi para tarjetas basadas en Atheros es compatible con VAP. Si su tarjeta 802.11 usa un conjunto de chips Atheros e instala la versión correcta del controlador MadWifi, es posible que pueda configurar su tarjeta para el modo STA + AP simultáneo de la siguiente manera:
wlanconfig ath0 create wlandev wifi0 wlanmode sta
wlanconfig ath1 create wlandev wifi0 wlanmode ap
Tenga en cuenta que estas no son instrucciones completas para configurar todo, sino solo un intento de comenzar.
Es posible que desee buscar en Google algo como "wifi vap" para obtener más información. Copié los comandos anteriores desde aquí.
Ah, y algo para romper mitos:las tarjetas Atheros no son infrecuentes en las máquinas de consumo. Son un jugador importante en los conjuntos de chips 802.11, junto con Broadcom, Marvell, Intel y Ralink. Y solo porque usé el ejemplo de MadWifi/Atheros, no significa que no haya controladores de Linux para los chips de otros jugadores importantes que puedan hacer algo similar. Además, 802.11s no requerido para esto. Decir que tiene que hacer 802.11 para hacer esto es como decir que tiene que admitir el Protocolo de árbol de expansión solo para reenviar marcos de una interfaz a otra.
fuente y más información:
https://wiki.archlinux.org/index.php/Software_access_point
Respuesta corta
sudo iw dev wlan0 interface add wlan0_ap type managed
sudo create_ap wlan0_ap wlan0 createap mypassword
El dispositivo Wi-Fi debe ser compatible con el modo AP
Necesita un dispositivo inalámbrico compatible con nl80211, que admita el modo de funcionamiento AP. Esto se puede verificar ejecutando el comando iw list, en el bloque Modos de interfaz admitidos debe aparecer AP en la lista:
...
Supported interface modes:
* IBSS
* managed
* AP
* AP/VLAN
* WDS
* monitor
* mesh point
...
Cliente inalámbrico y AP de software con un solo dispositivo Wi-Fi
La creación de un AP de software es independiente de su propia conexión de red (Ethernet, inalámbrica, ...). Muchos dispositivos inalámbricos incluso admiten el funcionamiento simultáneo como AP y como "cliente" inalámbrico al mismo tiempo. Usando esa capacidad, puede crear un AP de software que actúe como un "repetidor inalámbrico" para una red existente, usando un solo dispositivo inalámbrico. La capacidad se enumera en la siguiente sección en la salida de iw list:
combinaciones de interfaz válidas:
$ iw list
...
valid interface combinations:
* #{ managed } <= 1, #{ AP, P2P-client, P2P-GO } <= 1, #{ P2P-device } <= 1,
total <= 3, #channels <= 2
...
La restricción #channels <=1 significa que su software AP debe operar en el mismo canal que su conexión de cliente Wi-Fi; consulte la configuración del canal en hostapd.conf a continuación.
Si desea utilizar la capacidad/característica, quizás porque no hay una conexión Ethernet disponible, debe crear dos interfaces virtuales separadas para usarla. Las interfaces virtuales para un dispositivo físico wlan0 se pueden crear de la siguiente manera:Las interfaces virtuales con una dirección MAC única se crean para la propia conexión de red (wlan0_sta) y para el software AP/hostapd "repetidor inalámbrico":
# iw dev wlan0 interface add wlan0_sta type managed
# iw dev wlan0 interface add wlan0_ap type managed
Configuración
La configuración de un punto de acceso consta de dos partes principales:
- Configurar la capa de enlace de Wi-Fi, para que los clientes inalámbricos puedan asociarse al punto de acceso del software de su computadora e intercambiar paquetes IP con él.
- Establecer la configuración de red en su computadora, para que transmita correctamente los paquetes IP entre su propia conexión a Internet y los clientes inalámbricos.
Herramientas
crear_ap
El paquete create_ap proporciona un script que puede crear un punto de acceso con puente o NAT para compartir Internet. Combina hostapd, dnsmasq e iptables para el buen funcionamiento del punto de acceso. La sintaxis básica para crear una red virtual NATed es la siguiente:
# create_ap wlan0 eth0 MyAccessPoint MyPassPhrase
El controlador nl80211 tiene algo llamado modo de interfaz "administrado". Puede configurarlo usando la utilidad "iw" de la siguiente manera:
interfaz iw phy phy0 agregar tipo wlan1 administrado
Más información sobre esto está disponible en https://wireless.wiki.kernel.org/en/users/documentation/iw. Phy0 hace referencia a lo que ve en /sys/class/ieee80211/.
También he visto que el rPI3 hace algo similar, pero con un modo de interfaz "__ap" más turbio. De esa manera, el usuario crea una segunda interfaz que solo se ejecuta en modo AP y usa la interfaz inicial como modo cliente.
Cualquiera que sea la forma en que lo realice (obviamente, el controlador debe admitirlo), necesitará dos interfaces (del mismo dispositivo físico). Una interfaz puede simplemente ejecutar wpa_supplicant como modo cliente, la otra (modo AP) generalmente usa hostapd para reproducir el punto de acceso.
[EDITAR:]
El código fuente de la herramienta iw aclara mucho sobre el modo __ap sombrío:
..
} else if (strcmp(tpstr, "__ap") == 0) {
*type = NL80211_IFTYPE_AP;
return 0;
} else if (strcmp(tpstr, "__ap_vlan") == 0) {
*type = NL80211_IFTYPE_AP_VLAN;
return 0;
} else if (strcmp(tpstr, "wds") == 0) {
*type = NL80211_IFTYPE_WDS;
return 0;
} else if (strcmp(tpstr, "managed") == 0 ||
strcmp(tpstr, "mgd") == 0 ||
strcmp(tpstr, "station") == 0) {
*type = NL80211_IFTYPE_STATION;
return 0;
}
..
El modo __ap se traduce en un tipo de enlace de red NL80211_IFTYPE_AP. También probé esto, y funciona bien. Sin embargo, es extraño que la wiki de documentación del kernel no lo mencione.