Transformando o Linux em um Access Point com hostapd

Hoje em dia é muito frequente o uso de roteadores wireless em casa ou no trabalho para conexão à Internet, mas também é possível transformar a sua própria máquina com Linux instalado em um ponto de acesso através do programa hostapd, que já está presente no repositório de várias distribuições.

[ Hits: 71.075 ]

Por: André em 15/06/2011


Introdução



Neste artigo, vou mostrar como configurar seu sistema Linux para funcionar como um Access Point, de forma que a máquina possa compartilhar o acesso à Internet com as máquinas da sua casa ou trabalho. Para isso utilizaremos o programa hostapd, que possui várias funcionalidades, podendo até ser utilizado como autenticador RADIUS. Você pode conferir mais características do hostapd nos links: A maior vantagem dessa abordagem, é instalar um proxy na máquina para fazer cache de páginas e algumas regras de firewall para liberar o acesso à Internet, tornando a navegação mais rápida. A distribuição utilizada será o Debian Squeeze de 64 bits, que está instalado em um notebook Acer Aspire One que possui a placa Atheros AR9285. O módulo usado pela placa é o ath9k. Você pode conferir se sua placa wireless é compatível com o hostapd nos links acima.

Instalação do hostapd

Para instalar o hostapd no Debian, utilize os comandos:

# apt-get update
# apt-get install hostapd


ou

# aptitude update
# aptitude install hostapd


Configuração do hostapd

Agora que o hostapd está instalado, é necessário ajustar as configurações para que o serviço fique ativo. Copie o arquivo de configuração em:

/usr/share/doc/hostapd/examples/hostapd.conf.gz

para:

/etc/hostapd.

Como é um arquivo compactado com gzip. utilize o comando:

# zcat /usr/share/doc/hostapd/examples/hostapd.conf.gz > /etc/hostapd/hostapd.conf

Esse é o arquivo de configuração original do hostapd, que é bem completo, contendo vários comentários explicando cada opção. Você pode editar esse arquivo para ajustar as configurações, mas recomendo que crie um arquivo personalizado somente com as opções que você precisa para que não tenha problemas durante a implementação do serviço, pois o arquivo original contém mais de 1000 linhas e até você achar onde está o problema vai demorar bastante.

Copie o arquivo original para hostapd.conf.orig e crie um novo com o nome hostapd.conf:

# cd /etc/hostapd
# cp hostapd.conf hostapd.conf.orig
# touch hostapd.conf


Edite o arquivo vazio que foi criado para adicionar as configurações:

# vim hostapd.conf

Para criar um AP utilizando autenticação WPA2, adicione o seguinte conteúdo ao arquivo:

interface=wlan0
driver=nl80211
hw_mode=b
ssid=teste
channel=10

wpa=2
wpa_psk=9f90dd942b634b228b8c9f4950b505d832501fd5c24589b32789083d9774fb97
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

macaddr_acl=0
ignore_broadcast_ssid=0
logger_syslog=-1
logger_syslog_level=2
logger_stdout=-1
logger_stdout_level=1
debug=0
dump_file=/tmp/hostapd.dump
ctrl_interface=/var/run/hostapd
ctrl_interface_group=0
auth_algs=1

As opções devem seguir rigorosamente a sintaxe <opçã>=<valor>, ou seja, sem espaços entre a opção e o valor, caso contrário ocorrerá erro.

Significado de algumas opções:
  • interface - interface wireless em que os clientes se conectarão;
  • hw_mode - padrão a ser usado. Pode ser a, b, g ou n;
  • ssid - id da rede;
  • wpa - determina a versão do wpa a ser usado. O valor 1 determina que será usado a versão 1, 2 a versão 2 e 3, ambos;
  • wpa_psk - Passphrase do wpa. Pode ser usada a opção wpa_passphrase no lugar dessa opção, mas neste caso a senha deverá estar em texto plano.
Para gerar esse hash para a opção wpa_psk, utilize o comando wpa_passphrase, presente no pacote wpasupplicant:

# wpa_passphrase "teste" 'Bd%670GhTUi@!dfP()'

Saída:

network={
   ssid="teste"
   #psk="Bd%670GhTUi@!dfP()"
   psk=9f90dd942b634b228b8c9f4950b505d832501fd5c24589b32789083d9774fb97
}

A sintaxe do comando é wpa_passphrase "ssid" 'senha'. Copie o valor 9f90dd942b634b228b8c9f4950b505d832501fd5c24589b32789083d9774fb97 para a opção wpa_psk no arquivo do hostapd.

Agora que o arquivo de configuração está montado, save e saia do arquivo usando o comando :wq do vim. Execute o hostapd usando o arquivo como parâmetro:

# hostapd /etc/hostapd/hostapd.conf

Agora conecte uma máquina cliente usando um programa como o NetworkManager, wicd ou wpa_supplicant à rede "teste" ou outro nome que você tenha dado à sua rede. Caso tenha problemas durante a conexão, comente as linhas referentes às linhas do wpa e conecte sem usar criptografia para verificar se o problema é na configuração do wpa devido ao uso, por exemplo, de uma passphrase incorreta ou versão não suportada pelo cliente. Se ainda ocorrer problemas, verifique o canal usado, o padrão 802.11 usado e outras configurações. Quando estiver tudo certo, habilite novamente a criptografia e conecte o cliente. Você pode depurar a execução do hostapd usando a opção -d:

# hostapd /etc/hostapd/hostapd.conf -d

Dessa forma serão mostradas mais mensagens, facilitando o diagnóstico se ocorrer algum erro. Você pode acrescentar mais debug usando o comando:

# hostapd /etc/hostapd/hostapd.conf -ddK

Ajustes para inicialização automática

O hostapd possui scripts de inicialização automática, mas ao ser instalado ele não é iniciado devido à ausência do arquivo de configuração. Agora que o arquivo está pronto, edite o arquivo /etc/default/hostapd e altere a opção DAEMON_CONF="" para que fique da seguinte forma:

DAEMON_CONF="/etc/hostapd/hostapd.conf"

Agora o hostapd pode ser iniciado automaticamente sem problemas através dos scripts contidos em /etc/init.d/hostapd. Você agora pode parar, iniciar ou reiniciar o serviço usando os comandos:

# /etc/init.d/hostapd stop
# /etc/init.d/hostapd start
# /etc/init.d/hostapd restart


Também é possível verificar se o serviço está ativo com o comando:

# /etc/init.d/hostapd status

Saída:

hostapd is running.

Conclusão

O uso do Linux como AP wireless é muito vantajoso, pois pode ser utilizado em vários tipos de cenário, como por exemplo, utilizar a máquina como proxy para permitir uma navegação mais dinâmica aos clientes e fornecer acesso à Internet por meio de um modem USB. Essa aplicação é muito vantajosa em netbooks ou notebooks. O hostapd é uma poderosa ferramenta que pode ser implementada tanto para uma rede doméstica quanto empresarial, fornecendo vários serviços que podem se adequar a muitos cenários diferentes que exigem por exemplo, autenticação RADIUS, EAP, WPA/WPA2, dentre outros.

Espero que esse artigo seja útil para alguém que necessite de uma ferramenta como o hostapd e agradeço ao espaço fornecido pelo Viva o Linux para publicação desse tutorial.
   

Páginas do artigo
   1. Introdução
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Apt-mirror: Como criar um mirror para o Ubuntu 9.04

Porque segurança importa?

Instalando o mplayerplug-in do "jeito Debian"

WIMAX (parte 1)

Servidor de Internet, Firewall, Logs - Ubuntu 10.04.3 LTS Lucid Lynx

  
Comentários
[1] Comentário enviado por removido em 15/06/2011 - 22:30h

gostaria que vc comentasse sobre o alcance. quando se usa um pc com placa wireless ponto-a-ponto, sem roteador, o desempenho cai. Já vi isso, não da/á para ter a mesma velocidade.

qual sua experiência com este programa?

[2] Comentário enviado por joaogauer em 16/06/2011 - 09:12h

Seria uma boa alternativa, mas não a mais recomendada, na minha opinião. Lembrando que a placa de rede wifi de notebook não foi feita para fazer roteamento, seria muito mais interessante utilizar um roteador e o nocat instalado para fazer o serviço de autenticação. Vou testar mais tarde para ver como se comporta, exelente dica.

[3] Comentário enviado por marquinhos1875 em 17/06/2011 - 12:00h

Olá,

gauer88, poderia mim explicar sobre o roteamento de placas de rede, os roteamentos são feitos pelo kernel e não pelo Nic (dispositivo de rede), sem contar que alguns not's tem placas minipci que são usados nas maiorias dos provedores do Brasil, concordo que não é a melhor alternativa, mais isso entra na balança, temos como contra: muitos componentes que podem ser danificados por uso continuo HD, memorias, processador e todos os outros componentes que formam o computador, isso tornaria o serviço indisponível. Como vantagem temos: um radio muito mais robusto, sistema com gerenciamento de memoria e 200% de todos os recursos que o Linux tem.

