Tutoriel Linux

Testar uma rede isolada com ip netns sem mudar a interface do servidor

Débutant4 min de lecture

Crie dois hosts Linux temporários conectados por um cabo virtual, teste seu tráfego e, em seguida, remova-os sem modificar o adaptador de rede do seu servidor.

Você deve testar uma rota, um endereço ou um serviço, mas o adaptador que carrega sua sessão SSH não é o lugar para improvisar. Com ip netns, o Linux pode criar espaços de rede separados na mesma máquina. Cada espaço possui suas interfaces, seus endereços e sua tabela de roteamento.

O método a seguir usa uma VM de laboratório com um console. Você vai conectar dois espaços por um par veth, verificar o ping entre eles e, em seguida, remover a montagem. Isso não move nenhuma interface física e não toca nas regras de rede de produção.

Tux entre dois redes Linux isolados conectados por um cabo virtual
Dois espaços de rede Linux isolados conectados por um par veth de teste.

Verificar o host antes de criar o laboratório

Comece verificando as interfaces e a rota utilizada pela sua máquina. Preste atenção especial à interface que carrega seu acesso SSH. O guia ip addr no Linux ajuda a revisar essas informações antes de uma modificação na rede.

ip -brief link
ip -brief addr
ip route
ip route get 1.1.1.1

Escolha dois endereços de documentação que não estejam sendo utilizados na sua rede. Aqui, 192.0.2.1/24 e 192.0.2.2/24 permanecem confinados ao par virtual. Verifique também os espaços já existentes:

sudo ip netns list

Não reutilize um nome exibido por este comando. Em uma máquina remota sem console, eu manteria este teste para uma VM. O comando é reversível, mas um erro de destino ou um script executado com nomes muito genéricos é evitável.

Criar dois hosts virtuais conectados por um veth

Uma interface veth funciona em pares. Um pacote enviado de uma extremidade chega à outra, como com um cabo Ethernet curto. As duas extremidades vão, então, se conectar a espaços diferentes.

sudo ip netns add lab-a
sudo ip netns add lab-b

sudo ip link add veth-a type veth peer name veth-b
sudo ip link set veth-a netns lab-a
sudo ip link set veth-b netns lab-b

Um espaço de nomes inicia com sua interface de loop desativada. Ative-a, atribua os dois endereços de teste e, em seguida, ative as interfaces virtuais:

sudo ip -n lab-a link set lo up
sudo ip -n lab-b link set lo up

sudo ip -n lab-a addr add 192.0.2.1/24 dev veth-a
sudo ip -n lab-b addr add 192.0.2.2/24 dev veth-b
sudo ip -n lab-a link set veth-a up
sudo ip -n lab-b link set veth-b up

Cada comando ip -n <nome> age no espaço solicitado. Você pode obter o mesmo resultado com ip netns exec lab-a ..., uma forma prática de iniciar um cliente DNS, curl ou um servidor de teste sem sair de seu shell habitual.

Ler as interfaces e verificar o tráfego isolado

Antes do ping, revise o estado real de cada lado. Esta saída deve mostrar uma única interface veth com o endereço esperado, além de lo.

sudo ip -n lab-a addr show
sudo ip -n lab-b addr show
sudo ip -n lab-a route
sudo ip -n lab-b route
sudo ip netns exec lab-a ping -c 3 192.0.2.2

Um ping que responde prova que o par está ativo e que os dois espaços podem se juntar na sub-rede de teste. Não prova que um firewall, um DNS ou um aplicativo de produção estão funcionando. Para verificar o caminho de um host real, use ip route na máquina em questão.

Você pode agora adicionar uma rota, testar uma regra nftables ou iniciar um pequeno serviço em lab-b. Mantenha o perímetro reduzido. Um namespace é muito bom para isolar uma experiência de rede, não para reproduzir um cluster inteiro.

Remover o laboratório e escolher a isolação correta

A remoção de um espaço também deleta suas interfaces e sua configuração de rede. Primeiro, verifique os nomes e, em seguida, exclua os dois laboratórios:

sudo ip netns list
sudo ip netns del lab-a
sudo ip netns del lab-b
sudo ip netns list

Os nomes lab-a e lab-b não devem mais aparecer no último comando. Se o teste deve se conectar a um switch, uma VLAN real ou hardware diferente, escolha uma VM, um container conectado à rede prevista ou um ambiente de teste. Para uma modificação de endereço persistente no Ubuntu, o controle com netplan try é mais adequado.

ip netns é minha primeira escolha para validar um caminho local antes de tocar na rede de um servidor. Sua limitação é clara: isola a pilha de rede, não o núcleo, o disco nem os serviços compartilhados do host.

A sintaxe completa de ip-netns(8) detalha os subcomandos disponíveis e o comportamento de ip netns exec.