Marcio Cunha

Como isolar tráfego de containers Docker com VLANs no Linux

Aprenda a criar redes Docker segmentadas usando VLANs no host Linux para isolar aplicações de produção com segurança e alta performance na prática.

Marcio Cunha•5 min
Também disponível em:EnglishEspañol
Resumo
  • A segmentação de rede por VLANs impede que containers em ambientes distintos trafeguem dados na mesma camada sem autorização explícita.
  • Interfaces virtuais configuradas no host Linux permitem fatiar o tráfego físico em redes lógicas isoladas para múltiplos serviços.
  • O driver de rede Macvlan viabiliza a atribuição de endereços IP reais da rede local diretamente aos containers Docker.
  • O uso correto de regras de roteamento e firewall garante que o isolamento entre subredes permaneça rígido mesmo em servidores de produção.
  • Ambientes de homelab e self-hosting se beneficiam enormemente dessa arquitetura para separar banco de dados, aplicações e ferramentas de monitoramento.

Por que isolar tráfego de containers Docker com VLANs?

Quando colocamos dezenas de aplicações rodando em um mesmo servidor, surge rapidamente a necessidade de separar quem fala com quem. Por padrão, o Docker cria uma ponte de rede interna onde todo container ganha um IP privado e consegue conversar livremente com os vizinhos. Na prática, isso significa que se uma aplicação web sofrer uma invasão, o invasor terá um caminho livre para espiar o tráfego de banco de dados ou de outros serviços sensíveis que rodam no mesmo host. Para evitar esse pesadelo de segurança, engenheiros recorrem à segmentação física e lógica utilizando redes locais virtuais.

As VLANs, abreviação de Virtual Local Area Networks, funcionam como divisórias invisíveis dentro do mesmo cabo de rede físico. No Linux, podemos ensinar o sistema operacional a etiquetar pacotes de dados com números de identificação chamados tags 802.1Q. Quando aplicamos esse conceito ao ecossistema de containers, conseguimos amarrar projetos inteiros a subredes específicas, garantindo que o tráfego corporativo não se misture com ferramentas de suporte ou ambientes de testes. Essa estratégia protege os dados contra vazamentos acidentais e atende a exigências rigorosas de conformidade em ambientes de missão crítica.

Compreendendo o papel do driver Macvlan no Docker

Para fazer o Docker conversar diretamente com VLANs do Linux sem passar pelas pontes padrão, o caminho mais elegante é utilizar o driver Macvlan. Na prática, o Macvlan permite que você crie uma interface de rede virtual acoplada à placa física principal do seu servidor, ganhando a capacidade de atribuir IPs reais da sua rede local diretamente para dentro dos containers. É como se cada container ganhasse sua própria placa de rede física ligada ao switch da sua empresa, respondendo a requisições externas sem precisar de regras complexas de redirecionamento de portas.

Antes de colocar a mão na massa, vale lembrar que o isolamento de redes é um dos pilares de uma infraestrutura robusta, funcionando de maneira muito parecida com o que discutimos em nosso guia sobre como separar redes de servidores e convidados com VLANs no nível de hardware e switch. No entanto, quando trazemos isso para dentro do sistema operacional, precisamos cuidar de detalhes como a persistência das regras de rede e o comportamento do tráfego quando o OOM Killer entra em ação para derrubar processos que consomem muita memória no servidor. O planejamento cuidadoso evita surpresas desagradáveis durante a inicialização dos serviços.

Criando a interface VLAN no host Linux passo a passo

O primeiro passo para implementar essa arquitetura acontece diretamente no sistema operacional hospedeiro, antes mesmo de mexer no Docker. Precisamos carregar o módulo de kernel responsável por VLANs e criar a subinterface virtual ligada à nossa placa de rede física principal. Vamos supor que sua placa de rede física se chame eth0 e que queremos criar a VLAN com ID 10.

  1. Carregue o módulo 8021q no kernel executando o comando no terminal do host:
    sudo modprobe 8021q
  2. Crie a interface virtual vinculada à placa física com o identificador da VLAN:
    sudo ip link add link eth0 name eth0.10 type vlan id 10
  3. Ative a nova interface virtual recém-criada para começar a trafegar pacotes:
    sudo ip link set dev eth0.10 up

