Хорошо, теперь я могу ответить на свой вопрос.
Я использовал подсказки из комментария Тайсона, чтобы начать, но я должен был сделать еще кое-что. Тем более, что я не упомянул о корпоративной сети, к которой я подключался, проходила аутентификация WPA2-Enterprise PEAP MSCHAPv2 (eduroam).
У меня есть довольно дешевое оборудование: точка доступа TP-Link TL-WA801ND (Wireless N 300 МБ, однополосный, 2,4 ГГц); и маршрутизатор ASUS AC750 (беспроводной двухдиапазонный переменный ток).
Ни один из этих аппаратных компонентов не может подключаться в режиме клиента к сети хоста с аутентификацией PEAP.
Я обнаружил замену прошивки с открытым исходным кодом, OpenWrt, с некоторыми статьями вики и видео на YouTube, обещающими сделать возможным режим клиента с PEAP.
Я много читал о проблемах с доступным пространством для хранения на точке доступа WA801ND . Однако мне повезло. Мне поставили WA801ND V5, который имеет двойное хранилище (8 МБ) предыдущих версий.
Тем не менее, ничего не было сказано об установке на V5 в вики № 1 и страшных инструкциях по сборке в вики № 2 (почему на сайте OpenWrt есть две вики?).
Мне, однако, повезло в два раза, потому что я нашел в git commit подробную поддержку для V5, несмотря на то, что говорят вики, и с инструкциями по прошивке.
Прочитав некоторую документацию вместе с инструкциями в git commit, наконец-то установили OpenWrt на точку доступа WA801ND.
Это позволяет получить на устройстве только встроенную прошивку для терминала, которая не поддерживает аутентификацию PEAP в режиме клиента.
Итак, первый шаг - включить поддержку PEAP.
OpenWrt поставляется с собственным менеджером пакетов, но WA801ND не имел доступа к Интернету, поэтому мне пришлось получать пакеты вручную. К сожалению , хранилище пакетов изменило структуру, так как большая часть онлайн-документации была написана, поэтому было сложно найти пакеты.
В конце концов я обнаружил, что есть два под-репозитория, один для «цели» (устройство) и один для арки (процессор).
Итак, когда я скачал и scp'd в wpad_2018-05-21-62566bc2-4_mipsel_24kc.ipk
пакет /tmp
на устройстве, я мог opkg remove wpad-mini
тогда opkg install /tmp/wpad_2018-05-21-62566bc2-4_mipsel_24kc.ipk
, что позволяет wpa_supplicant поддержку PEAP.
Я попытался настроить WA801ND с помощью файлов конфигурации, но сам по себе это большой проект. Я действительно хотел веб-интерфейс. Стандарт в OpenWrt - Luci, у которого есть куча зависимостей, которые нужно загрузить и передать на устройство через scp.
К счастью, я нашел вики-страницу со сценарием (внизу) для его автоматизации. К сожалению, сценарий был старым, отсутствовала одна или две зависимости и имел неправильный URL-адрес пакета. Я исправил это и вуаля, Люси установил!
Оттуда было легко установить соединение в режиме клиента с сетью PEAP через веб-интерфейс Luci на точке доступа WA801ND, а затем подключить локальную сеть точки доступа к порту WAN маршрутизатора AC750. Мне пришлось изменить подсеть маршрутизатора с 192.168.1.x на 192.168.2.x, чтобы она не конфликтовала с точкой доступа. Тогда все «просто сработало» (наконец-то!).
Исправленный скрипт добавлен ниже, для справки:
#!/bin/sh #assumes the user has egrep, wget, ssh, and scp # Change this to match your router architecture="mipsel_24kc" target="ramips/mt76x8" # These should be fine unless you've changed something user="root" ip_address="192.168.1.1" url="https://downloads.openwrt.org/snapshots/packages/$/" target_url="http://downloads.openwrt.org/snapshots/targets/$/packages/" tmpdir="/tmp/luci-offline" packages_base="liblua lua libuci-lua libubus libubus-lua uhttpd rpcd" packages_luci="luci-base luci-lib-ip luci-lib-nixio luci-theme-bootstrap luci-mod-admin-full luci-lib-jsonc liblucihttp liblucihttp-lua" packages_target="libiwinfo-lua" mkdir "$tmpdir" cd "$tmpdir" echo "Downloading base packages" wget --quiet -N "$base/Packages" || echo "Failed to get base Packages" for pkg in $packages_base; do pkgfile="$(egrep -oe " $_.+" Packages | tail -c +2)" pkgurl="$base/$" wget --quiet -N "$pkgurl" || echo "Failed to fetch $pkg" done echo "Downloading Luci packages" wget --quiet -N "$luci/Packages" || echo "Failed to get luci Packages" for pkg in $packages_luci; do pkgfile="$(egrep -oe " $_.+" Packages | tail -c +2)" pkgurl="$luci/$" wget --quiet -N "$pkgurl" || echo "Failed to fetch $pkg" done echo "Downloading target-specific packages" wget --quiet -N "$/Packages" || echo "Failed to get target Packages" for pkg in $packages_target; do pkgfile="$(egrep -oe " $_.+" Packages | tail -c +2)" pkgurl="$/$" echo "Downloading $pkgurl" wget --quiet -N "$pkgurl" || echo "Failed to fetch $pkg" done echo "Copying packages to device" ssh "$@$" mkdir -p /tmp/luci-offline-packages scp *.ipk "$@$":/tmp/luci-offline-packages echo "Installing pacakges" ssh "$@$" opkg install /tmp/luci-offline-packages/*.ipk echo "Deleting packages from device" ssh "$@$" rm -rf /tmp/luci-offline-packages/ echo "Starting HTTP server and enabling on boot" ssh "$@$" /etc/init.d/uhttpd start ssh "$@$" /etc/init.d/uhttpd enable echo "Deleting packages from PC" cd rm -rf "$tmpdir"