terça-feira, 26 de julho de 2011

Criando túneis com o VTUN

Introdução

Nesse tutorial estarei abordando de forma prática a interligação de três redes distintas com utilizando o VTUN.

Cenário:
Redes separadas geograficamente:
192.168.1.0/24
192.168.2.0/24
192.168.4.0/24

*Obs: É necessário que as redes utilizem configurações de ips distintas, caso o contrário teremos posteriormente conflitos no roteamento e a comunicação não acontecerá.

Para esse tutorial:
Foram utilizados três servidores rodando uma versão do Ubuntu Server 11.04, com duas placas de redes uma para rede local e outra para a internet. No entanto esse tutorial pode ser adaptado para qualquer versão de Debian ou derivados.

Explicando:

O desenho abaixo representa uma topologia de VPN em estrela, dessa forma se qualquer um dos servidores ficarem fora do ar por algum motivo os outros continuará comunicando-se entre si normalmente.



Rede Matriz -> 192.168.1.0/24
Rede Filial1 -> 192.168.4.0/24
Rede Filial2 -> 192.168.2.0/24

Túnel 1 -> Liga a Matriz a Filial 1 (10.0.0.1 <>10.0.0.3)
Túnel 2 -> Liga a Filial 1 a Filial 2 (10.0.0.4 <>10.0.0.5)
Túnel 3 -> Liga a Filial 2 a Matriz (10.0.0.6 <> 10.0.0.2)


Configuração

Para instalar o vtun

# apt-get install vtun

Teremos três arquivos de configuração distintos. A Matriz apenas irá rodar o vtun em modo servidor, ou seja irá aceitar as conexões da Filial1 e Filial2.

Vejamos o arquivo de configuração da Matriz:

#Configuracao Matriz

#Configuracao Matriz (10.0.0.1 / 10.0.0.2)

default {
type tun;
proto tcp;
compress lzo:9;
keepalive yes;
encrypt yes;
}

#Tunel entre Filial1 e Matriz (10.0.0.3 <--->10.0.0.1)
Filial1Matriz {
passwd tux;

up{
ifconfig "%% 10.0.0.1 pointopoint 10.0.0.3";
route "add -net 192.168.4.0/24 gw 10.0.0.3";
};
down{
ifconfig "%% down";
route "del -net 192.168.4.0/24 gw 10.0.0.3";
};

}

#Tunel entre Filial2 e Matriz (10.0.0.6 <--->10.0.0.2)
Filial2Matriz {
passwd tux;

up{
ifconfig "%% 10.0.0.2 pointopoint 10.0.0.6";
route "add -net 192.168.2.0/24 gw 10.0.0.6";
};
down{
ifconfig "%% down";
route "del -net 192.168.2.0/24 gw 10.0.0.6";
};

}

Nesse arquivo você pode ver a configuração do servidor que irá esperar por duas conexões da Filial1 e da Filial2.

As Linhas passwd tux; podem e devem ser alteradas utilizando-se senhas diferentes entre os túneis do servidor com a Filial1 e Filial2.

As linhas route "del -net 192.168.4.0/24 gw 10.0.0.3"; para a Filial1 e route "add -net 192.168.2.0/24 gw 10.0.0.6"; para a Filial2 devem ser alteradas de acordo com a configuração de ip da sua rede.

Com o arquivo pronto você irá precisar executar apenas mais dois passos, liberar a porta 5000 utilizada como padrão (essa porta pode ser alterada) pelo vtun no firewall e executar o servidor vtun propriamente dito.

Exemplo:
# iptables –I INPUT –p tcp --dport 5000 –j ACCEPT

ou ainda:

# iptables –I INPUT –p tcp –s IPDAFILIAL1 --dport 5000 –j ACCEPT
# iptables –I INPUT –p tcp –s IPDAFILIAL2 --dport 5000 –j ACCEPT


Nesse caso apenas se o ips da internet da FILIAL1 e FILIAL2 forem fixos, isso trará mais segurança uma vez que você está liberando conexões na porta 5000 apenas para os ips da Filial1 e Filial2 impedindo tentativas de conexões oriundas de outros locais.


Para executar o servidor vtun:
# vtund -s


Vejamos o arquivo de configuração da Filial1:

###Configuracao cliente de 2 servidores#######

#Cliente para Matriz (10.0.0.3 <-->10.0.0.1)
Filial1Matriz{
passwd tux;
compress lzo:9;
keepalive yes;
encrypt yes;

up{
ifconfig "%% 10.0.0.3 pointopoint 10.0.0.1";
route "add -net 192.168.1.0/24 gw 10.0.0.1";
};
down{
ifconfig "%% down";
route "del -net 192.168.1.0/24 gw 10.0.0.1";
};
}


#Cliente para Filial2 (10.0.0.4 <-->10.0.0.5)
Filial1Filial2 {
passwd tux;
compress lzo:9;
keepalive yes;
encrypt yes;

up{
ifconfig "%% 10.0.0.4 pointopoint 10.0.0.5";
route "add -net 192.168.2.0/24 gw 10.0.0.5";
};
down{
ifconfig "%% down";
route "del -net 192.168.2.0/24 gw 10.0.0.5";
};
}

Caso você tenha alterado a linha passwd tux; referente à Filial1 no arquivo da Matriz, ela deve ser alterada aqui também.

Para iniciar o cliente da Matriz com a Filial1 execute:

# vtund Filial1Matriz “IPDAMATRIZ”

Obs: Respeite maiúsculas e minúsculas aqui caso o contrário o vtun irá retornar um erro.

Como já temos a Matriz e a Filial1 em funcionamento podemos testar esse túnel:

Testes a partir da Matriz:
ping 10.0.0.2
ping (para qualquer outro ip de alguma máquina interna a rede da Filial1)
route (que deve retornar entre as linhas e colunas):
Destino Roteador iface
192.168.4.0 10.0.0.3 tun0


Testes a partir da Filial1:
ping 10.0.0.1
ping (para qualquer ip de alguma máquina interna a rede da Matriz)
route (que deve retornar entre as linhas e colunas):
Destino Roteador iface
192.168.4.0 10.0.0.1 tun0

Para finalizarmos precisamos fechar o círculo fazendo a ligação da Filial2 com a Matriz e Filial1.

Vejamos o arquivo de Configuração da Filial2:

###Configuracao de um Servidor e cliente ao mesmo tempo####

#Configuracao Filial2 (10.0.0.5)

default {
type tun;
proto tcp;
compress lzo:9;
keepalive yes;
encrypt yes;
}

#Tunel entre Filial1 e Filial2 (10.0.0.4 <----> 10.0.0.5)
Filial1Filial2 {
passwd tux;
up{
ifconfig "%% 10.0.0.5 pointopoint 10.0.0.4";
route "add -net 192.168.4.0/24 gw 10.0.0.4";
};
down{
ifconfig "%% down";
route "del -net 192.168.4.0/24 gw 10.0.0.4";
};
}


###Configuracao Cliente da Filial2######

#Tunel entre Matriz e Filial2 (10.0.0.2 <-----> 10.0.0.6)

Filial2Matriz {
passwd tux;

up{
ifconfig "%% 10.0.0.6 pointopoint 10.0.0.2";
route "add -net 192.168.1.0/24 gw 10.0.0.2";
};

down{
ifconfig "%% down";
route "del -net 192.168.1.0/24 gw 10.0.0.2";
};
}


Se você analisar esse arquivo ele é uma mixagem do arquivo da Matriz com o arquivo da Filial1 o que irá mudar é apenas que ao executarmos o VTUN termos uma instância para o servidor que irá ficar aguardando a conexão da Filial1 e do cliente para a conexão com a Matriz.

Com o arquivo pronto assim como a matriz você irá precisar liberar a porta 5000 para o VTUN no firewall.

Exemplo:
# iptables –I INPUT –p tcp --dport 5000 –j ACCEPT

ou ainda:

# iptables –I INPUT –p tcp –s IPDAMATRIZ --dport 5000 –j ACCEPT

Para finalizarmos executamos o na Filial2 os comandos:

# vtund –s
# vtund Filial2Matriz “IPDAMATRIZ”


E ainda para fecharmos a comunicação da Filial1 com a Filial2 executamos na Filial1:

# vtund Filial1Filial2 “IPDAFILIAL2”

Testes que podem ser executados:


Testes a partir da Matriz:
ping 10.0.0.2
ping 10.0.0.6
ping (para qualquer outro ip de alguma máquina interna a rede da Filial1)
ping (para qualquer outro ip de alguma máquina interna a rede da Filial2)
route (que deve retornar entre as linhas e colunas):
Destino Roteador iface
192.168.4.0 10.0.0.3 tun0
192.168.2.0 10.0.0.6 tun1

Testes a partir da Filial1:
ping 10.0.0.1
ping 10.0.0.5
ping (para qualquer ip de alguma máquina interna a rede da Matriz)
ping (para qualquer ip de alguma máquina interna a rede da Filial2)
route (que deve retornar entre as linhas e colunas):
Destino Roteador iface
192.168.1.0 10.0.0.1 tun0
192.168.2.0 10.0.0.5 tun1

Testes a partir da Filial2:
ping 10.0.0.2
ping 10.0.0.4
ping (para qualquer ip de alguma máquina interna a rede da Matriz)
ping (para qualquer ip de alguma máquina interna a rede da Filial2)
route (que deve retornar entre as linhas e colunas):
Destino Roteador iface
192.168.1.0 10.0.0.2 tun0
192.168.4.0 10.0.0.4 tun1


Conclusão

Esse artigo foi um apanhado de conhecimentos colhidos na internet. Devido a diversas informações desencontradas e incompletas sobre o VTUN resolvi escrever e contribuir com a comunidade.
Alguns podem dizer que já existem soluções mais modernas no mercado para criação de túneis como o OpenVPN, no entanto o VTUN ainda é bastante usado, sendo que conhecimento nunca é demais.
Espero que tenham gostado.
Estou aberto a críticas e sugestões.
Abraços.

REFERÊNCIAS:

VIRTUAL tunnel. Disponível em: Acesso em: 25 jul. 2011.

COMO, configurar um túnel com Vtun. Disponível em: Acesso em: 26 jul. 2011.

Nenhum comentário:

Postar um comentário