创建网络命名空间
使用ip netns
命令创建两个网络命名空间ns1
和ns2
:
bash
ip netns add ns1
ip netns add ns2
创建veth对
创建一对虚拟以太网设备veth1-veth2
和veth3-veth4
:
bash
ip link add veth1 type veth peer name veth2
ip link add veth3 type veth peer name veth4
将veth设备分配到命名空间
将veth2
移到ns1
,veth4
移到ns2
:
bash
ip link set veth2 netns ns1
ip link set veth4 netns ns2
配置设备IP和状态
在默认命名空间中为veth1
和veth3
分配IP并启用:
bash
ip addr add 10.1.1.1/24 dev veth1
ip link set veth1 up
ip addr add 10.1.2.1/24 dev veth3
ip link set veth3 up
在ns1
中配置veth2
的IP并启用:
bash
ip netns exec ns1 ip addr add 10.1.1.2/24 dev veth2
ip netns exec ns1 ip link set veth2 up
ip netns exec ns1 ip link set lo up
在ns2
中配置veth4
的IP并启用:
bash
ip netns exec ns2 ip addr add 10.1.2.2/24 dev veth4
ip netns exec ns2 ip link set veth4 up
ip netns exec ns2 ip link set lo up
创建并配置网桥
创建网桥br0
并绑定veth1
和veth3
:
bash
ip link add name br0 type bridge
ip link set dev veth1 master br0
ip link set dev veth3 master br0
ip link set br0 up
设置默认路由
在ns1
和ns2
中设置默认路由指向网桥IP:
bash
ip netns exec ns1 ip route add default via 10.1.1.1
ip netns exec ns2 ip route add default via 10.1.2.1
验证连通性
从ns1
中pingns2
的IP:
bash
ip netns exec ns1 ping 10.1.2.2
开启IP转发
确保主机的IP转发功能已启用:
bash
echo 1 > /proc/sys/net/ipv4/ip_forward
结果说明
- 网桥
br0
充当交换机,连接veth1
和veth3
。 ns1
(10.1.1.2)和ns2
(10.1.2.2)通过网桥实现二层互通。- 若需跨子网通信,需额外配置路由或NAT规则。
注意:实验结束后可通过以下命令清理:
bash
ip netns delete ns1
ip netns delete ns2
ip link delete br0