Discuta este tópico no fórum

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

sexta-feira, 30 de março de 2012

OpenWRT: Balanceamento entre múltiplas conexões com a Internet

Mais um artigo da série sobre o OpenWRT. Neste artigo trato do uso de múltiplas conexões com a internet.

A internet é cada vez mais um recurso indispensável para o nosso dia a dia. Hoje, o computador muito mais um "terminal de acesso" do que um equipamento para executar programas locais. Tudo muito bom, tudo muito bem, até que, um belo dia, alguém chuta um cabo, pisa na fibra, cava um buraco... Uma das formas de mitigar os problemas de conexão com a internet é a utilização de múltiplas conexões com a internet, preferencialmente com infraestrutura e provedores independentes.

O uso de múltiplas conexões com a Internet (WAN) ainda não é muito comum em residências (exceto por alguns maníacos por download que conheço). Contudo, quando o número de clientes aumenta um pouco, o custo de ficar sem internet se torna muito maior do que o custo da contratação de uma conexão sobressalente com a internet. Principalmente em ambientes corporativos e internet em condomínios, a redundância já é a regra.

Existe soluções de mercado para implementar a redundância, algumas até com um custo bem interessante. Porém, ao invés de comprar um produto próprio, porque não utilizar o mesmo roteador que já roda o OpenWRT? Vale lembrar que não é muito recomendado usar um roteador de uso residencial para uma grande empresa. Nada contra o OpenWRT, que aguentaria a carga. O problema é a própria especificação do equipamento. Então, nada de colocar 1000 usuários no roteador de R$100, com alguns usuários de torrent. Provavelmente não vai ter memória suficiente.

O gerenciamento de múltiplas conexões é feito pelo programa no pacote multiwan. Existe também a opção do módulo da interface web para facilitar a configuração no pacote luci-app-multiwan que já instala como dependência o pacote anterior. Só instalar como é feito com qualquer outro pacote.

Um dos primeiros problemas para implementar o MultiWAN é o número de interfaces. Caso o roteador possua uma USB, pode-se utilizar um modem 3g para a segunda conexão. Normalmente, os roteadores possuem 3 interfaces: 1 porta de WAN, múltiplas portas para LAN e a rede sem fio. Como, em geral, é necessário conectar um cabo diretamente ao equipamento, o número de interfaces é insuficiente. Mas, como já escrevi anteriormente, se o roteador suportar, podemos dividir as portas LAN em redes isoladas e aproveitar cada uma das portas para a conexão com um provedor diferente.
Nota: Em alguns roteadores o recurso de VLAN é usado, por padrão, para separar as LAN das WAN. Um exemplo seria o TL- WR1043ND, onde a porta WAN e as LAN estão fisicamente em um mesmo "switch" e a separação é feita utilizando o recurso de VLAN.
Para balancear entre duas conexões com a internet e ainda manter o uso das demais portas locais é necessário separar uma das portas da LAN e configurá-la como uma nova interface. O mais comum, neste caso, é usar o nome WAN2 para esta nova interface (usar este nome vai facilitar mais adiante). Conecte o cabo e configure a nova interface WAN2, assim como também é feito para a WAN "original". Lembre-se de definir a zona do firewall para esta interface, em geral, zona wan.

No módulo de configuração da MultiWAN em "Rede/Multi-WAN", deve existir uma entrada para cada interface WAN. Se você manteve o padrão WAN e WAN2, ele já virá pre-configurado. Caso contrário, remova as configurações que não casam com o nomes de interface WAN e adicione novas configurações correspondentes.

Um ponto importante é definir qual método será utilizado para decidir que uma conexão está inoperante. O mais comum é "pingar" um servidor DNS externo, como o DNS do google (8.8.8.8 e 8.8.4.4). Alternativamente, pode ser testado a conectividade com o roteador da WAN que, na teoria, ficaria dentro da infraestrutura do provedor. Porém, este último não notaria uma falha mais sistêmica do provedor onde, apesar de não perder conexão na última milha com usuário, a saída deles para a internet está inoperante.

Existe dois métodos de distribuição da carga: Fast Balancer (melhor distribuição) e Load Balancer (melhor compatibilidade). Teste cada método para verificar o que se enquadra melhor para o seu caso. O primeiro utiliza recursos do firewall enquanto o segundo regras de roteamento.

Mas nem tudo são flores. Algumas páginas, principalmente de bancos, páginas com cookies, SSL, e-commerce são sensíveis a troca do endereço IP do cliente. Nestes casos, é bom criar exceções (no final da página de configuração da MultiWAN) definindo um outro algoritmo de balanceamento ou mesmo fixando a saída por uma interface. Enviar todo o HTTPS para um canal também pode ser útil.

Explore um pouco os parâmetros disponíveis para fazer o ajuste fino de suas configurações. Depois disto, basta ativar, salvar e aplicar.

Se for partir para o "modo texto", recomendo as páginas sobre o MultiWAN presentes na wiki do projeto.

Se quiser testar o MultiWAN mas não tem o privilégio de ter duas conexões WAN, pode similar as duas conexões usando um segundo roteador. Este segundo roteador pode fornecer conectividade internet por duas redes como, por exemplo, (192.168.1.0/24) e  (192.168.2.0/24) e o seu roteador de teste usar ambas como saída para a internet. Ele nem vai notar que são duas redes falsas.

Abraço pessoal,

sábado, 24 de março de 2012

OpenWRT: Túneis e Proxy na sua Casa ou "Escapando do Big Brother"

