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:
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.