sexta-feira, 19 de abril de 2013

Modificando o SSID e a chave WPA2 padrão do OpenWrt de acordo com o endereço MAC do AP

Meu problema era criar uma versão de firmware OpenWrt padrão, para ser instalado em milhares de roteadores de um mesmo modelo, o TP-Link WR-841nd. O firmware deveria ser customizado de uma forma que o técnico de instalação tivesse o menor trabalho possível.
Uma forma de customizar a configuração é copiar o diretório /etc de um roteador já configurado para a o diretório trunk/package/files da árvore de compilação do OpenWrt ,antes da compilação final da imagem (make).
Porém eu queria que cada roteador tivesse um SSID diferente, tipo REDE-XX, onde o XX é o último byte em hexa do endereço MAC da placa Wireless do roteador. Também seria importante que a chave WPA2 fosse diferente para roteador e que ela fosse de fácil acesso para o cliente. Então optei por utilizar o MAC completo como chave (sem os ":"), já que ele está impresso em uma etiqueta embaixo do equipamento.
No OpenWrt, se não existir um arquivo padrão /etc/config/wireless, ele é criado no primeiro "boot" do equipamento pelo script /sbin/wifi, que por sua vez utiliza a biblioteca /lib/wifi/mac80211.sh.
O que fiz foi alterar o arquivo trunk/package/mac80211/files/lib/wifi/mac80211.sh na árvore de compilação, alterando as últimas linhas do para o seguinte:

...
                        new_ssid="      option ssid     REDE-$(cut -f6 -d: /sys/class/ieee80211/${dev}/macaddress)"
                        new_pass="      option key      $(cut -c1-2,4-5,7-8,10-11,13-14,16-17 /sys/class/ieee80211/${dev}/macaddress)"
                cat <<EOF
config wifi-device  radio$devidx
        option type     mac80211
        option channel  ${channel}
        option hwmode   11${mode_11n}${mode_band}
$dev_id
$ht_capab
        # REMOVE THIS LINE TO ENABLE WIFI:
        #option disabled 1

config wifi-iface
        option device   radio$devidx
        option network  lan
        option mode     ap
$new_ssid
        option encryption psk2
$new_pass
...


A ideia básica do que eu fiz está aí, mas somente edite o arquivo se conseguir entender o código. 




Nenhum comentário:

Postar um comentário