[4] Comentário enviado por jaksonbt em 17/06/2011 - 17:25h

excelente artigo. tava inclusive pensando em fazer um com o mesmo conteúdo. o motivo e a utilização de pontos de acesso para compartilhar conexão com qualquer dispositivo wifi, especialmente smartphones e celulares android(que não suportam* redes ad-hoc, pois possuo um e assim consigo navegar e instalar aplicativos nele sem precisar depender da operadora). Muito bom, o sinal pega em toda a casa sem precisar de roteador nenhum. queria saber se é possivel com o hostapd criar o reteamento e se conectar a outra rede ao mesmo tempo?? no windows sei que funciona(já utilizo no windows assim)

[5] Comentário enviado por marquinhos1875 em 17/06/2011 - 22:23h

Boa noite,

jaksonbt, explique melhor a sua necessidade de roteamento, se o (R)windows faz, com certeza ele faz.
Ilustre ai seu ambiente que podemos ajudar


[6] Comentário enviado por cruzeirense em 18/06/2011 - 09:16h

jaksonbt,

Se for essa a sua dúvida dá para fazer o mesmo com o windows 7 sem precisar instalar nada. Utilizo na versão home premium mas acho que na starter funciona também.

Vou dar um exemplo de como compartilhar uma conexão 3g.

1-Configure a conexão 3g normalmente, depois de instalado deixa conexão DESCONECTADA.
2-Clique em iniciar e na pesquisa de programas digite cmd
3-Nos resultados da pesquisa clique com o botão direito em CMD e selecione EXECUTAR COMO ADMINISTRADOR.
4-Agora vamos criar o ponto de acesso. Digite:
C:\Windows\system32>netsh wlan set hostednetwork mode=allow ssid=nomedarede key=senha
Onde nomedarede é nome que irá aparecer para os outros usuários
Senha é a senha para os usuários conectarem na rede (criptografia wpa2 - mínimo 8 caracteres)
5-Agora para habilitar a rede digite:
netsh wlan start hostednetwork
Seu computador já estará funcionando como access point e a rede já aparecerá para outros usuários, mas não conecte ainda, vamos configurar o compartilhamento.
6-Clique no indicador de rede que fica do lado do relógio do windows.
7-Vai aparecer uma lista de conexões. Clique com o botão direito na sua conexão 3g (no meu caso é vivo internet) e selecione propriedades.
8-Clique na aba compartilhamento e marque a caixa "Permitir que outros usuários da rede se conectem..."
9-Na lista abaixo voce deve selecionar uma conexão privada, ao clicar na lista você vai ver que apareceu uma nova conexão, selecione ela e clique em ok.
10-Conecte na sua conexão 3g.
11-Vá nos outros computares e conecte na sua rede recem criada.

Nos meus testes funcionou muito bem. Você pode inclusive conectar em uma rede sem fio e compartilhar para outros usuários. (Agora a pergunta, porque os outros usuários nao conectariam diretamente a rede? Pode existir um bloqueio por mac ou podem não estar ao alcance, etc...)

Você pode também instalar um servidor proxy no computador para obter um controle maior do que os outros usuários acessam.
Você pode instalar o squid para windows que funciona muito bem, ou mesmo o ccproxy que tem funções semelhantes ao do squid, mas a configuração é em modo gráfico.

gauer88
O alcance da rede tende a ser menor porque, normalmente, os roteadores sem fio tem uma antena melhor do que as antenas das placas pci ou adaptadores usb.
Quanto a velocidade eu não ví muita diferença.
Na minha opinião acho que deveria ficar até mais rápido do que o roteador, visto que o processador do computador, no meu caso um core i5, é muito mais rápido que o do roteador.
Pude observar que o windows 7 copiou o linux em alguns pontos. A linha de comando está muito mais poderosa e, pelo menos para esta configuração, não achei nenhuma interface gráfica.

Abraço,

Renato

[7] Comentário enviado por jaksonbt em 18/06/2011 - 19:35h

Ola, acho que não expliquei direito, ja sei conectar a uma rede wifi e criar um ap virtual ao mesmo tempo(os dois usando a mesma placa) no windows 7. Minha dúvida é se o hostapd aceita que eu conecte a uma rede wifi já existente e ao mesmo tempo com a mesma placa consiga criar um Access Point, como no windows 7.

[8] Comentário enviado por azaiats em 04/09/2011 - 15:52h

