terça-feira, 17 de setembro de 2013

Entendendo as VLAN's

A história

Antigamente as redes Ethernet eram a base de cabos coaxiais, um emendado no outro de máquina a máquina até o final do segmento onde se colocavam terminadores de sinal. O conjunto era chamado de domínio de colisão já que os frames tinham de disputar o tempo de transmissão (em um único cabo) com todos os outros, o que causava muitas colisões e naturalmente a rede trabalhava em half-duplex.



O truque usado pelas placas era o mecanismo do CSMA/CD para evitar as colisões. Com a chegada dos cabos de par trançado e os HUB's o problema não foi resolvido já que o HUB se limita a repetir todos os sinais em toas a portas, então na lógica a rede trabalhava do mesmo jeito. Usando cabos coaxiais ou hub's com cabos de par trançado toda a rede ainda era vista como um único domínio de colisões (onde os pacotes disputam o tempo de uso do meio de propagação - camada 1) e um único domínio de broadcast (onde os hosts podem trocar mensagens de broadcast endereçadas a FF:FF:FF:FF:FF:FF - camada 2).
Chegaram então as bridges, que eram dispositivos que tinham um conector coaxial e mais alguns conectores RJ45 trabalhando como um HUB. Mas o segredo das bridges é que elas trabalhavam na camada 2, isolando os domínios de colisão.

Bridge Ethernet. Imagem disponível em hardware.com.br


 As bridges trabalhavam de forma um pouco mais inteligente. Ao invés de replicar as mensagens de um segmento de rede ao outro (coaxial e par trançado) elas montavam uma tabela relacionando os endereços MAC de cada segmento e só transmitindo o que era necessário para cada lado economizando colisões e congestionamento. Daí o conceito de "Ponte" ethernet.

Um bom artigo para entender a evolução pode ser visto AQUI


Em seguida temos os switchs. O swich trabalha de forma ainda melhor. Monta uma tabela relacionando os endereços MAC de cada porta e só encaminha os frames de acordo com o endereço do destinatário. Com a chegada dos switchs o termo domínio de colisão caiu em desuso, já que cada porta do aparelho representa um único domínio de colisão e tendo apenas um host "pendurado" à ela não existem colisões. O mesmo se aplica ao algorítimo CSMA/CD e as comunicações em Half-duplex, que só continuaram existindo em redes wireless, segmentos cascateados através de hubs ou em outros casos.

Hoje o padrão de uma rede cabeada é ter um switch centralizando as comunicações e toda a rede trabalha em Full-duplex. Cada host tem o sue próprio domínio de colisão, e toda a rede é um único domínio de broadcast.

Virtual LAN's

Isto nos leva a outra questão. Com redes muito maiores e switchs gerenciáveis, podemos configurá-los para separar os domínios de broadcast. Entra o conceito de "Virtual LAN's".

A ideia é separar segmentos de rede em 2 ou mais domínios de broadcast, mesmo que todas as máquinas estejam conectadas no mesmo switch, estarão "presas" em uma rede virtual onde só podem se comunicar diretamente com máquinas do mesmo domínio de broadcast.
Basicamente o administrador da rede tem de configurar o switch para que determinadas portas sejam entendidas como membros de VLAN's diferentes, e o tráfego de uma não se aplica a outra.

Imagine um Switch de 8 portas representando apenas uma VLAN (sem nenhuma configuração):




Mensagens destinadas à endereços de broadcast atingem todas as máquinas, já que só existe um domínio de broadcast. Em seguida 2 portas são configuradas como membros da VLAN 2:





Agora máquinas conectadas às portas 1 e 6 não têm comunicação com as outras. Note que esta configuração é feita apenas no switch e é totalmente transparente para os hosts conectados. Mesmo se você espetar outros switchs em portas relacionadas a VLAN's, tudo funciona normalmente. Imagine que agora ele trabalha como 2 switchs diferentes. Você pode continuar o processo e selecionar portas do switch para que trabalhem em VLAN's diferentes e ter vários domínios de broadcast na mesma rede física. Naturalmente o administrador vai implementar faixas de endereços IP diferentes para cada VLAN, deixando as coisas mais claras. Portas pertencentes a uma VLAN são chamadas portas de acesso (ou untagged members), onde os dispositivos finais são conectados e trabalham sem saber de nada.



Alguém poderia perguntar qual a diferença desta configuração (que atua na camada 2) para uma rede onde simplesmente os hosts são configurados em faixas de endereço IP distintas (fazendo VLAN's em camada 3) e não se comunicariam da mesma forma. Desta maneira ainda seria possível um engraçadinho alterar o seu endereço IP e obter acesso a outras máquinas de sub-redes diferentes, sem falar que quanto maior o domínio de broadcast, maior o número de máquinas que um atacante pode explorar com ARP spoofing por exemplo. O separação da rede por VLAN's ainda melhora o tráfego já que diminui os broadcast storms, que apesar de necessários podem gerar problemas diversos que seriam propagados por toda a rede.


Em seguida temos as portas de transporte, chamadas "Trunk port", que podem carregar tráfego de VLANs diferentes. A ideia é que tendo vários switchs gerenciáveis na rede, todos eles vão ter portas membros de VLAN's comuns. O trabalho das portas trunk é cascatear o tráfego, mas desta vez marcando os frames provenientes de cada VLAN com uma tag indicando o número da VLAN (por isso a maioria usa o termo "tagged port"). A marcação é feita respeitando o protocolo 802.1q, que é compatível com qualquer fabricante.
Se um frame de uma determinada VLAN, de acordo com o MAC, não pertence a nenhuma das portas daquele switch ele é encaminhado para a porta trunk encapsulado com o número correspondente da VLAN. Ao chegar no outro switch a porta também deve estar configurada como trunk, então ele fará a verificação da VLAN correspondente e escolher a porta onde está o dono da mensagem segundo a VLAN indicada, ou mesmo encaminhar para uma outra porta trunk. Assim podemos ter um cenário com vários switchs trabalhando com várias VLAN's como se houvesse um conjunto de switchs para cada VLAN.


Roteamento

Agora que temos várias sub-redes isoladas pela lógica do switch, como fazer para que essas sub-redes de comuniquem? Todos sabem que redes de faixas IP diferentes só se comunicam por roteamento. Então mesmo que eu tenha um único domínio de broadcast com várias faixas de endereçamento, é preciso um roteador para encaminhar os pacotes de uma rede a outra. A solução mais óbvia seria ter um roteador com tantas placas de rede quanto VLAN's existentes na rede, cada uma com um endereço da faixa correspondente. A pesar de funcionar seria uma grande desperdício de cabos, placas de rede e trabalho adicional.

A solução mais comum é usar um roteador com uma única porta configurada em modo trunk (VLAN tagged), chamada de "Routing on a stick". A partir disso o roteador receberá os pacotes e poderá identificar a VLAN de origem já que os frames vão vir marcados com o ID da VLAN. Nele serão criadas interfaces virtuais sobre a interface física e cada uma receberá um IP na faixa usada pela VLAN. Os frames serão desmarcados e despejados na interface correspondente a cada uma. Isso pode ser feito em roteadores mais robustos ou mesmo no Linux. O esquema fica da seguinte maneira:



Para simplificar mais ainda o esquema, entra em cena os switchs layer 3. Além de todas as funcionalidades de gerenciamento de um switch layer 2, eles são capazes de criar interfaces virtuais dentro de cada VLAN com endereços IP, usurpando a função do roteador.

Desta maneira temos várias sub-redes onde o roteador pode dar tratamento diferenciado e regras específicas para cada faixa de endereçamento. Os broadcast storms são diminuídos e poderíamos ter uma rede totalmente isolada por exemplo. Switchs gerenciáveis ainda são caros, mas com pelo menos um atuando como backbone da rede é possível tornar a rede mais segura.




21 comentários:

  1. Parabéns. Facilitou o meu entendimento.

    ResponderExcluir
  2. Caramba muito bem explicado! Parabéns pelo artigo!

    ResponderExcluir
  3. Parabéns! Eu querendo fazer um artigo sobre VLAN e você já fez 3 anos antes. rs

    ResponderExcluir
    Respostas
    1. Opa. Valeu. Depois tenho que melhorar esse texto.

      Excluir
  4. Cara muito bem elaborado. Parabens!!!!!

    ResponderExcluir
    Respostas
    1. João BOa noite. Cara estou quebrando a kbça ha dias pois tenho uma rede cabeada e quero implementar vlans. tenho duas RouterBoard Miktoik ( 3011 e 450G) a ultima é onde estão os clientes e onde devo criar as vlans. Adquirir tbm 4 switchs gerenciaves da TP-Link [ Switch Easy Smart Gigabit de 8 Portas ]. Minha dor de kbça mesmo é na configuração da RB Clients pois não estou sabendo fazer. Gostaria de um suporte seu ou que me indicasse algo.

      Excluir
    2. Está tudo aqui Sergio. Acho que este artigo ajuda muito:
      http://joaolucasmacedo.blogspot.com.br/2013/11/configurando-portas-vlan-access-no.html
      Basicamente, no MK vc cria uma bridge para cada vlan e adiciona as VLAN Interfaces nas brigges para se ter trunk.

      Excluir
    3. Bom DIa, obg pelo retorno. João já li esse seu post e achei que não era a solução para eu problema. A Bridge, ela é uma ponte ne verdade? Geralmente usada quando queremos que por varias portas de um roteador seja equivalente a uma mesma rede. Por exemplo: Uma Rb que na ether1 é link e na ether5 local, faço uma bridge das portas ether2, 3 e 4 para ser uma unica porta de acesso e gerencia caso queira acessar a rb via cabo. Me corrija por favor se estiver errado, inda sou leigo em Redes e MKT.

      Excluir
    4. Se entendi bem, você tem que levar as VLANs para as RB dos clientes e elas estarão plugadas nos switchs e a RB principal no SW. Tem que fazer uma porta trunk na RB principal com VLAN interfaces e conectar na interface trunk dos SWs.As RB dos clientes vão ser plugadas nas portas da vlan correspondente no SW.

      Excluir
    5. A Infra é assim: 2 rbs [ balance + concentrador ] + Switch Gerenciável. Não sei configurar as Vlan na rb concentrador [ clientes ]. Ja tentei, ja configurei no SW Gerenciavel a port trunk. Meu problema é na RB pois não há trafego nas vlans e sim só na ether5 que é a porta de saída.

      Excluir
  5. Então digamos que eu tenho uma rede em que quero que a rede física seja partilhada por duas redes lógicas - uma rede para a gerência, com maior alocação de largura de banda, e outra para os empregados. Mas quero ter acesso a impressoras pelas duas. E quero apenas um SSID o wireless dessa rede. O que recomendam?

    ResponderExcluir
    Respostas
    1. Com um unico SSID para duas redes lógicas não dá, isto se falando em wifi. Não entendi se você quer cabeada ou wifi ou os 2. De qualquer forma você pode ter duas redes lógicas diferentes, e tendo wifi para ambas, com SSID virtual ou não. O controle de banda e acesso à impressora você pode dar tratamento na camada 3, cada faixa de rede tem uma prioridade no tráfego e para um pacote pular de uma rede para a impressora especificamente seria permitido.

      Excluir
    2. Eu quero Wi-Fi + Cabeada.
      O que existe neste momento são duas redes físicas por ADSL, com duas infraestruturas cabeadas separadas, com duas redes wireless, e apenas uma delas tem acesso ás impressoras. Pretendo migrar para fibra e juntar tudo na mesma rede e organizar tráfego por VLANs, incluíndo o WiFi.

      Vi este link : https://calvin.me/wifi-and-vlans/

      Excluir
    3. Com Mikrotik é bem tranquilo de fazer isso. Eu tenho até mesmo um rascunho de artigo para tal. Virtual AP com Mikrotik e VLANs. Basicamente ´cada SSID virtual é associado à uma VLAN e a porta que conecta ao SW, se necessário, é uma porta trunk.

      Excluir