Tuesday, June 9, 2009

Criando uma LAN com VirtualBox

Criando uma LAN com VirtualBox


Este post ensina a criar uma pequena LAN utilizando um único computador, rodando GNU/Linux, com três máquinas virtuais sobre o VirtualBox. Claro que para isso o computador deve ter um bom processador e uma quantidade aceitável de memória. Acredito que com 1GB ou 2GB já é possível criar essa LAN de máquinas virtuais.

Algumas considerações iniciais:
- Para esse experimento foi utilizado o VirtualBox 2.2.4 em Ubuntu Desktop 9.04 (Jaunty Jackalope) - Este é o Host.
- Esta versão de VirtualBox já possui suporte facilitado para bridges virtuais, o que torna prático o trabalho de criação de uma rede local interna.
- Admite-se o uso da distribuição Ubuntu em todo experimento, mas não deve ser difícil utilizar uma distribuição diferente para o mesmo experimento.
- Não são abordadas as instalações dos SOs das máquinas virtuais, apenas as configurações.
- Os comandos descritos devem ser digitados dentro de um terminal (gnome-terminal, por exemplo).
- Admite-se que se tenha conhecimentos básicos de SO, Redes, Linux e algumas ferramentas como VIM, por exemplo.

Configurando as máquinas virtuais.
No VirtualBox foram criadas 3 máquinas virtuais:
- Guest 1: Servidor, Ubuntu Server 9.04.
O guest 1 será um roteador (gateway para os demais guests) e servidor de alguns serviços básicos de rede.
Para o guest 1, foram configuradas duas placas de rede:
Adapter 1 ativada em NAT.

Adapter 2 ativada em Internal Network, name virtualNetwork.


- Guest 2: Cliente, Windows XP.
Adapter 1 ativada em Internal Network, name virtualNetwork.


- Guest 3: Cliente, Ubuntu Desktop 9.04.
Adapter 1 ativada em Internal Network, name virtualNetwork.


Depois de configuradas as máquinas virtuais, a rede ficará assim:


Configurando o Guest 1.
Depois do boot do guest 1 é possível observar que apenas a interface eth0 (externa) é configurada.
$ifconfig

Passo 1: Configurando a segunda interface para IP estático.
$sudo vim /etc/network/interfaces

Passo 1.1:Adicione as seguintes linhas no final do arquivo, salve e feche o arquivo.
# The second network interface
auto eth1
iface eth1 inet static
address 192.168.10.1
netmask 255.255.255.0

Passo 2: Reiniciando as configurações de rede.
$sudo /etc/init.d/networking restart

Passo 3: Ativando o roteamento (eth0 <-> eth1).
$sudo echo "1" > /proc/sys/net/ipv4/ip_forward

Passo 4: Configurando tradução de endereços para rede interna.
$sudo iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j MASQUERADE

Os passos 3 e 4 alteram tabelas dinâmicas do sistema e devem ser executados toda vez que guest 1 for inicializado.
Dica: Criar um script que execute os passos 3 e 4 automaticamente. Crie um script chamado configRouter.sh e coloque-o em /etc/rc.* (* depende do seu modo de inicialização).
#! /bin/bash
# ativando roteamento
echo "1" > /proc/sys/net/ipv4/ip_forward
# configurando tradução de endereços para rede interna
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j MASQUERADE

Alterando permissão de execução do script.
$sudo chmod 744 configRouter.sh

Executando o script.
$sudo ./configRouter.sh

Configurando o Guest 2.
Passo único: Configure a Conexão Local do Windows XP para
Endereço IP: 192.168.10.2
Máscara de sub-rede: 255.255.255.0
Gateway Padrão: 192.168.10.1
Servidor DNS preferencial: 208.67.222.222
Servidor DNS alternativo: 208.67.220.220

Observe que o gateway padrão é o Guest 1.
Os endereços de servidores DNS utilizados são os endereços do OpenDNS (www.opendns.com). Para mais informações visite o site.

Configuração o Guest 3.
Passo 1: Configurando a primeira interface para IP estático.
$sudo vim /etc/network/interfaces

Passo 1.1: Adicione as seguintes linhas no final do arquivo, salve e feche o arquivo.
# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.10.3
netmask 255.255.255.0
network 192.168.10.0
broadcast 192.168.10.255
gateway 192.168.10.1

Passo 2: Configurando os servidores DNS.
$sudo /etc/resolv.conf

Passo 2.1: Adicione as seguintes linhas no final do arquivo, salve e feche o arquivo.
nameserver 208.67.222.222
nameserver 208.67.220.220

Passo 3: Reiniciando as configurações de rede.
$sudo /etc/init.d/networking restart

Agora basta fazer alguns testes de conectividade. É isso!
Um abraço.

Monday, June 1, 2009

DDNS-client atrás de NAT

DDNS no Linux
O serviço DDNS, além de gratuito, é uma ótima alternativa para quem deseja ter um domínio, mas não dispõe de um IP fixo.
Grande parte dos usuários domésticos requisita um novo IP a cada nova conexão com seu ISP. Sendo assim, um serviço de DNS que permita ao cliente atualizar suas entradas no DNS sempre que uma nova conexão com a Internet é estabelecida é bastante legal. Eis que surge o DDNS.
O endereço do serviço no site do fabricante é http://www.winco.com.br/ddns/
Lá podem ser encontradas várias informações sobre o serviço, bem como os clientes para sistemas operacionais Windows e Linux.
Os clientes para Windows são ótimos e bem completos. No entanto, o mesmo não ocorre para os clientes em Linux.
Os clientes para Linux são textuais e bem pouco intuitivos. Além do mais, existem apenas 2 casos de uso no site que, ao meu ver, não cobrem o caso de grande parte dos usuários: Um computador com Linux (cliente) atrás de um NAT (realizado num router DSL, por exemplo).
Dessa forma, criei um tutorial, baseado naqueles disponíveis no site do fabricante, que ensina como modificar o cliente em Linux para o que eu chamo de caso 3.

Caso 3: Não possui endereço IP Fixo e ESTÁ atrás de um NAT.

Lembrando que o IP resolvido será o seu IP externo dinâmico, então, cuidado com as configurações do seu router DSL ;)
1) Os programas de DDNS devem ser instalados no diretório /usr/local/sbin. Se esse diretório não existir, ele deve ser criado. Após a criação do mesmo, execute o comando:

$cd /usr/local/sbin

$tar zxf ddns-linux-1.0.tgz

2) Edite o arquivo /usr/local/sbin/ddns.sh e configure as seguintes linhas:
DOMINIO="seudominio.winconnection.net" #Seu end. DDNS (ex.: meuendereco) ou "seudominio.ddns.com.br" #Seu end. DDNS
SENHA="xxxxxxxxxx" #A sua senha para o domínio
INTERFACE="ppp0" #Coloque aqui o endereco correto da interface de rede Ex.: ppp0, eth0, etc

ALTERAÇÃO SUGERIDA -> Procure as seguintes linhas no arquivo ddns.sh
#Vamos ver se o endereco mudou
${BINDIR}/getip $INTERFACE > ${TMPDIR}/ddns.ip.new

Apague ou comente a linha "${BINDIR}/getip $INTERFACE > ${TMPDIR}/ddns.ip.new". Para comentar a linha basta colocar um "#" antes do início da linha.

Adicione a seguinte linha no lugar da linha apagada ou abaixo da linha comentada.
html2text http://checkip.dyndns.org | cut -c21-35 | tail -1 > ${TMPDIR}/ddns.ip.new

O resultado deste trecho será algo assim:
#Vamos ver se o endereco mudou
#${BINDIR}/getip $INTERFACE > ${TMPDIR}/ddns.ip.new
html2text http://checkip.dyndns.org | cut -c21-35 | tail -1 > ${TMPDIR}/ddns.ip.new

Eu prefiro comentar as linhas que não usarei como forma de backup. Caso algo dê errado, é possível voltar ao estado anterior.

3) Crie as seguinte entradas no crontab do root (usando crontab -e ) da seguinte forma:

*/1 * * * * /usr/local/sbin/ddns.sh

0,30 * * * * /usr/local/sbin/ddns-refresh.sh

Pronto. O DDNS For Linux está pronto para ser usado.

Para verificar se tudo deu certo, execute em um terminal:
$ nslookup seudominio.ddns.com.br

Espero que seja útil.
Um abraço.