SDN環境搭建(mininet,OVS,ryu安裝及命令)


1、mininet安裝與使用

1.1mininet安裝

ubuntu 12.04/14.04/14.10      命令行  sudo apt-get install mininet

1.2 mininet基本命令

nodes:查看全部節點

net:查看鏈路信息

dump:查看各節點詳細信息

mn –c:mininet退出后,清理

pingall:測試所有結點是否連通

網絡調試命令:

格式:node cmd

舉例: h1 ifconfig

        h1 ping h2

        h1 ping –c 3 h2

打開某結點控制終端:

         格式:xterm node

舉例:xterm h1

使用link命令,禁用或啟用某條鏈路,格式為 link node1 node2 up/down,例如臨時禁用s1跟h2之間的鏈路,可以用

link s1 h2 down

--mac   The --mac option is super-useful, and sets the switch MAC and host MAC and IP addrs to small, unique, easy-to-read IDs.

 

--switch ovsk   使用openvswitch交換機

--controller=remote --ip=[controller IP] --port=[controller listening port]

設置遠端控制器

--topo   定義網絡拓撲

1.單交換機

--topo single,n n表示主機數

2.線性拓仆

--topo linear,n n表示n個交換機直線連接

3.樹狀拓仆

--topo tree,depth=a,fanout=b depth表示樹深度,fanout表示每個結點有幾個子結點。所有葉子結點都為主機,非葉子結點為交換機

4自定義拓撲

啟動

sudo mn --custom ~/mininet/custom/mytopo.py --topo=mytopo --controller=remote,ip=<>,port=6633

openflow協議設定

啟動支持openflow1.3的交換機

sudo mn --controller=remote,ip=10.108.125.9,port=6633 --switch ovsk,protocols=OpenFlow13

設置鏈路屬性

--link:鏈路屬性可以是默認Link及TCLink。將鏈路類型指定為tc后,可以進一步指定具體參數。具體參數如下命令顯示:

--link tc,bw=<>,delay=<>,loss=<>,max_que_size=<>

bw表示鏈路帶寬,使用 Mb/s為單位表示;時延delay以字符串形式表示,如'5ms'、 '100us'、'1s';loss表示數據丟包率的百分比,用0到100之間的一個百分數表示;max_queue_size表示最大排隊長度,使用數據包的數量表示。

修改虛擬的主機的ip以及mask地址

h1 ifconfig h1-eth0 10.108.126.3 netmask 255.255.255.01

2、OVS安裝與使用

2.1 OVS安裝

預先安裝

apt-get install aptitude

aptitude install dh-autoreconf

 編譯

wget http://openvswitch.org/releases/openvswitch-2.1.2.tar.gz

tar zxvf openvswitch-2.1.2.tar.gz && cd openvswitch-2.1.2

./boot.sh

./configure --with-linux=/lib/modules/`uname -r`/build

make -j && sudo make install

sudo make modules_install

 

sudo modprobe gre

sudo modprobe openvswitch

sudo modprobe libcrc32c

  • 使用 lsmod |grep openvswitch 確認ovs正確地掛載起來
  • ./configure 部份其實還可以下一個 --prefix= 參數, 可以讓openvswitch 完全裝在該目錄底下而不會亂掉

配置數據庫ovsdb

ovsdb-tool create /usr/local/etc/openvswitch/conf.db /usr/local/share/openvswitch/vswitch.ovsschema

  • 建立一次即可, 如果設定有問題的話可以把conf.db砍掉重建

啟動數據庫 ovsdb-server (no ssl)

ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock --remote=db:Open_vSwitch,Open_vSwitch,manager_options --pidfile --detach --log-file

  • cat /usr/local/var/log/openvswitch/ovsdb-server.log 可查到 ovsdb log

啟動ovs-vsctl

ovs-vsctl --no-wait init

啟動ovs-switchd 功能

ovs-vswitchd --pidfile --detach --log-file

  • /usr/local/var/log/openvswitch/ovs−vswitchd.log 可查到 ovs-vswitchd log
  • ps aux |grep ovs,檢查進程

2.2OVS使用

添加網橋

添加名為br0的網橋

ovs-vsctl add-br br0

將網卡eth0掛接到網橋br0上

ovs-vsctl add-port br0 eth0

這個時候,如果掛的插着外網網線的網卡,將不能上網。刪掉之后即恢復。

 

查看結果

ovs-vsctl show

   
配置QOS,比如隊列和限速
  sudo ovs-vsctl -- set Port eth2 qos=@newqos  -- --id=@newqos create QoS type=linux-htb other-config:max-rate=1000000000 queues=0=@q0,1=@q1 -- --id=@q0 create  Queue dscp =1 other-config:min-rate=100000000 other-config:max-rate=100000000 -- --id=@q1 create Queue other-config:min-rate=500000000
  ovs-vsctl clear Port eth2 qos

  sudo ovs-vsctl list qos
  sudo ovs-vsctl destroy qos _uuid
  sudo ovs-vsctl list qos
  sudo ovs-vsctl destroy queue _uuid


配置流鏡像

    sudo ovs-vsctl -- set Bridge br-int mirrors=@m -- --id=@tap6a094914-cd get Port tap6a094914-cd -- --id=@tap73e945b4-79 get Port tap73e945b4-79 -- --id=@tapa6cd1168-a2 get Port tapa6cd1168-a2 -- --id=@m create Mirror name=mymirror select-dst-port=@tap6a094914-cd,@tap73e945b4-79 select-src-port=@tap6a094914-cd,@tap73e945b4-79 output-port=@tapa6cd1168-a2

 

sudo ovs-vsctl remove Bridge br0 mirrors mymirror
sudo ovs-vsctl clear Bridge br-int mirrors


配置流監控sflow
   sudo ovs-vsctl -- --id=@s create sFlow agent=eth2 target=\"10.0.0.1:6343\" header=128 sampling=64 polling=10  -- set Bridge br-int sflow=@s
   sudo ovs-vsctl -- clear Bridge br-int sflow
配置流規則
    sudo ovs-ofctl add-flow br-int idle_timeout=0,in_port=2,dl_type=0x0800,dl_src=00:88:77:66:55:44,dl_dst=11:22:33:44:55:66,nw_src=1.2.3.4,nw_dst=5.6.7.8,nw_proto=1,tp_src=1,tp_dst=2,actions=drop
    sudo ovs-ofctl del-flows br-int in_port=2 //in_port=2的所有流規則被刪除
    sudo ovs-ofctl  dump-ports br-int
    sudo ovs-ofctl  dump-flows br-int
    sudo ovs-ofctl show br-int //查看端口號
    支持字段還有nw_tos,nw_ecn,nw_ttl,dl_vlan,dl_vlan_pcp,ip_frag,arp_sha,arp_tha,ipv6_src,ipv6_dst等;
    支持流動作還有output:port,mod_dl_src/mod_dl_dst,set field等;

配置vxlan gre和ip address

   ovs-vsctl add-port br-ex port -- set interface port type=vxlan options:remote_ip=192.168.100.3

   ovs−vsctladd−port br-ex port −− set Interface port type=gre options:remote_ip=192.168.100.3

   ovs−vsctladd−port br-ex port tag=10 −− set Interface port type=internal//默認為access

   ifconfig port 192.168.100.1

顯示並學習MAC

   ovs-appctl fdb/show br-ex

控制器地址

ovs-vsctl set-controller br-ex tcp:192.168.100.1:6633

ovs-vsctl get-controller br0

ovs-controller ptcp:6633:192.100.100.1

查看OVS上的流表:

ovs-ofctl dump-flows br0

For OpenFlow1.3 you should use "ovs-ofctl -O OpenFlow13 dump-flows s1(switch name)" to view Flow tables.

設置OVS支持的openflow協議版本

 sudo ovs-vsctl set Bridge br0 protocols=OpenFlow13

sudo ovs-vsctl clear Bridge br-int protocols

3、ryu安裝與使用

1.安裝Ryu 之前需要安裝 python 的套件庫

sudo apt-get install python-pip python-dev build-essential

2.安裝ryu依賴的套件

sudo apt-get install python-eventlet python-routes python-webob python-paramiko

3.six版本不夠,卸載再更新

pip uninstall six

pip install six

3.正式安裝ryu

pip install ryu

4.如何測試安裝成功

在命令行輸入 ryu-manager 輸出如下圖所示,即代表安裝成功


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM