OpenVPN + Bridge no Ubuntu Server

Este artigo mostra como utilizar uma bridge para unir duas redes diferentes, através de um link de comunicação utilizando OpenVPN.

[ Hits: 72.766 ]

Por: alessandro em 15/09/2010


Criando a Bridge



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.

Página anterior    

Páginas do artigo
   1. Objetivo
   2. Gerando chaves
   3. Configuração do servidor
   4. Configuração do cliente
   5. Criando a Bridge
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

HylaFAX + AvantFAX: Monte seu próprio servidor de fax

Instalando Slackware 11.0 em um pendrive

Instalando Apache Hadoop

Exherbo Linux: sacrificando a cabra

Configurar som (CMI-8738 e VIA AC'97)

  
Comentários
[1] Comentário enviado por obernan em 15/09/2010 - 09:43h

Primeiramente parabens pelo artigo e obrigado pela contribuicao, estou louco para testar seu tutorial, mas so tenho uma duvida, se a rede do servidor 192.168.137.0/24 e a dos clientes e 172.16.0.0/24, porque que na conf do servidor vc colocou "server-bridge 192.168.0.254 255.255.255.0 192.168.0.100 192.168.0.110" //aqui endereço do servidor e sua configuração para suporte a bridge e também faixa de endereços para clientes.
Porque pelo que eu pude endender nao precisa adicionar rotas, os clientes pegam a mesma faixa de ip da matriz.

[2] Comentário enviado por obernan em 15/09/2010 - 09:55h

Ah !!!!! E com relaçao as portas vc nao sitou ai, tem que colocar nas confs, fazer redirecionamento de porta !!!!!!!!

[3] Comentário enviado por macgyver_rp em 15/09/2010 - 09:57h

Ow obrigado ...
desculpa falha nossa..coloquei arquivo editado e dei print da tela..me enganei na hora do ip correto é abaixo como você observou bem.

"server-bridge 192.168.137.254 255.255.255.0 192.168.137.100 192.168.137.110'" .

[4] Comentário enviado por macgyver_rp em 15/09/2010 - 10:10h

Outra observação , quem tem IP valido de internet exemplo 189.23.159.10 de alguma operadora vai ter colocar no arquivo de configuração do cliente endereço valido internet do servidor.
Tem opção de informar a porta no config sim e rota de acordo com configuração de sua rede.

exemplo

push "route xxx.xxx.xxx.xxx mmm.mmm.mmm.m" onde x é seu ip e m sua mascara de rede e adiciona linha no config do servidor caso sua rota com internet ou rede seja diferente dos padrões e porta voce adiciona opção no cliente config caso porta não seja a padrão do openvpn-server 1194 udp.
segue link abaixo que tem dicas boas.
http://www.dicas-l.com.br/arquivo/openvpn_com_os_clientes_na_mesma_rede.php

[5] Comentário enviado por obernan em 16/09/2010 - 23:10h

Oh rapa, to testando, quando terminar posto aqui !!!!
Brigadao, valeu mesmo !!!!
Abraço

[6] Comentário enviado por tiagozappa em 15/02/2012 - 10:57h

Muito show o arquivo, tenho uma dúvida referente a configuração do servidor.
Segue a descrição do meu ambiente.

MATRIZ.
Rede interna 192.168.0.0/24
Ip rede interna do servidor (eth0) 192.168.0.1 255.255.255.0
IP rede internet (eth1) 172.0.0.2 -- é o ip de saída para o ADSL
GW do servidor (eth1) 172.0.0.1 -- é o ip do modem ADSL

Filial
Rede interna 192.168.1.0/24
Ip rede interna do servidor (eth0) 192.168.1.1 255.255.255.0
IP rede internet (eth1) 172.0.0.2 -- é o ip de saída para o ADSL
GW do servidor (eth1) 172.0.0.1 -- é o ip do modem ADSL

Minha dúvida é referente a configuração do servidor.
a opção do server-bridge, deixo assim:
server-bridge 192.168.0.1 255.255.255.0 192.168.0.200 192.168.0.230

Ou estou usando tudo errado, e para usar a opção de serve brigde, eu usaria na matriz e filial a mesma rede (192.168.0.0/24)
Colocando a seguinte configuração:
MATRIZ.
Rede interna 192.168.0.0/24
Ip rede interna do servidor (eth0) 192.168.0.1 255.255.255.0
IP rede internet (eth1) 172.0.0.2 -- é o ip de saída para o ADSL
GW do servidor (eth1) 172.0.0.1 -- é o ip do modem ADSL

Filial
Rede interna 192.168.0.0/24
Ip rede interna do servidor (eth0) 192.168.0.200 255.255.255.0
IP rede internet (eth1) 172.0.0.2 -- é o ip de saída para o ADSL
GW do servidor (eth1) 172.0.0.1 -- é o ip do modem ADSL

E daí usando a opção:
server-bridge 192.168.0.1 255.255.255.0 192.168.0.200 192.168.0.230
(aqui no range, começa pelo ip do primeiro client? ou seja; o ip do servidor da filial?)

Ou seja, eu divido a faixa de ip da rede 192.168.0.0 e deixo tanto matriz, como filial com a mesma faixa de ip, e faço os dois server conversarem com a vpn+bridge, assim, as duas redes conversam????

Deu para entender o que quiz dizer?? qual das duas soluções posso executar??? obrigado. f

[7] Comentário enviado por macgyver_rp em 15/02/2012 - 16:16h

Boa Tarde Tiago,

Respondendo sua Duvida, essa solução serve para tanto unir redes com IP´s diferentes ou para unir redes de mesma faixa separadas pela rede wan da operadora de internet.

Você pode usar faixa diferente da sua rede da matriz na filial...resultado - pc´s da filial não acessam matriz.
mesma faixa - pc da filial recebe endereço da mesma faixa - pcs filial acessam matriz.

Bridge
matriz uma faixa 192.168.0.0/24
filial uma faixa 192.168.1.0/24
bridge uma faixa 192.168.2.0/24 - com um só cliente o servidor da filial

quando server da filial se conectar a matriz - vai assumir ip da bridge 192.168.2.100 por exemplo ai redirecionar trafego da interface eth0 para eth1 depois para interface br0 - bridge uni a rede wan a lan usando VPN garante mais segurança dentro de túnel criptografado. então tanto faz endereço da rede interna da matriz ou da filial estarem na mesma faixa...importante é que para evitar conflitos de IP determinar ranges diferentes na matriz e da filial para evitar ter 2 hosts com mesmo ip por serem servidores DHCP diferentes... ideal serem de faixas diferentes como você coloca na opção 1 ..unica coisa que na bridge você tem colocar faixa diferente da faixa da eth0. .
No exemplo do artigo estava rede local -
se voce tem ip fixo na matrix nos arquivos de config devera usar ip dado pela sua operadora. porque na hora de conectar filial com matriz na filial no config tem estar ip da matrix valido de internet não ip 172.0.0.2 .

espero que tenha ajudado.
site abaixo tem dica legal.
http://www.dicas-l.com.br/arquivo/openvpn_com_os_clientes_na_mesma_rede.php#.Tzv2Mk4geuk



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts