OVS常用操作

OVS常用操作:

1.添加网桥:ovs-vsctl add-br 交换机名
2.删除网桥:ovs-vsctl del-br 交换机名
3.添加端口:ovs-vsctl add-port 交换机名 端口名(网卡名)
4.删除端口:ovs-vsctl del-port 交换机名 端口名(网卡名)
5.连接控制器:ovs-vsctl set-controller 交换机名 tcp:IP地址:端口号
6.断开控制器:ovs-vsctl del-controller 交换机名
7.列出所有网桥:ovs-vsctl list-br
8.列出网桥中的所有端口:ovs-vsctl list-ports 交换机名
9.列出所有挂接到网卡的网桥:ovs-vsctl port-to-br 端口名(网卡名)
10.查看open vswitch的网络状态:ovs-vsctl show
11.查看 Open vSwitch 中的端口信息(交换机对应的 dpid,以及每个端口的 OpenFlow 端口编号,端口名称,当前状态等等):ovs-ofctl show 交换机名
12.修改dpid:ovs-vsctl set bridge 交换机名 other_config:datapath-id=新DPID
13.修改端口号:ovs-vsctl set Interface 端口名 ofport_request=新端口号
14.查看交换机中的所有 Table:ovs-ofctl dump-tables ovs-switch
15.查看交换机中的所有流表项:ovs−ofctl dump−flows ovs-switch
16.删除编号为 100 的端口上的所有流表项:ovs-ofctl del-flows ovs-switch “in_port=100”
17.添加流表项(以“添加新的 OpenFlow 条目,修改从端口 p0 收到的数据包的源地址为 9.181.137.1”为例):
ovs-ofctl add-flow ovs-switch “priority=1 idle_timeout=0,in_port=100,actions=mod_nw_src:9.181.137.1,normal”

18.查看 OVS 的版本信息:ovs-appctl –version
19.查看 OVS 支持的 OpenFlow 协议的版本:ovs-ofctl –version

对于上述第17条:

match部分:

flow有很多syntax, 一半来说actions之前都是match的部分,常用的一般是

in_port: switch的端口
dl_src:  源mac地址
dl_dst:  目的mac地址
nw_src:  源IP
nw_dst:   目的ip
dl_type:  以太网协议类型 0x0806是arp packet 0x0800是ip packet
nw_proto: 协议类型,需要和dl_type一起使用,比如dl_type是0x0800,nw_proto=1就表示icmp packet
tp_src: tcp udp源端口
tp_dst: tcp udp目的端口
ip     Same as dl_type=0x0800.
icmp    Same as dl_type=0x0800,nw_proto=1.
tcp    Same as dl_type=0x0800,nw_proto=6.
udp     Same as dl_type=0x0800,nw_proto=17.
arp    Same as dl_type=0x0806.
rarp    Same as dl_type=0x8035.

actions:

output:port
controller(key=value) 送到controller作为packet-in 消息,括号内的key value pair可以是:
reason=reason ,reason 可以是action,no_match,invalid_ttl
id=controller-id 默认是0,特殊的controller会有一个16位的id

mod_dl_src:mac
      Sets the source Ethernet address to mac.
mod_dl_dst:mac
      Sets the destination Ethernet address to mac.
mod_nw_src:ip
      Sets the IPv4 source address to ip.
mod_nw_dst:ip
      Sets the IPv4 destination address to ip.
mod_tp_src:port
     Sets the TCP or UDP source port to port.
mod_tp_dst:port
    Sets the TCP or UDP destination port to port.

ovs-vsctl使用指南:

vos-vsctl命令格式:
usage: ovs-vsctl [OPTIONS] COMMAND [ARG...]

常见的OPTIONS有以下组成:
--db=DATABASE :指定连接的数据库,默认是unix:/var/run/openvswitch/db.sock
--no-wait: 在使用时不等待ovs-vswitchd的重新配置
--retry:不断尝试连接远端服务器
--t,-timeout=SECS: 等待ovs-vswitchd的超时时间
--dry-run: 尝试运行修修改的配置但是不提交到ovsdb-vswitch数据库
--oneline:将打印出的命令一行一行的显示
-h,--help: 显示帮助信息
-V,--version:显示版本信息

常用的COMMAND有以下几类:

OpenvSwitch的维护命令:
   init:初始化ovsdb-vswitch数据库
   show:查看数据信息
   emer-reset: 重新设置openvswitch的状态

  OpenvSwitch对桥设备操作相关的命令:
   add-br BRIDGE :添加一个桥设备
   add-br BRIDGE PARENT VLAN:在PARENT中创建一个桥,并做vlan标记
   del-br BRIDGE: 删除一个桥设备
   list-br: 查看创建的桥设备
   br-exists BRIDGE: 判断新创建的桥是否已经存在
   br-to-vlan BRIDGE: 列出桥设备的所有的valn
   br-to-parent BRIDGE: 列出当前桥的上一个桥设备
   br-set-external-id BRIDGE KEY VALUE: 给桥添加额外的属性,方式为 key vllue格式
   br-set-external-id BRIDGE KEY:撤销桥设备额外的信息
   br-get-external-id BRIDGE KEY:列出桥设备额外的信息
   br-get-external-id BRIDGE :以key-value格式列出桥设备的额外信息

  OpenvSwitch对端口的操作命令:
   list-ports BRIDGE: 列出指定桥设备上的端口
   add-ports BRIDGE PORT :添加一个端口到桥设备,此端口可以事先不存在
   add-bond BRIDGE PORT IFACE...: 对桥设备做多端口绑定
   del-port [BRIDGE] PORT: 删除一个端口或者删除一个指定桥设备上的端口
   port-to-br PORT:列出端口所在的桥设备

  OpenvSwitch对接口操作的命令: 
   list-ifaces BRIDGE: 列出桥设备上的所有接口
   iface-to-br IFACE:  列出接口所在的桥设备

  OpenvSwitch的控制命令:
   get-contorller BRIDGE: 获取桥设备的控制器
   del-contorller BRIDGE: 删除桥设备的控制器
   set-contorller BRIDGE TARGET...:给桥设备设置一个控制器
   get-fail-mode BRIDGE: 显示桥设备错误的模式
   del-fail-mode BRIDGE: 删除桥设备错误的模式
   set-fail-mode BRIDGE MODE: 设置桥设备失败的模式为MODE

  OpenvSwitch管理相关的命令:
   get-manager: 列出openvswitch的管理者
   del-manager:删除openvswitch的管理者
   set-manager TARGET....:设置管理者列表为TARGET

  OpenvSwitch安全相关的命令:
   get-ssl:获取ssl的配置信息
   del-ssl: 删除ssl的配置信息
   set-ssl PRIV-KEY CERT CA-CERT: 配置ssl

  OpenvSwitch交换相关的命令:
   emer-rest: 重新设置未知交换机的状态

  OpenvSwitch数据库操作相关命令:
   listTBL [REC]: 列出TBL的资源记录信息(ovs-vsctl list port )
   findTBL CONDITION....:查找相关的资源记录信息
   getTBL REC COL[:KEY]:获取TBL的信息
   setTBL REC COL[:KEY]=VALUE:设定TBL的额外属性(ovs-vsctl set Port br1 tag=2)
   addTBL REC COL [KEY=]VALUE:添加一个[key=]value到TBL
   remove TBL REC COL [KEY=]VALUE:删除TBL中的一个key值(ovs-vsctlremove Port br1 tag 2)
   clearTBL REC COL: 清除指定TBL的资源记录信息
   create TBL COL [:KEY]=VALUE:在TBL中创建一个资源记录信息
   destroy TBL REC:销毁一个TBL的REC
   wait-until TBL REC [COL[:KEY]=VALUE]:等待TBL资源记录配置完成

 常用的ARG参数:
   连接主数据库的方法:
   tcp:IP:PORT: 指定连接远端数据库使用tcp协议,以及远端主数据库的ip地址跟端口
   ssl:IP:PORT: 指定连接远端数据库使用ssl协议,以及远端主数据库的ip地址跟端口
   unix:FILE:使用socket套接字连接主数据库

   备用数据库的连接方法:
   ptcp:IP:PORT: 指定连接远端数据库使用tcp协议,以及远端备用数据库的ip地址跟端口
   pssl:IP:PORT: 指定连接远端数据库使用ssl协议,以及远端备用数据库的ip地址跟端口
   punix:FILE:使用socket套接字连接备用数据库

   PKI配置:
   -p,--private-key=FILE: 指定私有秘钥的位置
   -c,--certificate=FILE:指定证书的位置
   -C,ca-cert=FILE:指定对端证书的

完整设定:

查表

ovs-vsctl list bridge ovs-br

關於 Brdige 及 Port

新增 Brdige
    ovs-vsctl add-br ovs-br
在 ovs-br 上對應 interface
    ovs-vsctl add-port ovs-br eth0
(1) + (2) 的寫法可為
    ovs−vsctl add−br ovs-br -- add−port ovs-br eth0
移除 Bridge
    ovs-vsctl del-br ovs-br #如果不存在的話, 會有error log
    ovs-vsctl --if-exists del-br ovs-br
更改 ofport (openflow port number) 為 100
    ovs-vsctl add-port ovs-br eth0 -- set Interface eth0 ofport_request=100
設定 port 為 internal
    ovs-vsctl set Interface eth0 type=internal

關於 Controller

設定 Controller
    ovs-vsctl set-controller ovs-br tcp:1.2.3.4:6633
設定 multi controller
    ovs-vsctl set-controller ovs-br tcp:1.2.3.4:6633 tcp:5.6.7.8:6633
查詢 Controller 設定
    ovs-vsctl show
        如果有成功連到 controller 則會顯示 is_connected:true, 反之則未連上
    ovs-vsctl get-controller ovs-br
移除 Controller
    ovs-vsctl del-controller ovs-br

關於 STP (Spanning Tree Protocol)

開啟 STP
    ovs-vsctl set bridge ovs-br stp_enable=true
關閉 STP
    ovs-vsctl set bridge ovs-br stp_enable=false
查詢 STP 設定值
    ovs-vsctl get bridge ovs-br stp_enable
設定 Priority
    ovs−vsctl set bridge br0 other_config:stp-priority=0x7800
設定 Cost
    ovs−vsctl set port eth0 other_config:stp-path-cost=10
移除 STP 設定
    ovs−vsctl clear bridge ovs-br other_config

關於 Openflow Version

支援 OpenFlow Version 1.3
    ovs-vsctl set bridge ovs-br protocols=OpenFlow13
支援 OpenFlow Version 1.3 1.2
    ovs-vsctl set bridge ovs-br protocols=OpenFlow12,OpenFlow13
移除 OpenFlow 支援設定
    ovs-vsctl clear bridge ovs-br protocols

關於 VLAN

設定 VLAN tag
    ovs-vsctl add-port ovs-br vlan3 tag=3 -- set interface vlan3 type=internal
移除 VLAN
    ovs-vsctl del-port ovs-br vlan3
查詢 VLAN
    ovs-vsctl show
    ifconfig vlan3
設定 Vlan trunk
    ovs-vsctl add-port ovs-br eth0 trunk=3,4,5,6
設定已 add 的 port 為 access port, vlan id 9
    ovs-vsctl set port eth0 tag=9
ovs-ofctl add-flow 設定 vlan 100
    ovs-ofctl add-flow ovs-br in_port=1,dl_vlan=0xffff,actions=mod_vlan_vid:100,output:3
    ovs-ofctl add-flow ovs-br in_port=1,dl_vlan=0xffff,actions=push_vlan:0x8100,set_field:100-\>vlan_vid,output:3
ovs-ofctl add-flow 拿掉 vlan tag
    ovs-ofctl add-flow ovs1 in_port=3,dl_vlan=100,actions=strip_vlan,output:1
    two_vlan example
ovs-ofctl add-flow pop-vlan
    ovs-ofctl add-flow ovs-br in_port=3,dl_vlan=0xffff,actions=pop_vlan,output:1

關於 GRE Tunnel

設定 GRE tunnel
    ovs−vsctl add−port ovs-br ovs-gre -- set interface ovs-gre type=gre options:remote_ip=1.2.3.4
查詢 GRE Tunnel
    ovs-vsctl show

關於 Dump flows

Dumps OpenFlow flows 不含 hidden flows (常用)
    ovs-ofctl dump-flows ovs-br
Dumps OpenFlow flows 包含 hidden flows
    ovs-appctl bridge/dump-flows ovs-br
Dump 特定 bridge 的 datapath flows 不論任何 type
    ovs-appctl dpif/dump-flows ovs-br
Dump 在 Linux kernel 裡的 datapath flow table (常用)
    ovs-dpctl dump-flows [dp]
Top like behavior for ovs-dpctl dump-flows
    ovs-dpctl-top

XenServer 開啓 OpenvSwitch 方式

檢查開啟與否
    service openvswitch status
開啓
    xe-switch-network-backend openvswitch
關閉
    xe-switch-network-backend bridge

關於 Log

查詢 log level list
    ovs-appctl vlog/list
設定 log level (以 stp 設定 file 為 dbg level 為例)
    ovs-appctl vlog/set stp:file:dbg
    ovs-appctl vlog/set {module name}:{console, syslog, file}:{off, emer, err, warn, info, dbg}

關於 Fallback

Controller connection: false 的時候, 會自動調成 legacy switch mode
    ovs-vsctl set-fail-mode ovs-br standalone
無論 Controller connection status 為何, 都必須通過 OpenFlow 來進行網路行為 (default)
    ovs-vsctl set-fail-mode ovs-br secure
移除
    ovs-vsctl del-fail-mode ovs-br
查詢
    ovs-vsctl get-fail-mode ovs-br

關於 sFlow

查詢
    ovs-vsctl list sflow
新增
    Set sFlow
刪除
    ovs-vsctl -- clear Bridge ovs-br sflow

關於 NetFlow

查詢
    ovs-vsctl list netflow
新增
    Set NetFlow
刪除
    ovs-vsctl -- clear Bridge ovs-br netflow

設定 Out-of-band 和 in-band

查詢
    ovs-vsctl get controller ovs-br connection-mode
Out-of-band
    ovs-vsctl set controller ovs-br connection-mode=out-of-band
In-band (default)
    ovs-vsctl set controller ovs-br connection-mode=in-band
移除 hidden flow
    ovs-vsctl set bridge br0 other-config:disable-in-band=true

關於 ssl

查詢
    ovs-vsctl get-ssl
設定
    ovs-vsctl set-ssl sc-privkey.pem sc-cert.pem cacert.pem
    OpenvSwitch Lab 6$ TLS SSL
刪除
    ovs-vsctl del-ssl

關於 SPAN

詳細設定

ovs-vsctl add-br ovs-br
ovs-vsctl add-port ovs-br eth0
ovs-vsctl add-port ovs-br eth1
ovs-vsctl add-port ovs-br tap0 \
– –id=@p get port tap0 \
– –id=@m create mirror name=m0 select-all=true output-port=@p \
– set bridge ovs-br mirrors=@m

將 ovs-br 上 add-port {eth0,eth1} mirror 至 tap0

刪除
    ovs-vsctl clear bridge ovs-br mirrors # 關於 Table
查 table ovs-ofctl dump-tables ovs-br

關於 Group Table

參考 hwchiu - Multipath routing with Group table at mininet

建立 Group id 及對應的 bucket
    ovs-ofctl -O OpenFlow13 add-group ovs-br group_id=5566,type=select,bucket=output:1,bucket=output:2,bucket=output:3
    type 共有 All, Select, Indirect, FastFailover, 詳細規格

使用 Group Table
    ovs-ofctl -O OpenFlow13 add-flow ovs-br in_port=4,actions=group:5566

關於 VXLAN

參考 rascov - Bridge Remote Mininets using VXLAN

建立 VXLAN Network ID (VNI) 和指定的 OpenFlow port number, eg: VNI=5566, OF_PORT=9
    ovs-vsctl set interface vxlan type=vxlan option:remote_ip=x.x.x.x option:key=5566 ofport_request=9

VNI flow by flow
    ovs-vsctl set interface vxlan type=vxlan option:remote_ip=140.113.215.200 option:key=flow ofport_request=9

設定 VXLAN tunnel id
    ovs-ofctl add-flow ovs-br in_port=1,actions=set_field:5566->tun_id,output:2
    ovs-ofctl add-flow s1 in_port=2,tun_id=5566,actions=output:1

關於 OVSDB Manager

參考 OVSDB Integration:Mininet OVSDB Tutorial

Active Listener 設定
    ovs-vsctl set-manager tcp:1.2.3.4:6640
Passive Listener 設定
    ovs-vsctl set-manager ptcp:6640

OpenFlow Trace

Generate pakcet trace
    ovs-appctl ofproto/trace ovs-br in_port=1,dl_src=00:00:00:00:00:01,dl_dst=00:00:00:00:00:02 -generate

其它

查詢 OpenvSwitch 版本
    ovs-ofctl -V
查詢下過的指令歷史記錄
    ovsdb-tool show-log [-mmm]

OVS wiki:

http://openvswitch.org/support/dist-docs/

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

造夢先森

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值