Quem me conhece, sabe que eu sou um grande entusiasta do projeto OpenWRT. Foi por isso e por querer contribuir com o grupo de OpenWRT do LHC que decidi escrever este tutorial. Neste post vou mostrar como criar um roteador WiFi usando o OpenWRT e uma Raspberry Pi 3 (ou qualquer outra que você tenha disponível). Nosso roteador terá uma funcionalidade bem interessante: ele bloqueará anúncios dos sites que visitarmos – assim como o bloqueador de anúncios do seu navegador.
Antes de começarmos, é importante ressaltar que o desempenho de rede nas versões mais antigas da Raspberry (0, 1, 2 e 3) pode ficar abaixo do que você espera, isso porque as interfaces de rede estão ligadas ao SOC (processador) por um barramento USB 2.0 – Isso não acontece com a Raspberry Pi 4. Como a idéia é experimentar e não criar um roteador comercial, essa limitação não irá nos impedir de continuarmos, certo?
Material
Bom, recado dado, é hora de listarmos o que precisaremos para criar o nosso roteador caseiro:
- Um computador com uma distro Linux ou uma VM;
- Uma Raspberry Pi 3 model B (as instruções para outras versões podem ser diferentes, deixe nos comentários as dúvidas nesse caso);
- Um adaptador UART-Serial (recomendado, não obrigatório);
- Um cabo de rede ou um patch cord;
- Um micro SD Card de 2GB ou mais;
Preparando o ambiente
Se você não se sente confortável com compilação, git, etc. Siga para “gravando a imagem no sd-card”, mais abaixo, e siga o passo-a-passo utilizando a imagem oficial do OpenWRT para a Raspberry Pi.
Basicamente, o que vou reproduzir aqui é o que já coloquei anteriormente no artigo do Embarcados “Conhecendo o OpenWRT“, que escrevi junto com meu amigo Thiago Medicci um tempo atrás. As instruções apresentadas consideram que você está usando o Ubuntu 16.04 como ambiente de desenvolvimento.
Primeiro, instale as dependências do projeto no seu ambiente:
$ sudo apt update $ sudo apt install make gcc binutils bzip2 flex python perl grep git unzip gawk subversion libz-dev libc-dev libncurses-dev time wget g++ xz-utils
Em seguida, clone o projeto para seu ambiente:
$ git clone https://github.com/openwrt/openwrt.git
O leitor mais atento perceberá que estamos clonando a branch da última release estável no momento da publicação deste artigo.
A última etapa de preparação envolve sincronizarmos o código dos pacotes disponíveis para o OpenWRT:
$ scripts/feeds update -a $ scripts/feeds install -a
Pronto! Nosso ambiente está preparado. Vamos preparar a configuração da imagem.
Configuração da imagem
Quiser pular essa parte, baixe o meu arquivo de configuração.
Na raíz do projeto, digite o comando abaixo para entrar no menu de configuração:
$ make menuconfig

Vamos configurar o target (o sistema alvo). No menu selecione “Target System”, e selecione “Broadcom BCM27xx”.

Em “Subtarget”, selecione “BCM2710 64 bit based boards”. Em “target profile”, “Raspberry Pi 3B/3B+”.
Agora, precisamos selecionar os pacotes que queremos incluir na imagem. Por se tratar de um roteador, acho prudente instalarmos uma interface web (WUI) para facilitar a configuração básica do roteador. O projeto OpenWRT mantém um sub-projeto de um WUI bem intuitivo, chamado LuCI. Para adicionar a LuCI a imagem, vá em LuCI → Collections → Luci.licação que boqueia os anúncios antes de eles “chegarem” ao browser.

Recomendo ainda adicionarmos algumas extensões da LuCI:
- LuCI → Modules → Translations → Brazilian Portuguese (pt_BR)
- LuCI → Applications → luci-app-adblock
- LuCI → Themes → luci-theme-material
Ao selecionarmos a opção “luci-app-adblock” o pacote adblock é selecionado automaticamente. Esse pacote contém a aplicação que bloqueia os anúncios antes de eles “chegarem” ao browser.
Vá em “Exit” e salve as configurações.
Compilando a imagem
Agora é tempo de compilar a imagem. Antes de propriamente compilar os pacotes e gerar a imagem, vamos baixar todos os códigos-fonte dos pacotes selecionados no arquivo de configuração (que editamos no passo anterior):
$ make download
Em seguida, vamos compilar:
$ make
Isso pode levar algum tempo. Se quiser acelerar o processo de build, use a opção -j seguida do número de jobs em paralelo (isso depende do seu processador instalado na sua máquina de desenvolvimento – um Core i5 de 4ª geração, por exemplo, tem dois núcleos, e com hyperthreading ele suporta até 4 jobs em paralelo).
$ make -j 4
Ao final do processo você irá encontrar o arquivo openwrt-brcm2708-bcm2710-rpi-3-squashfs-factory.img.gz em bin/targets/brcm2708/bcm2710/. Esse arquivo é a imagem que devemos gravar no SD-Card.
Gravando a imagem no SD-Card
Para gavar a imagem, vamos usar o Balena Etcher, que é a maneira mais fácil de gravar imagens em pendrives, SD-Cards, etc. O processo é simples, carregue o arquivo openwrt-brcm2708-bcm2710-rpi-3-squashfs-factory.img.gz (você pode usar a imagem gerada pelo processo anterior ou baixar uma imagem pronta) na primeira opção, insira o SD-Card no slot do seu PC e, por fim, clique em Flash.

Configuração de rede
Como nosso roteador é apenas uma prova de conceito, vamos manter a topologia da rede da sua casa, e vamos conectar a Raspberry Pi ao seu roteador, assim você terá uma rede adicional na sua casa:

Vamos conectar a Raspberry ao roteador (gateway) através da interface cabeada (eth0) e os demais dispositivos da casa, conectar-se-ão a internet através da interface WiFi da Raspberry (wlan0). Entretanto, durante a configuração precisaremos conectar a Rasp ao computador por cabo.
Insira o SD-Card com a imagem que você gravou no passo anterior, e conecte a Rasp ao PC usando o cabo ethernet. Abra o browser e abra o endereço 192.168.1.1:

Use a senha root (usuário root) e clique em Login.
Na página principal (overview), localize no menu superior o menu Network. Nesse menu, clique em Wireless.

Habilite a interface WiFi e aplique as configurações clicando em Save & Apply:

Vá novamente para o menu Network, mas desta vez clique em Interfaces:

Agora, clique em Add new interface:

Na tela de edição da interface, coloque o nome WAN no campos name, em Protocol, selecione DHCP client, e por fim, em interface escolha eth0.

Por fim, clique em Create Interface (botão verde).
Edite a interface LAN. Na aba Physical Settings, vá até as opções de interface e desmarque Ethernet Adapter “eth0”. Salve suas configurações (botão verde).

Agora, edite a interface WAN. Na aba General Settings, em protocol, selecione DHCP client.

Na aba Physical Settings, vá até interface e selecione eth0.

Por fim, na aba Firewall Settings, selecione WAN como Firewall Zone. Logo em seguida, salve suas novas configurações.

Agora, temos que aplicar as configurações: clique em Save and Apply.

Desconecte o cabo de rede do PC e conecte ao seu roteador. Sua Rasp deve ganhar um IP e ter conexão a internet.
Instalação do adblock
Se você compilou a própria imagem usando os passos apresentados mais acima, então você pode pular esta seção.
No menu superior, vá em System > Software.
Primeiramente, precisamos sincronizar a lista de pacotes. Para isso, clique em Update Lists.

Agora, filtre os pelo nome luci-app-adblock e clique em Install.

De maneira semelhante, instale também o pacote curl.
Reinicie a Raspberry Pi, em System > Reboot.
Configuração do adblock
A última etapa é a configuração do Adblock. Para configurá-lo, no menu superior, vá a Services > Adblock.
Na aba Additional Settings,

Desça até aparecer a opção Download Utility. No menu, selecione curl.

O serviço adblock depende de listas de sites e urls a serem bloqueadas, que podem ser adicionadas na aba Black List Sources. Como exemplo, vamos adicionar a lista youtube, que permite o bloqueio de anuncios no YouTube.

Após, salve e aplique as configurações, clicando no botão azul Save & Apply. Recomendo um reboot (System > Reboot), para garantir que tudo irá funcionar.
Pronto! Agora, conecte seus dispositivos rede OpenWRT e navegue sem anúncios e trackers.
Conteúdo sob licensa CC BY-SA 4.0.