Может ли машина Linux выступать в роли беспроводного клиента и точки доступа одновременно, используя один физический интерфейс WLAN?

12

Если у меня есть только 1 физический интерфейс WLAN, можно ли предпринять какие-либо действия, чтобы он мог быть клиентом существующей точки доступа и одновременно выступать в качестве точки доступа для других клиентов?

У меня есть существующий маршрутизатор 802.11g ADSL, и я собираюсь создать HTPC, который будет иметь 802.11n. Мой ноутбук также имеет 802.11n, но на данный момент он подключается только со скоростью 54 Мбит / с, потому что это то, что поддерживает точка доступа. Я бы хотел, чтобы HTPC был клиентом моего маршрутизатора ADSL, но мой ноутбук должен быть клиентом HTPC, поэтому копирование файлов на него будет быстрее.

Возможный?

Редактировать: очевидно, что я могу подключить HTPC к маршрутизатору ADSL с помощью Ethernet и отключить Wi-Fi на маршрутизаторе, но давайте просто проигнорируем эту опцию. :-)

ThatGraemeGuy
источник

Ответы:

9

Лично я не делал этого раньше, но вот некоторая информация, чтобы направить вас в правильном направлении.

С точки зрения протокола, определенно возможно иметь одну радиостанцию, работающую и как 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, чтобы просто пересылать кадры с одного интерфейса на другой.

Spiff
источник
Похоже, что на моей плате есть чипсет Atheros, так что мне может повезти. Я жду доставки своих компонентов, затем могу собрать и протестировать.
ThatGraemeGuy
У меня еще не было возможности поиграть с MadWifi. Я согласен, потому что ответ правильный, кажется, нет другого набора микросхем / семейства, который предлагает эту функциональность.
ThatGraemeGuy
Спифф, я работаю с чипом Atheros и madwifi, и я пытаюсь настроить VAP один в sta и один в ap. Я могу настроить несколько VAP в режиме ap, но когда я устанавливаю первый VAP в sta, а затем пытаюсь настроить другой VAP в ap, я получаю wlanconfig: ioctl: Ошибка ввода / вывода. Есть ли у вас идеи, как с этим бороться?
sachinr
1
@sachinr Задайте это как вопрос, чтобы все видели это, а не просто комментарий к трехлетнему ответу на чужой вопрос.
Spiff
Эй, я добавил свой вопрос здесь - superuser.com/questions/649742/… . Можешь посмотреть? Спасибо :)
sachinr
4

Драйвер nl80211 имеет то, что называется «управляемым» режимом интерфейса. Вы можете настроить его с помощью утилиты "iw" следующим образом:

iw phy phy0 interface добавить управляемый тип wlan1

Более подробная информация об этом доступна на https://wireless.wiki.kernel.org/en/users/documentation/iw . Phy0 относится к тому, что вы видите в / sys / class / ieee80211 /.

Я также видел, что rPI3 делает что-то похожее, но с более тенистым режимом интерфейса "__ap" . Таким образом, пользователь создает второй интерфейс, который работает только в режиме AP, и использует начальный интерфейс в качестве режима клиента.

Независимо от того, как вы это понимаете (драйвер, очевидно, должен его поддерживать), вам понадобятся два интерфейса (от одного физического устройства). Один интерфейс может просто запустить wpa_supplicant в режиме клиента, другой (режим AP) обычно использует hostapd для воспроизведения точки доступа.

[РЕДАКТИРОВАТЬ:]

Исходный код инструмента iw многое проясняет в режиме shady __ap:

..
} 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;
} 
..

Режим __ap преобразуется в тип netlink NL80211_IFTYPE_AP. Я тоже это проверял, и это отлично работает. Странно, что вики-документация по ядру не упоминает об этом.

Arnout
источник
4

источник и дополнительная информация:

https://wiki.archlinux.org/index.php/Software_access_point

Короткий ответ

sudo iw dev wlan0 interface add wlan0_ap type managed
sudo create_ap wlan0_ap wlan0 createap mypassword

Устройство Wi-Fi должно поддерживать режим AP

Вам необходимо беспроводное устройство, совместимое с nl80211, которое поддерживает режим работы точки доступа. Это можно проверить, запустив команду iw list, в блоке Поддерживаемые режимы интерфейса должна быть указана точка доступа:

...
    Supported interface modes:
         * IBSS
         * managed
         * AP
         * AP/VLAN
         * WDS
         * monitor
         * mesh point
...

Беспроводная клиентская и программная точка доступа с одним устройством Wi-Fi

Создание программного AP не зависит от вашего собственного сетевого подключения (Ethernet, беспроводной, ...). Многие беспроводные устройства даже поддерживают одновременную работу как в качестве точки доступа, так и в качестве беспроводного «клиента» одновременно. Используя эту возможность, вы можете создать программную точку доступа, действующую как «беспроводной повторитель» для существующей сети, используя одно беспроводное устройство. Возможность перечислена в следующем разделе в выводе списка iw:

допустимые комбинации интерфейса:

$ iw list
...
valid interface combinations:
     * #{ managed } <= 1, #{ AP, P2P-client, P2P-GO } <= 1, #{ P2P-device } <= 1,
       total <= 3, #channels <= 2
...

Ограничение #channels <= 1 означает, что ваша программная точка доступа должна работать на том же канале, что и ваше клиентское соединение Wi-Fi; см. настройки канала в hostapd.conf ниже.

Если вы хотите использовать эту возможность / функцию, возможно, из-за того, что соединение Ethernet недоступно, вам необходимо создать два отдельных виртуальных интерфейса для его использования. Виртуальные интерфейсы для физического устройства wlan0 могут быть созданы следующим образом: виртуальные интерфейсы с уникальным MAC-адресом создаются для самого сетевого подключения (wlan0_sta) и для программного AP / hostapd «беспроводной повторитель»:

# iw dev wlan0 interface add wlan0_sta type managed 
# iw dev wlan0 interface add wlan0_ap  type managed

конфигурация

Настройка точки доступа состоит из двух основных частей:

  1. Настройка уровня канала Wi-Fi, чтобы беспроводные клиенты могли подключаться к программной точке доступа вашего компьютера и обмениваться с ней IP-пакетами.
  2. Настройка конфигурации сети на вашем компьютере, чтобы он надлежащим образом передавал IP-пакеты между собственным интернет-соединением и беспроводными клиентами.

инструменты

create_ap

Пакет create_ap предоставляет скрипт, который может создать мостовую или NAT-точку доступа для общего доступа в Интернет. Он сочетает в себе hostapd, dnsmasq и iptables для хорошего функционирования точки доступа. Основной синтаксис для создания виртуальной сети с NAT заключается в следующем:

# create_ap wlan0 eth0 MyAccessPoint MyPassPhrase
Мустафа Кандан
источник
Отличный ответ, спасибо!
Иман Акбари
Во-