Discuta este tópico no fórum

Se este conteúdo te ajudou, deixe um presente!

sexta-feira, 27 de janeiro de 2012

OpenWRT: Multiplique suas redes: MultiWLAN

Mais um artigo da série sobre o OpenWRT.

Um dos recursos mais úteis para ambientes corporativos é a possibilidade de multiplicar seu roteador com OpenWRT. A pedidos, neste artigo vou tratar o uso de múltiplas redes sem fio (MultiWLAN). Acho que vocês irão achar interessante. Em outros artigos na sequência, tratarei dos demais casos de "multiplicação de redes" como de múltiplas conexões com a Internet (MultiWAN) e múltiplas redes locais (MultiLAN).

Se seu roteador suportar (e a maioria suporta), você poderá criar diversas redes Wireless compartilhando o mesmo rádio. E para que serve isto? Bem, tive um problema recente na minha casa onde um computador visitante, com M$ Vista, não autenticava na minha rede WPA2/AES. Ele ganhava IP, enviava pacotes mas não os recebia. A solução mais "elegante" foi criar uma segunda rede Wireless com uma configuração de segurança diferenciada e um SSID próprio. E sim, WPA2/AES funcionou sem problemas quando usei um Linux LiveCD.

Outro caso que pode ser interessante é a utilização da rede Wireless para a conexão WAN. Não tem a rede aberta do vizinho que não pega muito bem? Pode usar um roteador Wireless para conectar como cliente da rede alheia ao mesmo tempo que você conecta normalmente na sua rede wireless local (mas não façam isto sem autorização, OK?). Para os casos mais avançados, poderia criar uma rede em malha, interligando diversos roteadores espalhados, como no caso de um condomínio, e difundir a Internet de um ponto central para todos os condôminos. Isto, ao mesmo tempo que os laptops continuam a conectar nos roteadores como se estes fossem roteadores "normais", conectados por cabo na Internet. Ainda não consegui reunir uma quantidade de roteadores significativa para realizar o teste da rede em malha (mesh), mas um dia chego lá.

Bem, tudo isto possui, eu diria, um "limitador". Todas as redes Wireless do seu roteador irão compartilhar as configurações de hardware como o canal e a potência. Afinal, mesmo com três antenas, você tem somente uma placa wireless. Contudo, acredito que não será um grande problema.

Agora a configuração: este é bem simples de ser feito. Pela interface Web, na configuração de rede, Wifi, clique em "Adicionar". A parte superior é a configuração do dispositivo, comum a todas as redes. A de baixo é a da sua rede, onde você pode escolher o modo, segurança, nome da rede Wireless, essas coisas. Uma configuração importante é a qual "interface" ela pertencerá. Não é a interface "Linux" tradicional mas as interfaces do OpenWRT, como já descrevi anteriormente (para os mais curiosos, a primeira interface wireless aparece como "wlan0" enquanto as demais ganham sufixos como "wlan0-1"). Você pode colocar esta rede como uma conexão LAN (ficando lado a lado com a rede local, assim como a rede wireless original) ou como uma conexão WAN (em conjunto com a interface já existente). Porém, o mais interessante são as configurações onde uma nova interface é criada.

O que eu vou colocar aqui é genérico e vale também para qualquer caso onde seja criado outras interfaces, como veremos em outro artigo sobre MultiLAN. Com a configuração de uma nova interface independente, você terá uma nova rede, com uma nova faixa de endereços IP, regras de firewall e tudo mais. Pode criar, por exemplo, um ambiente DMZ (zona desmilitarizada), com máquinas prestando serviços. Não confundir com o recurso DMZ dos roteadores wireless que apenas encaminham todas as requisições externas para um endereço IP interno que, para mim, não tem nada do conceito de "zona desmilitarizada". Está mais para "terra de ninguém".

Outra coisa interessante seria criar duas redes wireless. Uma rede segura, com somente máquinas "confiáveis", e com regras mais permissivas, e uma outra "de baixo escalão", para visitas indesejadas e máquinas Windows suspeitas. Pode também exercitar sua caridade "para com os outros" e criar uma rede "aberta", isolada das demais e fornecer acesso gratuito a quem conseguir alcançar seu roteador.

As redes são independentes e a comunicação entre elas é definida pelas regras do Firewall.  Bem, mas isto é assunto longo e para outro artigo. Ainda preciso escrever este artigo sobre regras do Firewall...

Boa noite e bom hacking!

quarta-feira, 25 de janeiro de 2012

OpenWRT: Customizando sua firmware

Mais um artigo da série sobre o OpenWRT.

Em geral, a palavra "firmware" assusta as pessoas. Dá a impressão de algo imutável e complexo. Uma "firmware" ou "imagem", no caso do OpenWRT, nada mais é que uma imagem de um sistema operacional para dispositivos embarcados, similar às imagens feitas por um Ghost ou mesmo um dd. Claro, tudo isto dentro do formato esperado de cada dispositivo.

Mas por que alterar a "firmware" do OpenWRT? Um dos maiores problemas dos dispositivos embarcados é o limitado espaço em disco. 4MB é bem pouco para os mais sonhadores. Preciosos kbyte podem ser recuperados se você montar uma imagem que não contém algum pacote desnecessário. Se você é um feliz proprietário de um dispositivo com 8MB ou mais, parabéns, provavelmente este artigo não será útil para você. Instale a imagem padrão e posteriormente os demais pacotes desejados.

