案例目标
隔离性 :在同一台物理机上创建两个独立的网络命名空间(模拟两台主机),确保其网络配置完全隔离。内部通信 :允许两个命名空间通过虚拟设备直接通信。外部访问 :通过宿主机的网桥和 NAT 规则,使两个命名空间能够访问外部互联网。
核心要求
使用 ip netns
和 veth pair
实现网络隔离。 通过网桥(Bridge)连接命名空间与宿主机物理网络。 配置 NAT 实现外网访问。 验证隔离性、内部通信及外部连通性。
实现步骤
步骤 1:清理旧配置(如有)
sudo ip netns delete ns1 2 > /dev/null
sudo ip netns delete ns2 2 > /dev/null
sudo ip link delete br0 2 > /dev/null
sudo ip link delete veth1-host 2 > /dev/null
sudo ip link delete veth2-host 2 > /dev/null
步骤 2:创建网络命名空间
sudo ip netns add ns1
sudo ip netns add ns2
步骤 3:创建网桥并连接物理网络
sudo ip link add br0 type bridge
sudo ip link set br0 up
sudo ip link set eth0 master br0
sudo dhclient br0
步骤 4:为每个命名空间创建 veth pair 并连接网桥
sudo ip link add veth1-host type veth peer name veth1-ns
sudo ip link set veth1-host master br0
sudo ip link set veth1-host up
sudo ip link add veth2-host type veth peer name veth2-ns
sudo ip link set veth2-host master br0
sudo ip link set veth2-host up
sudo ip link set veth1-ns netns ns1
sudo ip link set veth2-ns netns ns2
步骤 5:配置命名空间的网络
sudo ip netns exec ns1 ip addr add 192.168 .1.101/24 dev veth1-ns
sudo ip netns exec ns1 ip link set veth1-ns up
sudo ip netns exec ns1 ip route add default via 192.168 .1.1
sudo ip netns exec ns2 ip addr add 192.168 .1.102/24 dev veth2-ns
sudo ip netns exec ns2 ip link set veth2-ns up
sudo ip netns exec ns2 ip route add default via 192.168 .1.1
步骤 6:配置 NAT 允许外网访问
sudo sysctl -w net.ipv4.ip_forward= 1
sudo iptables -t nat -A POSTROUTING -s 192.168 .1.0/24 -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i br0 -o eth0 -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o br0 -m state --state RELATED,ESTABLISHED -j ACCEPT
步骤 7:验证网络功能
sudo ip netns exec ns1 ping -c 3 192.168 .1.102
sudo ip netns exec ns2 ping -c 3 192.168 .1.101
sudo ip netns exec ns1 ping -c 3 8.8 .8.8
sudo ip netns exec ns2 ping -c 3 8.8 .8.8
ping -c 3 192.168 .1.101
最终网络拓扑
宿主机网桥 br0 (IP: 自动获取或手动配置)
│
├─ eth0 (物理网卡,通过 DHCP/NAT 访问外网)
├─ veth1-host (连接到 ns1 的 veth1-ns, IP: 192.168.1.101)
└─ veth2-host (连接到 ns2 的 veth2-ns, IP: 192.168.1.102)
总结
实现目标回顾
隔离性 :通过 ip netns
创建独立命名空间,确保 ns1 和 ns2 的网络配置互不影响。内部通信 :通过 veth pair 和网桥,两个命名空间可直接通信(同一子网)。外部访问 :通过网桥绑定物理网卡并配置 NAT,命名空间可访问外网。
关键技术点
网络命名空间 :隔离网络协议栈(IP、路由表、设备)。veth pair :跨命名空间通信的虚拟“网线”。网桥 :连接多个网络接口,模拟物理交换机。NAT :通过 iptables 实现地址转换,允许内网访问外网。
应用场景
容器网络 :Docker/Kubernetes 使用类似机制为容器提供网络。多租户测试 :为不同租户分配独立网络环境。安全实验 :隔离测试环境,防止实验影响宿主机网络。