我正在使用全新安装的 Ubuntu 服务器 24.04.1 LTS。我以 root 身份运行以下命令来设置网络并进行一些实验:
如果您已经看过这篇文章,那么它是相同的设置,但
2.3.4.5
分配了IP 地址my_veth2
和路由表条目,1.2.3.0/24
以确保可以从每个网络命名空间发送和接收数据。
# 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
然后我打开另外 2 个终端在每个网络命名空间中运行tcpdump
:
# Terminal 2
ip netns exec ns1 tcpdump -i my_veth1
# Terminal 3
ip netns exec ns2 tcpdump -i my_veth2
然后我打开最后一个终端,将数据从 ns1 发送到 ns2 中的 netcat 服务器:
# Terminal 4
ip netns exec ns1 nc 2.3.4.5 8080 <<< 'Hello world from network namespace ns1'
结果:
- 正如预期的那样,从终端 4 发送的消息打印在终端 1 中。
- tcpdump 中均未显示任何数据包。为什么?