9

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

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

Возможный?

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

2 ответа2

7

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

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

3

Драйвер 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. Я тоже это проверял, и это отлично работает. Странно, что вики-документация по ядру не упоминает об этом.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .