在路由器上进行基于OpenVswitch的openflow实验

1.简介

  本篇文章主要是在刷写了OpenWRT的路由器上的OpenVswitch进行openflow流表的测试,实际部署的测试过程会遇到许多仿真所碰不见的问题。

2.实验环境

  1. 两台Ubuntu14.0.4系统的PC
  2. 一台刷写了OpenWRT15.05的路由器Netgear WNDR4300 v1,并在其上安装了OpenVswitch.
  3. 两条网线

3.划分VLAN

  我将Lan对应的网卡eth0划分出四个虚拟网卡,每个Vlan对应一个port,eth0.1对应实际端口的4(在配置中是1,实际对应的是路由器后面标注的4),eth0.2对应实际3端口,eth0.3对应实际的2端口,eth0.4对应的实际的1端口。下面给出了我的/etc/config/network的配置。

config interface 'loopback'                    
        option ifname 'lo'                
        option proto 'static'                  
        option ipaddr '127.0.0.1'              
        option netmask '255.0.0.0'   

config globals 'globals'                       
        option ula_prefix 'fd96:684d:ab7a::/48'

config interface 'lan'                         
        option ifname 'eth0.1'                 
        option force_link '1'             
        option type 'bridge'              
        option proto 'static'             
        option ipaddr '192.168.3.1'       
        option netmask '255.255.255.0'    
        option ip6assign '60'             
        option macaddr '6c:b0:ce:11:e8:f6'

config interface 'wan'                    
        option ifname 'eth0.2'            
        option proto 'dhcp'               
        option macaddr '6c:b0:ce:11:e8:f7'


config interface 'wan6'                        
        option ifname '@wan'              
        option proto 'dhcpv6'         

config interface 'lan1'                   
        option ifname 'eth0.3'        
        option proto 'static'                  

config interface 'lan2'                        
        option ifname 'eth0.4'            
        option proto 'static'             

config interface 'lan3'                   
        option ifname 'eth0.5'            
        option proto 'static'         

config switch                             
        option name 'switch0'  
        option reset '1'                  
        option enable_vlan '1'

config switch_vlan                             
        option device 'switch0'           
        option vlan '2'               
        option ports '0t 5'                    

config switch_vlan                             
        option device 'switch0'           
        option vlan '3'                   
        option ports '0t 2'           

config switch_vlan                        
        option device 'switch0'       
        option vlan '4'                   
        option ports '0t 3'               

config switch_vlan                        
        option device 'switch0'
        option vlan '5'        
        option ports '0t 4' 

4.实验过程

  我的路由器lan地址对应192.168.3.1,因此通过无线网络连接后用ssh远程登录。

$ ssh root@192.168.3.1

  在openVswitch中,创建一个网桥br0,并给br0赋予一个ip地址(最好不要与路由器lan的地址在同一网段),br0用作虚拟交换机各个端口的网关。

$ ovs-vsctl add-br br0
$ ifconfig br0 192.168.4.1
$ ifconfig br0 up

  接下来将eth0.2和eth0.3交由虚拟交换机br0管理。

$ ovs-vsctl add-port br0 eth0.2
$ ovs-vsctl add-port br0 eth0.3
$ ovs-vsctl show  //查看整个openVswitch的网桥和端口

  最后,两台PC分别连接eth0.2和eth0.3,使用静态ip地址192.168.4.114和192.168.4.194,网关设置成192.168.4.1。
  目前,两台PC和网关之间都无法Ping通,因为ARP和ICMP都无法到达目的地。添加以下流表后,即可Ping通。local是openflow的保留端口,是指本地的网络栈,在这里代表着br0。

$ ovs-ofctl add-flow br0 in_port=1,actions=local,output:2
$ ovs-ofctl add-flow br0 in_port=2,actions=local,output:1
$ ovs-ofctl add-flow br0 in_port=local,actions=output:1,2
$ ovs-ofctl dump-flows br0  //查看br0的所有流表 

你可能感兴趣的:(SDN)