Discuta este tópico no fórum

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

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.

OpenWRT: turbine seu roteador! Escolhendo o Hardware

Com o recente lançamento do OpenWRT 10.03.1 e como seu usuário, resolvi compartilhar algumas experiências por aqui. Este é um primeiro artigo de uma série de outros sobre o assunto.

Em geral, enquanto configurava alguns roteadores wireless residenciais, eu me sentia um pouco frustado. Os firmwares originais dos roteadores são limitados quanto as funcionalidades disponível. É fácil entender isto quando levamos em consideração que o fabricante precisa desenvolver, além do hardware, todo o sistema operacional que será executado, com pilha de rede, servidor http, ssh, telnet, syslog. Foi assim até o dia que eu precisei comprar um roteador wireless para uso pessoal.

Já conhecendo o que me esperava dos firmwares originais, procurei um modelo que fosse compatível alguma coisa alternativa baseada em Linux. Em geral, se funciona com um dos alternativos, será possível fazer funcionar com qualquer outro. Pelo custo/benefício, encontrei o modelo Tp-Link TL-WR740N. Era o mais barato que eu achei. Pesquisando um pouco, você vai descobrir os componentes de qualquer roteador wireless são de poucos fabricantes  como Broadcom, Atheros, Ralink, Texas, Ubicom. As vezes, para um mesmo modelo, o fabricante troca o chipset em uma nova versão de hardware. Por isto, dois equipamentos de mesmo modelo/fabricante podem ter desempenho muito diferente. A D-Link, por exemplo, trocou o chipset de Atheros para Ralink em boa parte dos modelos DIR quando passou da revisão de hardware A para B.

Bem, no meu caso, o TL-WR740N possui configurações bem espartanas:
  • Processador Atheros 400Mhz
  • 4 MB de disco
  • 32 MB de RAM
  • Rede b/g/n
  • 1 antena não removível
  • 4+1 portas FastEthernet (100Mbit)
Para quem está acostumado com "gigas", a volta aos "megas" pode assustar um pouco mas, em geral, é suficiente para o trabalho. É possível realizar melhorias na especificação fazendo alguns "hardware hacks". Este modelo possui pinagem no chipset para uma porta USB 1.1. Também possui uma porta serial com circuitarem não concluída para a casos de emergência. Outros mais radicais chegam a trocar os chips de memória flash e RAM, soldados na placa. Sugiro não contar com estes recursos latentes e, se realmente desejar, compre um modelo que os forneça naturalmente. Durante os testes com firmwares experimentais, tive que soldar a serial e não foi uma atividade divertida.

Ao longo do uso do OpenWRT, notei que eu poderia aproveitá-lo melhor se tivesse algumas coisas a mais na especificação do equipamento. O primeiro ponto que eu melhoraria seria o espaço em disco. 4 MB faz você trabalhar no extremo do limite, literalmente contando os KBytes restantes. Sugiro algo como 8MB. Caso esteja disponível uma porta USB, um pendrive pode ser utilizado como disco mas isto vai tornar seu ambiente mais complexo. Falando nela, uma porta USB é uma grande coisa. Você pode utilizá-la para qualquer finalidade que use USB: modem 3g, pendrive, disco externo, impressora, webcam, placa de som, ventilador...(desde que não use muita corrente). A porta USB torna o roteador muito mais versátil. Os 32 MB de memória RAM é suficiente para os casos normais mas, se for utilizar muitos serviços extras, pode ser necessário mais memória ou utilizar um espaço para swap. No caso da swap, sugiro que seja utilizado um pendrive ou disco externo pela USB. E claro, como qualquer memória virtual, o sistema deve perder desempenho. Eu pessoalmente não utilizo as portas Ethernet da Lan. Se o roteador for utilizado para conectar mais de um computador por cabo, eu optaria por modelos GigaEthernet. Em relação as antenas, uma e fixa é suficiente para mim. Se precisar de uma antena maior, compre as destacáveis. Se precisar de maior alcance e mais banda, compre os modelos com múltiplas antenas.

Conhecendo a disponibilidade de equipamentos no nosso mercado nacional, minha sugestão de compra atual é o modelo Tp-Link TL-WR1043ND.
  • Processador Atheros 400Mhz
  • 8 MB de disco
  • 32 MB de RAM
  • Rede b/g/n
  • 3 antena destacáveis
  • 4+1 portas GigaEthernet (1000Mbit)
  • Porta USB 2.0
  • Porta serial facilmente soldável
Existe novos modelos da Tp-Link que ainda não chegaram no nosso mercado que parecem promissores. Fica a dica, para evitar problemas, observar a tabela de compatibilidade do OpenWRT e atentar para a versão do Hardware suportada e a versão mínima do OpenWRT suportada. Cuidado que na mesma página existem as listagem dos modelos  compatíveis, dos possivelmente compatíveis e dos não compatíveis.


O próximo artigo será sobre a estrutura interna do OpenWRT.

quinta-feira, 8 de dezembro de 2011

Atendimento Eletrônico da Anatel com suporte para Firefox

Quem tentou usar no passado o atendimento eletrônico da Anatel a partir do Linux provavelmente esbarrou na limitação da aplicação que somente funcionava em Internet Explorer. Para usuários M$ Windows, era somente o caso de trocar o navegador enquanto para os usuários Linux, a solução possível seria extremamente exótica (como rodar o IE no wine).

