Criando Redes Locais Virtuais (VLANs) com Linux

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.

[ Hits: 342.533 ]

Por: Marcelo Barros de Almeida em 29/06/2006


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.
Página anterior     Próxima página

Páginas do artigo
   1. Senta que lá vem a história ...
   2. Porque usar VLANs?
   3. Aprendendo mais sobre VLANs: o protocolo IEEE 802.1Q
   4. Configuração do Switch
   5. Configuração do Kernel
   6. Criando VLANs
   7. DHCP e VLANs
   8. Conclusão
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Configurando JAVA no Firefox para acessar página de bancos

Balanceamento de carga com 2 links no MikroTik

Instalando drivers para placas de vídeo SiS

Habilitar o HTTP/2 no Apache do Ubuntu 16.04/20.04

Instalando Apache 2.2 com múltiplos sites no OpenSuSE 10.2

  
Comentários
[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

[2] Comentário enviado por Tango em 29/06/2006 - 22:21h

Hahahaha! Ótimo artigo! Minha parte preferida foi a estorinha (historinha?) introdutória! =D

[3] Comentário enviado por chroot em 30/06/2006 - 15:01h

muito bom artigo
sempre trabalhei com vlans em BSD e em Linux
mas o material em Portugues era pobre..
agora o seu se torna o mais completo
parabens

[4] Comentário enviado por removido em 30/06/2006 - 15:07h

Ótimo artigo!

[5] Comentário enviado por alexandrecorrea em 01/07/2006 - 10:50h

parabéns pelo artigo.. muito bom !!!!!

[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!!!

[7] Comentário enviado por suhanko em 01/07/2006 - 20:53h

Fabuloso artigo, MArcelito! Serve até para os leigos no assunto (como eu, por exemplo :-)
Parabéns!

[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.

Eduardo

[9] Comentário enviado por lacierdias em 22/08/2006 - 14:36h

Muito bom.... Pena que as confs de DHCP não funcionaram no Fedora.
Tem alguma dica???
Abraço

[10] Comentário enviado por marcelobarros em 23/08/2006 - 08:55h

No Debian eu so consegui fazer funcionar como dhcp3. O pacote mais antigo tambem nao deu certo.

[11] Comentário enviado por dailson em 06/09/2006 - 21:00h

Amigo. É um artigo excelente.
Meus parabéns

[12] Comentário enviado por edsonwrites em 21/11/2006 - 17:11h

Tem como fazer isso sem usar um switch especifico?
so com linux ?

[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.

Abraço
Valdir



[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.

[19] Comentário enviado por lipecys em 03/04/2008 - 16:15h

Muito bom o Artigo.
Parabéns.

[20] Comentário enviado por cioban em 05/06/2008 - 15:42h

Marcelo,
Ótimo artigo, ótima didática, parabéns.

Estou configurando uma vlan aqui na empresa e este artigo me esclereceu muita coisa.

Abraço,
Sérgio Cioban Filho

[21] Comentário enviado por rmedeiros em 14/07/2008 - 10:04h

Marcelo ótimo artigo,

Mas ainda tenho algumas duvidas, as 3 vlans criadas em 1 interface eth0 isso não gera trafego, onde entra servidores que conversaram com as vlans?

Ricardo

[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.

Sérgio/lipecys:
Obrigado pelos elogios !

[23] Comentário enviado por fabiomattes2011 em 08/10/2008 - 09:08h

Redes wireless também aceitam redes virtuais?

[24] Comentário enviado por marcelobarros em 08/10/2008 - 11:23h

gelheadbanger

Nunca testei com WLAN.

[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.

parabéns grandão :)

[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"

parabens aos minutos de cultura.


ass. marcelo nunes - www.netdovale.com.br

[31] Comentário enviado por mc.eagle em 20/06/2010 - 00:43h

Marcelo Barros, um primor de sabedoria uma eloquência de fazer-nos pensar. Parabéns amigo. Que Deus continue a te abençoar.

[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.

Obrigado!

[35] Comentário enviado por luiz humberto em 21/10/2010 - 13:57h

Complementando a pergunta anterior, sem utilizar um switch preciso de uma placa de rede que suporte o protocolo 802.1Q?

[36] Comentário enviado por marcelobarros em 21/10/2010 - 16:50h

Não sei bem se entendi a pergunta, mas sem um switch com suporte a vlan não tem como fazer o que foi explicado.

[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:

#!/bin/bash
# Sintaxe: vlan.sh [start|stop]
# barros@smar.com.br

VCONFIG=/sbin/vconfig

case "$1" in
start)

echo "Criando vlans..."

ifconfig lo 127.0.0.1 netmask 255.0.0.0 up
ifconfig eth1 192.168.0.1 netmask 255.255.255.0 up
ifconfig eth0 192.168.1.67 netmask 255.255.255.0 up

$VCONFIG add eth1 10
ifconfig eth1.10 10.0.10.1 netmask 255.255.255.0 up
$VCONFIG set_flag eth1.10 1

$VCONFIG add eth1 20
ifconfig eth1.20 10.0.20.1 netmask 255.255.255.0 up
$VCONFIG set_flag eth1.20 1

$VCONFIG add eth1 30
ifconfig eth1.30 10.0.30.1 netmask 255.255.255.0 up
$VCONFIG set_flag eth1.30 1

route add default gw 192.168.1.254
echo 1 > /proc/sys/net/ipv4/ip_forward

;;
stop)

echo "Removendo vlans ..."

echo 0 > /proc/sys/net/ipv4/ip_forward
route del default gw 192.168.1.254

ifconfig eth1 down
$VCONFIG rem eth1.10
$VCONFIG rem eth1.20
$VCONFIG rem eth1.30
ifconfig eth1 down
ifconfig lo down

;;
*)
echo "vlan.sh [stop|start]"
exit 1
;;
esac

exit 0


Em dhcpd.conf no Ubuntu-server 10.0.4 deixei assim, saliento que uso dhcp + DNS dinamico

####
# PARÂMETROS GLOBAIS
#
authoritative;
option domain-name "lan";
default-lease-time 604800;
max-lease-time 2419200;
ddns-updates on;
ddns-domainname "lan";
ddns-update-style interim;
ignore client-updates;

include "/etc/dhcp3/rndc.key";
zone lan.{
primary 127.0.0.1;
key "rndc-key";
}
zone 0.168.192.in-addr.arpa.{
primary 127.0.0.1;
key "rndc-key";
}
#
# PARÂMETROS DA SUB-REDE
#
subnet 192.168.0.0 netmask 255.255.255.0 {
server-identifier 192.168.0.1;
option domain-name-servers 192.168.0.1;
option routers 192.168.0.1;
option netbios-name-servers 192.168.0.1;
option netbios-dd-server 192.168.0.1;
option netbios-node-type 8;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.0.255;
range dynamic-bootp 192.168.0.100 192.168.0.199;
allow unknown-clients;
group {
use-host-decl-names on;

# insira abaixo suas configurações:

host micro01 {
hardware ethernet 00:00:00:00:00:00;
fixed-address 192.168.0.10;
}

#
###
}
}
#

subnet 10.0.10.0 netmask 255.255.255.0 {
range 10.0.10.10 10.0.10.254;
option broadcast-address 10.0.10.255;
option routers 10.0.10.1;
option domain-name-servers 192.168.0.1;
option netbios-name-servers 192.168.0.1;
option netbios-dd-server 192.168.0.1;
}

subnet 10.0.20.0 netmask 255.255.255.0 {
range 10.0.20.10 10.0.20.254;
option broadcast-address 10.0.20.255;
option routers 10.0.20.1;
option domain-name-servers 192.168.0.1;
option netbios-name-servers 192.168.0.1;
option netbios-dd-server 192.168.0.1;
}

subnet 10.0.30.0 netmask 255.255.255.0 {
range 10.0.30.10 10.0.30.254;
option broadcast-address 10.0.30.255;
option routers 10.0.30.1;
option domain-name-servers 192.168.0.1;
option netbios-name-servers 192.168.0.1;
option netbios-dd-server 192.168.0.1;
}



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.

Abraço a todos



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts