Configurar redes VLAN Linux com iproute2 permite dividir um único link físico em múltiplos domínios de broadcast isolados sem hardware adicional. Este guia abrange interfaces marcadas 802.1Q, configuração de porta trunk e segmentação de rede usando apenas o comando ip incluído em toda distribuição Linux moderna. Ao final, você entenderá como criar e persistir sub-interfaces VLAN, conectar hosts Linux por um trunk e verificar o isolamento entre segmentos.

Pré-requisitos

  • Um host Linux com kernel 3.2 ou posterior (qualquer distribuição atual qualifica)
  • Acesso root ou sudo
  • O pacote iproute2 instalado (incluído por padrão no Debian, Ubuntu, RHEL, Fedora, Arch)
  • Uma NIC física ou virtual; para um trunk real, você precisa de um switch gerenciado com suporte 802.1Q configurado em modo trunk
  • Familiaridade básica com endereçamento IP e subredes

Entendendo as VLANs 802.1Q

Uma VLAN (Virtual Local Area Network) cria segmentos de rede lógicos sobre um meio físico compartilhado. O 802.1Q é o padrão IEEE que insere uma marcação de 4 bytes nos quadros Ethernet para transportar o ID da VLAN. O Linux implementa isso no módulo 8021q do kernel, que expõe sub-interfaces VLAN (às vezes chamadas de interfaces virtuais) que aparecem para a pilha de rede como dispositivos Ethernet comuns.

Terminologia principal:

  • ID de VLAN (VID): Um número de 12 bits (1–4094) que identifica uma VLAN.
  • Porta marcada / porta trunk: Uma porta de switch ou NIC que transporta quadros com marcações 802.1Q para múltiplas VLANs.
  • Porta não marcada / porta access: Transporta tráfego para uma VLAN; o switch remove a marcação antes de encaminhar ao dispositivo final.
  • Sub-interface: No Linux, uma interface virtual como eth0.10 em camada superior a uma interface pai (eth0) que filtra ou injeta quadros marcados para a VLAN 10.

Quando um quadro chega em eth0 com a marcação VLAN 10, o kernel o roteia para eth0.10. O tráfego de saída enviado via eth0.10 é marcado com VLAN 10 antes de atingir o meio físico.

Carregando o Suporte 802.1Q

Antes de criar interfaces VLAN, certifique-se de que o módulo do kernel 8021q esteja carregado:

# Carregar o módulo para a sessão atual
sudo modprobe 8021q

# Verificar se está carregado
lsmod | grep 8021q

Para carregá-lo automaticamente na inicialização, adicione-o ao arquivo de módulos:

echo "8021q" | sudo tee /etc/modules-load.d/8021q.conf

A maioria das distribuições o carrega sob demanda quando você cria a primeira interface VLAN, mas ser explícito evita surpresas.

Criando Sub-interfaces VLAN com iproute2

O comando ip link add cria uma sub-interface VLAN em uma única etapa. A sintaxe é direta:

# Criar VLAN 10 sobre eth0
sudo ip link add link eth0 name eth0.10 type vlan id 10

# Ativar a interface
sudo ip link set eth0.10 up

# Atribuir um endereço IP
sudo ip addr add 192.168.10.1/24 dev eth0.10

Repita para VLANs adicionais. Aqui adicionamos a VLAN 20 na mesma interface pai:

sudo ip link add link eth0 name eth0.20 type vlan id 20
sudo ip link set eth0.20 up
sudo ip addr add 192.168.20.1/24 dev eth0.20

Inspecione o resultado com o sinalizador -d (detalhe) para confirmar o ID e o protocolo VLAN:

ip -d link show eth0.10
# A saída inclui: vlan protocol 802.1Q id 10 <REORDER_HDR>

Você pode usar qualquer nome de interface — eth0.10 é uma convenção comum, mas vlan10 ou mgmt são igualmente válidos. O ID da VLAN é o que importa, não o nome.

Configuração de Porta Trunk

Uma porta trunk transporta tráfego marcado para múltiplas VLANs entre dispositivos de rede. Ao conectar dois hosts Linux diretamente ou conectar um host Linux a um switch gerenciado, a interface física atua como trunk e cada sub-interface representa uma VLAN.

Dois hosts Linux conectados diretamente:

No Host A:

sudo ip link add link eth1 name eth1.100 type vlan id 100
sudo ip link set eth1.100 up
sudo ip addr add 10.0.100.1/24 dev eth1.100

sudo ip link add link eth1 name eth1.200 type vlan id 200
sudo ip link set eth1.200 up
sudo ip addr add 10.0.200.1/24 dev eth1.200

No Host B:

sudo ip link add link eth1 name eth1.100 type vlan id 100
sudo ip link set eth1.100 up
sudo ip addr add 10.0.100.2/24 dev eth1.100

sudo ip link add link eth1 name eth1.200 type vlan id 200
sudo ip link set eth1.200 up
sudo ip addr add 10.0.200.2/24 dev eth1.200

A partir do Host A, ping 10.0.100.2 alcança o Host B na VLAN 100. ping 10.0.200.2 o alcança na VLAN 200 — mesmo cabo físico, domínios de broadcast isolados.

Conectando a um switch gerenciado:

No switch, configure a porta voltada para o host Linux como trunk (ou “tagged” em alguns fabricantes) e permita os IDs de VLAN 100 e 200. O lado Linux não requer nenhuma alteração adicional — a interface pai já passa todos os quadros marcados para a sub-interface apropriada.

iproute2 vs. Outras Ferramentas para Gerenciamento de VLAN

FerramentaAbordagemPersistênciaComplexidade
iproute2 (ip)Sub-interfaces do kernelManual ou via networkd/NMBaixa
NetworkManager (nmcli)Perfis de conexão VLANIntegradaBaixa
systemd-networkdArquivos .netdev + .networkIntegradaBaixa–Média
Open vSwitch (OVS)Switch virtual, suporte completo VLAN/tunnelBanco de dados OVSAlta
bridge + vlan_filtering802.1Q na bridge LinuxManual ou networkdMédia

Para um único host com algumas VLANs, iproute2 mais systemd-networkd é a pilha mais simples e confiável. Para redes virtuais complexas (múltiplas VMs, overlays VXLAN), o Open vSwitch é a escolha certa.

Cenário Real: Isolando Tráfego de Gerenciamento e Produção

Você gerencia um hypervisor com uma única NIC de 10 GbE. A política de segurança exige que o tráfego das VMs e o tráfego de gerenciamento do host nunca compartilhem um domínio de broadcast. A porta do switch upstream já é um trunk transportando VLAN 10 (gerenciamento) e VLAN 100 (VMs de produção).

# Rede de gerenciamento para o próprio host
sudo ip link add link eno1 name eno1.10 type vlan id 10
sudo ip link set eno1.10 up
sudo ip addr add 192.168.10.5/24 dev eno1.10
sudo ip route add default via 192.168.10.1 dev eno1.10

# Bridge de produção para VMs — anexar a interface VLAN a uma bridge
sudo ip link add name br100 type bridge
sudo ip link set eno1.100 master br100
sudo ip link add link eno1 name eno1.100 type vlan id 100
sudo ip link set eno1.100 up
sudo ip link set br100 up

As interfaces virtuais das VMs (dispositivos tap) são então adicionadas como portas de bridge em br100. O tráfego das VMs fica isolado dentro da VLAN 100; o plano de gerenciamento do host reside na VLAN 10 e é acessível apenas por sua própria sub-interface.

Tornando a Configuração VLAN Persistente com systemd-networkd

Os comandos ip link acima são efêmeros — eles desaparecem após a reinicialização. Com o systemd-networkd, a persistência é declarativa e limpa.

Crie a definição de netdev VLAN em /etc/systemd/network/10-vlan10.netdev:

[NetDev]
Name=eth0.10
Kind=vlan

[VLAN]
Id=10

Crie o arquivo de rede em /etc/systemd/network/10-vlan10.network:

[Match]
Name=eth0.10

[Network]
Address=192.168.10.1/24

Também certifique-se de que a interface pai seja ativada e configurada para passar tráfego VLAN em /etc/systemd/network/05-eth0.network:

[Match]
Name=eth0

