Este artigo explica os fundamentos do protocolo 802.3q (VLAN), suas vantagens e ensina como executar a configuração de VLAN no Linux. Também apresenta dicas para a configuração dos switches envolvidos e servidores DHCP.
Aprendendo mais sobre VLANs: o protocolo IEEE 802.1Q
Um conceito fundamental para a utilização de VLANs é
a introdução de quadros rotulados (tagged frames,
em inglês). Os quadros são as unidades de informação
compartilhadas no nível de enlace, isto é, o que
efetivamente a sua placa de rede irá colocar no barramento. O
quadro irá sofrer uma alteração como descrita na
Figura 1, onde a identificação da VLAN é
adicionada ao quadro ethernet. Isto torna o quadro incompatível
com os padrões antigos, requerendo equipamentos e sistemas
operacionais com capacidade de lidar com VLANs. é através
destes rótulos (tags, em inglês) que é
possível identificar a que VLANs um determinado quadro
pertence. As VLANs são padronizadas através do
protocolo IEEE 802.1Q [1], que prevê quadros especiais para
ethernet, token ring e FDDI.
Figura1: Um quadro tradicional, em uma visão simplificada (a) e um quadro com o rótulo da VLAN (b)
Os quadros enviados pelas estações em geral não
possuem nenhum tipo de suporte a VLANs e são rotulados ao
passarem por switches com uma configuração de VLAN
ativa. Isto irá requerer um processamento do quadro, com a
inclusão do tag, recálculo do FCS (Frame Check
Sequence, um CRC de 32 bits situado ao final do quadro ethernet,
usado para verificação da integridade do quadro) e do
campo de preenchimento (padding, bytes adicionados para que o
tamanho mínimo do quadro ethernet seja obedecido). O
procedimento inverso terá que ser feito ao se entregar um
quadro para uma estação destino que não é
capaz de entender o protocolo 802.1Q. Na Figura 2 pode-se ver esta
operações de inclusão e remoção de rótulos, representados
em vermelho.
Figura2: Inclusão e remoção de rótulos nos quadros ethernet.
O processo de inclusão do tag irá depender do tipo de
equipamento que se possui, sendo que nem todos possuem os mesmos
métodos. De acordo com a complexidade do equipamento e da
camada do modelo OSI/ISO na qual ele opera, métodos diferentes
podem ser usados. Entre os métodos mais comuns, tem-se:
Baseado em portas (camada 1). Neste caso, a configuração é
feita associando-se portas do seu equipamento de rede com números
de VLANs, denominados VLAN IDs. Assim todo tráfego que chegar
por estas portas será rotulado de acordo com o VLAN ID
configurado. Todo tráfego com o mesmo número de VLAN
ID passará então a fazer parte da mesma sub-rede
lógica, não importando de onde estejam vindo. Esta
configuração é muito comum em switches, onde as
estações que não usam quadros com rótulos
são conectadas. O switch irá adicionar o rótulo
ao receber um quadro da estação e remover ao devolver.
Este método irá requerer uma reconfiguração
do switch caso a estação seja levada para outro lugar.
Baseado em MACs (camada 2). Basicamente é feita uma tabela onde
se associa endereços MACs a endereços de VLAN. O MAC
(Media Access Control) é o endereço de enlace
da placa de rede, também chamado de endereço de
hardware, que pode ser obtido através do comando
ifconfig.
Obviamente, este método pode ser bastante enfadonho quando o
número de endereços for grande e requer bastante
configuração manual.
Baseado em subnets (camada 3). Requer um
equipamento que opere também
na camada 3, de forma que uma tabela tabela de endereços de
VLAN ID versus endereços de sub-redes possa ser especificada.
São equipamentos mais caros e fora do escopo deste artigo.
Tipos menos usuais mas bastante interessantes e previstos na norma 802.1Q são VLANs definidas por protocolos de aplicação
(por exemplo, o tráfego de email poderia ser feito em uma VLAN
enquanto o de FTP em outra), endereços de multicasting e tipos
de protocolos presente no quadro Ethernet (IP e IPX poderiam estar em
VLANs diferentes, já que isto pode ser previsto diretamente
através do quadro Ethernet, via consulta ao campo Protocol
Type.
Outro conceito presente no jargão de VLANs é o de tronco
(trunk). Um tronco é uma conexão física
entre dois equipamentos que possuem implementação de
VLANs. Neste caso, podem ser trocados quadros de diversas VLANs entre
eles. Por exemplo, suponha um switch e um roteador interligados,
ambos com suporte a VLANs. Os quadros trocados entres eles precisam
levam consigo a informação de VLAN de forma que o
roteador possa executar o roteamento adequadamente. Geralmente cada
VLAN é definida no roteador e associada com um endereço
de sub-rede, facilitando o trabalho de construção de
rotas e geração de regras de firewall. é
interessante que as conexões do tipo tronco possuam um banda
passante (thoughput) maior do que as outras portas, já
que o tráfego por ela será provavelmente maior.
O protocolo também define o conceito de Links de Acesso (Access
Links) como o segmento que multiplexa um ou mais dispositivos que
não possuem VLANs numa porta de um equipamento com VLANs
habilitadas. Desta forma, através deste equipamento
(geralmente uma bridge ou switch) é possível agregar a
informação de VLAN aos quadros. Na Figura 3 são
ilustradas estas situações. Suponha que no switch com
VLAN as duas primeiras portas estejam associadas às VLANs A e
B, respectivamente, e que no roteador exista uma interface de rede
virtual associadas às subnets A e B. Através das portas
do switch com VLAN, todo o tráfego proveniente das subnets é
rotulado e o domínio de broadcast se torna limitado, não
sendo repassado entre as sub-redes. Este tráfego rotulado
chega até o roteador através de um link tronco, capaz
de levar diferentes tipos de VLANs. Finalmente, no roteador, as ações
de roteamento e firewall são tomadas.
Figura 3: Links de acesso são empregado para que o tráfego possa ser rotulado.
[1] Comentário enviado por marcelobarros em 29/06/2006 - 13:44h
Onde se lê no início "802.3q (VLAN)", trocar por "802.1q (VLAN)". Ficou errado no resumo. Verifique também se as rotas default sobiram ou não. Se não subirem, acrescente manualmente com:
route add -net 10.0.1.0 netmask 255.255.255.0 dev eth0
route add -net 10.0.2.0 netmask 255.255.255.0 dev eth1
route add -net 10.0.10.0 netmask 255.255.255.0 dev eth0.10
route add -net 10.0.20.0 netmask 255.255.255.0 dev eth0.20
route add -net 10.0.30.0 netmask 255.255.255.0 dev eth0.30
[6] Comentário enviado por rpestana em 01/07/2006 - 17:12h
Parabens, muito util o seu artigo!Ajudo a esclarecer muitos pontos obscuros!!!
Tenho uma duvida, ha tempo estava querendo montar um lab para aprender vlan com linux, sua estoria inicial diz tudo. Existiriam observações a serem tomadas se fosse usado um DHCPRELAY no gatetway com VLAN com o mesmo apontado para um servidor DHCP na subrede acima?
Valeu!!!
[8] Comentário enviado por eduardo.ramos em 07/07/2006 - 10:15h
legal, isso só nao funciona no slackware! pelo menos estou testando aqui e nada! a interface eth0.1010 não é reconhecida se alguém puder me dizer como fazer esta mágica acontecer pois acho meio difícil pois o dhcp não deve rodar em cima de interfaces com aliases.
[13] Comentário enviado por marcelobarros em 22/11/2006 - 09:03h
O switch precisa entender o quadro modificado da VLAN. O que tenho aqui considera o quadro como invalido quando vc nao especifica que a caracteristica de vlan na porta.
[14] Comentário enviado por marcelo_aba em 23/02/2007 - 17:35h
Qual a placa de rede q você utilizou para fazer a configuração?
Estou tentando instalar a placa DGE-530T D-Link 802.1q mas ta dando bronca no debian. Você tem alguma dica para q eu instala a mesma no debian?
[15] Comentário enviado por marcelobarros em 26/02/2007 - 07:36h
Eu usei uma placa da netgear, mas se o kernel suportar a placa que vc está usando, não deveria ter nenhum problema. Fiz um procura rápida e vi vários relatos de usuários empregando esta placa com sucesso sem mexer em nada. O site da DLINK mostra também que existem drivers pra Linux (http://www.dlink.com/products/support.asp?pid=284&sec=0#drivers). Recomendo que verifique se no kernel que está usando suporta esta placa ou então que experimente o driver do fabricante.
[16] Comentário enviado por jgama em 25/06/2007 - 23:56h
Grande Marcelobarros, muito bom seu artigo.
tenho uma dúvida o qual creio que vc sabera responder de cor.
já fiz todas as configurações mostrada no artigo, usando o Slackware 10.2.
Pergunto como que as estações irão saber qual IP pegar das sub-redes?
Estou usando dois mini switch aqui na minha rede doméstica, e gostaria de fazer este teste da vlan, é possivel?
No primeiro switch tem dois redes 192.168.1.0 e 192.168.11.0
No segundo swithc tem a rede 192.168.12.0
O dhcp fiz conforme sua esplanação, só troquei os ip's os quais mencionado acima.
[17] Comentário enviado por seuluis em 24/03/2008 - 10:15h
Para utilizar o linux na criação e administração de uma vlan pequena para 3 redes e umas 70 maquinas eu vou precisar de um rotiador ou switch ou so com uma maquina com linux eu consigo?
[18] Comentário enviado por marcelobarros em 27/03/2008 - 15:20h
um switch com vlan e mais um pc pra fazer as vezes de roteador com vlan irá resolver, ou então um switch com vlan e um roteador mesmo, com vlan tambem.
[22] Comentário enviado por marcelobarros em 16/07/2008 - 09:46h
Ricardo:
Não sei se entendi a sua pergunta, Ricardo. Com o suporte a VLANs direto no Linux você não precisa de nenhum hardware adicional a não ser o switch com suporte a VLANs. As redes virtuais serão emuladas no Linux, como subnets diferentes. Aí, dentro da máquina Linux você habilita o roteamento entre placas e pode colocar servidores do que precisar. No fundo, é simples assim, com tudo passando por uma interface só. Se precisar de mais exclarecimento, detalhe melhor a sua pergunta. Você me encontra no gmail.com, com o username marcelobarrosalmeida.
[25] Comentário enviado por lecb em 06/04/2009 - 11:41h
Marcelo,
Tenho um servidor DHCP com cerca de 30 vlans, devidamente configuradas. Agora ocorre um problema que de tempos em tempos, as estações em determinadas vlans perdem a conexão com o servidor, sendo que tudo aparenta estar normal, tanto o servidor DHCP como o serviço em questão operam normalmente, inclusive as estações pertencentes a determinadas vlans.
É o caso até mesmo a rede principal ficar fora e todas as demais consegue acesso. Ao verificar o log tail -f /var/log/messages
mostra que está operando devidamente, mas faz-se necessário reiniciar o serviço para que as estações voltem a pegar o Ip.
Saberia me dizer que pode ser feito para corrigir tal problema?
[26] Comentário enviado por marcelobarros em 07/04/2009 - 08:36h
Infelizmente não. Você não desconfia dos seus switches ou outros ativos de rede ? Eu já tive problemas com eles, fazendo tudo se perder. Pela dimensão da sua rede (30 VLANs) é bom que eles não tenham nenhum bug. Outra coisa que pode fazer é fazer um port mirror no switch e tentar avaliar o tráfego da VLAN com problema. Bom, será preciso que o switch tenha o recurso de port mirror.
[27] Comentário enviado por cavanso em 16/09/2009 - 01:24h
Prezado Marcelo,
Nunca trabalhei com VLAN, so na teoria, bom pelo que entendi preciso ter o switch gerenciavel e o servidor linux para efetuar este procedimento ? ou so o proprio servidor linux e um switch não-gerenciavel resolveria? no seu modelo impõe 3 vlan, no caso como definiria os grupos de maquinas a determinada vlan ?
[28] Comentário enviado por marcelobarros em 17/09/2009 - 07:52h
1) É preciso um switch com suporte a VLANs.
2) Você não define a máquina. O simples fato de ela ter acesso à rede através de uma porta do switch já faz isso. Ao ingressar no switch, pacotes sem ID de VLAN terão o header ethernet modificado para adicioná-lo. Tudo isto se faz através da configuração do switch, onde se coloca o que é desejado em termos de VLANs.
[29] Comentário enviado por irado em 11/10/2009 - 08:49h
elogiar este artigo do marcelo é chover no molhado, mas acontece que eu o encontrei hoje - risos - e gostei MUITO do artigo tanto pela sua qualidade técnica - até eu entendi o significado/uso de vlans - mas também pela leveza da abordagem do assunto. Um excelente casamento do grande conhecimento com a qualidade da prosa.
[30] Comentário enviado por netdovale em 19/05/2010 - 00:08h
MARCELO NUNES - NETDOVALE
Parabens a contribuicao do colega em abordar o assunto VLAN e explicar com muita maestria a materia abordando o assunto de forma muito exposta, "NASCER CRESCER E SER UM HOMEN DE VALOR E ASSUMIR AS CONSEQUENCIA, SER UM HOMEM DE SUCESSO"
[32] Comentário enviado por juliosnb em 17/09/2010 - 09:59h
marcelo estou com uma duvida.
gostaria que vc explicasse melhor como cada usuário das vlan's irá saber o endereço certo a pegar do dhcp, possuo ja criado nos switchs as vlan's 801, 803 e 825. como o dhcp saberá enviar a rede para essas vlan's.
[33] Comentário enviado por marcelobarros em 17/09/2010 - 14:50h
Você é que define a faixa de endereços que seus clientes podem receber. No entanto pode ser qualquer um na faixa. Se quer ficar, tem como, através de configurações amarradas em MAC no seu dhcp3 server. Abra o arquivo de configuração dele e verá um exemplo.
[34] Comentário enviado por luiz humberto em 21/10/2010 - 13:53h
Marcelo,
Utilizando apenas o linux para a criação de uma Vlan, ou seja, com um switch comum, caso o usuário mudar o ip de sua máquina ele irá acesso as outras sub-redes, tem como fazer essa restrição pelo mac porque se mudar o ip não terá acesso as outras apenas a que ele está configurado.
[37] Comentário enviado por jgama em 10/02/2011 - 22:27h
Caro amigo, segui o teu tutorial mas estou encontrando dificuldade para ter sucesso, não querendo abusar de sua paciência, poderia analizar oq ue pode está dando errado.
No switch eu fiz..
Criei as Vlans 1, 2, 10, 20 , 30
sendo:
Vlan1 para administração do switch IP 169.254.239.7/30
Vlan2 Rede Principal IP 192.168.0.2/24 já que IP 192.168.0.1 é do Servidor Linux "Gateway" + Samba PDC.
Vlan10 IP 10.0.10.1/24
Vlan20 IP 10.0.20.1/24
Vlan30 IP 10.0.30.1/24
Pegando o exemplo do artigo, usei a porta 2 do switch onde o Servidor Linux esta conectado eu configurei para "tagged" as 3 Vlans fazem parte desta porta, só que estão "untagged"
Não sei se era necessario mas em DHCP Relay eu deixei em Global
No Linux usei o script para criar as Vlans só alterando para para minha rede, mas ficou assim:
Fui com sede ao pote achando que tudo ia dar certo, mas logo veio o desanimo.
Primeiro que os hosts da vlans não consegue paga o IP automatico.
Os Hosts só consegue pinga os Ips das Vlans e não os hosts por traz das Vlans.
ou seja o host com IP 10.0.10.2 não pinga o host 10.0.20.2
Os Hosts da rede principal Vlan2 configurado no switch não pinga nehuma das vlans, 10.0.10.1, 10.0.20.1 e 10.0.30.1
Agora meus amigos, o que pode ser, alguém manja configuração de switcg de preferencia 3Coim modelo 2928 com Suporte a Vlan e camada3?
Estou precisando muito fazer esta vlans funcionar, no momento estou só em fase de teste.