domingo, 26 de julho de 2015

Suporte a VLAN Trunk em Servidores Linux

Olá Pessoal.

Tradicionalmente utilizamos switches multi-layer ou roteadores quando precisamos fazer o roteamento inter-VLAN em ambientes que possuem múltiplas VLANs associadas com suas respectivas sub-redes, uma vez que essas caixas especializadas oferecem suporte nativo ao encapsulamento 802.1q (trunk). Em um dos artigos mais lidos do blog, intitulado "Configuração de Switch Multi-Layer", explico ao leitor como configurar um switch Cisco para essa finalidade, através da criação de interfaces virtuais vinculadas às suas VLANs, de maneira que essas interfaces podem ser configuradas com um IP que será o gateway de todas as máquinas membros da respectiva VLAN.

Essa mesma tarefa pode ser configurada em um servidor Linux, por isso a topologia apresentada abaixo será utilizada para exemplificar o processo de configuração de roteamento inter-VLAN no Linux. Assim como nos artigos anteriores, estou considerando que o roteador Linux está instalado com a distribuição Debian GNU/Linux (ou seus derivados, como o Ubuntu). 


A primeira etapa consiste na instalação do pacote denominado vlan para que, posteriormente, as configurações de rede do Linux ofereçam suporte à criação de interfaces lógicas roteadas (layer-3) do tipo VLAN. Essa tarefa é simples e rápida através do APT:

apt-get install vlan

Agora basta editar o arquivo de configuração das interfaces de rede que fica localizado em "/etc/network/interfaces". A partir da interface física eth0 (trunk 802.1q), criaremos duas novas interfaces lógicas denominadas eth0.100 (vlan100) e eth0.200 (vlan200).

###--- em /etc/network/interfaces

auto eth0
iface eth0 inet manual

   auto eth0.100
   iface eth0.100 inet static
      address 192.168.100.254
      netmask 255.255.255.0

   auto eth0.200
   iface eth0.200 inet static
      address 192.168.200.254
      netmask 255.255.255.0

Na sintaxe eth0.100 fazemos referência à interface física antes do ponto e, depois do ponto, fazemos referência ao número da VLAN vinculada à interface. É somente depois da instalação do pacote vlan que o Linux passa a reconhecer essa sintaxe. Uma alternativa válida seria utilizar uma convenção diferente de nomes em que fazemos referência direta à VLAN na denominação da interface em conjunto com o parâmetro vlan-raw-device para associá-la a sua respectiva VLAN. O exemplo abaixo traz a mesma configuração anterior com essa sintaxe alternativa:

###--- em /etc/network/interfaces

auto eth0
iface eth0 inet manual

auto vlan100
iface vlan100 inet static
   vlan-raw-device eth0
   address 192.168.100.254
   netmask 255.255.255.0

auto vlan200
iface vlan200 inet static
   vlan-raw-device eth0
   address 192.168.200.254
   netmask 255.255.255.0

Como o Linux não permite o roteamento entre sub-redes por padrão, é necessário instruir seu kernel a fazê-lo por meio de um dos comandos abaixos, lembrando que a primeira opção é volátil, ou seja, será perdida em caso de boot, enquanto que a segunda opção é persistente:

opção 1) echo "1" > /proc/sys/net/ipv4/ip_forward
opção 2) sysctl -w net.ipv4.ip_forward=1

Obs.: Vale ressaltar que as interfaces lógicas do tipo VLAN são diferentes das tradicionais sub-interfaces lógicas vinculadas às interfaces físicas. A criação de sub-interfaces lógicas é uma técnica simples de virtualização de interfaces físicas nativamente reconhecida pelo Linux, procedimento realizado através da sintaxe ethX:X. Por outro lado, o Linux torna-se capaz de interpretar cabeçalhos 802.1q (trunk) quando utilizamos o pacote vlan para criar interfaces lógicas roteadas do tipo VLAN (sintaxe ethX.X).

Façam seus testes...

Samuel.

5 comentários:

  1. No vmware workstation 11 com o driver e1000 na placa de rede será que funciona para simular vlans e comunicar uma rede com roteadores no gns3?

    ResponderExcluir
  2. ROTEADOR 1900 PERDE COMUNICACAO COM VLAN
    Bom dia! Sou novo na comunidade, me desculpem se já houver algum outro tópico semelhante, não localizei.



    1) Possuo um Roteador Cisco 1900 que entrega IP fixo /29 do nosso link de Internet da VIVO. Até ontem (sei que isto é até vergonhoso mas faz parte do cenário) este Roteador era ligado em uma HUB 10/100, e do HUB eu linkava na porta WAN dos roteadores da Rede Interna, que iriam distribuir para LAN e/ ou também servidores que tinham necessariamente de acessar o IP Real para seus serviços.



    2) Em um Switch HP1910 configurei uma VLAN, sem tag (camada 2) para que todos os equipamentos que fossem conectados nesta VLAN conversassem entre si. A ideia era colocar plugado neste switch as portas WAN dos roteadores da rede Interna e o Roteador Cisco que faz a entrega do LINK.



    3) Consigo comunicação entre as máquinas/ roteadores da VLAN. Porém, no momento que coloco o roteador, a porta do Switch e do Roteador fica UP, começo a pinga o Roteador, porém depois de no máximo 10 segundos, ele para o ping, ambas as portas ficam down e eu perco a comunicação com o roteador.



    4) O fato é que se eu colocar o cabo do roteador, em outro roteador da porta WAN de outro roteador (MIKROTIK, DLINK) a comunicação se mantém normal; se eu plugar diretamente em note, configurar os ips, a configuração se mantem também normal. Até no HUB como mencionei a comunicação se mantém normal, consigo "repartir" com as demais máquinas. Porém no momento que plugo para partilhar com a VLAN, ele cai.



    5) Já testei em outras VLAN´s. Já testei outro SWITCH de modelo semelhante (mesmo problema). Algo que notei de diferente foi que quando mudo o tipo de link da porta do SWITCH de acess para hybrid, a comunicação se mantém por um tempo maior; depois cai também.



    6) Usei tanto os simuladores da Cisco (Packet Tracer) como o da HP. E ambos os simuladores, minha rede se mantém UP. Único teste que ainda não fiz, é o cabo cross... mas não tem nada a ver, porque sei que não é o caso para interagir estes dois equipamentos.





    Desde já, agradeço.

    ResponderExcluir
  3. Este comentário foi removido pelo autor.

    ResponderExcluir
  4. Estou com um projeto na empresa onde trabalho, para criar um servidor linux para fazer o roteamento entre Vlans, o que preciso saber é se a placa de rede que vai se conectar ao switch em uma porta trunk, precisa suportar 802.1q tagging para criar o trunk e a tag ser de fato adicionada ao quadro, ou o linux consegue fazer a tagging independente do suporte da placa.

    ResponderExcluir