Então, tenho pouco espaço em disco. A estratégia é retirar tudo que eu conseguir, criando um a imagem enxuta, e instalar individualmente os pacotes após a gravação? Não, os arquivos presentes na ROM são mais econômicos do que os mesmos arquivos salvos na partição de alteração (overlay). O mais econômico é que, após selecionar os pacotes desejados, seja criada uma imagem com tudo pré-instalado, sempre deixando o espaço vazio para as configurações e para instalações não planejadas que, idealmente, serão embutidas em uma nova firmware para posterior gravação.

Outro bom motivo é a mais fácil reinstalação de um dispositivo ou a sua instalação em lote. Ao instalar o OpenWRT com a "firmware" padrão, os programas instalados anteriormente serão removidos. Colocando-os diretamente na "firmware", eles já estarão prontos logo após a nova instalação. Para o caso da instalação em lote, o mesmo vale para configurações padrão, que podem ser embutidas na firmware. Muito cuidado neste ponto pois o modo de emergência não irá ser útil caso a falha de configuração já estiver na firmware!

Pela característica de um projeto de Software Livre, tudo no OpenWRT é customizável. Basta baixar, alterar e recompilar. Porém, isto dá um pouco de trabalho. Para a customização dos pacotes instalados e de arquivos diversos, o OpenWRT desenvolveu o construtor de  "firmwares" chamado ImageBuilder. Ele fica localizado no mesmo nível das "firmwares" no download do OpenWRT. No caso da arquitetura que tenho usado (ar71xx), seria este arquivo. É um arquivo tar.bz2 grande, aproximadamente 420MB contendo todos os pacotes do OpenWRT compilados para esta arquitetura e os scripts de construção de novas "firmwares".

Depois de descompactá-lo, entre no diretório criado e use o comando "make". "make help" irá dar algumas instruções de como usá-lo. Ah, o pacote de tradução do Português do Brasil pode ser colocado no subdiretório packages e os scripts irão achá-lo.


No meu ambiente, estou usando o seguinte comando:
make image PROFILE=TLWR740NV1 PACKAGES="luci-i18n-portuguese_brazilian ip6tables libiwinfo wpad-mini luci-app-wol luci-theme-openwrt uhttpd wol netstat-nat ifstat luci-theme-base luci-app-qos luci-app-upnp luci-app-firewall luci-app-ddns kmod-input-polldev -ppp -ppp-mod-pppoe aiccu radvd ddns-scripts libiptc resolveip luci-mod-admin-full libiwinfo-lua"
Ele gerará a imagem para o dispositivo "TLWR740NV1" e selecionará os pacotes necessário para o suporte IPv6, que comentei anteriormente, o programa netstat-nat, para mostrar as conexões do NAT, programas para o Wake-on-LAN (WOL), UPnP, scripts para serviços de DynDNS. O que eu retirei? Suporte a PPP. Para o meu caso onde o modem fornece o endereço IP por DHCP, ele é desnecessário (e bem grande). Com isto, você ainda terá 320 KBytes livres para configurações e outros pacotes. Para listas todos os PROFILES possíveis use:
make info
O PROFILE padrão é a geração de imagens para todos os "firmware", o que leva algum tempoPorém, notei um problema com o construtor do OpenWRT: ele não respeita o parâmetro PROFILE. O patch do bugreport resolve o problema. Outra alternativa é esperar ele gerar as imagens até que a desejada esteja pronta e, então, o processo pode ser abortado (ctrl+c é suficiente). As imagens são geradas no subdiretório bin/<alvo>, e seguem o mesmo nome encontrado no download do site.

Depois de uma certa experiência, o administrador pode, inclusive, optar por não instalar a interface Web. Com isto, será preservado um bom espaço em disco, permitindo a instalação de muito mais programas, mesmo em um disco limitado. Que tal um servidor VPN? Um cliente VPN? Um relay TOR? Suporte a uma rede em malha (mesh)?

Boa sorte, pessoal!

domingo, 22 de janeiro de 2012

OpenWRT: Tradução para Português do Brasil

Mais um artigo da série sobre o OpenWRT.

Nem sempre a língua Ianque é fluente para todos os administradores. As vezes, a tradução das mensagem ajuda, e muito! Outro caso onde a tradução pode ser fundamental é em um suporte remoto, quando um usuário leigo tem que ler o que ele está vendo. É bem complicado saber o que está acontecendo quando um usuário fala que apareceu a mensagem "uzer unconau". Seria mais fácil um "usuário desconhecido", não é?

Depois de instalar o OpenWRT, filtrando os pacotes por luci-i18n, você vai notar que existe traduções da interface WEB para diversas línguas, menos a nossa língua nativa: Português do Brasil ou pt_BR. Por quê? Bem, existe sim a tradução só que o sistema de construção dos pacote não o gerou.

De qualquer forma, pelo menos para o alvo ar71xx, eu compilei o pacote. Só baixar e instalar usando o comando opkg.
ssh root@router

cd /tmp
wget http://dl.dropbox.com/u/1286502/luci-i18n-portuguese_brazilian_0.10.0-1_ar71xx.ipk
opkg install luci-i18n-portuguese_brazilian_0.10.0-1_ar71xx.ipk
Depois, por padrão, se seu navegador optar preferencialmente por pt_br, uma atualização simples da página irá mostrar tudo em português.

Quem achar algo errado ou não traduzido, pode ficar a vontade para ajudar traduzindo a interface Web na página do projeto Luci. Preferencialmente, crie uma conta. Se precisar de alguma ajuda, também posso auxiliar neste ponto.

sábado, 21 de janeiro de 2012

OpenWRT: Configurando IPv6

Mais um artigo da série sobre o OpenWRT. 

