准备
sudo apt-get update
sudo apt-get install iputils-ping
sudo apt-get install openvswitch-switch
sudo apt-get install tcpdump
试验
创建交换机
sudo ovs-vsctl add-br ovs-demo
创建交换机的三个端口(对应的是三个虚拟网络设备)
sudo ovs-vsctl add-port ovs-switch port1 -- set Interface port1 ofport_request=101 type=internal
sudo ovs-vsctl add-port ovs-switch port2 -- set Interface port2 ofport_request=102 type=internal
sudo ovs-vsctl add-port ovs-switch port2 -- set Interface port2 ofport_request=103 type=internal
创建三个 namespace
sudo ip netns add ns1
sudo ip netns add ns2
sudo ip netns add ns3
添加这三个虚拟网络设备到 namespace 中
sudo ip link set port1 netns ns1
sudo ip link set port2 netns ns2
sudo ip link set port3 netns ns3
给三个虚拟网络设备添加 ip
sudo ip netns exec ns1 ip addr add 192.168.1.101/24 dev port1
sudo ip netns exec ns2 ip addr add 192.168.1.102/24 dev port2
sudo ip netns exec ns3 ip addr add 192.168.1.103/24 dev port3
三个虚拟网络设备开启混杂模式
sudo ip netns exec ns1 ifconfig port1 promisc up
sudo ip netns exec ns2 ifconfig port2 promisc up
sudo ip netns exec ns3 ifconfig port3 promisc up
起三个 namespace 的 lo
sudo ip netns exec ns1 ifconfig lo up
sudo ip netns exec ns2 ifconfig lo up
sudo ip netns exec ns3 ifconfig lo up
可以通过如下命令验证
sudo ip netns exec ns1 ping 192.168.1.102
重定向测试
sudo ovs-ofctl add-flow ovs-switch "idle_timeout=0, dl_type=0x0800, nw_proto=1, actions=output:103"
试验
sudo ip netns exec ns1 ping 192.168.1.103
sudo ip netns exec ns2 tcpdump -i port2 -p icmp
sudo ip netns exec ns3 tcpdump -i port3 -p icmp
可以看到在 ns3 中才收到了 icmp 包
提示
可以通过openflow controller下发flow table