Виртуальные 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

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


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

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

  1. Аноним:

    Приветствую. "Проблемы Frag Attacks позволяют злоумышленнику, находящемуся в радиусе действия Wi-Fi, собирать информацию о владельце устройства и выполнять вредоносный код". Планируете писать про frag attack?

    https://github.com/vanhoefm/fragattacks

     

    • Alexey:

      Приветствую! Я видел эту страницу (или новость) об этом. Всё, что они делают, они называют «атаками», но вся суть написанного на этой странице и на их сайте сводится к следующему:

      мы отправляем Точкам Доступа что-то очень необычное (настолько необычное, что нужно патчить драйвер и патчить firmware для устройства), а устройства как-то по-разному отвечают. Но мы не только не знаем, как это эксплуатировать, мы даже не знаем, можно ли это эксплуатировать в принципе…

      И это всё… У них есть Live-образ, в котором это всё можно попробовать (чтобы не загадить свою систему), но конечный смысл происходящего мне не ясен. Поэтому непонятно, зачем этим заниматься, если априори это не даст никакого результата.

  2. Прохожий:

    Подскажите пожалуйста, то что описано в статье, подобное можно ли повторить на проводном интерфейсе. Таким образом чтоб один физический интерф. одновременно был и шлюзом и сниффером.

Добавить комментарий для Аноним Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *