Хорошо, теперь я могу ответить на свой вопрос.
Я использовал подсказки из комментария Тайсона, чтобы начать, но я должен был сделать еще кое-что. Тем более, что я не упомянул о корпоративной сети, к которой я подключался, проходила аутентификация 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 не имел доступа к Интернету, поэтому мне пришлось получать пакеты вручную. К сожалению , хранилище пакетов изменило структуру, так как большая часть онлайн-документации была написана, поэтому было сложно найти пакеты.
В конце концов я обнаружил, что есть два под-репозитория, один для "цели" (устройство) и один для арки (процессор).
Итак, как только я скачал и скопировал на устройство пакет 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
, включающий поддержку PEAP wpa_supplicant.
Я попытался настроить 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/${architecture}/"
target_url="http://downloads.openwrt.org/snapshots/targets/${target}/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 "${url}base/Packages" || echo "Failed to get base Packages"
for pkg in $packages_base; do
pkgfile="$(egrep -oe " ${pkg}_.+" Packages | tail -c +2)"
pkgurl="${url}base/${pkgfile}"
wget --quiet -N "$pkgurl" || echo "Failed to fetch $pkg"
done
echo "Downloading Luci packages"
wget --quiet -N "${url}luci/Packages" || echo "Failed to get luci Packages"
for pkg in $packages_luci; do
pkgfile="$(egrep -oe " ${pkg}_.+" Packages | tail -c +2)"
pkgurl="${url}luci/${pkgfile}"
wget --quiet -N "$pkgurl" || echo "Failed to fetch $pkg"
done
echo "Downloading target-specific packages"
wget --quiet -N "${target_url}/Packages" || echo "Failed to get target Packages"
for pkg in $packages_target; do
pkgfile="$(egrep -oe " ${pkg}_.+" Packages | tail -c +2)"
pkgurl="${target_url}/${pkgfile}"
echo "Downloading $pkgurl"
wget --quiet -N "$pkgurl" || echo "Failed to fetch $pkg"
done
echo "Copying packages to device"
ssh "${user}@${ip_address}" mkdir -p /tmp/luci-offline-packages
scp *.ipk "${user}@${ip_address}":/tmp/luci-offline-packages
echo "Installing pacakges"
ssh "${user}@${ip_address}" opkg install /tmp/luci-offline-packages/*.ipk
echo "Deleting packages from device"
ssh "${user}@${ip_address}" rm -rf /tmp/luci-offline-packages/
echo "Starting HTTP server and enabling on boot"
ssh "${user}@${ip_address}" /etc/init.d/uhttpd start
ssh "${user}@${ip_address}" /etc/init.d/uhttpd enable
echo "Deleting packages from PC"
cd
rm -rf "$tmpdir"