Raspberry Pi 3B como Access Point Wi-Fi com gerenciamento via Web

1. Introdução

O Raspberry Pi pode ser utilizado para implementar um Access Point Wi-Fi, oferecendo conectividade sem fio para dispositivos móveis, computadores e equipamentos IoT.

Neste projeto, foi desenvolvido um Access Point utilizando um Raspberry Pi 3B, executando Debian GNU/Linux 13 (Trixie), com uma interface web administrativa desenvolvida em Node.js e Express.

O objetivo é demonstrar não apenas a configuração do Access Point, mas também a implementação de um servidor web capaz de administrar e monitorar os serviços responsáveis pela rede sem fio.

A solução utiliza ferramentas Linux amplamente conhecidas e tecnologias abertas.

2. Arquitetura do sistema

O Raspberry Pi utiliza duas interfaces de rede:

  • eth0: interface Ethernet conectada à rede externa.
  • wlan0: interface Wi-Fi configurada como Access Point.

A interface Ethernet recebe seu endereço IP através de DHCP. A interface Wi-Fi utiliza um endereço IP fixo, formando uma sub-rede independente.

Parâmetros da rede

ParâmetroConfiguração
HardwareRaspberry Pi 3B
Sistema operacionalDebian GNU/Linux 13
KernelLinux 6.18
Node.js20.19.2
Interface Etherneteth0
Interface Wi-Fiwlan0
SSIDPI3B_AP
Endereço do AP192.168.71.1
Prefixo de rede/24
Canal Wi-Fi1
SegurançaWPA2-PSK
Servidor WebNode.js / Express
Porta HTTP80

3. Serviços Linux utilizados

O funcionamento do Access Point depende de alguns serviços.

3.1 hostapd

O hostapd é responsável por configurar a interface Wi-Fi em modo Access Point e controlar a autenticação dos clientes.

Arquivo principal:

/etc/hostapd/hostapd.conf

Configuração utilizada no projeto:

country_code=BR
interface=wlan0
driver=nl80211
ssid=PI3B_AP
hw_mode=g
channel=1
ieee80211n=1
wmm_enabled=1
auth_algs=1

wpa=2
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
wpa_passphrase=<SENHA_WIFI>

Os parâmetros mais importantes são:

  • interface: interface Wi-Fi utilizada.
  • ssid: nome da rede sem fio.
  • hw_mode=g: operação na faixa de 2,4 GHz.
  • channel=1: canal de operação.
  • wpa=2: utilização de WPA2.
  • wpa_key_mgmt=WPA-PSK: autenticação por chave pré-compartilhada.
  • rsn_pairwise=CCMP: algoritmo de criptografia.
  • wpa_passphrase: senha da rede.

 

3.2 systemd-networkd

O serviço systemd-networkd configura as interfaces Ethernet e Wi-Fi.

Configuração da Ethernet

Arquivo:

/etc/systemd/network/10-eth0.network

[Match]
Name=eth0

[Network]
DHCP=yes

Essa configuração permite que o Raspberry Pi receba automaticamente um endereço IP da rede externa.

Configuração da interface Wi-Fi

Arquivo:

/etc/systemd/network/20-wlan0.network

[Match]
Name=wlan0

[Network]
Address=192.168.71.1/24
ConfigureWithoutCarrier=yes

O endereço 192.168.71.1 é o gateway da rede criada pelo Access Point.

3.3 dnsmasq

O dnsmasq fornece os serviços DHCP e DNS para os dispositivos conectados à rede Wi-Fi.

No projeto, o servidor web utiliza o arquivo específico:

/etc/dnsmasq.d/pi3b-ap.conf

O serviço dnsmasq permite que os dispositivos conectados recebam automaticamente:

  • Endereço IP.
  • Gateway padrão.
  • Servidor DNS.
  • Tempo de concessão DHCP.

O serviço dnsmasq é responsável por fornecer endereços IP automaticamente aos dispositivos conectados à rede Wi-Fi PI3B_AP.

Arquivo de configuração:

/etc/dnsmasq.d/pi3b-ap.conf

Configuração utilizada no Raspberry Pi:

# DHCP e DNS para o Access Point PI3B_AP
interface=wlan0
bind-interfaces
dhcp-range=192.168.71.100,192.168.71.200,255.255.255.0,12h
dhcp-option=3,192.168.71.1
dhcp-option=6,192.168.71.1
domain-needed
bogus-priv
dhcp-authoritative

Explicação dos parâmetros

ParâmetroFunção
interface=wlan0Ativa o serviço na interface Wi-Fi.
bind-interfacesVincula o dnsmasq às interfaces configuradas.
dhcp-rangeDefine a faixa de IPs distribuídos aos clientes.
255.255.255.0Máscara de sub-rede dos clientes.
12hTempo de concessão DHCP de 12 horas.
dhcp-option=3Define o gateway padrão dos clientes.
dhcp-option=6Define o servidor DNS informado aos clientes.
domain-neededEvita encaminhar consultas DNS sem domínio.
bogus-privEvita encaminhamento de consultas reversas privadas indevidas.
dhcp-authoritativeIndica que este servidor é autoritativo para a rede DHCP configurada.

Funcionamento do DHCP

Quando um dispositivo se conecta ao Access Point, o dnsmasq pode fornecer um endereço IP dentro da faixa:

  • Primeiro endereço: 192.168.71.100
  • Último endereço: 192.168.71.200
  • Gateway: 192.168.71.1
  • DNS informado: 192.168.71.1
  • Concessão: 12 horas

O Raspberry Pi atua, portanto, como gateway da rede Wi-Fi e fornece os parâmetros necessários para que os clientes possam se comunicar.

4. Roteamento e NAT

Para permitir que os dispositivos conectados ao Access Point acessem a rede externa através da interface Ethernet, é necessário habilitar o encaminhamento de pacotes IPv4.

O sistema apresenta:

/proc/sys/net/ipv4/ip_forward = 1

O NAT utiliza uma cadeia dedicada denominada RASP_AP_NAT.

A regra observada no sistema é:

iptables -t nat -A RASP_AP_NAT \
    -s 192.168.71.0/24 \
    -o eth0 \
    -j MASQUERADE

A cadeia é vinculada à cadeia POSTROUTING:

iptables -t nat -A POSTROUTING \
    -j RASP_AP_NAT

O MASQUERADE permite que os dispositivos da rede Wi-Fi utilizem o endereço IP da interface Ethernet nas conexões de saída.

As regras são persistidas utilizando o serviço netfilter-persistent.

5. Servidor Web de administração

O servidor web foi desenvolvido em Node.js utilizando Express.

Diretório do projeto:

/opt/rasp-ap-web

Estrutura dos arquivos:

/opt/rasp-ap-web/
│
├── server.js
├── package.json
├── package-lock.json
│
└── public/
    ├── index.html
    ├── style.css
    └── app.js

5.1 server.js

O arquivo server.js constitui o núcleo da aplicação.

Suas principais responsabilidades são:

  • Inicializar o servidor Express.
  • Implementar a autenticação administrativa.
  • Ler arquivos de configuração do sistema.
  • Consultar o estado dos serviços Linux.
  • Identificar os dispositivos conectados.
  • Validar os parâmetros da configuração Wi-Fi.
  • Gravar novas configurações.
  • Aplicar alterações na rede.
  • Gerenciar as regras NAT.

A aplicação utiliza funções auxiliares para leitura e escrita de arquivos.

Exemplo:

function readFileSafe(file) {
    try {
        return fs.readFileSync(file, "utf8");
    } catch (error) {
        console.error("Erro lendo", file, error.message);
        return "";
    }
}

A função permite ler arquivos de configuração e tratar erros de acesso.

5.2 Autenticação administrativa

O acesso à interface é protegido por autenticação HTTP Basic.

O servidor verifica o usuário e a senha recebidos no cabeçalho HTTP Authorization.

Somente após a autenticação o usuário pode acessar a API administrativa.

A autenticação Basic não criptografa as credenciais por si só. Para uso em redes não confiáveis, recomenda-se implementar HTTPS e utilizar uma senha administrativa forte, armazenada fora do código-fonte.

5.3 index.html

O arquivo public/index.html contém a estrutura da interface administrativa.

A página possui as seguintes seções:

  • Status do Access Point.
  • Dispositivos conectados.
  • Configuração Wi-Fi.
  • Configuração IP do Access Point.
  • Servidor DHCP.
  • Informações do sistema.

5.4 style.css

O arquivo public/style.css define a aparência da interface.

São utilizados estilos para:

  • Cabeçalho.
  • Cartões de status.
  • Formulários.
  • Tabelas.
  • Mensagens de sucesso e erro.
  • Layout responsivo.

5.5 app.js

O arquivo public/app.js implementa a lógica da interface no navegador.

Ele consulta a API do servidor, atualiza os indicadores de status e apresenta os dispositivos conectados.

Também controla os formulários de configuração da rede Wi-Fi.

O campo de senha Wi-Fi permite visualizar ou ocultar a senha através de um botão de olho.

6. API REST

A aplicação disponibiliza endpoints HTTP para consultar e modificar a configuração do Access Point.

GET /api/status

Consulta o estado operacional do sistema.

