OK, agora posso responder minha própria pergunta.
Eu usei as dicas do comentário de Tyson para começar, mas havia um pouco mais que eu precisava fazer. Especialmente porque eu não tinha mencionado a rede corporativa com a qual eu estava me conectando era o WPA2-Enterprise PEAP MSCHAPv2 autenticado (eduroam).
Eu tenho um hardware bem barato: um ponto de acesso TP-Link TL-WA801ND (Wireless N 300MB single-band 2.4Ghz); e um ASUS AC750 Router (Wireless AC dual-band).
Nenhum desses bits de hardware pode se conectar no modo cliente a uma rede host com autenticação PEAP.
Eu descobri uma substituição de firmware de código aberto, OpenWrt , com alguns artigos Wiki e vídeo do YouTube que prometem fazer o modo cliente com PEAP possível.
Eu li muito sobre problemas com o espaço de armazenamento disponível em o ponto de acesso WA801ND . No entanto, tive sorte. Eu fui enviado um WA801ND V5, que tem o dobro do armazenamento (8MB) das versões anteriores.
No entanto, não havia nada sobre a instalação na V5 em wiki # 1 e instruções de criação assustadoras em wiki # 2 (por que existem dois wikis no site da OpenWrt?).
Eu tive a mesma sorte, porque eu encontrei um git commit detalhando suporte para o V5 , apesar do que os wikis dizem, e com instruções sobre como piscar.
Lendo por alguma documentação , juntamente com as instruções no git commit, finalmente conseguimos o OpenWrt instalado o ponto de acesso WA801ND.
Isso obtém o firmware exclusivo do terminal apenas no dispositivo, que não suporta a autenticação PEAP no modo cliente.
O primeiro passo é ativar o suporte a PEAP.
O OpenWrt vem com seu próprio gerenciador de pacotes, mas o WA801ND não tinha acesso à internet, então eu tive que pegar os pacotes manualmente. Infelizmente, o repositório de pacotes mudou de estrutura desde que a maior parte da documentação on-line foi escrita, por isso foi complicado encontrar os pacotes.
Eu finalmente descobri que há dois sub-repositórios, um para o "destino" (dispositivo) e um para o arco (CPU).
Assim, depois de ter baixado e scp'd o wpad_2018-05-21-62566bc2-4_mipsel_24kc.ipk
package para /tmp
no dispositivo, eu poderia opkg remove wpad-mini
then opkg install /tmp/wpad_2018-05-21-62566bc2-4_mipsel_24kc.ipk
, ativando o suporte ao PEAP wpa_supplicant.
Eu tive a chance de configurar o WA801ND através de arquivos de configuração, mas isso é um grande projeto por si só. Eu realmente queria uma interface web GUI. O padrão no OpenWrt é o Luci , que tem várias dependências que precisam ser baixadas e scp'd para o dispositivo.
Por sorte, encontrei uma página wiki com um script (próximo ao final) para automatizá-la. Infelizmente, o script era antigo, faltava uma dependência ou duas e o URL do pacote estava errado. Eu consertei e voila, Luci instalou!
A partir daí, foi fácil configurar uma conexão de modo cliente com a rede PEAP através da interface da Web Luci no ponto de acesso WA801ND e, em seguida, conectar a Ethernet do ponto de acesso à porta WAN do roteador AC750. Eu tive que mudar a sub-rede do roteador de 192.168.1.x para 192.168.2.x assim não entrou em conflito com o ponto de acesso. Então tudo "acabou de funcionar" (finalmente!).
O script corrigido é anexado abaixo, para referência:
#!/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"