Mais um artigo da série sobre o OpenWRT. Este vai ser um artigo não diretamente um recurso do OpenWRT mas o que você poderá fazer com ele.

Várias vezes fui questionado de qual seria a vantagem de instalar o OpenWRT se corro o risco de não dar certo e, além disto, perder a garantia. O grande diferencial do OpenWRT não são propriamente os recursos desenvolvidos pela comunidade OpenWRT, que já são muito melhores dos originais, mas a possibilidade de usar todos os recursos desenvolvidos para o ambiente Linux diretamente no seu roteador. Vou comentar neste artigo o uso de túneis e proxy SOCKS sobre um conexão SSH.

O SSH surgiu como um substituto seguro dos finados rlogin, rsh e telnet (ainda não muito morto). Ele é usado como uma das formas de gerenciar seu roteador, além da interface WEB. Porém, mais do que reimplementar as funcionalidades dos programas finados, o SSH foi além e acrescentou diversos recursos. Um dos mais interessantes, mas ainda pouco conhecidos, é a criação de túneis.

Os túneis ou encaminhamento de porta no SSH são como despachantes. Você indica onde quer conectar e ele abre a conexão para você. Para quem recebe a conexão, quem está conectando é o despachante e não você. Um bom exemplo de "homem do meio". O SSH pode criar túneis tanto do servidor para o cliente (-R) como do cliente para o servidor (-L). Na conexão com a opção "-L", uma porta local é aberta no computador cliente. Ao receber uma conexão nesta porta, o SSH solicita que o servidor conecte em um destino pré-definido e todo o tráfego fluindo por esta conexão trafegará pelo SSH. Para todos os casos, quem está efetivamente conectando ao destino é o servidor SSH e não a máquina cliente. A opção "-R" é simplesmente o inverso: o servidor abre uma porta local que, ao ser acessava, quem conecta ao destino é o cliente SSH.

Vamos a um exemplo simples. Suponha que você está em casa, sem camisa, na sua folga, tomando uma cervejinha e alguém liga do trabalho que uma conta de um usuário importante no banco de dados está bloqueada. Se você tiver um SSH dentro da empresa acessível pela internet, poderá resolver o problema antes de esquentar a cerveja:
computador-casa$ ssh usuario@servidor-ssh.empresa.net -L 6666:servidor-banco.intranet:5432
servidor-ssh$ 
Ao completar a autenticação, você receberá o shell de sempre. Porém, devido ao comando -L, o cliente SSH local abrirá uma porta local: a 6666. Você poderá verificar isto usando o netstat ou o ss. Aponte o cliente do banco de dados para conectar nesta porta local no computador local:
computador-casa$ psql -h localhost -p 6666 -U usuarioadm -W
Quando o cliente SSH rodando em computador-casa receber o pedido de conexão na porta 6666, ele solicitará ao servidor servidor-ssh.empresa.net que este conecte em servidor-banco.intranet na porta 5432. Tudo isto utilizando uma conexão cifrada entre o computador-casa e o servidor-ssh. Seu cliente de banco de dados vai achar que existe um servidor de banco de dados rodando na máquina local na porta 6666. O servidor de banco de dados vai achar que o servidor-ssh.empresa.net está conectando nele. Simples. Resolva o problema e volte para a cervejinha. 
Nota: se a solução for utilizar um cliente em modo texto, como o psql, normalmente faz mais sentido simplesmente rodar o psql no servidor-ssh ou conectar a partir deste em um computador que o tenha e conectar de dentro da própria rede.
Isto também pode ser usado para a WEB, usando a porta 80. Porém, as inúmeras referências externas do HTML, o uso de referências absolutas e servidores que utilizam virtualhosts baseados em nomes fariam com que esta técnica de tunelamento individual se torne improdutiva. Para sanar este problema, foi criada a opção "-D" para a criação de túneis dinâmicos, simulando um servidor SOCKS.

A opção "-D porta" cria um servidor SOCKS (protocolo de PROXY não específico para HTTP), no computador cliente, fazendo com que as conexões saiam pelo servidor SSH.  Isto funciona com a maioria dos servidores e clientes SSH, incluindo o dropbear presente no OpenWRT. Vamos ao exemplo.

Imagine que você deseja acessar no trabalho um endereço sem o conhecimento do administrador da sua rede local (desde que o administrador não seja eu). Supondo que você instalou o OpenWRT na sua casa e o SSH está liberado para acesso remoto, bastaria você executar:
computador-empresa$ ssh root@ip-do-meu-roteador -D 8888
Isto abrirá uma porta local 8888. Agora, basta configurar o seu navegador para utilizar um proxy SOCKS no endereço localhost:8888. Todas as suas requisições do navegador serão enviadas para o cliente SSH local, cifradas, enviadas ao seu roteador em casa e este sim acessará o site desejado. Simples e seguro. Como seu roteador também vê a rede interna, você pode utilizar o mesmo recurso para acessar um serviço na sua rede local (192.168.x.x). Tudo isto abrindo para a Internet no seu roteador apenas o serviço SSH.

Em geral, os bons programas tem suporte a usar um servidor SOCKS. Para os demais casos, você pode usar uma biblioteca/programa que intercepte as conexões e as envie ao servidor PROXY. Desta forma, funciona para quase todos os casos.

Claro, é bom lembrar que rastros ficam no computador cliente como logs, cache do navegador e essas coisas. Se o objetivo é ser "furtivo", deve tomar mais alguns cuidados.


Não é bem o caso mas, se seu cliente necessariamente é um Windows, o Putty também possui estes recursos de encaminhamento de porta e proxy.

Happy hacking...