RedesAutonomasMontandoRedeAutonoma

De nuvem
Ir para: navegação, pesquisa

Página principal > Redes Autônomas (Felipe Fonseca e Vincenzo Tozzi-Brasil)

Montando uma Rede Autônoma

A analogia servidor/cliente, frequentemente usada para descrever a comunicação entre computadores, costuma levar a alguns equívocos de interpretação. O mais grave desses equívocos é as pessoas pensarem que seus próprios computadores só servem para acessar informação ou serviços disponíveis "na internet". A rede vira um não-lugar mistificado, uma espécie de ambiente espectral sem margens definidas onde as coisas acontecem de forma algo mágica. No entanto, toda rede tem uma materialidade: surge de processos que rodam em um ou mais computadores conectados. Esses processos compõem o que podemos chamar serviços de rede. A maioria desses serviços se baseia em uma arquitetura distribuída fundada em protocolos livres e abertos, o que significa que no limite qualquer computador ou dispositivo conectado em rede é um servidor em potencial. Isso também quer dizer que qualquer rede local, mesmo que não esteja conectada à internet, pode hospedar diversos serviços de armazenamento, compartilhamento e circulação de informação.

Este tutorial tem por objetivo demonstrar algumas dessas possibilidades, com especial ênfase na criação de serviços de rede locais com o uso de software livre. Supomos que você tenha uma familiaridade básica com o terminal de linha de comando. Vamos tratar de alguns cenários específicos:

  • Transformar um computador em servidor local a partir do sistema operacional Ubuntu Linux (ou qualquer outro sistema operacional, com as devidas adaptações).
  • Criar uma rede local autônoma, utilizando um sistema operacional alternativo (dd-wrt) no roteador.
  • Explorar possibilidades de sincronização de arquivos em diferentes redes.

1. Transformando seu computador em um servidor

São inúmeros os serviços que podem ser implementados em uma rede local. Vamos tratar aqui dos que nos parecem ter um maior potencial para utilização em uma rede autônoma. Partimos do princípio de que você está em um computador rodando Ubuntu Linux. Para fazer essas primeiras configurações, você precisará uma conexão à internet, ou então de acesso a um repositório local. Uma vez que os serviços estejam configurados, a internet não será mais necessária. Também estamos considerando que já existe uma rede local, conectada a um hub ou roteador, para que outras pessoas possam acessar os serviços.

Antes de começar, rode o comando abaixo para atualizar seus repositórios:

$ sudo apt-get update

Costumamos também instalar alguns softwares como o Aptitude para facilitar a instalação de outros softwares, o SSH para acessar remotamente o computador via linha de comando e alguns softwares que podem ser úteis para monitorar e diagnosticar a rede.

$ sudo aptitude install aptitude ssh nmap iptraf wavemon

O computador vai baixar, instalar e configurar esses softwares. Você não precisa fazer mais nada.

1.1. Servidor LAMP

A web, ou WWW, é um dos mais versáteis serviços de rede, e justamente por isso foi uma das maiores responsáveis pela popularização da internet. Permite que se disponibilizem arquivos que podem ser acessados por qualquer navegador de internet (como o Firefox, Chrome e outros). A web baseia-se em uma linguagem estruturada chamada HTML. O servidor web mais utilizado no mundo é um software livre e aberto chamado Apache. Sua funcionalidade pode ser expandida de forma virtualmente infinita com softwares adicionais como o interpretador de hipertexto PHP e o servidor de banco de dados MySQL (esse conjunto de softwares é conhecido como LAMP - linux, apache, mysql, php). Vamos começar instalando esses softwares.

$ sudo aptitude install apache2 php5 php5-mysql mysql-server

Finalizada a instalação, você pode verificar se tudo deu certo abrindo o Firefox ou outro browser, clicando na barra de endereços dele e digitando "http://localhost" ou o IP de sua máquina (descubra o IP pelo terminal, digitando "ifconfig"). Normalmente, você será direcionado a uma página dizendo que a instalação deu certo, como "It works" ou algo parecido.

A partir do servidor LAMP, uma infinidade de serviços podem ser utilizados. Alguns exemplos são diversos sistemas livres de gestão de sites. Entre os mais conhecidos, estão:

Outros sistemas interessantes pela versatilidade ou porque usam poucos recursos do servidor são:

Alguns desses sistemas necessitam configurações específicas do seu servidor LAMP (bibliotecas adicionais como php5-gd ou módulos como o mod_rewrite). Consulte a documentação dos sistemas a esse respeito.

1.2. Servidor uPNP/DLNA

O uPNP e o DLNA são um tipo de serviço web que permite o compartilhamento e a reprodução de arquivos multimídia. Novas gerações de televisores, videogames e outros aparelhos já trazem clientes uPNP instalados. Smartphones também contam com aplicativos específicos para acessar conteúdo via uPNP. Vamos usar o ushare para montar uma espécie de biblioteca multimídia baseada em uPNP no Linux.

$ sudo aptitude install ushare

São necessárias algumas configurações "manuais", no arquivo /etc/ushare.conf

$ sudo gedit /etc/ushare.conf

No editor, insira um nome para a biblioteca.

USHARE_NAME=nuboteca

Especifique também qual é a interface de rede pela qual o servidor se conecta. O padrão é eth0, a placa de rede física. Aqui na Nuvem, usei a placa wifi wlan0:

USHARE_IFACE=wlan0

Também é necessário informar onde os arquivos de mídia estão armazenados. No nosso caso, é:

USHARE_DIR=/home/zasf/zasf

Salve o arquivo e depois reinicie o servidor:

$sudo service ushare restart

1.3. Servidor de bate-papo

O IRC foi um dos primeiros formatos de bate-papo via internet a se popularizar. Por usar pouca banda de transferência de dados, funciona muito bem em lugares com conexão lenta ou instável. Os servidores de IRC também costumam exigir pouco processamento e memória, e podem ter suas funcionalidades estendidas com chatbots e outros softwares. Vamos usar o ngircd como servidor:

$sudo aptitude install ngircd

Ele já funciona por padrão, mas é interessante personalizar algumas opções, editando o arquivo de configuração.

$gksudo gedit /etc/ngircd/ngircd.conf

Vamos mudar o nome da rede, que precisa ter um ponto no meio:

Name = nuboteca.local

E também as informações de Admin:

AdminInfo1 = Nuvem
AdminInfo2 = Nuvem.tk
AdminEMail = nuvem@nuboteca

Também é interessante uma descrição sobre o servidor IRC.

Info = Servidor IRC da Nuvem

Salve o arquivo de configuração.

O ngircd tem também o MOTD (frase do dia), uma mensagem de boas-vindas aos usuários, que pode ser editada assim:

$ gksudo /etc/ngircd/ngircd.motd 

Depois de salva a configuração, reinicie o servidor:

$ sudo service ngircd restart

Para testar o servidor IRC, instale algum cliente em sua máquina. O irssi, por exemplo, roda em linha de comando:

$ sudo aptitude install irssi
   

Já o Xhat funciona em modo gráfico:

$sudo aptitude install xchat

Testando: abra o software cliente de IRC. Vamos começar conectando ao servidor IRC. Digite:

/server localhost

Entre em uma sala de teste, digitando simplesmente

/join #teste

Qualquer outra pessoa em sua rede local já pode entrar no servidor IRC, trocando o endereço do servidor localhost pelo seu número de IP. Existem clientes de IRC para virtualmente todas as plataformas de computação. Além dos já citados para GNU/Linux, há o KVIrc para Mac OS e o próprio Xchat para Windows.

1.4. Rádio online

O Icecast é um software de stream multimídia, que pode ser usado para transmissões ao vivo de áudio ou vídeo. Instale o servidor com:

$sudo aptitude install icecast2

A configuração do Icecast fica em um arquivo XML. Vamos editá-la:

$gksudo gedit /etc/icecast/icecast.xml

É bom mudar as senhas que vêm por padrão:

<source-password>novasenha</source-password>
<relay-password>novasenha1</relay-password>
<admin-user>admin</admin-user>
<admin-password>novasenha2</admin-password>

Mude também o hostname para coincidir com o nome de seu computador:

<hostname>nuboteca</hostname>

Em geral, não é necessário criar uma configuração complexa com nomes de usuário acessados a transmissões específicas. Se for necessário, consulte os comentários no próprio arquivo de configuração, na seção <mount>.

Depois de salvar o arquivo de configuração, reinicie o servidor icecast com

$sudo service icecast2 restart

O Icecast possui uma interface web, acessível pelo browser em http://localhost:8000.

A transmissão via Icecast exige softwares específicos. Alguns exemplos são o darkice (em linha de comando, muito leve), darksnow (interface gráfica simples) e idjc (solução mais complexa, com gerenciamento de playlists e outros recursos). Consulte os tutoriais publicados pelo estudiolivre sobre a transmissão via Icecast: Darksnow+Darkice, IDJC

O Icecast também pode ser usado para transmissão de vídeo. Para isso, utilize algum software como o Theorur: http://theorur.sarava.org

1.5. Outros serviços

Com os softwares citados acima, já temos um pacote de serviços de rede bastante abrangente: web, acesso a acervo multimídia, bate-papo e transmissão ao vivo. Havendo interesse podem ser implementados muitos outros sistemas, como o editor colaborativo de documentos Etherpad, o gerenciador e reprodutor de música MPD, o servidor de telefonia sobre IP Asterisk, etc. O interessante é que esse conjunto de serviços seja adequado às necessidades locais da rede.

2. A rede local

Como mencionado antes, a internet se estrutura a partir de uma série de protocolos abertos que lhe garantem uma arquitetura distribuída. O mais importante entre eles é o Conjunto de Protocolos da Internet, conhecido como TCP/IP. Ele é composto de duas partes: o TCP (Protocolo de Controle de Transmissão)e o IP (Protocolo Interredes). O TCP divide em pequenos pacotes de dados a informação a ser transmitida entre computadores, enquanto o IP realiza a identificação, localização e entrega desses dados. Qualquer situação que envolva a conexão de um ou mais computadores a uma rede local ou à internet se baseia na atribuição de endereços IP a cada equipamento envolvido. Quando seu computador está em uma rede ele recebe um endereço IP, uma sequência de quatro séries de números como 192.168.10.108, por exemplo. Esse é o endereço de seu computador na rede, a maneira pela qual os outros computadores podem encontrá-lo. O roteador ou o modem também têm seus próprios endereços IP, e é dessa forma que seu computador vai enviar e receber dados da internet. O mesmo se repete com os IPs em uma rede local: cada computador tem um endereço IP, através do qual os outros computadores podem encontrá-lo.

Voltemos à nossa experiência com um servidor local. Uma vez instalados os serviços em alguma máquina, eles podem ser acessados diretamente pelo IP daquela rede desde qualquer outra máquina. Por exemplo, se o IP da máquina é 192.168.10.10, é esse endereço (http://192.168.10.10) que você vai digitar no navegador de internet em qualquer outra máquina da rede para acessar o servidor LAMP dela. Da mesma forma, é esse IP que você vai usar para se conectar pelo seu cliente de IRC (/server 192.168.10.10) e para verificar pelo navegador se existe alguma transmissão acontecendo pelo Icecast (http://192.168.10.10:8000).

2.1. DNS

O conjunto de protocolos TCP/IP funciona muito bem entre máquinas, porque assegura que a informação seja transferida do computador X para o Y. Mas para humanos ele tende a ser muito complexo. Seria muito trabalhoso se, por exemplo, precisássemos decorar o endereço IP de cada site que costumamos acessar. Inicialmente, quando os servidores conectados em rede eram em relativamente poucos, se resolvia essa situação com o arquivo HOSTS.txt. Era um arquivo de texto simples, contendo um atalho legível para cada um em uma lista de servidores do mundo inteiro. Quando um computador se conectava à internet, ele baixava a versão mais recente do arquivo HOSTS de um servidor predeterminado. Até hoje, grande parte dos sistemas operacionais ainda conta um arquivo HOSTS local. Com a gradual multiplicação dos servidores na internet, entretanto, essa solução se comprovou inviável, porque dependia em demasiado de um único ponto. Para estabelecer uma solução escalável, foi criado o Sistema de Nomes de Domínio (DNS. Ele atribui a cada endereço IP um atalho legível, com base em uma convenção internacional gerenciada pela Corporação de Nomes e Números Atribuídos da Internet (ICANN). A estrutura de nomes de domínio atribui um código para cada país, e subcódigos para tipos de sites. Por exemplo, sites brasileiros podem usar domínios terminados em .br, chilenos terminam em .cl, espanhóis em .es e por aí vai. Da mesma forma, um site comercial pode usar um domínio terminado em .com.br, enquanto um blog pode usar um endereço .blog.br. São definições algo arbitrárias: para garantir sua confiabilidade, o sistema DNS tem uma estrutura hierárquica que precisa ser definida em consenso entre diversos atores institucionais. Ainda assim, usar o sistema DNS é mais fácil do que memorizar cada IP, além de oferecer outras vantagens.

No caso de uma rede autônoma, a utilização de endereços IP pode funcionar em determinados contextos. Entretanto, se a ideia é envolver pessoas que não tenham necessariamente um perfil técnico, trabalhar com o sistema DNS pode facilitar as coisas. Isso pode ser feito de várias formas. Antes de mais nada, precisamos nos assegurar de que o servidor sempre vai utilizar o mesmo IP. Isso é chamado "IP estático", em oposição ao "IP dinâmico" (quando o computador pede um endereço IP ao roteador e recebe um endereço aleatório a cada vez que se conecta). O IP estático pode ser configurado manualmente no servidor, ou então pode-se configurar o roteador para sempre atribuir a ele o mesmo endereço IP. É necessário saber de antemão algumas informações da rede local, como faixa de IPs normalmente utilizada, endereço do gateway (o computador ou roteador que faz a conexão com a internet) e máscara de rede. Aqui na nossa rede local, sabemos que o roteador costuma atribuir endereços IP na faixa 192.168.10.*, que o gateway é 192.168.10.1 e a máscara de rede é 255.255.255.0. Vamos definir que o endereço do servidor é 192.168.10.10. Para isso, clicamos no ícone de redes (próximo ao relógio do sistema) e logo em "definições de rede". Escolha a opção "com fio" (supondo que o servidor está conectado ao roteador por um cabo de rede), "opções" e depois "configurações de IPv4". Em "método", escolha Manual. Em "endereços", clique em "adicionar" e digite 192.168.10.10 no endereço, 255.255.255.0 em máscara de rede e 192.168.10.1 no gateway. O servidor DNS geralmente é o mesmo do gateway, 192.168.10.1.

2.1.1. /etc/hosts

Como comentamos acima, mesmo com a adoção do sistema DNS, em geral todo computador ainda tem um arquivo HOSTS. A maneira mais simples de criar atalhos para endereços IP é mexendo na definição de HOSTS nas máquinas da rede local. Isso só funciona em redes pequenas, com poucos computadores fixos. É uma solução adequada para laboratórios de informática em escolas, para telecentros e lan houses.

No caso do GNU/Linux, o arquivo fica em /etc/hosts. Vamos dizer que queremos atribuir o atalho "nuboteca" ao computador que utiliza o endereço 192.168.10.10. Para isso, precisamos ir a cada uma das máquinas da rede e editar o arquivo.

$gksudo gedit /etc/hosts

Adicione a seguinte linha em algum lugar do arquivo:

192.168.10.10	nuboteca

E pronto. Nesse computador, você já deve conseguir acessar o servidor simplesmente usando o atalho "nuboteca". Para testar, abra o navegador de internet e digite "http://nuboteca" no endereço.

2.1.2. DNS

Em redes mais dinâmicas, às quais diferentes pessoas se conectem com seus computadores, smartphones ou tablets, configurar o arquivo hosts em todos começa a ficar complicado. A solução é recorrer ao DNS. A configuração de DNS costuma ser complexa, mas existe um software chamado DNSmasq que aplica regras locais antes de encaminhar chamadas de DNS para um servidor de nomes propriamente dito. Em outras palavras, ele permite criar uma lista de nomes a endereços de IP específicos dentro de uma rede local. Os nomes podem ser definidos pelo próprio DNSmasq, ou pelo nome particular de cada máquina. Todos os pedidos de endereços que não estejam nessa lista de nomes são encaminhados a um servidor de DNS.

Não vamos detalhar a configuração do DNSmasq em um servidor local, porque isso envolveria de qualquer forma modificar a configuração do roteador que informa aos computadores que se conectam qual é o servidor DNS indicado pela rede local. Isso pode ser feito, mas optamos por aprofundar as mofidicacoes ao roteador, na próxima seção. Quem preferir trabalhar com o DNSmasq no próprio servidor local pode checar a documentação do próprio software.

2.1.3. Roteador

Os roteadores usados corriqueiramente para conectar redes locais à internet têm frequentemente um grande potencial que é limitado artificialmente. Em outras palavras, são equipamentos que permitem fazer muito mais do que seus fabricantes permitem. Para habilitar essas possibilidades, existem sistemas operacionais (também chamados de firmwares) alternativos. Os mais conhecidos são o OpenWRT e o DD-WRT. Aqui vamos trabalhar com o DD-WRT. Não é qualquer roteador que permite a instalação de firmware alternativo, então recomendamos verificar a compatibilidade no site do DD-WRT.

Os roteadores que utilizamos aqui na Nuvem eram da marca TP-Link, modelo WR743ND. Depois de encontrar na internet e baixar o arquivo de instalação do DD-WRT, tratamos de instalá-lo no roteador. Abrimos o painel de administração (no nosso caso, disponível pelo navegador de internet no endereço http://192.168.1.1), e lá encontramos a opção de atualização de firmware. Escolhemos o arquivo, fizemos o upload e pronto.

Depois de um ou dois minutos reiniciando, o roteador já criou uma nova rede wifi, aberta. Conectamos por cabo para acessar o novo painel de controle (no mesmo endereço acima). Na guia Setup, modificamos o nome do roteador e seu hostname. Na guia Wireless, definimos as configurações da rede sem fio (no nosso caso, uma rede sem criptografia chamada NuvemNuvem). Na guia Services, habilitamos as opções "DNSMasq", "Local DNS" e "No DNS Rebind". Depois de salvar e aplicar as configurações, a rede já estava devidamente configurada. O roteador passou a atribuir o hostname (nome particular de cada computador) como atalho de IP via DNS. Dessa forma, nosso servidor já pode ser acessado dentro da rede simplesmente com o nome "nuboteca".

No caso em que não haja acesso à Internet "real", é muito comum querer que todos as tentativas de ver sites sejam direcionados para o nosso servidor. Assim, uma pessoa tentando acessar http://nytimes.com ou http://google.com ou qualquer outro site, será direcionado para http://nuboteca. Para isso, basta uma linha de configuração do dnsmasq no servidor:

address=/#/nuboteca

O # representa qualquer site, e nuboteca é o endereço para qual os pedidos são redirecionados.

Uma consequência não muito desejável desse redirecionamente é que o browser continua com o endereço pedido, ou seja, mesmo ao navegar a nuboteca, o endereço na caixinha de endereços continua como http://google.com. Para resolver isso, a página index.html - onde vão parar todos os pedidos - faz um redirecionamento imediato para http://nuboteca/index.php. Assim o endereço no browser passa a ser http://nuboteca/ Abaixo está o código usado no arquivo index.html

 
<html>
<header>
<meta http-equiv="refresh" content="0;url=http://nuboteca/index.php"> 
</header>
<body>
Você está sendo redirecionado...
</body>
</html>


—-

TODO: Rede verdadeiramente autônoma com Modo AP. Mesh + OSLR. Ressalvas e limitações.