Discuta este tópico no fórum

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

quarta-feira, 1 de fevereiro de 2012

OpenWRT: Multiplique suas redes: MultiLAN com VLAN

Mais um artigo da série sobre o OpenWRT.

No artigo anterior, comentei sobre o uso de múltiplas redes wireless. Hoje, vou falar sobre múltiplas redes LAN.

Em geral, os roteadores possuem duas interface de rede cabeadas: LAN e WAN. A primeira representa as portas da rede local, normalmente umas 4 ou 5 delas. A segunda é utilizada para a conexão ao enlace superior, o que normalmente é a sua conexão com a Internet. Na figura abaixo, a porta azul é a WAN, enquanto as amarelas são para a conexão LAN.


Neste roteador com OpenWRT, a eth0 "representa" o acesso as várias portas da rede local (as amarelas). Fazendo uma analogia com um computador, o que existe "dentro da caixa" é um switch de 4 portas externas e uma interna (chamada CPU), sendo esta interna conectada à interface eth0.  A eth0, por padrão, é agregada com a interface wireless, wlan0, para que as duas redes troquem pacotes. Tudo isto já comentei anteriormente. A figura seguinte ilustra aproximadamente esta "rede interna".


Este arranjo também muda de equipamento para equipamento. Tem casos onde a porta WAN está neste switch e eth1 não existe, outros a wireless é eth1 e assim por diante.

Como qualquer interface de rede no OpenWRT, a sua finalidade pode ser reajustada de acordo com a necessidade do administrador. Caso não fosse necessário a conexão com a Internet, como no caso de um access-point, a interface eth1 poderia ser anexada junto na interface LAN, operando como uma quinta porta local. Porém, o mais interessante não é juntar as interfaces mas sim, dividi-las.

Se seu roteador suportar o recurso de VLAN (olhe a coluna VLAN no site do OpenWRT), você poderá dividir estas portas em redes isoladas. VLAN é uma tecnologia de Virtualização de Redes Locais. Ela foi criada para que o isolamento entre duas redes pudesse ocorrer dentro de um switch e não exigir toda uma estrutura em paralelo. Assim, parte das portas de um switch podem pertencem a uma rede enquanto outras pertencem a uma segunda rede, sem comunicação entre elas. A troca de pacotes entre as redes é intermediada por um roteador, que pode controlar quem troca que pacotes com quem.
Dica: recomendo que as configurações do switch interno sejam feitas pela rede wireless, uma vez que esta não participa do switch. Assim, será mais difícil que uma mudança de configuração resulte em falta de conectividade.
Para configurar, vá para a configuração de rede, switch. Se não estiver habilitado, habilite o recurso de vlan. Você notará que já existe uma vlan 1 com todas as portas marcados como "não etiquetadas/not tagged". O que é esta etiqueta? Vou tentar explicar em poucas linhas.

VLAN são identificadas por um número único na rede local, chamado de VLAN ID. A VLAN padrão nos diversos equipamentos de rede no mercado é a de número 1. As outras, 2, 3, etc, são criadas de acordo com a necessidade do administrador.

As portas do switch podem estar em 2 estados básicos: pertencer a uma VLAN (estado "não etiquetado") ou não pertencer a uma VLAN (estado "desligado"). O primeiro, "não etiquetado", faz com que a porta envie e receba pacotes da VLAN correspondente. Cada porta pode estar presente em apenas uma VLAN para não misturar os tráfegos. Se selecionar para uma mesma porta duas VLANs como "não etiquetadas", a configuração não irá salvar e você receberá uma bela mensagem de erro. O outro estado, como o nome sugere, informa que esta porta está "desligada" da VLAN.

E quanto a esta "etiqueta"? A limitação de uma VLAN por porta não resolve todos os problemas. Porém, as VLANs não podem se "misturar" em uma mesma porta. Para resolver este problema, foi criada as etiquetas (tags) do protocolo 802.1Q. As etiquetas, nada mais são que um envelope envolvendo o pacote IP e informando de qual VLAN aquele pacote pertence. Assim, os pacotes da VLAN marcada como "etiquetado" recebem uma camada extra com o ID da VLAN de destino enquanto os "não etiquetado", onde a VLAN é chamada de VLAN nativa, são enviados normalmente pela rede.

Temos então 3 opções:
  • "desligado" significa porta não está naquela VLAN;
  • "não etiquetado" significa porta está naquela VLAN e somente nesta;
  • "etiquetado" significa porta está naquela VLAN mas todos os pacotes vindo desta ou destinados para ela serão envolvidos em um envelope.
Este "envelope" faz com que os sistemas operacionais e demais equipamentos de rede não reconheçam-no como um pacote IP normal. Contudo, tantos os switches e roteadores como os sistemas operacionais tem suporte, quando configurado, para interpretar estas etiquetas. 

Vamos então a um exemplo simples onde 2 das quatro portas serão configuradas para uma outra rede. Ainda em rede, switch, crie uma nova VLAN. O número não importa muito, desde que seja único na rede. Nesta nova VLAN, marque a porta CPU como "etiquetado/tagged", e as portas 3 e 4 como "não etiquetado/not tagged". Como somente uma VLAN pode ter a porta como "não etiquetado", configure as portas 3 e 4 na VLAN 1 como "desligado". Aplique as configurações. Isto irá criar uma nova interface, eth0.2, onde 2 é o ID da VLAN. Ela pode ainda estar abaixada mas já vamos resolver isto. E a porta 5? Todas as configurações que eu fiz nela foram inócuas. Pela pesquisa que eu fiz, é uma porta de gerenciamento.

Agora precisamos criar uma nova interface para esta rede. Vá para "Rede" e "Interfaces" e adicione uma nova interface. Você irá notar que existe uma nova interface chamada de "Interface VLAN: "eth0.2"". Selecione ela e configure a sua nova interface como desejar. Só não esqueça de utilizar uma faixa de endereços independente das demais interfaces. Ajuste o firewall "a gosto".

Agora que já passamos pelo MultiWLAN e MultiLAN, no próximo artigo vou comentar como criar uma MultiWAN, com balancemento de carga e redundância entre diversas conexões com a Internet.

Até mais.

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 tempo. Poré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.