OVS常用命令与使用总结(转载)

1. 进程启动

  1. 先准备ovs的工作目录,数据库存储路径等

  2. 先启动ovsdb-server

    ps: 如果想清除配置,可以先删除/etc/openvswitch/*,然后再手动创建一个数据库:

  3. 初始化ovsdb
    针对于新创建的数据库才需要初始化

  4. 启动vswitchd进程

2. ovs常用命令

  • ovs-vsctl用于控制ovs db
  • ovs-ofctl用于管理OpenFlow switch 的 flow
  • ovs-dpctl用于管理ovs的datapath
  • ovs-appctl用于查询和管理ovs daemon

2.1. 控制管理类

  1. 查看网桥和端口

  2. 创建一个网桥

  3. 添加/删除一个端口

  4. 设置/清除网桥的openflow协议版本

  5. 查看某网桥当前流表

  6. 设置/删除某网桥的控制器,ovs-ofctl可以通过controller连接到网桥执行命令

  7. 查看控制器列表

  8. 设置/删除被动连接控制器
    针对ovsdb-server,一个host上只会有一个manager,ovs-vsctl/ovsdb-client可以通过manager连接到ovsdb-server。

  9. 设置/移除可选选项

  10. 设置fail模式,支持standalone或者secure

    • standalone(default):清除所有控制器下发的流表,ovs自己接管
    • secure:按照原来流表继续转发

  11. 查看接口id等

    ovs-appctl 命令用于查询和管理 ovs daemon,主要是向 ovs-vswitchd 守护进程发送命令的,查看不同模块状态。

  12. 查看接口统计

  13. 测试ovs对数据包的转发情况

    • ovs-appctl ofproto/trace 可以测试ovs对数据包的转发情况

2.2. 流表类

2.2.1. 流表操作

  1. 查看网桥的流表命令:

  2. 查看网桥中端口对应的number:

  3. 添加普通流表

  4. 删除所有流表

  5. 按匹配项来删除流表

2.2.2. 匹配项

  1. 匹配vlan tag,范围为0-4095

  2. 匹配vlan pcp,范围为0-7

  3. 匹配源/目的MAC

  4. 匹配以太网类型,范围为0-65535

  5. 匹配源/目的IP
    条件:指定dl_type=0x0800,或者ip/tcp

  6. 匹配协议号,范围为0-255
    条件:指定dl_type=0x0800或者ip

  7. 匹配IP ToS/DSCP,tos范围为0-255,DSCP范围为0-63
    条件:指定dl_type=0x0800/0x86dd,并且ToS低2位会被忽略(DSCP值为ToS的高6位,并且低2位为预留位)

  8. 匹配IP ecn位,范围为0-3

    条件:指定dl_type=0x0800/0x86dd

  9. 匹配IP TTL,范围为0-255

  10. 匹配tcp/udp,源/目的端口,范围为0-65535

  11. 匹配tcp flags
    tcp flags=fin,syn,rst,psh,ack,urg,ece,cwr,ns

  12. 匹配icmp code,范围为0-255
    条件:指定icmp

  13. 匹配vlan TCI

    TCI低12位为vlan id,高3位为priority,例如tci=0xf123则vlan_id为0x123和vlan_pcp=7

  14. 匹配mpls label
    条件:指定dl_type=0x8847/0x8848

  15. 匹配mpls tc,范围为0-7
    条件:指定dl_type=0x8847/0x8848

  16. 匹配tunnel id,源/目的IP

    • 一些匹配项的速记符
    速记符 匹配项
    ip dl_type=0x800
    ipv6 dl_type=0x86dd
    icmp dl_type=0x0800,nw_proto=1
    icmp6 dl_type=0x86dd,nw_proto=58
    tcp dl_type=0x0800,nw_proto=6
    tcp6 dl_type=0x86dd,nw_proto=6
    udp dl_type=0x0800,nw_proto=17
    udp6 dl_type=0x86dd,nw_proto=17
    sctp dl_type=0x0800,nw_proto=132
    sctp6 dl_type=0x86dd,nw_proto=132
    arp dl_type=0x0806
    rarp dl_type=0x8035
    mpls dl_type=0x8847
    mplsm dl_type=0x8848

2.2.3. 指令动作 actions

  1. 动作为出接口

    从指定接口转发出去

  2. 动作为指定group

    group id为已创建的group table

  3. 动作为normal

    转为L2/L3处理流程。

    • NORMAL表示L2正常交换机转发;
    • ovs新增了NORMAL2的Action来实现L3的转发,OVS会进行MAC学习,源MAC和目的MAC的转换,源IP的转换;

  4. 动作为flood

    从所有物理接口转发出去,除了入接口和已关闭flooding的接口

  5. 动作为all
    从所有物理接口转发出去,除了入接口

  6. 动作为local
    一般是转发给本地网桥

  7. 动作为in_port
    从入接口转发回去

  8. 动作为controller
    以packet-in消息上送给控制器

  9. 动作为drop
    丢弃数据包操作

  10. 动作为mod_vlan_vid
    修改报文的vlan id,该选项会使vlan_pcp置为0

  11. 动作为mod_vlan_pcp
    修改报文的vlan优先级,该选项会使vlan_id置为0

  12. 动作为strip_vlan
    剥掉报文内外层vlan tag

  13. 动作为pop_vlan

    弹出报文最外层vlan tag

  14. 动作为push_vlan
    在报文外层压入一层vlan tag,需要使用openflow1.1以上版本兼容

    ps: set field值为4096+vlan_id,并且vlan优先级为0,即4096-8191,对应的vlan_id为0-4095

  15. 动作为push_mpls

    修改报文的ethertype,并且压入一个MPLS LSE

  16. 动作为pop_mpls
    剥掉最外层mpls标签,并且修改ethertype为非mpls类型

  17. 动作为修改源/目的MAC,修改源/目的IP

  18. 动作为修改TCP/UDP/SCTP源目的端口mod_tp_dst

  19. 动作为mod_nw_tos
    条件:指定dl_type=0x0800
    修改ToS字段的高6位,范围为0-255,值必须为4的倍数,并且不会去修改ToS低2位ecn值

  20. 动作为mod_nw_ecn
    条件:指定dl_type=0x0800,需要使用openflow1.1以上版本兼容
    修改ToS字段的低2位,范围为0-3,并且不会去修改ToS高6位的DSCP值

  21. 动作为mod_nw_ttl
    修改IP报文ttl值,需要使用openflow1.1以上版本兼容

  22. 动作为dec_ttl
    对IP报文进行ttl自减操作

  23. 动作为set_mpls_label
    对报文最外层mpls标签进行修改,范围为20bit值

  24. 动作为set_mpls_tc
    对报文最外层mpls tc进行修改,范围为0-7

  25. 动作为set_mpls_ttl
    对报文最外层mpls ttl进行修改,范围为0-255

  26. 动作为dec_mpls_ttl
    对报文最外层mpls ttl进行自减操作

  27. 动作为move NXM字段
    使用move参数对NXM字段进行操作

    ps: 常用NXM字段参照表 NXM字段 报文字段
    NXM_OF_ETH_SRC 源MAC
    NXM_OF_ETH_DST 目的MAC
    NXM_OF_ETH_TYPE 以太网类型
    NXM_OF_VLAN_TCI vid
    NXM_OF_IP_PROTO IP协议号
    NXM_OF_IP_TOS IP ToS值
    NXM_NX_IP_ECN IP ToS ECN
    NXM_OF_IP_SRC 源IP
    NXM_OF_IP_DST 目的IP
    NXM_OF_TCP_SRC TCP源端口
    NXM_OF_TCP_DST TCP目的端口
    NXM_OF_UDP_SRC UDP源端口
    NXM_OF_UDP_DST UDP目的端口
    NXM_OF_SCTP_SRC SCTP源端口
    NXM_OF_SCTP_DST SCTP目的端口
  28. 动作为load NXM字段

    使用load参数对NXM字段进行赋值操作

2.3. meter表

2.3.1. 常用操作

由于meter表是openflow1.3版本以后才支持,所以所有命令需要指定OpenFlow1.3版本以上
ps: 在openvswitch-v2.8之前的版本中,还不支持meter
在v2.8版本之后已经实现,要正常使用的话,需要注意的是datapath类型要指定为netdev,band type暂时只支持drop,还不支持DSCP REMARK

  1. 查看当前设备对meter的支持

  2. 查看meter表

  3. 查看meter统计

  4. 创建meter表,设置限速或统计规则

  5. 删除meter表

  6. 创建流表并绑定meter

2.4. group表

由于group表是openflow1.1版本以后才支持,所以所有命令需要指定OpenFlow1.1版本以上

2.4.1. 常用操作

group table支持4种类型

  • all:所有buckets都执行一遍
  • select: 每次选择其中一个bucket执行,常用于负载均衡应用
  • ff(FAST FAILOVER):快速故障修复,用于检测解决接口等故障
  • indirect:间接执行,类似于一个函数方法,被另一个group来调用
  1. 查看当前设备对group的支持

  2. 查看group表

  3. 创建group表

  4. 删除group表

  5. 创建流表

2.5. goto table配置

数据流先从table0开始匹配,如actions有goto_table,再进行后续table的匹配,实现多级流水线,如需使用goto table,则创建流表时,指定table id,范围为0-255,不指定则默认为table0

  1. 在table0中添加一条流表条目

  2. 在table1中添加一条流表条目

2.6. tunnel配置

如需配置tunnel,必需确保当前系统对各tunnel的remote ip网络可达

2.6.1. gre

  1. 创建一个gre接口,并且指定端口id=1001

  2. 可选选项
    将tos或者ttl在隧道上继承,并将tunnel id设置成123

  3. 创建关于gre流表

2.6.2. vxlan

  1. 创建一个vxlan接口,并且指定端口id=2001

  2. 可选选项
    将tos或者ttl在隧道上继承,将vni设置成123,UDP目的端为设置成8472(默认为4789)

  3. 创建关于vxlan流表

2.7. sflow配置

  1. 对网桥br0进行sflow监控

    • agent: 与collector通信所在的网口名,通常为管理口
    • target: collector监听的IP地址和端口,端口默认为6343
    • header: sFlow在采样时截取报文头的长度
    • polling: 采样时间间隔,单位为秒

  2. 查看创建的sflow

  3. 删除对应的网桥sflow配置,参数为sFlow UUID

  4. 删除网桥下所有sflow配置

2.8. QoS配置

2.8.1. ingress policing

  1. 配置ingress policing,对接口eth0入流限速10Mbps

  2. 清除相应接口的ingress policer配置

  3. 查看接口ingress policer配置

  4. 查看网桥支持的Qos类型

2.9. 端口镜像配置

  1. 配置eth0收到/发送的数据包镜像到eth

  2. 删除端口镜像配置

  3. 清除网桥下所有端口镜像配置

  4. 查看端口镜像配置

2.10. 聚合口配置

  1. 创建一个聚合口

  2. 设置聚合口模式

  3. 查看mode=4 lacp协商状态

参考文档

赞赏

微信赞赏支付宝赞赏

发表评论

邮箱地址不会被公开。 必填项已用*标注