Есть такое приложение для WSL2 - usbipd. Но казалось бы, что оно только для UART свистков и прочее, но последние версии уже поддерживают проброску флешек и wifi свистков. Первым делом нужно пересобрать ядро(не бойтесь, это не весь дистрибутив, это только файл весом ~14Мб в сжатом виде) для поддержки вайфая. Во вложении уже скомпилировано версия ядра: Code: dmytro@DESKTOP-XXXXXX:~$ uname -a Linux DESKTOP-XXXXXX 5.10.102.1-microsoft-standard-WSL2+ #9 SMP Fri Jul 22 21:25:45 EEST 2022 x86_64 x86_64 x86_64 GNU/Linux Если у вас такое ядро Ubuntu-20.04, то файл ядра должен вам подойти без компиляции. Компиляция ядра Первым делом установим из магазина Ubuntu-20.04. После первого запуска иконки в приложениях идем в свой профиль c:\Users\<Имя> и добавляем файл с названием ".wslconfig" (точка тут нужна) как текстовый файл, его мы будем редактировать в Блокноте. Редактируем файл .wslconfig и добавляем такие строчки: Code: [wsl2] #kernel=c:\\wslkernel\\kernel-5.10.102.1-new localhostForwarding=true #memory=6GB #processors=3 #swap=10GB #swapFile=%USERPROFILE%\AppData\Local\Temp\swap.vhdx [interop] enabled=false appendWindowsPath=false Где kernel мы указываем путь к файлу скомпилированного нового ядра с поддержкой вафли, обратите внимание, что путь должен быть с двумя \\ слешами. Параметры memory, processors, swap отвечают за то, сколько WSLу вы выделите памяти, процессоров и нужен ли своп файл(если памяти мало например) соответственно. Обратите внимание, что все вышеуказанное закомментировано и только вы должны выбрать, нужно оно вам сейчас или нет. Остальные параметры не трогаем, они должны быть по умолчанию включены. Далее заходим в подсистему WSL2 Ubuntu и обновим дистрибутив: Code: sudo apt update sudo apt upgrade По желанию можно установить "sudo apt mc install" (Midnight Commander) или редактировать файл через Explorer (cd \\wsl$), нам нужен файл "~/.bashrc" который находится в домашней директории, необходимо добавить в этот файл в конец - строчку: Code: PATH=$(/usr/bin/printenv PATH | /usr/bin/perl -ne 'print join(":", grep { !/\/mnt\/[a-z]/ } split(/:/));') и после чего перезапустим WSL, для этого, уже в консоли Windows(cmd) использовать команду " wsl --shutdown" Перезапускаем WSL и теперь уже перед компиляции ядра установим зависимости: Code: sudo apt install -y build-essential git flex bison libssl-dev libelf-dev libncurses-dev autoconf libudev-dev libtool dwarves Теперь клонируем ядро: Code: git clone https://github.com/microsoft/WSL2-Linux-Kernel.git оно будет клонировать ядро относительно того пути, в котором вы сейчас находитесь, имейте ввиду, должен быть путь где ext4 ФС или просто домашняя пака "~/", потом заходим в папку WSL2-Linux-Kernel и применяем патч во вложении. Копируем патч в папку WSL2-Linux-Kernel и используем команду Code: patch -u < config.patch (если будет запрос целевого файла, то указывайте файл Microsoft/config-wsl) Если Вы специалист в компилировании ядра linux, то можете воспользоваться командой Code: sudo make KCONFIG_CONFIG=Microsoft/config-wsl menuconfig (относительно пути исходников WSL2-Linux-Kernel) и в меню выбрать дополнительную конфигурацию - если вам нужно например установить модули wifi, которые в ядре находятся проприетарно(по умолчанию они отключены). Или пропустите этот шаг. Теперь собираем ядро командой Code: sudo make KCONFIG_CONFIG=Microsoft/config-wsl -j 3 где число "3" - кол-во выделенных ядер вашего процессора, чем больше - тем быстрее скомпилирует. После удачной компиляции, уже готов файл ядра, он находится по пути arch/x86/boot/bzImage <- как файл, его необходимо скопировать вне WSL - в любое удобное место вашего диска, я обычно создаю папку c:\wslkernel\ и копирую его туда Code: cp -v arch/x86/boot/bzImage /mnt/c/wslkernel/kernel-5.10.102.1-new Теперь то, можно в файле c:\Users\<Имя>\.wslconfig раскомментировать параметр Code: kernel=c:\\wslkernel\\kernel-5.10.102.1-new и перезапустить "wsl --shutdown". Сборка драйвера WiFi Для сборки нам понадобится всё тот же клонированный WSL2-Linux-Kernel - т.к. тут в WSL2 свой linux-headers и в репозитории apt его не будет. Чтобы была возможность компилировать драйвер (или использовать для компиляции dkms) нужно пробросить эту ссылочку: Code: sudo ln -s ~/WSL2-Linux-Kernel /lib/modules/5.10.102.1-microsoft-standard-WSL2+/build где путь должен быть от WSL2-Linux-Kernel, до грубо говоря "uname -r", в данном случае "5.10.102.1-microsoft-standard-WSL2+" папка. Дальше компилируйте драйвер Wifi по стандартной процедуре, которая описана в мануале для вашего донгла. В моём случае, я компилировал этот драйвер: https://github.com/morrownr/88x2bu-20210702, где нужно устанавливать свои зависимости. Имейте ввиду, в WSL2 не работает автозагрузка модулей(разве что выходить из ситуации скриптами автозагрузки) - поэтому загружать модуль нужно командой "sudo modprobe <модуль>", да и в любом случае необходимо загружать модуль только после инициализации usbip устройства, об этом ниже. Но в моём случае я мог модуль загрузить раньше, п потом использовать attach утилиты usbipd(об этом ниже). Утилита usbipd-win Следующий шаг, это установка утилиты usbipd для Windows и usbip для WSL чтобы можно было связать две системы по USB. По пути https://github.com/dorssel/usbipd-win качаем последний релиз(на момент написания этого мануала usbipd-win_2.3.0.msi) и устанавливаем в системе Windows. Для WSL2 чуть сложнее, нужно установить такими командами: Code: sudo apt install linux-tools-virtual hwdata sudo update-alternatives --install /usr/local/bin/usbip usbip `ls /usr/lib/linux-tools/*/usbip | tail -n1` 20 После чего, можно даже не перезагружая попытаться пробросить устройство: Code: C:\WINDOWS\system32>usbipd wsl list BUSID VID:PID DEVICE STATE 1-1 0458:0152 USB-устройство ввода Not attached 4-4 0bda:b812 Realtek 8812BU Wireless LAN 802.11ac USB NIC Not attached 7-4 0781:5583 Запоминающее устройство для USB Not attached C:\WINDOWS\system32>usbipd wsl attach -b 4-4 C:\WINDOWS\system32>usbipd wsl list BUSID VID:PID DEVICE STATE 1-1 0458:0152 USB-устройство ввода Not attached 4-4 0bda:b812 Realtek 8812BU Wireless LAN 802.11ac USB NIC Attached - Ubuntu-20.04 7-4 0781:5583 Запоминающее устройство для USB Not attached C:\WINDOWS\system32> после чего в консоли WSL появится это устройство: Code: dmytro@DESKTOP-XXXXXX:~$ lsusb Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 003: ID 0bda:b812 Realtek Semiconductor Corp. USB3.0 802.11ac 1200M Adapter Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub dmytro@DESKTOP-XXXXXX:~$ Что удобно, так это то, что при attach в WSL у вас в Windows оно сразу отключается(не нужно перезагрузок), а при detach из WSL устройство также без всяких манипуляций появляется в системе Windows и его сразу можно использовать) Какие гарантии и чего нет по умолчанию в WSL2? А гарантий, что у вас заработает как у меня никаких нет! Это может быть исключение. И как писалось раньше, модули Wi-Fi, которые идут по умолчанию с любым дистрибутивом Linux - отключены в ядре, и вам их нужно включать самому(в menuconfig это Device Drivers ---> [*] Network device support ---> [*] Wireless LAN ---> <и тут выбрать модуль, который вам нужен>). Чего нет в WSL2 и что нужно устанавливать из apt, так это: wireless-tools - утилита отвечающая за iwconfig, может еще за iwlist - не уверен. net-tools - в WSL2 даже нет ifconfig Карл. linux-firmware - не уверен, может и есть. rfkill - необходима для aircrack, но это только ради того чтобы скрипты которые от нее зависят не ругались, потому как никто не будет использовать ваш wlan# - ибо нет тут networkmanager и wpa_supplicant. hostapd - честно признаюсь, не проверял, да и не нужен он мне чтобы поймать хендшейк. aircrack-ng - без комментариев. Остальное компилируем сами. Инжекция работает как и должна, я проверил на своем драйвере. https://www.mediafire.com/file/wq95jlys4nb6m1t/wslkernel.zip/file Update: Также хочу заметить, что в системе WSL2 поломана загрузка драйверов /lib/firmware из rootfs, где находится в том числе regulatory.db (по поводу важности открытый вопрос). Но чтобы загружать любую firmware для WiFi адаптера в WSL2 - на данном этапе, необходимо этот драйвер интегрировать в ядро при компиляции. За это отвечает конфигурация: Code: CONFIG_EXTRA_FIRMWARE="regulatory.db" CONFIG_EXTRA_FIRMWARE_DIR="/lib/firmware" Если ваш драйвер для wifi адаптера зависит от бинарного драйвера(firmware), вы должны интегрировать свой бинарный драйвер верхним примером, где "regulatory.db <firmware.bin>" должен отделятся пробелом(или можно относительный путь "regulatory.db <path>/<firmware.bin>"). Перед компиляцией, убедитесь, чтобы файл находится по обозначенному пути /lib/firmware/<firmware.bin>. Пока выход только такой я вижу.
Так точно. Code: $ pacman -Ql wireless_tools | grep '/usr/bin' wireless_tools /usr/bin/ wireless_tools /usr/bin/ifrename wireless_tools /usr/bin/iwconfig wireless_tools /usr/bin/iwevent wireless_tools /usr/bin/iwgetid wireless_tools /usr/bin/iwlist wireless_tools /usr/bin/iwpriv wireless_tools /usr/bin/iwspy На самом деле, rfkill предназначен не для остановки процессов, мешающих airodump-ng, а для того, чтобы "аппаратно" отключать или включать беспроводные устройства (Wi-Fi, Bluetooth, GPS, NFC и др.)