Bem, era extremamente frustrante que, após não resolver o problema com a Telecom (por sinal, no meu caso, era a Oi), você não consiga nem mesmo reclamar com a Anatel. Como eu estava realmente indignado, resolvi ir ao limite para tentar sanar o problema. Inicialmente, o primeiro passo seria entrar em contato com a Ouvidoria da Anatel e informar do problema. Para a minha surpresa, até mesmo a ouvidoria usava o mesmo sistema do atendimento eletrônico! E, para ajudar, não achei, na época, outra forma de contato que não seja o telefônico. Para utilizar o meio eletrônico, eu teria que "subir o nível".

Pensei no Ministério das Telecomunicações. Contudo, estudando um pouco, encontrei que a "...a agência tem independência administrativa e financeira e não está subordinada a nenhum órgão de governo". Investigando mais um pouco, cheguei em alguém que poderia me ajudar: Controladoria Geral da União (CGU).

Entrando na página da controladoria, consegui facilmente relatar o problema encontrado. Os argumentos foram simples. A exigência do uso do IE daria privilégios a uma empresa (Micro$oft) sem qualquer motivo ou concorrência pública. Para usar legalmente o sistema da Anatel, eu teria que comprar uma licença do produto, ou utilizar uma cópia ilegal, que seria "contra a lei". Isto estaria restringindo os direitos de cidadão dos não clientes da Microsoft. Além de tudo, a limitação não teria qualquer justificativa pois existem outros navegadores de alta qualidade no mercado (que inclusive são mais usados do que o IE), compatíveis com diversos sistemas operacionais, além da compatibilidade com a crescente onda dos dispositivos móveis. Por fim, ainda o uso de recursos limitadores fora dos padrões vai contra a orientação do Padrões de Interoperabilidade de Governo Eletrônico (E-ping). Para quem não conhece, o E-ping define diversas normativas de soluções de TI para o Governo como protocolos e formatos de documentos, inclusive adotando o ODT. É de caráter obrigatório para o Poder Executivo mas o Judiciário também aderiu voluntariamente.

Em pouco tempo, recebi por e-mail a resposta da CGU:



Prezado Senhor,

                        Acuso o recebimento da manifestação em referência, originada de correspondência eletrônica em que Vossa Senhoria reclama sobre a restrição de acesso ao atendimento eletrônico da Agência Nacional de Telecomunicações/ANATEL que exigiria do usuário a utilização de determinado navegador de internet para utilização dos seus serviços.
2.                     Considerando a natureza da matéria ali abordada, informo que sua manifestação foi enviada, nesta data, à ouvidoria daquela Agência para conhecimento, providências e oportuna comunicação com Vossa Senhoria, bem como à Secretaria-Executiva do Governo Eletrônico, a título de colaboração na implementação do programa.
                        Atenciosamente,




RICARDO GARCIA FRANÇA

Assessor do Ouvidor-Geral da União



Alguns meses se passaram e, algumas semanas atrás, testei novamente o sistema utilizando o navegador Google Chrome. Para minha surpresa, consegui avançar em muito em relação às limitações que eu enfrentei no passado. Porém, ainda assim  não conclui um cadastro pois existe algum problema com a consulta do CEP. Poucos dias depois, recebo a tão aguardada resposta da Anatel:

Prezado Sr. Luiz Ângelo Daros de Luca,
1.          Em atenção ao Ofício nº 21531/2011/OGU/CGU-PR, encaminhado à Anatel e recebido no dia 05 de agosto de 2011, referente à sua reclamação de restrição de acesso ao sistema FOCUS, informamos que já se encontram em produção desde o dia 13 de outubro as alterações inerentes a cadastro de entidade externa com compatibilidade com os navegadores Mozilla Firefox e Microsoft Internet Explorer. Tais alterações visaram aprimorar os processos de atendimento eletrônico da ANATEL, e aproveitamos para agradecer o contato.
2.          Informamos ainda que estamos trabalhando em outras alterações visando compatibilizar o acesso ao atendimento com o navegador Google Chrome, com previsão de conclusão para o dia 9 de dezembro próximo.
3.          Informamos também que o tratamento relativo ao Sr. Evandro de Andrade Bastos, referente à mudança de plano e aparelho já foi encaminhada à área competente e terá o devido retorno.
4.          Pedimos desculpas pelo inconveniente causado e nos colocamos a disposição para quaisquer esclarecimentos.

Bingo! O problema foi solucionado! Testei o cadastro com o Mozilla Firefox e tudo funcionou sem qualquer problemas. O problema que eu enfrentei com o Google Chrome já é conhecido e, segundo a resposta, já estão trabalhando na solução. De qualquer maneira, dou-me por satisfeito com a opção do Firefox.

Fica a lição de que "reclamar resolve". Mas não com os seus colegas. Reclamem com os tomadores de decisão da instituição, que em geral não estão cientes do problema e, no caso das públicas, até mesmo da orientação do Governo Federal. Se o caso for com uma empresa privada, deixe claro que você tentou comprar/contratar o serviço e não conseguiu. Se isto chegar aos ouvidos dos interessados, eles irão escutar. A falta de compatibilidade é, em geral, descuido do desenvolvimento e vai fornecer aos tomadores de decisão os argumentos para discutirem com a equipe de TI.

Por fim, muito obrigado a CGU e a Anatel pela resposta ao problema. Apesar dos meses para a solução e do aviso de sua disponibilidade, sei que isto é, em parte, dos problemas do trâmite administrativo dentro de uma instituição pública. Porém, ainda assim, o prazo foi comparável ou até mais favorável do que o encontrado com diversos problemas de soluções de "referência" no mercado.