A diferença entre uma placa de um router e de um computador não existe. Praticamente os processadores/core são os mesmos. O que existe é que nem sempre o fabricante abre todas informações à baixo nível para que seja possível chegar ao nível de um hardware implementado para aquela função em específico.

Muito bom o artigo! Apesar que desconheço quem trabalhr com radius hoje em dia, mas valeu pelo empenho!

Abs.

[9] Comentário enviado por grinna em 18/01/2012 - 13:16h

Eu consegui agora como faco para colocar ip fixo nesse tipo de conexao, pois o meu psp e o celular conecta mas nao consegue atribuir ip via DHCP, outra coisa como faco para compartilhar os arquivos que estao no linux com o celular e o psp

[10] Comentário enviado por r41d3n em 20/01/2012 - 00:58h

Para atribuir IP via DHCP, você precisa instalar no servidor do hostapd o pacote isc-dhcp-server do Debian (em outras distribuições acho que é dhcpd ou dhcp-server) e configurar o range de IPs. Aqui no VOL deve ter algum artigo explicando como fazer esse procedimento. Para usar IP fixo, faça as alterações no arquivo /etc/network/interfaces (se estiver usando Debian) ou use o Network Manager ou algum outro gerenciador de interfaces de rede gráfico se estiver no X.

A questão do compartilhamento eu não sei te dizer, pois não sei como o PSP e o seu celular acessam o Linux.

Eu acabei não colocando no artigo, porque o foco é mais no funcionamento do hostapd, mas é preciso adicionar uma regra no iptables para que o acesso à Internet seja possível:

iptables -t nat -A POSTROUTING -o wlan0 -s 192.168.1.0/24 -j MASQUERADE

E ativar o ip_forward:

echo "1" > /proc/sys/net/ipv4/ip_forward

No exemplo utilizei a rede 192.168.1.0/24 e a interface wlan0, mas ambos podem variar em cada sistema.

Você pode usar o ifconfig para uma configuração temporária do IP, como por exemplo:

ifconfig wlan0 192.168.1.1 netmask 255.255.255.0

Os IPs do celular e do PSP podem ser 192.168.1.2 e 192.168.1.3.

Recomendo ler também na wiki do Debian sobre a configuração usando o arquivo /etc/network/interfaces, para que o IP fique permanente mesmo após reiniciar a máquina: http://wiki.debian.org/NetworkConfiguration

Espero ter ajudado, vlw

[11] Comentário enviado por lucasdona em 02/05/2012 - 11:34h

Não consegui realizar a configuração, dá erro no driver

nl 80211 not found
driver initialization failed
rmdir[ctrl_interface]: no such file or directory

Tentei também deixar driver=none, mas o comando hostapd hostapd.conf agarra e não finaliza.
Alguma dica?

[12] Comentário enviado por lucasdona em 02/05/2012 - 11:42h

Com o comando rodando tmb acompanhei o syslog e fica dando o erro:

wpa_supplicant: failed to initiate AP scan, e fica tentendo +- de 1 em 1 min, sempre dando esse erro

[13] Comentário enviado por lucasdona em 06/06/2012 - 17:03h

Pelo que reparei minha placa de rede não é compatível com esse serviço, alguém poderia listar alguns modelos que são compatíveis, ou até mesmo onde se pode comprar uma complatível?
Valeuuuu.

[14] Comentário enviado por souzarte em 03/10/2013 - 10:38h

Bom dia à todos, sei que este post já tem um pouco de tempo, mas a informação para quem ainda não a conhece é "novinha em folha"... rs Que é o meu caso, fui realizar o primeiro procedimento e apresentou o seguinte erro, fico muito grato se alguém poder me ajudar, quero compartilhar a minha Ethernet via WiFi, sem a precisar comprar um roteador.

Executei este comando e apresentou o erro abaixo:

Obs.: Meu Linux é o Ubuntu 13.04 32 bits, adaptador TP-Link TL-WN721N


# (como usuário root) apt-get install hostapd

installArchives() failed: Setting up install-info (4.13a.dfsg.1-10ubuntu4) ...
/etc/environment: linha 7: Acquire: comando no encontrado
dpkg: error processing install-info (--configure):
subprocess installed post-installation script returned error exit status 127
No apport report written because MaxReports is reached already
Errors were encountered while processing:
install-info
Error in function:
Setting up install-info (4.13a.dfsg.1-10ubuntu4) ...
/etc/environment: linha 7: Acquire: comando no encontrado
dpkg: error processing install-info (--configure):
subprocess installed post-installation script returned error exit status 127


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts