Como o nosso servidor está na rede 192.168.137.0/24 e as máquinas dos clientes estão em outra rede de endereço 172.16.0.0/24, cenário típico de configuração de redes em escopos diferentes, para unir um cliente através da VPN à rede da matriz e assim poder acessar recursos da rede interna da matriz, vamos criar uma Brigde entre conexões VPN e rede interna da empresa, assim quando cliente conectar à VPN o mesmo vai estar dentro da rede interna da matriz.
Claro que neste exemplo preferi utilizar interface tap para VPN ao invés de tun, porque na tap tudo é transmitido, ao contrário da tun que o tráfego é roteado e pacotes broadcast e outros protocolos de rede são descartados, claro que na tap o consumo de banda é maior.
Antes de instalar a bridge veja se o seu servidor
Linux tem o utilitário "
bridge-utils" instalado, se não tiver é só dar comando abaixo:
sudo apt-get install bridge-utils
Para o nosso caso, vamos criar dois scripts para facilitar a administração da Bridge. Sem a necessidade de editar o arquivo "interfaces" para subir uma bridge, ou fazer manualmente.
Lembre-se que você pode substituir as interfaces de acordo com seu servidor, em nosso caso utilizamos a "eth0", é só trocar pela sua interface (eth1, eth2, wlan0, ppp0, etc).
Abaixo o script bridge-up:
#!/bin/bash
# /etc/openvpn/bridge-up
br="br0" //nome dado a bridge br0
tap="tap0" //nome atribuido a tap0
eth="eth0" //nossa interface de rede
eth_ip="192.168.137.254" //ip do eth0
eth_gw="192.168.137.1" //ip do gateway
eth_netmask="255.255.255.0" //mascara da rede
eth_broadcast="192.168.255.255" //endereço de broadcast
for tap in $tap; do //laço
openvpn --mktun --dev $tap //cria interface tap0
done
brctl addbr $br //cria a bridge br0
brctl addif $br $eth //adiciona a interface eth0
for tap in $tap; do
brctl addif $br $tap //adiciona interface tap0
done
for tap in $tap; do
ifconfig $tap 0.0.0.0 promisc up //seta ip 0.0.0.0 para tap0
done
ifconfig $eth 0.0.0.0 promisc up //seta ip 0.0.0.0 para eth0
ifconfig $br $eth_ip netmask $eth_netmask broadcast $eth_broadcast //adiciona ip mascara e broadcast para bridge
route add default gw $eth_gw dev $br //adiciona rota default para bridge
Agora o script bridge-down:
#!/bin/bash
# /etc/openvpn/bridge-down
br="br0" //atribui as interfaces
tap="tap0"
ifconfig $br down
brctl delbr $br //deleta a bridge
for t in $tap; do
openvpn --rmtun --dev $t //remove a tap0
done
Estes scripts devem ser colocados no diretório /etc/init.d (se você utiliza Ubuntu ou Debian, outras distribuições procure saber onde é diretório dos executáveis de inicialização) e devem ter as permissões alteradas para executáveis com o comando "chmod + x nome do arquivo", você pode optar por inicializar scripts na inicialização do sistema, basta usar uma ferramenta legal e fácil de utilizar em modo console, o
rcconf e marcar scripts para inicializar junto com sistema. Aí fica critério de cada administrador.
Iniciando conexões
Vamos iniciar os nossos testes de conexão ao servidor OpenVPN.
Primeiramente vamos reiniciar o serviço OpenVPN com comando:
sudo /etc/init.d/openvpn restart
Agora vamos subir a bridge com o script:
sudo /etc/openvpn/bridge-up
Depois subir o servidor OpenVPN com comando:
sudo openvpn -config servidor.conf
Agora nosso servidor está apto a receber conexões dos clientes que tenham certificado.
Na figura abaixo podem ver interfaces do servidor e bridge br0 com ip 192.168.137.254:
Abaixo a imagem de nosso servidor Ubuntu-VPN-VM com serviço OpenVPN levantado e com 2 clientes já conectados:
Com o servidor funcionando, vamos aos clientes.
Vamos conectar ao servidor VPN através de cliente Windows conectado com internet com ip 172.160.0.0/24.
No Windows é só clicar no ícone openvpnclient na barra de notificações e em seguida clicar em connect, ele abre a janela de conexão e pronto, estamos conectados ao servidor.
Abaixo print da tela de um XP conetado ao servidor VPN:
Na figura abaixo dois computadores virtuais, o XP-VM e Ubuntu-VM estão conectados no servidor via SSH através da VPN:
Abaixo o que foi utilizado para a realização deste artigo:
- Notebook Compaq c760 com Ubuntu 10.04, VirtualBox com dois guests, um XP e Ubuntu 10.04 desktop;
- Pentium 4 ht com Windows 7, VirtualBox com Ubuntu Server 10.04 em guest;
- Roteador dlink dir 604 para simular uma rede externa separando a rede 172.16.0.0/24;
- Roteador Siemens 108 wireless, para rede internet e 192.168.137.0/24
Considerações finais
Este artigo demonstrou que o uso do OpenVPN para um canal de comunicação entre servidor e cliente com segurança em túnel VPN e utilização de uma bridge para unir as redes internas e externas hoje em dia é muito comum nos cenários corporativos. Não esqueça de adicionar exceções no firewall e criar as rotas para melhor funcionamento de sua VPN.
Obrigado pela leitura e consulta.