O endpoint retorna:

  • Estado dos serviços hostapd, dnsmasq e systemd-networkd.
  • Informações da interface wlan0.
  • Canal Wi-Fi.
  • Quantidade de clientes DHCP.
  • Lista de dispositivos conectados.
  • Data e hora da consulta.

Os dispositivos são identificados através do arquivo de concessões DHCP:

/var/lib/misc/dnsmasq.leases

GET /api/config

Retorna os parâmetros atuais da configuração da rede.

Entre os parâmetros disponibilizados estão:

  • SSID.
  • Senha Wi-Fi.
  • Segurança.
  • Canal.
  • Endereço IP.
  • Prefixo de rede.
  • Faixa DHCP.
  • Gateway.

Esse endpoint é protegido pela autenticação administrativa.

POST /api/config

Recebe uma nova configuração da rede.

Antes de gravar os arquivos, o servidor realiza validações dos parâmetros.

As configurações são aplicadas nos arquivos:

/etc/hostapd/hostapd.conf
/etc/systemd/network/20-wlan0.network
/etc/dnsmasq.d/pi3b-ap.conf

Após a gravação, o servidor reconfigura a interface wlan0, reinicia os serviços hostapd e dnsmasq e atualiza as regras NAT.

7. Inicialização automática do servidor web

O servidor administrativo é executado como um serviço systemd.

Arquivo:

/etc/systemd/system/rasp-ap-web.service

Configuração utilizada:

[Unit]
Description=Raspberry Pi AP Admin Web
After=network.target

[Service]
Type=simple
WorkingDirectory=/opt/rasp-ap-web
ExecStart=/usr/bin/node /opt/rasp-ap-web/server.js
Restart=always
RestartSec=5
User=root

[Install]
WantedBy=multi-user.target

O serviço é configurado para reiniciar automaticamente caso o processo termine.

O usuário root permite que a aplicação acesse e modifique os arquivos e serviços de rede do sistema. Para um ambiente de produção, recomenda-se avaliar a separação de privilégios.

8. Monitoramento dos dispositivos conectados

A interface web apresenta uma tabela com os clientes DHCP.

São exibidos:

  • Nome do dispositivo.
  • Endereço IP.
  • Endereço MAC.
  • Tempo restante da concessão DHCP.

Essas informações são obtidas a partir do arquivo de leases do dnsmasq.

É importante observar que uma concessão DHCP ativa indica um cliente registrado pelo servidor DHCP, mas não necessariamente confirma que o dispositivo está transmitindo dados naquele instante.

9. Operação e manutenção

Alguns comandos úteis para administrar o sistema são:

Consultar o estado do servidor web

sudo systemctl status rasp-ap-web

Reiniciar o servidor

sudo systemctl restart rasp-ap-web

Consultar os logs

sudo journalctl -u rasp-ap-web -f

Consultar o estado do hostapd

sudo systemctl status hostapd

Consultar o estado do dnsmasq

sudo systemctl status dnsmasq

Consultar os dispositivos conectados

sudo cat /var/lib/misc/dnsmasq.leases

Consultar a interface Wi-Fi

iw dev wlan0 info

10. Conclusão

O projeto demonstra que o Raspberry Pi 3B pode ser utilizado como um Access Point Wi-Fi com administração centralizada através de uma interface web.

A integração entre hostapd, dnsmasq, systemd-networkd, iptables e Node.js permite construir uma solução flexível, didática e extensível.

Além de proporcionar conectividade Wi-Fi, a aplicação web facilita o monitoramento e a configuração dos parâmetros da rede.

A arquitetura apresentada pode servir como referência para projetos de redes embarcadas, sistemas IoT e ferramentas de gerenciamento de infraestrutura de rede.

O script configura

  • hostapd — Access Point Wi-Fi.

  • dnsmasq — DHCP e DNS.

  • systemd-networkd — interfaces Ethernet e Wi-Fi.

  • NAT e encaminhamento IPv4.

  • Regras persistentes de firewall.

  • Serviço rasp-ap-web.

  • Painel web básico de status e clientes DHCP.

  • Backup das configurações anteriores.

  • Validação das senhas com exatamente 12 caracteres.

Senhas padrão

  • Wi-Fi: wifiPASS1234

  • Administrador Web: AdminPASS123

Como executar

Copie o script para o Raspberry Pi e execute:

sudo bash instalar-rasp-ap.sh

O script solicita SSID, canal e senhas antes de iniciar.

Importante: esta versão cria um painel web básico para monitoramento. Ela não substitui ainda a interface administrativa completa que desenvolvemos anteriormente. Recomendo testar em uma instalação Debian 13 limpa ou fazer backup completo antes de executar, pois a configuração de rede pode afetar a conectividade atual.

Arquivo zipado  com o script(instalar-rasp-ap.sh)  clique para download.

instalar-rasp-ap

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *