OpenVPN: acessando a rede local do lado cliente da VPN

openvpn_logo

No tutorial OpenVPN Roteada foi explicado como você configurar um servidor OpenVPN e como configurar um cliente para realizar a conexão. Agora vou colocar o seguinte cenário onde também se aplica o tutorial muito bem elaborado pelo meu companheiro @Geowany:

OpenVPN-cenario

Aplicando as configurações apresentadas no tutorial, temos uma conexão bem sucedida com o servidor da VPN, e os clientes da Rede A acessam os clientes da Rede B, além do servidor claro. Mas o que fica no ar é o seguinte: Como fazer com que os clientes da Rede B acessem os clientes da Rede A? Depois de muito estudar, finalmente consegui realizar o acesso. Vamos lá então:

Pré-requisitos:

a) O cliente OpenVPN deve obrigatoriamente estar com o forward habilitado no script de firewall;
b) Já foi explicado antes, mas nunca é demais lembrar: as redes LAN de ambos os lados JAMAIS devem ter a mesma faixa de rede, conforme imagem acima;
c) cada cliente (em caso de mais de 1) sempre deve ter um nome único. Para fazer isso, basta criar cada certificado para os clientes com nomes diferentes. Ex. cliente1, cliente2.

1 – Configurando o OpenVPN:

Dentro do diretório de configuração do OpenVPN (normalmente /etc/openvpn/) crie um diretório chamado ccd (que usarei no exemplo) mas pode ser outro de sua escolha:

# mkdir -p /etc/openvpn/ccd

Abra o arquivo de configuração do servidor. Ex. /etc/openvpn/servidor.conf.

# nano -w /etc/openvpn/servidor.conf

Sabendo que a rede cliente neste exemplo é 10.1.1.0/24 , adicione os seguintes parâmetros:

client-config-dir ccd

route 10.1.1.0 255.255.255.0

Nesta diretiva está justamente o diretório que criamos previamente. Nela, sempre que um cliente se conectar a VPN, o servidor verificará se este diretório existe, e dentro dele será lido um arquivo com configurações adicionais para o cliente. Se um determinado cliente se chama cliente1, então temos de criar um arquivo com nome igual neste diretório.

# touch /etc/openvpn/ccd/cliente1

Então adicione ao arquivo:

# echo "iroute 10.1.1.0 255.255.255.0" >> /etc/openvpn/ccd/cliente1

Esta configuração dirá ao servidor que ele deve rotear pacotes para a rede por trás do cliente da VPN.

O porquê das redundâncias nestas configurações, se você estiver se perguntando, é que o “route” controla o roteamento do kernel para o servidor OpenVPN (através da interface TUN) e “iroute” controla o roteamento do servidor OpenVPN para os clientes remotos. Então essa é a necessidade dos dois.

2 – Configurando o firewall:

No lado servidor: Você deve permitir um forward de entrada e saída dos pacotes da sua rede local para a interface da VPN como também realizar um NAT da sua rede local (do lado servidor) para a interface da VPN. Acrescente ao seu script de firewall:

## Variáveis ##
 REDE_LOCAL="192.168.0.0/24"
 INTERFACE_VPN="tun0"
 # roteando pacotes da rede local para a vpn
iptables -A FORWARD -s $REDE_LOCAL -o $INTERFACE_VPN -j ACCEPT
iptables -A FORWARD -d $REDE_LOCAL -i $INTERFACE_VPN -j ACCEPT
iptables -t nat -s $REDE_LOCAL -A POSTROUTING -o $INTERFACE_VPN -j MASQUERADE

No lado cliente: você deve permitir um forward de entrada e saída de pacotes da rede da VPN para a interface de rede local como também realizar um NAT da rede da VPN para a interface conectada a LAN:

## Variáveis ##
 REDE_DA_VPN="172.16.2.0/24"
 INTERFACE_LAN="eth0"
 # roteando pacotes da vpn para a rede local
iptables -A FORWARD -s $REDE_DA_VPN -o $INTERFACE_LAN -j ACCEPT
iptables -A FORWARD -d $REDE_DA_VPN -i $INTERFACE_LAN -j ACCEPT
iptables -t nat -s $REDE_DA_VPN -A POSTROUTING -o $INTERFACE_LAN -j MASQUERADE

3 – Criando rota estática:

Crie uma rota no seu servidor VPN apontando para a rede local do cliente VPN:

# route add -net 10.1.1.0 netmask 255.255.255.0 dev tun0

Agora reinicie o serviço de ambos os lados, começando pelo servidor:

# /etc/init.d/openvpn restart

Verifique o status da sua VPN com o comando:

# tail -f /var/log/openvpn-status.log

cliente1,200.222.222.2:1194,3666521,488832,Fri Mar 22 17:06:26 2013
ROUTING TABLE
Virtual Address,Common Name,Real Address,Last Ref
172.16.2.10,cliente1,200.222.222.2:1194,Fri Mar 22 20:34:29 2013
10.1.1.0/24,cliente1,200.222.222.2:1194,Fri Mar 22 17:06:26 2013
GLOBAL STATS
Max bcast/mcast queue length,0
END

Podemos dizer então que as configurações estão corretas neste caso, caso contrário, verfique novamente conforme o seu caso.

Você pode testar ou um ping ou traceroute em um host da rede cliente para constatar a comunicação.

É isso pessoal. Não esqueçam de comentar e curtir no Facebook, compartilhar no Google+ ou Tuitar. Até o próximo.

Greyson escreveu 108 artigos

Tecnólogo em Análise e desenvolvimento de sistemas, gosta muito de telecom, redes de computadores, jogos, entusiasta de tecnologias livres, mais precisamente do GNU/Linux.

Deixe um comentário

Seu endereço de email não será publicado. Os campos com * são obrigatórios

Você pode usar estes tags e atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>