[Network]
VLAN=eth0.10
VLAN=eth0.20

Aplique as alterações:

sudo systemctl enable --now systemd-networkd
sudo networkctl reload

Para usuários do NetworkManager, o equivalente é:

sudo nmcli connection add type vlan con-name vlan10 dev eth0 id 10 ip4 192.168.10.1/24
sudo nmcli connection up vlan10

Armadilhas e Casos Especiais

MTU e jumbo frames: Adicionar uma marcação 802.1Q aumenta o tamanho do quadro em 4 bytes. Se o MTU da interface pai for 1500 e um host remoto também usar 1500, você pode ter fragmentação em dispositivos intermediários que não permitem quadros de 1504 bytes. Reduza o MTU da sub-interface para 1496 ou ative jumbo frames na NIC e no switch.

sudo ip link set eth0.10 mtu 1496

O modo promíscuo não é necessário: A pilha 802.1Q do kernel filtra por ID de VLAN no nível do driver. Você não precisa do modo promisc na interface pai para a operação normal de VLAN.

VLAN 1 é especial em muitos switches: Alguns switches gerenciados tratam a VLAN 1 como a VLAN nativa/não marcada e podem remover ou tratar incorretamente sua marcação. Prefira VIDs 2–4094 para VLANs explicitamente marcadas para evitar ambiguidade.

Dupla marcação (QinQ): O Linux suporta marcações VLAN aninhadas com type vlan protocol 802.1ad. Use isso apenas quando sua rede exigir explicitamente provider bridging (IEEE 802.1ad).

Máquinas virtuais e filtragem VLAN em bridge: Quando as VMs compartilham uma bridge Linux, ative a filtragem VLAN na própria bridge (bridge vlan filtering 1) em vez de criar sub-interfaces por VM. Isso é mais escalável e evita flooding de MAC entre as portas da bridge.

Interferência do NetworkManager: Em desktops ou servidores executando o NetworkManager, ele pode tentar gerenciar suas interfaces VLAN criadas manualmente. Marque a interface pai como não gerenciada em /etc/NetworkManager/conf.d/ ou use nmcli para definir as VLANs corretamente para que NM e networkd não entrem em conflito.

Solução de Problemas

Sem tráfego na sub-interface VLAN:

  1. Confirme que a interface pai está ativa: ip link show eth0 — o estado deve ser UP.
  2. Confirme que a sub-interface está ativa: ip link show eth0.10.
  3. Verifique se a porta do switch está em modo trunk e se o ID de VLAN é permitido.
  4. Capture com tcpdump -i eth0 -e vlan para ver se quadros marcados chegam.

Filtragem de ID de VLAN incorreta:

# Confirmar o ID de VLAN de uma sub-interface
ip -d link show eth0.10 | grep "vlan id"

Uma incompatibilidade entre o ID de VLAN do Linux e do switch é o erro mais comum.

Conflitos de rota entre VLANs:

Se você atribuir sub-redes sobrepostas entre VLANs, o kernel roteará entre elas via tabela de roteamento do host, anulando o isolamento. Use sub-redes distintas e não sobrepostas para cada VLAN.

Interface desaparece após reinicialização:

Comandos ip link em tempo de execução não persistem. Use systemd-networkd, NetworkManager ou /etc/network/interfaces (legado Debian/Ubuntu) para definir interfaces VLAN persistentes.

Resumo

  • A configuração VLAN Linux 802.1Q usa o comando ip link add ... type vlan id do iproute2 — sem pacotes extras necessários.
  • Sub-interfaces como eth0.10 ficam sobre uma interface pai física e filtram ou injetam quadros marcados para um ID de VLAN específico.
  • Uma porta trunk transporta múltiplas VLANs sobre um único link físico; cada VLAN obtém sua própria sub-interface e IP.
  • Para configuração persistente, use arquivos .netdev/.network do systemd-networkd ou perfis de conexão nmcli.
  • Fique atento à sobrecarga de MTU, peculiaridades da VLAN 1 nos switches e conflitos com o NetworkManager.
  • Combine sub-interfaces VLAN com bridges Linux para conectar VMs a segmentos marcados sem um switch físico gerenciado.

Artigos Relacionados