HackWare.ru

Виртуальные Wi-Fi интерфейсы для одновременного использования Wi-Fi адаптера в разных режимах

Оглавление

1. Что такое dev и phy для команды iw

2. Одновременное использование Wi-Fi адаптера в разных режимах

3. Добавление интерфейса в режиме монитора

4. Как удалить виртуальный интерфейс

5. Типы виртуальных интерфейсов

6. Как в iw добавить AP интерфейс

7. Как как одну Wi-Fi карту использовать в качестве клиента и Точки Доступа

8. Команды для показа имён сетевых интерфейсов

9. Дополнительные источники


Что такое dev и phy для команды iw

Программа airmon-ng для беспроводных адаптеров показывает такие данные как PHY и Interface.

Программа iw позволяет управлять сетевым адаптером обращаясь к нему либо как к устройству phy, либо как к интерфейсу dev. При этом набор команд разный.

PHY (аббревиатура от англ. Physical layer — физический уровень) — интегральная схема, предназначенная для выполнения функций физического уровня сетевой модели OSI.

Микросхемы PHY позволяют другим микросхемам канального уровня, называемым MAC, подключиться к физической среде передачи, такой как оптическое волокно или медный кабель.

То есть в Linux PHY — это номер, который устройству присвоил драйвер/фреймворк PHY для обращения к нему и настройки на канальном уровне.

Что касается dev (имя устройства, имя интерфейса), то это то условное имя присвоенное устройству системой. Имеются разные схемы наименования, поэтому в разных дистрибутивах Linux сетевые интерфейсы могут называться по-разному. При желании, имя сетевого интерфейса можно изменить.

Одновременное использование Wi-Fi адаптера в разных режимах

Казалось бы, ну и что? Через phy можно управлять настройками, значение которых без чтения специальной технической документации непонятно. Через имя интерфейса dev можно управлять более привычными настройками (перевести в режим монитора, переключиться на определённый канал и так далее).

Дело в том, что для беспроводных адаптеров сетевой интерфейс это не просто имя, идентифицирующее устройство. Интерфейсы бывают разных типов и для доступа к некоторым возможностям беспроводных адаптеров нужно добавлять интерфейсы. Более того, один Wi-Fi адаптер может иметь сразу несколько сетевых интерфейсов, выполняющих разные функции, например, комбинация интерфейсов в управляемом режиме и в режиме монитора, либо комбинация интерфейсов в управляемом режиме и в режиме Точки Доступа, при этом беспроводной адаптер будет одновременно выполнять сразу две функции! Причём разным интерфейсам одного Wi-Fi адаптера можно присвоить разные MAC адреса.

Смотрите также:

Выполните следующую команду для вывода полного списка возможностей всех ваших беспроводных интерфейсов:

iw list

Поищите следующие строки:

  • software interface modes (can always be added) — программные режимы интерфейсов (всегда могут быть добавлены)
  • valid interface combinations — возможные комбинации интерфейсов

Пример для первого Wi-Fi адаптера:

	software interface modes (can always be added):
		 * AP/VLAN
		 * monitor
	valid interface combinations:
		 * #{ managed, P2P-client } <= 2, #{ AP, mesh point, P2P-GO } <= 2,
		   total <= 2, #channels <= 1

То есть вместо того, чтобы переводить интерфейс из управляемого режима в режим монитора или запускать на нём Точку Доступа, можно к уже имеющемуся добавить виртуальный интерфейс в режиме monitor или в режиме AP.

