você está aqui: Home  → Arquivo de Mensagens

Tuneis de VPN com protocolo GRE

Colaboração: Antonio Carlos Braga Machado

Data de Publicação: 23 de Junho de 2006

VPN significa Virtual Private Network, usada amplamente para fazer um túnel entre duas ou mais redes distantes, separadas pela internet, nesse caso não haverá criptografia mas temos uma grande performance de conexão. Nosso exemplo será abordado matriz e duas filiais, sendo possível menos ou mais dependendo da sua necessidade. Vamos trabalhar com três servidores e vamos chamá-lo de "matriz", "filial1" e "filial2", o tipo de conexão usada será adsl e minha distribuição usada foi ubuntu 5.10, mas qualquer outra funcionaria perfeitamente.

Servidor matriz Rede local: 192.168.0.0/24

Ip Local: 192.168.0.200

Ip ADSL: 172.16.1.2

Servidor filial1 Rede local: 192.168.1.0/24

Ip Local: 192.168.1.1

Ip ADSL: 172.16.2.2

Servidor filial2 Rede local: 192.168.2.0/24

Ip Local: 192.168.2.1

Ip ADSL: 172.16.3.2

Requisitos

Será preciso ter o kernel compilado com GRE ativado como modulo, geralmente não há necessidade de recompilação no meu caso ubuntu 5.10, para ter certeza verifique na seção Networking Option você irá encontrar a opção: "IP: GRE tunnels over IP" e o pacote iproute2.

Configurando Servidor Matriz

Ativando o ip_forward

  # echo "1" > /proc/sys/net/ipv4/ip_forward

Primeiro criaremos dois tuneis, um para filial1 e outro para filial2

  # ip tunnel add filial1 mode gre remote 172.16.2.2 local 172.16.1.2 ttl 255
  # ip tunnel add filial2 mode gre remote 172.16.3.2 local 172.16.1.2 ttl 255

Foi criado dois tuneis com o nome de filial1 e filial2 e será o nome das interfaces, tipo você terá eth0 (local) eth1 (rede adsl) filial1(tunel para filial1) filial2 (tunel para filial2), utilizando o protocolo gre definindo que ip remoto filial1 (ip da internet do servidor filial1) 172.16.2.2 e ip local (ip da internet do servidor matriz) e o mesmo padrão adotado para filial2.

Estamos ativando as duas interfaces filial1 e filial2.

  # ip link set filial1 up
  # ip link set filial2 up

Atribuindo o ip 192.168.0.200 para as duas interfaces de tuneis, pode-se ver que é o mesmo para os dois e é o mesmo ip da rede local matriz.

  # ip addr add 192.168.0.200 dev filial1
  # ip addr add 192.168.0.200 dev filial2

Estamos definindo a rota para a rede 192.168.1.0/24 pela interface filial1 e 192.168.2.0/24 para interface filial2.

  # ip route add 192.168.1.0/24 dev filial1
  # ip route add 192.168.2.0/24 dev filial2

Em conexões ADSL, cable, PPPoE e PPtP , quando criamos tuneis com iproute a um problema em que pacotes pequenos se perdem, eu por exemplo utilizo conexão DSL INTERDADOS da telefonica, como se fosse um speedy sem internet para rede privada, eu conseguia pingar todas as redes mas na hora de acesso a um share e a um terminal server a conexão trava, se você tiver esse problema adicione essa regra no seu firewall. Mais detalhes do problema em http://lartc.org/howto/lartc.cookbook.mtu-mss.html.

  # iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS -clamp-mss-to-pmtu

Ficaria mais fácil colocar tudo em um script, pois ao reiniciar o computador perderia tudo.

  #! /bin/sh
  # description: Inicializacao do iproute
  #
  DEV1=filial1 # (interface para filial1)
  EXT_REMOTE1=172.16.2.2 # (ip remoto do servidor filial 1)
  SUBNET_REMOTE1=192.168.1.0/24 # (rede local remota da filial1)
  
  DEV2=filial2 # (interface para filial2)
  EXT_REMOTE2=172.16.3.2 # (ip remoto do servidor filial 2)
  SUBNET_REMOTE2=192.168.2.0/24 # (rede local remota da filial2)
  
  EXT_LOCAL=172.16.1.2 # (ip internet servidor matriz)
  INT_LOCAL=192.168.0.200 # ( ip local servidor matriz)
  
  echo "1" > /proc/sys/net/ipv4/ip_forward
  ip tunnel add $DEV1 mode gre remote $EXT_REMOTE1 local $EXT_LOCAL ttl 255
  ip tunnel add $DEV2 mode gre remote $EXT_REMOTE2 local $EXT_LOCAL ttl 255
  
  ip link set $DEV1 up
  ip link set $DEV2 up
  
  ip addr add $INT_LOCAL dev $DEV1
  ip addr add $INT_LOCAL dev $DEV2
  
  ip route add $SUBNET_REMOTE1 dev $DEV1
  ip route add $SUBNET_REMOTE2 dev $DEV2
  iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS -clamp-mss-to-pmtu

Configurando Servidor Filial1

A configuração para as filiais é quase identica só trocando os valores, vou abreviar pois foi explicado anteriormente.

  # echo "1" > /proc/sys/net/ipv4/ip_forward

Agora o criamos um tunel para a matriz.

  # ip tunnel add matriz mode gre remote 172.16.1.2 local 172.16.2.2 ttl 255

Estamos ativando a interface matriz.

  # ip link set matriz up

Definimos o ip 192.168.1.1 para a interface de tunel, o mesmo da rede local interna.

  # ip addr add 192.168.1.1 dev filial1

Definindo a rota para a rede local da matriz.

  # ip route add 192.168.0.0/24 dev filial1

Correção dos pacotes.

  # iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS -clamp-mss-to-pmtu

Script para que nada se perca.

  #! /bin/sh
  # description: Inicializacao do iproute
  #
  DEV=matriz
  EXT_REMOTE=172.16.1.2
  SUBNET_REMOTE=192.168.0.0/24
  
  EXT_LOCAL=172.16.2.2
  INT_LOCAL=192.168.1.1
  
  echo "1" > /proc/sys/net/ipv4/ip_forward
  ip tunnel add $DEV mode gre remote $EXT_REMOTE local $EXT_LOCAL ttl 255
  
  ip link set $DEV up
  ip addr add $INT_LOCAL dev $DEV
  ip route add $SUBNET_REMOTE dev $DEV
  
  iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS -clamp-mss-to-pmtu

Configurando Servidor Filial2

A configuração é identica a filial 1 só trocando os valores.

  # echo "1" > /proc/sys/net/ipv4/ip_forward

Agora o criamos um tunel para a matriz.

  # ip tunnel add matriz mode gre remote 172.16.1.2 local 172.16.3.2 ttl 255

Estamos ativando a interface matriz.

  # ip link set matriz up

Definimos o ip 192.168.2.1 para a interface de tunel, o mesmo da rede local interna.

  # ip addr add 192.168.2.1 dev filial1

Definindo a rota para a rede local da matriz.

  # ip route add 192.168.0.0/24 dev filial1

Correção dos pacotes.

  # iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS -clamp-mss-to-pmtu

Script para que nada se perca.

  #! /bin/sh
  # description: Inicializacao do iproute
  #
  DEV=matriz
  EXT_REMOTE=172.16.1.2
  SUBNET_REMOTE=192.168.0.0/24
  
  EXT_LOCAL=172.16.3.2
  INT_LOCAL=192.168.2.1
  
  echo "1" > /proc/sys/net/ipv4/ip_forward
  ip tunnel add $DEV mode gre remote $EXT_REMOTE local $EXT_LOCAL ttl 255
  
  ip link set $DEV up
  ip addr add $INT_LOCAL dev $DEV
  ip route add $SUBNET_REMOTE dev $DEV
  
  iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS -clamp-mss-to-pmtu
  

Agora teste o ping para ambas a redes remotas da matriz para filiais e filiais para matriz.

Documentação de referência do iproute2 foi "Linux Advanced Routing & Traffic Control HOWTO" em http://lartc.org/howto/.


Fórum SlackLife

Colaboração: Fabio Becamp <<fabiobecamp (a) gmail com>>

O Fórum da comunidade Slacklife surgiu da idéia de ter um canal de união tanto para usuários novatos como experientes. O objetivo do fórum foi sempre gerar união, amizade e troca de conhecimentos em Linux, mais especificamente Slackware, nossa tão querida distribuição.

Todos são bem vindos no fórum, tentamos ajudar a todos igualmente, mantendo uma equipe de adminidtradores e moderadores ética, amiga e bastante simpática para que cada vez mais consigamos unir os usuários em prol da evolução do projeto.

O crescimento do fórum se dá graças ao comprometimento de seus desenvolvedores e usuários, que como uma grande família ajudam, sempre que possível, com todas as suas forças e seus conhecimentos.

Saiba mais: http://forum.slacklife.com.br/



 

 

Veja a relação completa dos artigos de Antonio Carlos Braga Machado

Opinião dos Leitores

Seja o primeiro a comentar este artigo
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script