Por muito tempo, eu usei um Asus EEE 4G, aquele de tela de 7', como meu roteador wireless. Isto concomitante com o uso como um computador pessoal. Era um roteador muito eficiente: suporte a IPv6 por túnel, firewall extremamente configurável, WPA2 e tudo que um Linux desktop oferecia. Foi suficiente para minhas necessidades até o dia que, indo para o novo apartamento, o modem e este computador não mais poderiam ficar juntos. Comprei um TP-WR740N.

Logo após a instalação do roteador TP-Link, comecei a recriar a infraestrutura que eu possuia quando o roteador era um dos laptops da casa: regras de firewall, dyndns.... Porém esbarrei em um ponto: IPv6. Como um estudioso do tema e entusiasta da tecnologia, gostaria de reestabelecer a conectividade IPv6 da minha rede local. Como tal recurso não estava presente no meu TP-Link, enviei uma mensagem para o suporte técnico. A resposta não foi nem um pouco animadora:
Dear sir\madam,
Thank you very much for your email requesting information about our product.
The TL-WR740N can not support IPv6 till now and we don’t have such a plan in the near future.
Sorry for any inconvenience.
Foi a senha para a instalação do OpenWRT.

Se quiser aprender sobre IPv6, recomendo o curso online gratuito em ipv6.br. Aprendi grande parte do que eu sei sobre IPv6 neste curso. Não é o meu objetivo ensinar IPv6 neste artigo.

Por questão de espaço em disco, o OpenWRT não vem com os pacotes para o suporte ao IPv6 por padrão. Porém, tendo espaço em disco livre, nada impede de instalá-lo. Os pacotes são kmod-ip6tables, ip6tables e kmod-ipv6. Você pode instalar pela interface Web ou pela linha de comando:
opkg update 
opkg install kmod-ip6tables ip6tables kmod-ipv6
Isto instala apenas o suporte para o roteador atuar como cliente IPv6 e adiciona o suporte IPv6 ao firewall. A interface Web já tem suporte nativo para o IPv6.

OK, roteador com suporte a IPv6. O que eu preciso para ter acesso à Internet por IPv6? Infelizmente, são raríssimos os provedores de Internet brasileiros que fornecem conectividade por IPv6. Se for o seu caso, sinta-se feliz. Um dia eu espero que meu provedor (NET) forneça o roteamento IPv6. Enquanto isto não é verdade, vamos as alternativas.

A primeira é o 6to4. Neste estratégia, o seu endereço IPv4 é utilizado para compor uma rede IPv6 única. Os pacotes IPv6 que deixam seu roteador são envelopados em um pacote IPv4 e este é enviado a um endereço anycast. Com esperança, em algum ponto da rede, algum roteador terá a rota para um roteador com conectividade IPv6 que responda por este endereço. Este roteador é chamado de relay e, voluntariamente, se oferece como um tradutor dos dois mundos. Recebendo seu pacote, ele o extrai do IPv4 e o envia através da rede IPv6. A volta faz o trabalho inverso: o pacote IPv6 acha um roteador relay que empacota a resposta dentro de um pacote IPv4 e o envia para seu roteador. Esta foi a estratégia que eu utilizei por muito tempo. Porém, nem sempre seu pacote acha um roteador relay. Outro problema é que o caminho de ida e de volta, em geral, são completamente diferentes. Tive diversos problemas com esta forma de conectividade, inclusive com provedores explicitamente bloqueando estes pacotes. Não recomendo esta estratégia.

Por recomendação do Antônio M. Moreiras, em uma das minhas visitas ao FISL, adotei o uso de um túnel através da SixXS. SixXS é um projeto para prover conectivade IPv6 a quem quiser, através de pontos de presença voluntários. Felizmente, temos um destes PoP no Brasil! Obrigado CTBC! É a nossa única opção da América Latina. Os outros grandes provedores também poderiam oferecer um PoP com um baixíssimo custo... O SixXS também funciona diretamente no seu sistema operacional mas o foco aqui é no OpenWRT.

O cadastro no SixXs é gratuito. Você requisita uma conta e ganha alguns "créditos". Com eles, você pode solicitar um túnel. Para os felizardos que possuem um IPv4 fixo, pode ser solicitado um túnel para IPv4 fixo. Não é o meu caso. Minha conexão, como a da maioria das pessoas, é com um IPv4 real mas dinâmico. Por isto, criei um túnel do tipo "Dynamic IPv4 Endpoint using Heartbeat protocol". Neste caso, o programa aiccu estabelece uma conexão com o PoP e a mantém viva enviando periodicamente um sinal de vida. Para utilizá-la, instale o pacote aiccu:
opkg update  
opkg install aiccu
Depois basta configurá-lo em /etc/config/aiccu. Nada muito complicado. O único grande requisito é que o relógio do roteador esteja atualizado. Bem, isto, por padrão, já é feito por NTP na imagem do OpenWRT. Dispare e ative o serviço (que pode também ser feito pela interface WEB).
/etc/init.d/aiccu enable

/etc/init.d/aiccu start
O resultado pode ser observado pelos logs (logread). Se tudo der certo, aparecerá uma nova interface no roteador como esta:
sixxs     Link encap:IPv6-in-IPv4  

          inet6 addr: 2001:xxx:xxx:xxx::2/64 Scope:Global
          inet6 addr: fe80::bd04:xxx/64 Scope:Link
          inet6 addr: fe80::c0a8:xxx/64 Scope:Link
          UP POINTOPOINT RUNNING NOARP  MTU:1280  Metric:1
          RX packets:2 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:208 (208.0 B)  TX bytes:208 (208.0 B)

Parabéns! Seu roteador já possui IPv6. Tente alcançar o ipv6.br:
root@router:~# ping6 ipv6.br

PING ipv6.br (2001:12ff:0:4::22): 56 data bytes
64 bytes from 2001:12ff:0:4::22: seq=0 ttl=56 time=73.889 ms
64 bytes from 2001:12ff:0:4::22: seq=1 ttl=56 time=71.613 ms
64 bytes from 2001:12ff:0:4::22: seq=2 ttl=56 time=71.309 ms
Se tudo correr bem, grande parte do trabalho estará feito. Contudo, o roteador ainda será apenas um cliente IPv6 (endpoint) e não um roteador IPv6 para o resto da rede. Pelo mecanismo de créditos do SixXS, ainda não é possível requisitar uma subrede.

A cada 2 semanas de conexão ativa, o SiXXs creditará 5 créditos. Então, por duas semanas, somente acompanhe para verificar que sua conexão está ativada. A transação típica de um novo usuário do SixXs é a seguinte:

Action  Cost  Description 
 Signup  25   
 Tunnel Request  -10   
 Tunnel Approve  -5   
   10  Can't request a subnet, due to lower bound 
 Week uptime  5   
   15  Can request a subnet 
 Subnet Request  -10   
 Subnet Approve  -4   
 Configure 1 NS  -1   
   0  Out of credits, save some more in the coming weeks

Duas semanas mais tarde, e com 15 créditos, será o suficiente para requisitar a subrede. Requisite-a e a associe ao seu túnel existente. Na sua interface local do roteador (lan), adicione um IPv6 dentro da rede que o SixXS forneceu. Qualquer um. A parte legal do IPv6 é que, ao usar notação hexadecimal, você pode criar endereços fonéticos com partes como cafe, b0de, b0b0, fofa, ou até musicais: aeae:eeee:0000.

Agora, vamos precisar configurar e instalar mais algumas coisas no roteador.

Para ambientes pequenos, como o residencial, o mais indicado é o uso da configuração stateless do IPv6. Ela é automática, basta o roteador se anunciar na rede. O programa que realiza esta divulgação é o radvd. Instale-o.
opkg install radvd

Configure o radvd em /etc/config/radvd, ative e dispare o serviço, assim como foi feito para o aiccu. Uma das coisas interessantes do radvd é que ele também divulga a informação DNS pelo rdnss. Em geral é bom ativá-lo. O problema é que ele não funciona para sistemas M$. Para o Windows, adicione na rede lan do roteador um IPv6 extra: fec0:0:0:ffff::1/64. Não, o XP não irá funcionar pois o seu resolvedor DNS não suporta IPv6.

Ao ativar o radvd, é bom acompanhar pelo wireshark se aparece alguns pacotes do anúncio do roteador pela rede. Se seu sistema operacional for recente, é provável que ele ganhe um IPv6 instantaneamente e automaticamente. Se tudo correr bem, você terá conectividade com o ipv6.br.
$ ping6 ipv6.br
PING ipv6.br(ipv6.br) 56 data bytes
64 bytes from ipv6.br: icmp_seq=1 ttl=55 time=110 ms
64 bytes from ipv6.br: icmp_seq=2 ttl=55 time=107 ms
64 bytes from ipv6.br: icmp_seq=3 ttl=55 time=90.2 ms
64 bytes from ipv6.br: icmp_seq=4 ttl=55 time=72.0 ms
Acessar com um navegador o ipv6.br e ver o globo girando (e seu IPv6 no topo). Ou realizar o teste de conectivade IPv6. Eu consegui nota 10 no teste.

O firewall do OpenWRT precisa ser configurado assim como para o IPv4. A configuração padrão dará uma segurança similar ao IPv4 com NAT. Em geral, é desejável abrir os serviços que seus computadores externos irão receber conexões, como o torrent. Mais adiante eu faço um artigo sobre o firewall.

A partir deste ponto, tudo é opcional.

Todos os servidores DNS que estão configurados no roteador devem ser IPv4. Ex:
# cat /tmp/resolv.conf.auto
nameserver 189.4.64.87
nameserver 189.4.64.82
Enquanto existir IPv4, isto não é problema algum (e vai existir por muito, muito tempo). Porém, para ganhar o décimo ponto no teste IPv6, você precisa ter um servidor DNS IPv6. O SixXS fornece alguns servidores DNS IPv6 como este: 2001:4de0:1000:a3::2.  Adicione-o na interface sixxs (pode ser pela interface WEB) e crie este script:

/etc/hotplug.d/iface/60-aiccu-dns.sh 

#!/bin/sh
#
# Add dns configured in aiccu interface
#
source /etc/functions.sh
config_load aiccu
for cfgs_section in $CONFIG_SECTIONS; do
        config_get aiccu_iface $cfgs_section interface
        if [ "$INTERFACE" == "$aiccu_iface" ]; then
                source /lib/network/config.sh
                config_load "network"
                config_get "dns" "$INTERFACE" "dns"
                if [ "$dns" ]; then
                        case "$ACTION" in
                        ifup)
                                # Add DNS from aiccu interface
                                add_dns "$INTERFACE" "$dns"
                        ;;
                        ifdown)
                                # Remove DNS from aiccu interface
                                remove_dns "$INTERFACE" "$dns"
                        ;;
                        esac
                fi
        fi
done

Isto adicionará o dns da interface sixxs aos servidores dns disponíveis quando a interface for levantada. Ele irá aparecer no arquivo /tmp/resolv.conf.auto. Por padrão, o dnsmasq consulta a cada requisição todos os servidores dns configurados.

