Como transformar a Raspberry Pi num Wireless Access Point
Boas! na sequência dos últimos posts Como começar com a Raspberry Pi sem monitor, rato e teclado e Como instalar ferramentas de Bluetooth na Raspberry Pi, vou agora mostrar-vos como transformar a Raspberry Pi num ponto de acesso wireless. A maioria deste post segue o que é descrito aqui mas adicionei mais alguns passos. Além disso, deparei-me com alguns problemas e tive de fazer alguma resolução de problemas. Usei a pen wireless D-Link DWA-140 Rangebooster N Adapter que contém o chipset Ralink RT2870.
O processo parece algo longo mas pode ser feito em menos de 10 minutos 🙂 . Sempre que precisarem de editar ou criar algum ficheiro (por exemplo /etc/udhcpd.conf) ao longo do processo podem usar o comando “sudo nano /etc/udhcpd.conf”.
- A primeira coisa a fazer é verificar se a pen wireless está a ser reconhecida. Vão ao terminal e escrevam:
lsusb
se estiver a ser reconhecida deverão ver algo relativo a um adaptador wireless. O meu diz o seguinte:
Bus 001 Device 005: ID 07d1:3c09 D-Link System DWA-140 RangeBooster N Adapter(rev.B1) [Ralink RT2870]
-
Agora teremos que instalar a ferramenta “iw” para ver que modos são suportados pelo chipset da pen wireless. Abram o terminal e escrevam:
sudo apt-get install iw
-
Quando acabar de instalar escrevam o seguinte comando:
iw list
De seguida deverão ver algumas especificações a aparecer no ecrã e algures no meio irão encontrar algo parecido com isto (os modos abaixo são os suportados pela pen wireless que usei):Supported interface modes: * IBSS * managed * AP * AP/VLAN * WDS * monitor * mesh point
Se existir a opção AP então podemos continuar. Caso contrário, deverão arranjar uma outra pen wireless que tenha essa opção. -
sudo apt-get install hostapd udhcpd
-
Agora vamos configurar o DHCP para que a Raspberry Pi seja capaz de atribuir endereços IP aos clientes. Editem o ficheiro /etc/udhcpd.conf de modo a que contenha o seguinte:
start 192.168.42.2 # This is the range of IPs that the hostspot will give to client devices. end 192.168.42.20 interface wlan0 # The device uDHCP listens on. remaining yes opt dns 8.8.8.8 4.2.2.2 # The DNS servers client devices will use. opt subnet 255.255.255.0 opt router 192.168.42.1 # The Pi's IP address on wlan0 which we will set up shortly. opt lease 864000 # 10 day DHCP lease time in seconds
-
O próximo passo será editar o ficheiro /etc/default/udhcpd e mudar a linha que diz
DHCPD_ENABLED="no"
para#DHCPD_ENABLED="no"
-
Agora vamos dar à Raspberry Pi um endereço de IP estático ao escrever o seguinte comando:
sudo ifconfig wlan0 192.168.42.1
Para fazer esta configuração automaticamente temos de editar o ficheiro /etc/network/interfaces e substituir a linha “iface wlan0 inet dhcp” por:iface wlan0 inet static address 192.168.42.1 netmask 255.255.255.0
Se a linha “iface wlan0 inet dhcp” não existir, adicionei as linhas referidas ao fim do ficheiro. Também terão de mudar as linhas (podem não estar todas de seguida)allow-hotplug wlan0 wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf iface default inet manual
para#allow-hotplug wlan0 #wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf #iface default inet dhcp
- Neste passo vamos configurar o hostapd, que é usado para criar a rede wireless. A rede wireless pode ser uma rede aberta ou uma rede protegida por WPA para fornecer apenas acesso quando autorizado. Para fazê-lo temos de criar alguns ficheiros e editar outros. O primeiro ficheiro que vamos editar/criar é o “/etc/hostapd/hostapd.conf”. Para uma rede protegida por WPA deverá ficar semelhante a isto:
interface=wlan0 driver=nl80211 ssid=My_AP hw_mode=g channel=6 macaddr_acl=0 auth_algs=1 ignore_broadcast_ssid=0 wpa=2 wpa_passphrase=My_Passphrase wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP rsn_pairwise=CCMP
Podem mudar o SSID, o canal e a wpa_passphrase para o que desejarem. SSID é o nome que querem dar ao hotspot e a wpa_passphrase é a password que será necessária para aceder à rede. O canal é usado para escolher a frequência de operação do ponto de acesso wireless. No caso de terem outro AP ou router em casa, certifiquem-se que escolhem um canal livre e o mais afastado possível do canal que esteja a ser usado pelo mesmo, de modo a que não interfiram um com o outro. Se preferirem criar uma rede aberta podem inserir o texto seguinte, em vez do anterior:interface=wlan0 ssid=My_AP hw_mode=g channel=6 auth_algs=1 wmm_enabled=0
-
Agora teremos de mudar uma variável no interior do ficheiro /etc/default/hostapd de maneira a que aponte parao ficheiro que acabámos de criar/editar. Mudem esta linha:
#DAEMON_CONF=""
paraDAEMON_CONF="/etc/hostapd/hostapd.conf"
-
A próxima coisa a fazer será configurar a NAT (Network Address Translation) que é uma técnica que permite que vários dispositivos usem uma única ligação à internet. Editem o ficheiro /etc/sysctl.conf e adicionem as seguintes linhas no final do mesmo:
net.ipv4.ip_forward=1
Estas alterações irão activar a NAT no núcleo do sistema operativo. Agora executem os seguintes comandos:sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
E isto conclui a configuração da NAT. Para tornar esta configuração permanente de maneira a que não seja necessário executar estes comandos manualmente após cada arranque do sistema operativo, execute o seguinte comando:sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"
e edite o ficheiro /etc/network/interfaces e adicione as seguintes linhas ao final do mesmo:up iptables-restore < /etc/iptables.ipv4.nat
-
Estamos quase a acabar! Agora é altura de finalmente executar os serviços que temos estado a configurar. Corra os seguintes comandos para iniciar o Access Point:
sudo service hostapd start sudo service udhcpd start
E a vossa Raspberry Pi deverá estar finalmente transformada num hotspot wireless! 🙂 Para fazê-lo iniciar em todos os arranques, executem estes dois últimos comandos:sudo update-rc.d hostapd enable sudo update-rc.d udhcpd enable
E está feito! Se seguiram todos os passos correctamente tudo deverá estar a funcionar como esperado…
A menos que estejam familiarizados com as Leis de Murphy (como eu :P) e nada possa simplesmente funcionar à primeira! Sempre que ligava a Raspberry Pi podia ver a rede wireless a aparecer mas com um sinal muito fraco e após menos de um minuto desaparecia. Coisa estranha, não? Tentei reiniciar o hostapd para ver se a rede wireless voltava a aparecer mas nada acontecia. A única maneira de ressuscitar a rede wireless era reiniciando a Raspberry Pi. Pesquisei um pouco para ver se a distribuição Raspbian Wheezy vinha com alguma espécie de gestor de rede que pudesse estar em conflito com as configurações efectuadas, mas mais uma vez não encontrei o problema. Então lembrei-me que poderia ser um problema de alimentação! Quando a rede aparecia o sinal estava sempre muito fraco e o facto de nada fazer a rede voltar a aparecer excepto desligando e voltando a ligar a alimentação poderia ser um sintoma de algum problema de hardware. Outra coisa que me fez pensar que a origem do problema era esse foi o facto de cada porta USB da Raspberry Pi fornecer uma corrente muito limitada, de 140mA, que pode não ser suficiente para alimentar alumas pens Wi-Fi e outros dispositivos. Então, peguei no hub USB que tinha anteriormente alterado para poder ter alimentação externa e liguei tudo ao mesmo, incluíndo a Raspberry Pi. Liguei a fonte de 5V, 1A e problema resolvido! Tudo estava finalmente a trabalhar como esperado! De facto, este post inteiro foi escrito usando a Raspberry Pi como ponto de acesso wireless. Tem estado ligado já há um bom tempo e continua bastante estável e rápida. Se se depararem com alguns problemas podem também consultar o tópico do fórum da Raspberry Pi que originou este tutorial aqui.
Espero que tenham gostado de ler este post e que vos seja útil.
Até à próxima! 🙂
Achou esta publicação útil? Deseja contribuir para outros projectos envolvendo ciências computacionais, electrónica, robótica ou mecatrónica que serão publicados neste blog? Se sim, pode fazer uma doação utilizando o botão do Paypal abaixo. Obrigado! 🙂
[…] de comunicações simples para enviar comandos para o robô, configurar uma Raspberry Pi para funcionar como Wireless Access Point e como web server, adaptar o web server (escrito em Python) para satisfazer os requisitos do […]
just overhide the two DIODES to bypass current limitation, the two green smd diodes are between the usb connector and the status leds. grab some wire and solder a jump over them.
é só criar um jumper sobre os 2 diodos limitadores localizados entre o conector USB e os LEDs de status. na minha placa são uns verdinhos.
Olá Vinicius! Obrigado pela sugestão. Fazendo o bypass a esses dois componentes verdes certamente resolveria o problema do limite de corrente. Contudo, não são díodos, são polyfuses.
Hi Vinicius! Thanks for your suggestion. That would solve the current limit issue of the USB ports, indeed. However, just a minor correction: the two green components are not diodes, are polyfuses.
Olá, fiz o teste aqui no meu trabalho, a rede foi criada e o hostapd/udhcpd iniciaram normalmente, porém ao tentar conectar pelo celular/notebook ele tenta atribuir o endereço IP e nada acontece… poderia me ajudar? Obrigado! (Detalhe: Já revi todas as configs e nada… )
Olá Ruan! Não sei porque não estará a funcionar. Esse foi o processo que segui e no meu caso funcionou. Pode experimentar seguir o tuorial que a Adafruit publicou há pouco tempo sobre como fazer isso e ver se existe alguma diferença: https://learn.adafruit.com/setting-up-a-raspberry-pi-as-a-wifi-access-point/install-software
Agora eu consegui resolver, ainda estou a ter um problema com a energia da porta USB (uso uma fonte ótima de 2A) , algumas vezes parece que desliga o WiFi, mas admito que recentemente não estou tendo problemas em relação a isso. O outro desafio surgiu, consigo me conectar a rede criada, recebo um endereço IP dentro do escopo ao qual criei, mas não consigo conexão com a internet, sendo que o Pi está com conexão… será que existe outra configuração ao qual eu possa utilizar para mudar isso? Obrigado!
Confirmou se os passos 5, 10 e 11 foram executados correctamente? Se houver alguma coisa errada deverá estar relacionada com esses passos
[…] deste artigo, poderemos transformar nossa Pi em um Access Point, ou seja, permitir que diversos […]
Mario, muito bom post. Mas queria dar a sugestão e já perguntar duas coisas. Fazer o mesmo só que com o Bluetooth? Ou seja criar AP via bluetooth, com ip estatico ou DHCP. Ou criar um repetidor WIFI sendo que uma rede tem seu ip estatico e a “WAN” DHCP? Isto nos permetiria acessar o Rpi por SSH e configura-lo. A ideia é ter um AP bluetooth para aqueles lugares a onde não se pode criar um WIFI.
Olá Guilherme. Muito obrigado pelo feedback. Nunca experimentei fazer o mesmo com Bluetooth mas penso que seja possível. A única coisa que já fiz parecida utilizando Bluetooth foi o sistema dos robôs Infante em que a RPi tinha um dongle Bluetooth e comunicava com os cinco robôs, um de cada vez. No entanto nesse caso tive de fazer o emparelhamento de cada um dos robôs manualmente na primeira vez. Outra coisa que já pensei que talvez fosse mais simples seria ligar um botão a um pino GPIO que poderia alternar entre IP estático ou dinâmico para efectuar as configurações mas nunca cheguei a implementar.
Muito interessante esta de colocar um botão para alterar o tipo de configuração desejada. Seria também um boa colocar um botão que possa ao apertar e segurar deixa-lo em posição de pareamento a qualquer dispositivo que o solicitasse. Eu tenho esbarrado muito quanto a configuração do bluez 5.41 para criar o PAN sem ser no modo bridge. Aceito todo tipo de sugestões.