Slackware 14 - Roteamento com duas placas wireless
A proposta do artigo, é ilustrar a implementação de um projeto de compartilhamento de internet usando duas placas de rede sem fio com
roteamento virtual (hostapd) no Slackware 14 64 bits.
roteamento virtual (hostapd) no Slackware 14 64 bits.
Parte 2: Instalação
Sugiro clicar na versão mais atualizada do hostapd, depois em
"hostapd.tar.gz".
Na linha de comando, sem ser superusuário, no diretório em que o hostapd foi baixado:
tar -zvxf hostapd.tar.gz
Posteriormente, depois de descompactado, clicar em "hostapd-<versão mais nova>.tar.gz" e salve-o no diretório criado a partir da descompactação, o hostapd/. A partir deste diretório, como superusuário, façamos:
# ./hostapd.SlackBuild
Depois é só instalar o arquivo criado, com installpkg, por exemplo. No meu caso, teremos:
# installpkg /tmp/hostapd-0.6.10-x86_64-1_SBo.tgz
Isto pois, na eventualidade da ocorrência de erros (e eles ocorrerão), será demorada sua alteração. A sugestão da Carla e dos outros autores, como André e Ademar Arvati Filho é modificar o nome do arquivo em questão e criar outro "hostapd.conf":
# cd /etc/hostapd/
# mv hostapd.conf hostapd.conf.orig
# vi hostapd.conf
Sim, gosto de editar com o Vi (cada um com suas excentricidades). Se escolheram este editor, lembrá-los-ei do básico:
Dadas as características da wlan0 e do sistema, o meu "hostapd.conf" ficou deste jeito:
A interface que eu escolhi foi a wlan0, como havia dito. O driver para a wlan0 foi o "nl80211". Como descobri? Tentativa e erro, dentro do rol apresentado pelo agora "hostapd.conf.orig".
Pertencem a este rol, na atual versão do hostapd, os seguintes drivers:
Com o citado comando hwinfo já utilizado, pode-se obter as informações necessárias para configurar hw_mode, channel e WPA. Como sugerem Carla e André, utiliza-se o comando wpa_passphrase para a geração de chaves criptografadas de 256 bits para senhas de texto simples.
Por exemplo, num SSID de nome "quasar" com uma senha "nerdhijodeunamadre", teremos:
# wpa_passphrase "quasar" "nerdhijodeunamadre"
De uma forma mais sofisticada, haveria, em vez de deixar uma chave genérica para todos os clientes da rede, como associar cada endereço MAC destes clientes a uma chave. Desta maneira, apenas as máquinas cadastradas teriam acesso à rede.
Esta tabela estaria no arquivo /etc/hostapd/hostapd.wpa_psk, que não foi utilizado por mim. Em termos de segurança é uma boa forma de tornar a rede mais robusta. O artigo de Carla, que enfoca mais a questão de segurança deste sistema, ilustra bem como fazê-lo.
As opções referentes a "wpa_key_mgmt", "wpa_pairwise" e "rsn_pairwise" estão relacionados ao sistema de criptografia que se quer adotar e que são suportados pela placa. São muito bem explanados nos artigos citados.
Diferentemente da sugestão de alguns autores de se utilizar uma ponte (bridge) e configurá-la no "hostapd.conf", isto não foi adotado aqui em virtude da inviabilidade de se adicionar duas placas de rede sem fio na ponte. Eu não consegui, e alguns comentários em fóruns internacionais desencorajaram-me neste sentido. Aceito opiniões a respeito.
Devidamente configurado o hostapd, se tudo tiver dado certo até o momento, poderemos ativar o roteador virtual desta forma:
# hostapd -dd /etc/hostapd/hostapd.conf
Então, será que neste instante devemos esperar o compartilhamento de conexão? Veja que, se utilizarmo-nos de um cliente, seja um tablet ou outro PC, iremos verificar a existência de uma rede sem fio de nome "quasar" (caso tenhamos usado o arquivo acima).
Neste caso, ficamos tentados a simplesmente escolher esta rede no cliente, colocar a senha e esperar. Eis que percebemos que o cliente não consegue adquirir seu endereço IP. Resolveremos isto.
Vamos forçar um endereço IP para o roteador virtual. Lembremos que utilizamos a wlan0 como placa de rede que enviará o sinal para o ambiente interno e, portanto, é justamente esta que terá que receber o IP do nosso pseudorroteador:
# ifconfig wlan0 192.168.44.1 netmask 255.255.255.0
Agora, podemos passar para as regras de Firewall.
Na linha de comando, sem ser superusuário, no diretório em que o hostapd foi baixado:
tar -zvxf hostapd.tar.gz
Posteriormente, depois de descompactado, clicar em "hostapd-<versão mais nova>.tar.gz" e salve-o no diretório criado a partir da descompactação, o hostapd/. A partir deste diretório, como superusuário, façamos:
# ./hostapd.SlackBuild
Depois é só instalar o arquivo criado, com installpkg, por exemplo. No meu caso, teremos:
# installpkg /tmp/hostapd-0.6.10-x86_64-1_SBo.tgz
Configurando o hostapd
Com a instalação, é criado o diretório /etc/hostapd/ que contém arquivos para configuração. Há um arquivo no qual encontramos configurações genéricas, o "hostapd.conf", mas que possui 1025 linhas, o que torna sua manipulação pouco plausível.Isto pois, na eventualidade da ocorrência de erros (e eles ocorrerão), será demorada sua alteração. A sugestão da Carla e dos outros autores, como André e Ademar Arvati Filho é modificar o nome do arquivo em questão e criar outro "hostapd.conf":
# cd /etc/hostapd/
# mv hostapd.conf hostapd.conf.orig
# vi hostapd.conf
Sim, gosto de editar com o Vi (cada um com suas excentricidades). Se escolheram este editor, lembrá-los-ei do básico:
| Clicar uma vez na tecla "Insert" | Entra com caracteres. |
| Clicar outra vez na tecla "Insert" | Entra com caracteres sobrescrevendo-os. |
| Tecla "ESC" | Sai da função de edição e vai para a dos comandos. |
| :wq | Salva o arquivo e sai do editor. |
| :q! | Sai do editor sem salvar. |
Dadas as características da wlan0 e do sistema, o meu "hostapd.conf" ficou deste jeito:
interface=wlan0
driver=nl80211
ssid=quasar
hw_mode=g
channel=13
wpa=3
wpa_psk=e7d6ab5d58eb6cea975fed6d0c717a6f0de6e96db65f8d11abe80530694bfe90
#wpa_psk_file=/etc/hostapd/hostapd.wpa_psk
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP TKIP
rsn_pairwise=CCMP TKIP
ctrl_interface=/var/run/hostapd
ctrl_interface_group=0
auth_algs=1#
driver=nl80211
ssid=quasar
hw_mode=g
channel=13
wpa=3
wpa_psk=e7d6ab5d58eb6cea975fed6d0c717a6f0de6e96db65f8d11abe80530694bfe90
#wpa_psk_file=/etc/hostapd/hostapd.wpa_psk
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP TKIP
rsn_pairwise=CCMP TKIP
ctrl_interface=/var/run/hostapd
ctrl_interface_group=0
auth_algs=1#
A interface que eu escolhi foi a wlan0, como havia dito. O driver para a wlan0 foi o "nl80211". Como descobri? Tentativa e erro, dentro do rol apresentado pelo agora "hostapd.conf.orig".
Pertencem a este rol, na atual versão do hostapd, os seguintes drivers:
- hostap
- wired
- madwifi
- prism54
- test
- none
- nl80211
- bsd
Com o citado comando hwinfo já utilizado, pode-se obter as informações necessárias para configurar hw_mode, channel e WPA. Como sugerem Carla e André, utiliza-se o comando wpa_passphrase para a geração de chaves criptografadas de 256 bits para senhas de texto simples.
Por exemplo, num SSID de nome "quasar" com uma senha "nerdhijodeunamadre", teremos:
# wpa_passphrase "quasar" "nerdhijodeunamadre"
network={
ssid="quasar"
#psk="nerdhijodeunamadre"
psk=e7d6ab5d58eb6cea975fed6d0c717a6f0de6e96db65f8d11abe80530694bfe90
}
ssid="quasar"
#psk="nerdhijodeunamadre"
psk=e7d6ab5d58eb6cea975fed6d0c717a6f0de6e96db65f8d11abe80530694bfe90
}
De uma forma mais sofisticada, haveria, em vez de deixar uma chave genérica para todos os clientes da rede, como associar cada endereço MAC destes clientes a uma chave. Desta maneira, apenas as máquinas cadastradas teriam acesso à rede.
Esta tabela estaria no arquivo /etc/hostapd/hostapd.wpa_psk, que não foi utilizado por mim. Em termos de segurança é uma boa forma de tornar a rede mais robusta. O artigo de Carla, que enfoca mais a questão de segurança deste sistema, ilustra bem como fazê-lo.
As opções referentes a "wpa_key_mgmt", "wpa_pairwise" e "rsn_pairwise" estão relacionados ao sistema de criptografia que se quer adotar e que são suportados pela placa. São muito bem explanados nos artigos citados.
Diferentemente da sugestão de alguns autores de se utilizar uma ponte (bridge) e configurá-la no "hostapd.conf", isto não foi adotado aqui em virtude da inviabilidade de se adicionar duas placas de rede sem fio na ponte. Eu não consegui, e alguns comentários em fóruns internacionais desencorajaram-me neste sentido. Aceito opiniões a respeito.
Devidamente configurado o hostapd, se tudo tiver dado certo até o momento, poderemos ativar o roteador virtual desta forma:
# hostapd -dd /etc/hostapd/hostapd.conf
Então, será que neste instante devemos esperar o compartilhamento de conexão? Veja que, se utilizarmo-nos de um cliente, seja um tablet ou outro PC, iremos verificar a existência de uma rede sem fio de nome "quasar" (caso tenhamos usado o arquivo acima).
Neste caso, ficamos tentados a simplesmente escolher esta rede no cliente, colocar a senha e esperar. Eis que percebemos que o cliente não consegue adquirir seu endereço IP. Resolveremos isto.
Vamos forçar um endereço IP para o roteador virtual. Lembremos que utilizamos a wlan0 como placa de rede que enviará o sinal para o ambiente interno e, portanto, é justamente esta que terá que receber o IP do nosso pseudorroteador:
# ifconfig wlan0 192.168.44.1 netmask 255.255.255.0
Agora, podemos passar para as regras de Firewall.
Muito obrigado por compartilhar!