Com essa estrutura pronta no sistema operacional, o Linux já sabe separar e etiquetar os pacotes que pertencem àquela VLAN específica. O próximo desafio é ensinar o motor do Docker a enxergar essa interface recém-criada e disponibilizá-la para os nossos arquivos de configuração de containers.

Configurando a rede Macvlan no Docker Compose

Agora que a interface física virtual está ativa no host, podemos declarar nossa rede personalizada no Docker para que os containers passem a utilizá-la de forma transparente. Em vez de criar a rede manualmente via linha de comando a todo momento, a prática recomendada em ambientes de produção é gerenciar isso através de arquivos de composição ou scripts de automação bem documentados.

Abaixo temos um exemplo de trecho de configuração em um arquivo docker-compose.yml que conecta um serviço diretamente à nossa VLAN recém-criada:

version: '3.8'

networks:
  vlan10_net:
    driver: macvlan
    driver_opts:
      parent: eth0.10
    ipam:
      config:
        - subnet: 192.168.10.0/24
          gateway: 192.168.10.1

services:
  app_producao:
    image: nginx:alpine
    container_name: app_producao
    networks:
      vlan10_net:
        ipv4_address: 192.168.10.50
    restart: unless-stopped

Nessa estrutura, o container app_producao assume o endereço IP 192.168.10.50 dentro da rede física da empresa, isolado de qualquer outro container que esteja rodando na rede padrão do Docker. Para garantir que tudo funcione perfeitamente e que os serviços respondam aos testes de rotina sem falhas ocultas, vale a pena integrar verificações rigorosas, alinhadas com as boas práticas de como testar health checks de containers Docker offline antes de colocar o ambiente em produção definitiva.

Validando o isolamento e resolvendo armadilhas comuns

Após subir os containers na nova VLAN, o passo mais importante é validar se o isolamento está funcionando conforme o planejado. Uma armadilha clássica do driver Macvlan é que, por padrão, o host Linux hospedeiro e os containers conectados via Macvlan não conseguem conversar diretamente entre si através daquela interface, devido a restrições de arquitetura de rede do kernel. Se você precisar que o host acesse o container, será necessário criar uma interface virtual adicional do tipo macvtap ou configurar rotas específicas de bridge.

Outro ponto crítico de manutenção envolve a auditoria contínua dos arquivos de log gerados pelas aplicações isoladas. Manter o monitoramento ativo evita que falhas silenciosas de rede passem despercebidas, complementando a segurança do ambiente junto a rotinas automatizadas como como gerenciar logs de containers com Logrotate no Linux. Testar a resiliência da rede simulando quedas de link também ajuda a confirmar que o tráfego não vaza para outras VLANs em momentos de pico ou reinicialização abrupta do switch.

Considerações finais sobre redes seguras no Docker

Isolar o tráfego de containers Docker utilizando VLANs no Linux transforma um servidor comum em uma fortaleza segmentada, ideal para ambientes corporativos e projetos exigentes de infraestrutura. Embora exija um entendimento prévio de conceitos de rede e manipulação de interfaces no host, o ganho em termos de segurança, organização e controle de tráfego compensa amplamente o esforço operacional envolvido na configuração inicial.

Ao combinar o driver Macvlan com boas práticas de monitoramento, políticas restritivas de firewall e testes rigorosos de conectividade, você garante que suas aplicações rodem isoladas e protegidas contra acessos indevidos. Essa abordagem madura eleva o nível técnico da sua infraestrutura, permitindo escalar serviços com tranquilidade e total previsibilidade operacional.