Estou usando uma instalação mínima nova do Ubuntu server 24.04.1 LTS. Eu executo esses comandos como root para configurar a rede e fazer alguns experimentos:
Se você viu esta postagem , é a mesma configuração, mas com o endereço IP
2.3.4.5
atribuídomy_veth2
e a entrada na tabela de roteamento1.2.3.0/24
para garantir que os dados possam ser enviados e recebidos de cada namespace de rede.
# Terminal 1
apt install -y netcat-traditional tcpdump
ip netns add ns1
ip netns add ns2
ip link add my_veth1 type veth peer name my_veth2
ip link set my_veth1 up netns ns1
ip link set my_veth2 up netns ns2
ip -n ns1 address add 1.2.3.4 dev my_veth1
ip -n ns1 route add 2.3.4.0/24 dev my_veth1
ip -n ns2 address add 2.3.4.5 dev my_veth2
ip -n ns2 route add 1.2.3.0/24 dev my_veth2
ip netns exec ns2 nc -l -p 8080
então abro mais 2 terminais para rodar tcpdump
em cada namespace de rede:
# Terminal 2
ip netns exec ns1 tcpdump -i my_veth1
# Terminal 3
ip netns exec ns2 tcpdump -i my_veth2
então abro mais um último terminal para enviar dados do ns1 para o servidor netcat no ns2:
# Terminal 4
ip netns exec ns1 nc 2.3.4.5 8080 <<< 'Hello world from network namespace ns1'
Resultados:
- A mensagem enviada do Terminal 4 é impressa no Terminal 1, como esperado.
- Nenhum pacote está sendo exibido em nenhum dos tcpdump. POR QUÊ?
ip netns exec
não abre um pseudo-terminal para o comando executado. Nessa situação, o tcpdump assumirá como padrão a saída em buffer. Para observar os dados transferidos imediatamente, você precisa habilitar explicitamente a saída em buffer de linha comtcpdump -l
.