Só um aviso: este roteador retorna IPv6 para alguns sites como o google.com. Então, na rara situação onde a resposta do servidor DNS IPv6 chegar antes dos demais, você irá acessar o GMail por IPv6. Será um pouco mais lento pela latência do túnel mas é extremamente raro de acontecer.

sábado, 14 de janeiro de 2012

OpenWRT: Administrando o OpenWRT

Mais um artigo da série sobre o OpenWRT.

Quando instalado, o OpenWRT vem com uma configuração bem simples:
  • A rede sem fio está desligada. Use, por enquanto, o cabo de rede;
  • O usuário administrador "root" não possui senha. Deve ser a primeira coisa a ser resolvida;
  • O acesso por telnet está liberado. Mais adiante, este acesso não é mais necessário (por ser inseguro) e é substituído pelo SSH;
  • A interface LAN (as portas e a sem fio) estarão juntas (bridge) e esta estará configurada com o endereço 192.168.1.1/24;
  • Um servidor DHCP irá fornecer endereços para a rede LAN;
  • O equipamento estará configurado para utilizar servidores NTP do projeto para ajustar a hora;
  • As regras do firewall irão bloquear tudo que não seja ICMP vindo de fora. Os acessos de dentro da rede para fora não sofrem influência.
A primeira coisa a ser feita é a configuração de uma senha. Use uma boa senha. Pelo que observo nos logs do meu firewall, é comum ataques em massa vindos da Internet. Não precisa ser nada de 15 caracteres, letras maiúsculas e minúsculas, números e símbolos. Porém, nada de admin ou 12345678. O próximo passo é o ajuste das configurações de rede.

Durante a configuração do OpenWRT, não vemos as usuais interfaces do Linux (eth1, wlan0,...). O que encontramos são interfaces de "mais alto nível" como LAN e WAN. Estas interfaces podem ser mapeadas diretamente para uma única interface do roteador (agora sim eth0, etc) ou agrupá-las em uma bridge. Por padrão, existem duas interfaces: WAN (Wide area network) e a LAN (Local area network). A WAN normalmente é composta apenas de uma interface (eth1), normalmente destacada das demais portas, utilizada para a conexão com a Internet. A LAN é uma bridge que junta a eth0 (portas da rede local) e a interface wireless (wlan0). Em geral, não é alterada a rede LAN e a WAN opera configurada por DHCP, PPPoE, dependendo do seu provedor.

OK, até agora como qualquer roteador. Porém, agora entra a flexibilidade do OpenWRT. As funções das interfaces podem ser alteradas, alternadas, agregadas ou divididas como o administrador desejar. A interface wlan0 pode se juntar com a WAN, as portas da LAN serem usadas para conexões diversas com a Internet ou juntar tudo e tornar o roteador um simples ponto de acesso (access-point) sem qualquer roteamento. Alguém pode perguntar: "mas as portas da rede local, aquelas 4, são mapeadas para uma única interface, a eth0?". Sim, são. Mas isto não é um limitador. Apesar de, por padrão, estarem juntas, as portas, se o HW permitir, podem ser isoladas em diversas redes, enviar pacotes com tags de VLANs e assim por diante. Porém, isto é um tema para um artigo isolado.

Para os roteadores wireless, é provavel que o desejo seja ativar o rádio. Isto é feito na configuração Wifi. SSID, criptografia (WPA ou WPA2, por favor. Esqueça que WEP existe), uma senha razoável, potência, canal, tudo isto que já encontramos em todos os firmwares. Vou focar nas diferenças: modo de operação. Existe uma boa gama de opções do modo de operação desde o clássico "AP", passando pelo simplório Ad-hoc e por coisas mais interessantes como redes Mesh (802.11s), WDS cliente ou servidor, ou até mesmo se comportando como um cliente wireless comum, conectando-se a outro roteador Wireless.  Há também o modo "monitor", para realizar captura de pacotes wireless. Passando rapidamente, outra coisa interessante pode não ser notada. Na configuração do Wifi, existe um botão para "Adicionar". Adicionar o quê? Outra configuração wireless. Se o HW permitir, e normalmente permite, você pode ter múltiplas configurações de rede sem fio, operando em modos diferentes, com senhas diferentes, com SSID diferentes, cada uma representando uma interface. Vou tentar fazer um artigo somente sobre casos interessantes de uso da rede sem fio múltipla.

O acompanhamento do desempenho do roteador é muito próximo ao encontrado em um computador com Linux. Pode-se usar o top, ifconfig, free, df, etc. A interface provê todas estas informações de uma forma amigável, com gráficos em tempo real e alguma gerência como matar um processo. Vale a pena olhar. Ainda pela WEB, é possível configurar tarefas agendadas na cron, ativar/desativar e iniciar/parar serviços. Tudo simples e fácil.

Para ver se o roteador está "aguentando" a carga, observe valor da carga média (loadavg). São 3 valores com a média  (respectivamente, média de 1, 5, 15 minutos) do tamanho da fila de processos querendo usar a CPU. Como regra geral, quando este valor estiver abaixo de 1, tudo certo. Quer dizer que ninguém ficou "esperando na fila". Se subir, pode ser muita carga ou problemas de HW. É bom avisar que, enquanto está sendo operada, a interface WEB usa bastante CPU. Memória normalmente sobra. Se ela faltar, coisas estranhas e aleatórias irão acontecer. O gráfico da rede também é muito legal, observando em tempo real se o seu provedor está entregando o que realmente foi contratado. Por fim, o disco só irá ser importante para a instalação de pacotes. Não é esperado que seja necessário reiniciar o roteador, por qualquer motivo que seja. No meu caso, ele fica ligado por meses sem qualquer degradação do desempenho. Só é desligado/reiniciado em caso de falta de energia, viagem ou atualização de firmware.

A lista de pacotes é bem vasta. Os novatos podem facilmente se perderem nas milhares de alternativas. A lista inclui desde pacotes clássicos, como nmap, socat, iftop, módulos de kernel ou programas específicos para roteadores. A limitação, como já comentei anteriormente, será seu espaço em disco. No meu caso, gastei quase todo o meu espaço livre para configurar IPv6, com SW do túnel, divulgação de roteador e demais detalhes. Para os iniciantes, observe os pacotes luci. Eles adicionam recursos à interface e, por dependência, instalam os programas necessários. Algum mais usados são luci-app-multiwan, para balancear entre múltiplas conexões com a Internet, luci-app-openvpn para configurar uma VPN, luci-app-upnp para criar encaminhamento de portas automaticamente (útil para Skype, Torrent e outros), luci-app-qos, para regras de qualidade de serviço.

O OpenWRT possui mecanismo para salvar as configurações em um arquivo de backup. Contudo, ele não é suficiente para todos os casos. Em primeiro lugar, na eventual instalação de um novo firmware, todos os programas instalados após a gravação da firmware anterior sumirão. Será necessário reinstalá-los. Em relação as configurações, existe uma lista de arquivos a serem preservados. Alguns como /etc/passwd ou /etc/config/* são automaticamente mantidos. Outros, principalmente de pacotes sem interface WEB, precisam que seus arquivos de configurações sejam relacionados em /etc/sysupgrade.conf, ou pela interface WEB. Recomendo que todo o conteúdo de /overlay seja também mantido enquanto ainda existir dúvidas se todos os arquivos estão listados para o backup.

A atualização da versão do OpenWRT é simples. Baixe a versão da firmware sysupgrade desejada e solicite a gravação. É possível solicitar a manutenção das configurações. Porém, isto é similar a gerar um backup e restaurá-lo. É importante lembrar que, como comentado no parágrafo anterior, nem tudo será mantido.

O diagnóstico de problemas é feito em grande parte olhando os logs. Existe o log do kernel (dmesg), o log do sistema (logread), que contém o do kernel e, possívelmente, logs de programas em /var/log/. A grande maioria dos programas usa somente o log do sistema e a criação de logs próprios é rara. Como o conteúdo do dmesg está contido no syslog, normalmente somente o logread é necessário. O logread é a ferramenta para ler o conteúdo do log do sistema. Este conteúdo pode ser acessado pela interface WEB ou por uma console. A opção "-f" faz com que o log seja "seguido", mostrando o conteúdo a medida que ele é gerado.

Bem, fiz algum configuração e agora não consigo acessar meu roteador. O que eu faço? Aperta o reset? Não vai funcionar. Jogo ele fora? Ainda não. Se o problema for apenas configuração ou alguma alteração de disco após a instalação do firmware, a recuperação é tranquila. O botão de reset do roteador é apenas um botão, que pode ser aproveitado para diversas finalidades, assim como, no meu caso, o QSS. Porém, durante o boot, ele tem uma função especial. Durante o processo de boot, o roteador envia um pacote UDP pela rede cabeada da LAN com um aviso parecido como, "Se quiser entrar no modo de emergência, aperte o reset agora!". Rapidamente aperte o botão reset. Com isto, todas as alterações feitas no disco, sendo elas instalação de pacotes, remoção de arquivos ou configurações serão ignoradas. Elas não serão removidas, apenas ignoradas. Realize os ajustes necessários e reinicie o equipamento. Mas como eu vou ver este pacote? Para os mais interessados, use um sniffer de rede (wireshark). Os mais preguiçosos, que é uma qualidade na computação, podem esperar o primeiro pacote recebido pela rede vindo do roteador. O aviso será o primeiro pacote.

Para os corajosos, boa sorte! Se precisarem de alguma ajuda, vou tentar fazer o possível. Devo falar sobre a criação de uma firmware customizada no próximo artigo.

sexta-feira, 13 de janeiro de 2012

OpenWRT: Instalando o OpenWRT

Antes de mais nada, façam a instalação por sua conta e risco! Eu utilizo o OpenWRT faz algum tempo, já tive problemas de configuração, já corrompi a flash (com firmware experimental). Posso tentar ajudar em alguma coisa mas não tenho como dar garantias.

A instalação do OpenWRT é ligeiramente tranquila. Primeiramente, descubra se o seu roteador possui suporte e a partir de qual versão (coluna "status"). Considerando que ele tem suporte, observe a plataforma alvo (coluna "target"). Os Tp-Link com suporte são todos para o alvo ar71xx. A última versão lançada no final de dezembro de 2011 é a backfire 10.03.1 (Nota:  O nome da distribuição vem de drinks e sua receita é mostrada quando o usuário loga na console)Não recomendo experimentar com firmwares não finais. Os RC são relativamente seguros mas sempre podem apresentar algum problema. Usar a versão em desenvolvimento (trunk) é ainda mais arriscado. Vai do perfil de cada um. Com tudo isto em mãos, vá para a parte de download.

Busque o modelo do seu roteador. No meu caso, é o TL-WR740N. Existem dois arquivos para este modelo:
http://downloads.openwrt.org/backfire/10.03.1/ar71xx/openwrt-ar71xx-tl-wr740n-v1-squashfs-factory.bin
http://downloads.openwrt.org/backfire/10.03.1/ar71xx/openwrt-ar71xx-tl-wr740n-v1-squashfs-sysupgrade.bin
Destaquei algumas coisas no caminho do arquivo. "backfire" é o nome dado ao OpenWRT versão 10. "10.03.1" é a última versão estável lançada (também existem versões anteriores e RC mais antigos). "ar71xx" é a arquitetura alvo, também presente no nome do arquivo. "tl-wr740n" é o modelo do roteador wireless. "v1" é a versão do hardware e pode ser fundamental. Em seguida aparece "squashfs" que representa o formato do disco. Por fim, o que difere os dois arquivos, é a descrição "factory" e "sysupgrade". O "factory" é utilizado somente para a primeira instalação, onde o firmware do fabricante está rodando e o administrador deseja instalar o OpenWRT. Depois da primeira instalação, somente o "sysupgrade" será utilizado.

Para o modelo de exemplo, não existe alternativa do formato do disco. Contudo, para outros, pode existir a alternativa entre o "squashfs" e o "jffs2". O OpenWRT geralmente é utilizado com os arquivos na flash formatados como squashfs (somente leitura) + área de alterações. Quando um arquivo original do firmware é removido no squashfs, ele não libera espaço. Pelo contrário, ao removê-lo, é criado um arquivo de controle extra no espaço de alteração para marcar o arquivo removido e ocultá-lo da raiz, mas ele jamais deixa de existir na ROM e não libera espaço. Já na estrutura "jffs2", não existe área ROM e todos os arquivos são "apagáveis". Porém, isto "permite" que o administrador remova algo importante e faça com que o roteador não ligue mais que, no jargão da área, é chamado de bricked. Com o formato "jffs2", não existe modo de emergência ou recuperação. A recuperação somente é possível interagindo com o gerenciador de boot (serial ou tftp, quando possível) ou dessoldando a flash da placa e gravando externamente. Recomendo fortemente que seja usado exclusivamente o "squashfs". Pode também existir variações do tamanho da flash para um mesmo modelo. Porém isto é um caso raro ou fruto de algum hack de hardware.
Atenção: Antes de qualquer coisa, leia toda a documentação do modelo do roteador na Wiki do OpenWRT. As vezes alguma informação ou instrução peculiar pode ser necessária antes da instalação.
Dica: Se o roteador for a sua única forma de acesso à Internet, baixe toda a documentação necessária. Preferencialmente, não dependa do roteador para acesso à Internet durante o procedimento de instalação. Tenha uma alternativa nem que seja acesso discado. 
Com o arquivo baixado da versão "factory", proceda a instalação do firmware como se este fosse um firmware fornecido pelo fabricando do equipamento. Após a gravação, o OpenWRT estará rodando!

Por padrão, ele estará rodando como 192.168.1.1, máscara 255.255.255.0. Conecte por um cabo de rede ou pela rede sem fio, abra um navegador para http://192.168.1.1 e configure o novo sistema.

domingo, 8 de janeiro de 2012

OpenWRT: Sobre o OpenWRT

Mais um artigo da série sobre o OpenWRT.

O OpenWRT é uma distribuição Linux para dispositivos embarcados, como roteadores, funcionado como substituto aos firmwares originais do fabricante. É fruto do código-fonte do firmware da Linksys, baseado em Linux, e publicado sobre a licença GPL.

Com o controle sobre o firmware, o administrador pode explorar todos os recursos do hardware. Pode aproveitar uma porta USB para criar um servidor de impressão. Pode utilizar a wireless como cliente, como uma rede mesh, como ad-hoc ou um access-point (ou tudo isto ao mesmo tempo se o hardware suportar). Queria aproveitar o botão de QSS, que não serve para muita coisa, para algo diferente como desligar a wireless, mudar a potência do sinal? Enfim, se o hardware permite, o software deixa de ser o limitador. Ainda mais se quiser meter a mão em um pouco de shell script ou lua.

Diferentemente da imobilidade dos firwmare originais, o OpenWRT é extremamente expansível. Assim como as distribuições Linux, ele trabalha com pacotes. Os programas, serviços podem ser baixados e instalados, ajustando os recursos disponíveis a necessidade do usuário. A lista de pacotes prontos é extensa. O firmware padrão traz acesso ao roteador por Telnet, por SSH e por uma interface WEB avançada. A interface WEB é suficiente para atender as necessidades da grande maioria dos usuários, mesmo muitos usuários avançados. Para os casos omissos, as configurações podem ser feitas pela console (Telnet, SSH ou mesmo a serial). A documentação na Wiki contempla muitos cenários desde a instalação, recuperação, configurações e hacks. O fórum também é um lugar interessante para pesquisar informações. Os softwares empacotados no OpenWRT são, em geral, os mesmos encontrados nas distribuições Linux, mas com alguns ajustes e compilados para o dispositivo. Então, se precisar de ajuda, a própria documentação padrão do software, quando rodando em um PC, deve se aplicar. E, se tudo mais falhar, ainda pode dar uma olhada no código-fonte. Afinal, tudo no OpenWRT possui código-fonte aberto.

A estrutura do disco difere do que encontramos nas formatações dos discos de um computador. Não existe uma tabela de partição, MBR. Porém, algumas coisas têm sua posição definida. Além disto, podem existir variações em função do fabricante. Existe uma vasta lista de dispositivos descritos na Wiki do OpenWRT que explicam melhor como está organizado o disco de cada equipamento. Vou descrever um exemplo geral:

O início do disco contém o gerenciador de boot. Este pode ser o U-boot, Redboot ou outro qualquer (em geral, os mesmos encontrados em celulares). Na sequência vem o firmware com o kernel, programas e dados e, por fim, em geral uma partição proprietária para configuração ou dados de hardware. A tabela abaixo mostra o layout da flash para o modelo TP-Link WR1043ND encontrado na wiki do openwrt.

TP-Link WR1043ND Flash Layout
Layer0m25p80 spi0.0: m25p64 8192KiB
Layer1mtd0 u-boot 128KiBmtd5 firmware 8000KiBmtd4 art 64KiB
Layer2mtd1 kernel 1280KiBmtd2 rootfs 6720KiB
mountpoint/
filesystemmini_fo
Layer3mtd3 rootfs_data 5184KiB
Size in KiB128KiB1280KiB1536KiB5184KiB64KiB
Nameu-bootkernelrootfs_dataart
mountpointnonenone/rom/overlaynone
filesystemnonenoneSquashFSJFFS2none

O gerenciador de boot é capaz de carregar o firmware de diversas fontes como um servidor TFTP, através da serial ou, como é o usual, da própria memória flash. A interação com o gerenciador de boot normalmente só é possível através da serial ou reconfigurando alguma de suas variáveis ambientes. A operação padrão do gerenciador de boot é carregar o firmware da memória flash e executá-lo.

O firmware é dividido em partes. A primeira parte é composta do kernel Linux do sistema, que possui tamanho variável em função da arquitetura e módulos embutidos. Só para destacar, não existe um arquivo em um sistema de arquivos contendo o kernel, como em um computador. Ele apenas está na posição imediatamente após o gerenciador de boot. Após a sua carga, o kernel busca a raiz do sistema na posição seguinte ao local onde o kernel está armazenado.

A raiz do sistema usa o squashfs, também utilizado em alguns LiveCDs e terminais leves. É uma imagem ROM (somente leitura) e compactada, para economizar o escasso recurso de disco. No caso de um LiveCD, qualquer alteração ao disco é armazenada na memória e perdida ao desligar o computador. No caso do OpenWRT, estas alterações ficam no espaço livre restante após a ROM do squashfs e antes da partição proprietária. Isto é transparente do ponto de vista do administrador. Qualquer parte do disco pode ser alterada. Porém, somente os arquivos alterados serão armazenados na região rootfs_data. Com isto, diferentemente do LiveCD, as alterações serão preservadas.

A estrutura do sistema de arquivos é muito próxima ao encontrado em qualquer unix:
drwxr-xr-x 2     1024 Dec 21 11:10 bin
drwxr-xr-x 5     2060 Jan 8  18:15 dev
drwxr-xr-x 12    1024 Jan 8  18:15 etc
drwxr-xr-x 12    1024 Nov 18 16:23 lib
drwx------ 2  2515968 Dec 21 11:13 lost+found
drwxr-xr-x 2     1024 Dec 21 10:30 mnt
drwxr-xr-x 2     1024 Dec 21 10:30 overlay
dr-xr-xr-x 45       0 Jan 8  18:15 proc
drwxr-xr-x 2     1024 Dec 21 11:09 rom
drwxr-xr-x 2     1024 Dec 21 10:30 root
drwxr-xr-x 2     1024 Dec 21 11:10 sbin
drwxr-xr-x 12       0 Jan 8  18:15 sys
drwxrwxrwt 12     360 Jan 8  19:46 tmp
drwxr-xr-x 6     1024 Nov 18 16:23 usr
lrwxrwxrwx 1        4 Dec 21 11:09 var -> /tmp
drwxr-xr-x 4     1024 Dec 21 10:39 www
Alguns diretórios diferentes podem chamar a atenção. O "rom" aponta para a imagem squashfs original e somente leitura. Se precisar restaurar algum arquivo para o seu original, ele pode ser obtido neste diretório. O "overlay" aponta para a região da flash onde as diferenças estão armazenadas. Não tente alterar os arquivos diretamente neste local. O formato é simples mas específico. Porém, ele serve como um bom local para descobrir onde foi parar aquele espaço livre que você tinha e desapareceu. Também mostra o que foi alterado no disco.

Uma das vantagens desta escolha de estrutura com uma imagem fixa, rom, e as alteracões é que a restauração ao firmware é extremamente simplificada: basta não ler as alterações presentes na "overlay". Mais adiante eu comento como recuperar um roteador após uma mudança que o deixe inacessível.

O diretório "tmp" está montado em uma tmpfs, que é um disco em memória RAM. Em geral, até metade da memória pode ser utilizada para este fim. Neste local ficam os logs, arquivos temporários e demais informações voláteis que serão perdidas quando o sistema for reiniciado. O "var" é apenas um link simbólico para o "tmp".

O "etc" contém arquivos usuais de configuração de um Linux e um diretório "config" específico de configurações do OpenWRT. O "/etc/config" contém arquivos texto com configurações em um formato padrão do OpenWRT. Geralmente, a interface WEB altera apenas estes arquivos presentes no diretório "config". Este é um exemplo de um arquivo de configuração:
config system
        option hostname OpenWrt
        option timezone UTC
config timeserver ntp
        list server     0.openwrt.pool.ntp.org
        list server     1.openwrt.pool.ntp.org
        list server     2.openwrt.pool.ntp.org
        list server     3.openwrt.pool.ntp.org
É comum que os scripts de gerenciamento dos serviços leiam as definições nestes arquivos e, a partir destas, gerem em "/tmp" a configuração do programa a ser executado.

Grande parte dos programas não cria seus próprios arquivos de logs e utilizam o serviço de log do sistema. Os logs do OpenWRT podem ser acessados pelo comando logread.
Jan  8 19:24:24 OpenWrt user.notice ifup: Enabling Router Solicitations on loopback (lo)Jan  8 19:24:24 OpenWrt user.info kernel: eth0: link up, 100Mbps, full-duplex
O formato é o que já encontramos em outros Unix.

Bem, agora podemos partir para a instalação.