Лично я не делал этого раньше, но вот некоторая информация, чтобы направить вас в правильном направлении.
С точки зрения протокола, определенно возможно иметь одну радиостанцию, работающую и как AP, и как STA клиента. Лучше всего (или, возможно, почти обязательно), если точка доступа, которую вы создаете, и точка, к которой вы присоединяетесь как клиент, находятся на одном канале. Наличие радиокарты должно постоянно переключать каналы на запросы на обслуживание - это рецепт потерянных кадров и ужасной производительности.
В программном плане это становится возможным. Несколько драйверов карт 802.11 в Linux поддерживают концепцию VAP (виртуальных точек доступа), которая позволяет одной карте работать как несколько точек доступа (несколько SSID, даже BSSID) одновременно. Как ни странно, термин VAP стал означать любой вид виртуальных интерфейсов на одной и той же карте 802.11, независимо от того, находится ли виртуальный интерфейс в режиме AP или нет. Таким образом, в этих комбинациях карт и драйверов вы можете создать две VAP - VAP в режиме STA.
Драйвер MadWifi для карт на базе Atheros поддерживает VAP. Если ваша карта 802.11 использует чипсет Atheros и вы устанавливаете правильную версию драйвера MadWifi, вы можете настроить свою карту для одновременного режима STA + AP примерно так:
wlanconfig ath0 create wlandev wifi0 wlanmode sta
wlanconfig ath1 create wlandev wifi0 wlanmode ap
Обратите внимание, что это не полные инструкции по настройке, а просто попытка начать работу.
Возможно, вы захотите Google что-то вроде " Wi-Fi VAP " для получения дополнительной информации. Я скопировал вышеупомянутые команды отсюда .
Ох, и какой-то миф разрушает: карты Atheros не редкость на потребительских машинах. Они являются основными игроками в чипсетах 802.11, наряду с Broadcom, Marvell, Intel и Ralink. И только то, что я использовал пример MadWifi / Atheros, не означает, что нет драйверов для Linux для чипов других крупных игроков, которые могут делать то же самое. Кроме того, 802.11s не требуется для этого. Сказать, что для этого нужно сделать 802.11, это все равно, что сказать, что вы должны поддерживать протокол Spanning Tree, чтобы просто пересылать кадры с одного интерфейса на другой.
Драйвер nl80211 имеет то, что называется «управляемым» режимом интерфейса. Вы можете настроить его с помощью утилиты "iw" следующим образом:
Более подробная информация об этом доступна на https://wireless.wiki.kernel.org/en/users/documentation/iw . Phy0 относится к тому, что вы видите в / sys / class / ieee80211 /.
Я также видел, что rPI3 делает что-то похожее, но с более тенистым режимом интерфейса "__ap" . Таким образом, пользователь создает второй интерфейс, который работает только в режиме AP, и использует начальный интерфейс в качестве режима клиента.
Независимо от того, как вы это понимаете (драйвер, очевидно, должен его поддерживать), вам понадобятся два интерфейса (от одного физического устройства). Один интерфейс может просто запустить wpa_supplicant в режиме клиента, другой (режим AP) обычно использует hostapd для воспроизведения точки доступа.
[РЕДАКТИРОВАТЬ:]
Исходный код инструмента iw многое проясняет в режиме shady __ap:
Режим __ap преобразуется в тип netlink NL80211_IFTYPE_AP. Я тоже это проверял, и это отлично работает. Странно, что вики-документация по ядру не упоминает об этом.
источник
источник и дополнительная информация:
https://wiki.archlinux.org/index.php/Software_access_point
Короткий ответ
Устройство Wi-Fi должно поддерживать режим AP
Вам необходимо беспроводное устройство, совместимое с nl80211, которое поддерживает режим работы точки доступа. Это можно проверить, запустив команду iw list, в блоке Поддерживаемые режимы интерфейса должна быть указана точка доступа:
Беспроводная клиентская и программная точка доступа с одним устройством Wi-Fi
Создание программного AP не зависит от вашего собственного сетевого подключения (Ethernet, беспроводной, ...). Многие беспроводные устройства даже поддерживают одновременную работу как в качестве точки доступа, так и в качестве беспроводного «клиента» одновременно. Используя эту возможность, вы можете создать программную точку доступа, действующую как «беспроводной повторитель» для существующей сети, используя одно беспроводное устройство. Возможность перечислена в следующем разделе в выводе списка iw:
допустимые комбинации интерфейса:
Ограничение #channels <= 1 означает, что ваша программная точка доступа должна работать на том же канале, что и ваше клиентское соединение Wi-Fi; см. настройки канала в hostapd.conf ниже.
Если вы хотите использовать эту возможность / функцию, возможно, из-за того, что соединение Ethernet недоступно, вам необходимо создать два отдельных виртуальных интерфейса для его использования. Виртуальные интерфейсы для физического устройства wlan0 могут быть созданы следующим образом: виртуальные интерфейсы с уникальным MAC-адресом создаются для самого сетевого подключения (wlan0_sta) и для программного AP / hostapd «беспроводной повторитель»:
конфигурация
Настройка точки доступа состоит из двух основных частей:
инструменты
create_ap
Пакет create_ap предоставляет скрипт, который может создать мостовую или NAT-точку доступа для общего доступа в Интернет. Он сочетает в себе hostapd, dnsmasq и iptables для хорошего функционирования точки доступа. Основной синтаксис для создания виртуальной сети с NAT заключается в следующем:
источник