Также у данного беспроводного адаптера может быть до двух сетевых интерфейсов в режимах managed, P2P-client, до двух интерфейсов AP, mesh point, P2P-GO, но в любом случае общее количество интерфейсов не может быть более двух, при этом у всех у них должен быть один канал (#channels <= 1).

Следующий пример:

	software interface modes (can always be added):
		 * AP/VLAN
		 * monitor
	valid interface combinations:
		 * #{ managed } <= 1, #{ AP, P2P-client, P2P-GO } <= 1, #{ P2P-device } <= 1,
		   total <= 3, #channels <= 2

Опять же можно добавить интерфейс в режиме монитора, интерфейс в управляемом режиме может быть только один, всего может быть до трёх интерфейсов и они могут использовать до двух разных каналов (#channels <= 2).

Ещё пример:

	software interface modes (can always be added):
		 * AP/VLAN
		 * monitor
	valid interface combinations:
		 * #{ AP, mesh point } <= 4,
		   total <= 4, #channels <= 1

Можно добавить до четырёх AP интерфейсов.

И ещё пример:

	software interface modes (can always be added):
		 * AP/VLAN
		 * monitor
	valid interface combinations:
		 * #{ AP, mesh point } <= 8,
		   total <= 8, #channels <= 1

Можно сделать аж до 8 интерфейсов AP, но все они могут использовать один канал.

Добавление интерфейса в режиме монитора

Предпочитаемый мной способ получить режим монитора — это перевести существующий беспроводной интерфейс из режима managed в monitor:

sudo ip link set <ИНТЕРФЕЙС> down
sudo iw <ИНТЕРФЕЙС> set monitor control
sudo ip link set <ИНТЕРФЕЙС> up

В результате Wi-Fi карта, пока она находится в режиме монитора, теряет способность подключаться к Точкам Доступа, то есть Интернет-подключение отсутствует.

Смотрите также: Памятка по Wi-Fi в Linux: подсказки и решение проблем

С помощью добавления нового интерфейса эту проблему удаётся решить.

Добавление интерфейса в режиме монитора выполняется следующим образом:

sudo iw ИНТЕРФЕЙС interface add НОВЫЙ_ИНТЕРФЕЙС type monitor

В качестве ИНТЕРФЕЙС укажите имя существующего интерфейса, а в качестве НОВЫЙ_ИНТЕРФЕЙС можно указать произвольное имя.

При желании, вы можете назначить новому интерфейсу произвольный MAC-адрес:

sudo iw ИНТЕРФЕЙС interface add НОВЫЙ_ИНТЕРФЕЙС type monitor addr MAC_АДРЕС

Посмотрим, какие беспроводные интерфейсы имеются в системе:

iw dev

Видим, что Wi-Fi карта wlp0s20f0u1 подключена к сети с именем Jenechka.

Добавим к wlp0s20f0u1 интерфейс с именем wlanmon в режиме монитора и установим на нём MAC-адрес:

sudo iw wlp0s20f0u1 interface add wlanmon type monitor addr 'ca:fe:de:ad:be:ef'

Вновь посмотрим на наши интерфейсы:

iw dev

Обратите внимание, что появился новый интерфейс wlanmon.

Запустим airodump-ng используя только что созданный виртуальный интерфейс:

sudo airodump-ng wlanmon

А в другом окне запустим пинг, чтобы убедиться, что подключение к сети по-прежнему доступно:

ping suip.biz

Обратите внимание, что не смотря на то, что Wi-Fi адаптеру нужно находиться на одном канале для связи с ТД, тем не менее, при этом интерфейс в режиме монитора переключается по каналам.

Причём уже после остановки записи экрана, airodump-ng даже сумела поймать рукопожатие.

Я не заметил, чтобы виртуальный интерфейс в режиме монитора, если он используется для захвата данных, мешал Интернет-подключению. Но если попытаться с него что-либо отправить (например, для деаутентификации беспроводных клиентов), то Интернет-подключение разрывается. Скорее всего, это связано со сменой используемого канала.

Как удалить виртуальный интерфейс

Для удаления виртуального интерфейса используйте команду:

sudo iw ИНТЕРФЕЙС del

Например:

sudo iw wlanmon del

Типы виртуальных интерфейсов

Выше были показаны примеры команды в которых мы указывали имя сетевого интерфейса:

sudo iw dev DEV-ИМЯ interface add ИМЯ type ТИП [mesh_id ] [4addr on|off] [flags *] [addr ]

Также можно добавить виртуальный интерфейс по имени PHY:

sudo iw phy PHY-ИМЯ interface add ИМЯ type ТИП [mesh_id ] [4addr on|off] [flags *] [addr ]

Наверное, это может быть полезным, если вы удалили все имеющиеся интерфейсы (если такое возможно).

Доступные типы интерфейсов:

  • managed
  • ibss
  • monitor
  • mesh
  • wds

Флаги используются только для monitor интерфейсов, валидные флаги:

		none:     без специальных флагов
		fcsfail:  показывать кадры с ошибками FCS
		control:  показывать контрольные кадры
		otherbss: показывать кадры от других BSS
		cook:     использовать режим cooked
		active:   использовать режим active (ACK входящие одноадресные пакеты
		mumimo-groupid <GROUP_ID>: использовать MUMIMO в соответствии с групповым id
		mumimo-follow-mac <MAC_ADDRESS>: использовать MUMIMO в соответствии с MAC-адресом

mesh_id используется только для режима mesh.

Как в iw добавить AP интерфейс

Вы могли заметить, что в приведённом выше списке валидных типов интерфейсов отсутствует AP. Данный интерфейс с типом AP будет создан автоматически при создании Точки Доступа.

Для простоты, воспользуемся программой create_ap (по ссылке показано, как её установить).

Использование:

sudo create_ap [опции] ИНТЕРФЕЙС-AP ИНТЕРФЕЙС-С-ИНТЕРНЕТОМ [ИМЯ-AP [ПАРОЛЬ]]

К примеру, на интерфейсе wlo1 я хочу создать ТД с именем HackWare и паролем 12345678, в качестве источника Интернета должен использоваться интерфейс wlp0s20f0u1, тогда команда следующая:

sudo create_ap wlo1 wlp0s20f0u1 HackWare 12345678

Я могу подключиться к этой ТД и пользоваться Интернетом:

На компьютере же был создан новый интерфейс типа AP с именем ap0:

	Interface ap0
		ifindex 21
		wdev 0x6
		addr c0:b6:f9:da:af:3f
		ssid HackWare
		type AP
		channel 1 (2412 MHz), width: 20 MHz (no HT), center1: 2412 MHz
		txpower 22.00 dBm
		multicast TXQ:

Как как одну Wi-Fi карту использовать в качестве клиента и Точки Доступа

Показанный выше способ подразумевает, что у вас два сетевых интерфейса — причём обязательно один из них должен быть Wi-Fi адаптером, а второй может быть как Wi-Fi адаптером, так и проводным соединением.

Предположим, что у меня отсутствует проводное соединение и имеется только один адаптер, можно ли одну Wi-Fi карту одновременно использовать для подключения к Точке Доступа и как Точку Доступа? Да, можно. Один сетевой интерфейс может одновременно работать в качестве клиента и в качестве ТД, то есть выполнять роль усилителя сигнала (беспроводной повторитель).

Начнём с того, что остановим NetworkManager, иначе в моём случае у меня постоянно возникала ошибка «RTNETLINK answers: Device or resource busy»:

sudo systemctl stop NetworkManager
sudo airmon-ng check kill

Если у вас NetworkManager убран из автозагрузки, то начать нужно с активации беспроводного интерфейса:

sudo ip link set ИНТЕРФЕЙС up

Теперь нам нужно создать два виртуальных интерфейса в режиме managed с разными MAC-адресами:

sudo iw dev wlp0s20f0u1 interface add wlan0_sta type managed addr 00:c0:ca:00:00:02
sudo iw dev wlp0s20f0u1 interface add wlan0_ap type managed addr 00:c0:ca:00:00:01

Один из этих интерфейсов будет выполнять роль станции, а другой роль ТД.

Поскольку мы отключили NetworkManager, то теперь нам нужно подключиться к удалённой ТД вручную.

Создаём конфигурационный файл:

wpa_passphrase Jenechka ПАРОЛЬ > wpa_Jenechka.conf

Выполняем подключение:

sudo wpa_supplicant -i wlan0_sta -c wpa_Jenechka.conf

Если вы хотите, чтобы процесс wpa_supplicant ушёл в фон, то добавьте опцию -B:

sudo wpa_supplicant -B -i wlan0_sta -c wpa_Jenechka.conf

Подключение требует некоторого времени:

# sleep 5 # если запускать через скрипт, то в этом месте нужно дать время на подключение

Запускаем службу DHCP для автоматического получения IP адреса:

sudo dhclient wlan0_sta

Смотрим на состояние интерфейсов:

iw dev

Видим, что интерфейс wlan0_sta подключён к ТД — именно это нам и нужно.

Очень важно — посмотрите, на каком канале работает ТД и клиент. Этот канал обязательно нужно указать в следующей команде, иначе ничего не получится. В данном случае они работают на 8 канале.

Наконец, запускаем ТД с именем HackWare и паролем 12345678 на 8 канале:

sudo create_ap -c 8 wlan0_ap wlan0_sta HackWare 12345678

Всё получилось, и у нашего усилителя Wi-Fi сигнала даже есть подключённый клиент:

Команды для показа имён сетевых интерфейсов

Небольшая памятка по командам для получении информации о доступных в системе сетевых интерфейсах.

Показать только беспроводные интерфейсы:

iw dev

Вывод беспроводных интерфейсов вместе с их PHY, информации о драйвере и чипсете:

sudo airmon-ng

Вывод некоторой аппаратной информации:

sudo lshw -class network

Имена и описание интерфейсов:

sudo lshw -class network -short

Вывод всего, что напоминает сетевые интерфейсы (вместе с виртуальными):

ip link show

Смотрите также: Как использовать команду ip в Linux

Следующим образом можно посмотреть имена интерфейсов и оборудование:

ls -l /sys/class/net

Так можно вывести имена интерфейсов кроме виртуальных:

find /sys/class/net -type l -not -lname '*virtual*' -printf '%f\n'

Обратите внимание, что создаваемые в этой инструкции интерфейсы в данном случае не считаются виртуальными, поскольку привязаны к физическому оборудованию.

Статистику по интерфейсам можно посмотреть следующим образом:

cat /proc/net/dev

Дополнительные источники

История обновлений

No update history yet.

Рекомендуется:
↑