Uma das tecnologias mais revolucionárias foi a virtualização/containerização, que rompeu com o conceito tradicional de "uma máquina - um serviço". Se antes as empresas alugavam servidores inteiros para rodar suas aplicações, hoje é possível gerenciar espaços virtuais isolados, onde cada serviço possui seu próprio sistema de arquivos, processos e rede.
Muitos projetos modernos já são baseados nesse conceito, em que sistemas inteiros funcionam em um único servidor. Para isso, é essencial entender como funciona o sistema de rede nas plataformas de virtualização. Neste material, vamos abordar a implementação prática de uma infraestrutura de rede para contêineres.
Algoritmo da rede no sistema operacional
Para entender como os contêineres se comunicam, é preciso conhecer o subsistema de rede do sistema operacional, composto por interfaces, arquivos de configuração, netfilter e tabelas de roteamento.

- O pacote de dados chega à interface após ser processado pelo driver;
- Em seguida, passa pelo mecanismo de roteamento, que decide se o pacote deve ser redirecionado ou entregue ao aplicativo;
- Durante esse processo, é aplicado o filtro de pacotes, que pode modificar e bloquear o tráfego;
- Por fim, o tráfego sai da interface de rede da máquina.
Com esses componentes, é possível montar uma infraestrutura virtual de rede, mas ainda falta um "switch" virtual para organizar o ambiente. Para isso, utilizamos dispositivos de rede virtuais.
Agora, o esquema da pilha de rede com redes de contêineres é assim:

No contexto dos contêineres, cada um possui seu próprio namespace, com interfaces, regras de netfilter e tabelas de roteamento. No entanto, esses ambientes não conseguem se comunicar entre si diretamente.
Para habilitar a comunicação, usamos pares de interfaces virtuais veth, que permitem copiar o tráfego entre diferentes namespaces. Para concluir, conectamos essas interfaces a uma ponte (bridge), que atua como um switch virtual de camada 3, capaz de rotear pacotes entre ambientes.
Tipos de conexão de contêineres
O Docker oferece diferentes drivers para configuração de redes:
- bridge: cria uma rede interna com roteamento e comutador próprios;
- host: usa diretamente o namespace de rede do host, sem isolação;
- none: desativa a rede do contêiner;
- overlay: conecta vários daemons do Docker em uma rede unificada;
- macvlan: cria subinterfaces vinculadas ao host para comunicação direta com a rede externa;
- ipvlan: semelhante ao macvlan, mas com base em endereços IP.
Neste artigo, vamos considerar a configuração dos métodos principais e prioritários!
docker network

O comando de ajuda fornece informações básicas sobre opções de conexão de redes e contêineres.
Bridge ou MacVlan
Vamos considerar uma tarefa operacional, onde temos um conjunto de contêineres representando um sistema de informação. Nesses casos, é recomendável manter a gestão simples e a performance alta.

Vamos configurar MacVlan ou bridge, permitindo que o contêiner se comunique pela interface de rede do host com configurações próprias.

sudo docker network create -d macvlan \
--subnet=192.168.58.0/24 \
--gateway=192.168.58.1 \
-o parent=eth0 macvlan_network
Inicie um contêiner nessa rede:
sudo docker run --network macvlan_network --ip 192.168.58.200 python /bin/bash -c 'while true; do sleep 1000; done'
Verifique a conectividade:
sudo docker exec -it boring_galois /bin/bash -c "ping -c 4 192.168.58.1 && ping -c 4 8.8.8.8"

Após o teste, você pode segmentar a rede para a nova infraestrutura.
Conexão via NAT/LAN com bridge
Também é possível usar conexões alternativas com segmentação mais restrita.
sudo docker network create -d bridge --subnet=192.168.2.0/24 --gateway=192.168.2.1 gg

Conecte o contêiner:
sudo docker run -d --network gg debian bash -c 'while true; do sleep 1000; done'
Verifique conectividade:
ping 192.168.2.2

Redirecionamento de portas:
sudo docker run -d -p 80:80 --network gg debian bash -c 'while true; do sleep 1000; done'
Use este comando para inspecionar:
sudo docker network inspect
Conexões none e host none
Cria contêiner com rede desativada:
sudo docker network create -d none

host: usa rede do sistema hospedeiro:
sudo docker run -it --network host alpine sh

Isso garante acesso direto às interfaces e portas do host.
Infraestrutura com Serverspace Caso você precise de recursos adicionais, use os servidores em nuvem da Serverspace. Eles oferecem VPS isolados para ambientes virtualizados e testes de rede.

A implantação leva apenas alguns minutos. Em seguida, conecte-se e comece a configurar sua infraestrutura de rede segura, com autenticação, filtragem e controle de tráfego.