OVS操作总结

Open vSwitch(下面简称为 OVS)是由 Nicira Networks 主导的,运行在虚拟化平台(例如 KVM,Xen)上的虚拟交换机。在虚拟化平台上,OVS 可以为动态变化的端点提供 2 层交换功能,很好的控制虚拟网络中的访问策略、网络隔离、流量监控等等。
OVS 遵循 Apache 2.0 许可证, 能同时支持多种标准的管理接口和协议。OVS 也提供了对 OpenFlow 协议的支持,用户可以使用任何支持 OpenFlow 协议的控制器对 OVS 进行远程管理控制。
在 OVS 中, 有几个非常重要的概念:
  • Bridge: Bridge 代表一个以太网交换机(Switch),一个主机中可以创建一个或者多个Bridge 设备。
  • Port: 端口与物理交换机的端口概念类似,每个 Port 都隶属于一个 Bridge。
  • Interface: 连接到 Port 的网络接口设备。在通常情况下,Port 和 Interface 是一对一的关系, 只有在配置 Port 为 bond 模式后,Port 和 Interface 是一对多的关系
  • Controller: OpenFlow 控制器。OVS 可以同时接受一个或者多个 OpenFlow 控制器的管理。
  • datapath: 在 OVS 中,datapath 负责执行数据交换,也就是把从接收端口收到的数据包在流表中进行匹配,并执行匹配到的动作。
  • Flow table: 每个 datapath 都和一个“flow table”关联,当 datapath 接收到数据之后, OVS 会在 flow table 中查找可以匹配的 flow,执行对应的操作, 例如转发数据到另外的端口。


网桥管理

非ovsdb数据库操作:
  1. #添加网桥
  2. ovs-vsctl add-br br-int

  3. #列出网桥
  4. ovs-vsctl list-br

  5. #给网桥添加端口
  6. ovs-vsctl add-port br-int tap-xxx

  7. #列出挂载某网络接口的所有网桥
  8. ovs-vsctl port-to-br tap-xxx

  9. #查看全部信息
  10. ovs-vsctl show
复制代码


ovsdb数据库操作:

  1. #通用格式为
  2. ovs-vsctl list/set/get/add/remove/clear/destroy table record column [value]

  3. #默认情况下ovsdb中包含的数据表
  4. bridge, controller,interface,mirror,netflow,open_vswitch,port,qos,queue,ssl,sflow

  5. #举例 查看所有网桥
  6. ovs-vsctl list bridge

  7. #举例 删除一条qos记录
  8. ovs-vsctl destroy qos <qos-id>

  9. #修改端口 p1 的 VLAN tag 为 101,使端口 p1 成为一个隶属于 VLAN 101 的端口
  10. ovs-vsctl set Port p1 tag=101
复制代码


流规则管理

每条流规则由一系列字段组成,分为基本字段、条件字段和动作字段三部分。
基本字段包括:
  • 生效时间 duration_sec
  • 所属表项 table_id
  • 优先级 priority、
  • 处理的数据包数 n_packets
  • 空闲超时时间 idle_timeout 等空闲超时时间 idle_timeout 以秒为单位,超过设置的空闲超时时间后该流规则将被自动删除,空闲超时时间设置为 0 表示该流规则永不过期,idle_timeout 将不包含于 ovs-ofctl dump-flows brname 的输出中。
条件字段包括:
  • 输入端口号 in_port
  • 源目的 mac 地址 dl_src/dl_dst
  • 源目的 ip 地址 nw_src/nw_dst
  • 数据包类型 dl_type
  • 网络层协议类型 nw_proto
这些字段可以任意组合,但在网络分层结构中底层的字段未给出确定值时上层的字段不允许给确定值,即一 条流规则中允许底层协议字段指定为确定值,高层协议字段指定为通配符(不指定即为匹配任何值),而不允许高层协议字段指定为确定值, 而底层协议字段却为通配符(不指定即为匹配任何值),否则,ovs-vswitchd 中的流规则将全部丢失,网络无法连接。
动作字段包括正常转发 normal、定向到某交换机端口 output:port、丢弃 drop、更改源目 的 mac 地址 mod_dl_src/mod_dl_dst 等,一条流规则可有多个动作,动作执行按指定的先后顺序依次完成。
示例:


  1. #查看某网桥信息
  2. ovs-ofctl show br-tun

  3. #查看某网桥上所有端口的状态
  4. ovs-ofctl dump-ports br-tun

  5. #添加一条流表规则 丢弃从port2上发来的所有数据表
  6. ovs-ofctl add-flow br-tun idle_timeout=120,in_port=2,actions=drop

  7. #查看某网桥上面的流表规则
  8. ovs-ofctl dump-flows br-tun

  9. #屏蔽所有进入 OVS 的以太网广播数据包
  10. ovs-ofctl add-flow ovs-switch "table=0, dl_src=01:00:00:00:00:00/01:00:00:00:00:00, actions=drop"

  11. #屏蔽 STP 协议的广播数据包
  12. ovs-ofctl add-flow ovs-switch "table=0, dl_dst=01:80:c2:00:00:00/ff:ff:ff:ff:ff:f0, actions=drop"
复制代码


Qos设置

Qos可以针对网络接口,也可以针对端口设置:
  1. #针对网络接口  1000±100kbps
  2. ovs-vsctl set interface tap-xxx ingress_policing_rate=1000
  3. ovs-vsctl set interface tap-xxx ingress_policing_burst=100
复制代码
官方参考  http://openvswitch.org/support/c ... /qos-rate-limiting/


端口映射
将发往 p0 端口和从 p1 端口发出的数据包全部定向到 p2 端口,用 ovs-vsctl list port 命令查看 p0、p1、p2 端口的 uuid 分别为id1、id2、id3:
  1. ovs-vsctl --set bridge br0 mirrors=@m-- --id=@m create mirror name=mymirror  \
  2. select-dst-port=id_1 \
  3. select-src-port=id_2 \
  4. output-port=id_3
复制代码


其他设置

屏蔽对目的主机访问:

  1. ovs-ofctl add-flow br0 idle_timeout=0,dl_type=0x0800,nw_src=xx.xx.xx.xx,actions=drop
复制代码
### Open vSwitch (OVS) 安装指南 #### 1. 使用APT安装Open vSwitch 在基于Debian的系统(如Ubuntu)上,可以通过APT包管理器轻松安装Open vSwitch。以下是具体操作: ```bash sudo apt update sudo apt install -y openvswitch-switch openvswitch-common openvswitch-doc ``` `openvswitch-switch` 是核心组件,提供虚拟交换机功能[^1]。 `openvswitch-common` 提供通用组件和库文件,作为其他相关软件包的依赖项[^1]。 `openvswitch-doc` 则包含了官方文档,适合需要深入学习的用户。 --- #### 2. 手动编译并安装Open vSwitch 如果希望从源码安装最新版本的OVS,可以按照以下步骤操作: ##### 下载源码 可以从GitHub仓库或其他官方渠道获取源码: ```bash git clone https://github.com/openvswitch/ovs.git cd ovs ``` 或者直接下载压缩包: ```bash wget http://openvswitch.org/releases/openvswitch-<version>.tar.gz tar zxvf openvswitch-<version>.tar.gz cd openvswitch-<version> ``` ##### 准备环境 确保已安装必要的开发工具和依赖项: ```bash sudo apt install build-essential libssl-dev python3-pip python3-setuptools autoconf automake bzip2 gcc make pkg-config unzip zlib1g-dev ``` ##### 编译与安装 执行以下命令完成编译和安装过程: ```bash ./boot.sh ./configure --prefix=/usr/local make sudo make install ``` 最后,配置环境变量以便全局访问OVS工具: ```bash export PATH=$PATH:/usr/local/share/openvswitch/scripts/ source /etc/profile ``` 以上步骤适用于大多数Linux发行版[^5]。 --- #### 3. 初始化数据库和服务 安装完成后,需初始化OVS数据库并启动服务: 创建运行目录: ```bash sudo mkdir -p /usr/local/var/run/openvswitch ``` 生成初始数据库文件: ```bash sudo ovsdb-tool create /usr/local/etc/openvswitch/conf.db vswitchd/vswitch.ovsschema ``` 启动 `ovsdb-server` 和 `ovs-vswitchd`: ```bash sudo ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock \ --remote=db:Open_vSwitch,Open_vSwitch,manager_options \ --private-key=db:Open_vSwitch,SSL,private_key \ --certificate=db:Open_vSwitch,SSL,certificate \ --bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert \ --pidfile --detach --log-file & sudo ovs-vswitchd --pidfile --detach --log-file ``` 注意:某些情况下可能会遇到警告信息(如“Resource temporarily unavailable”),这通常是无害的,可忽略[^3]。 --- #### 4. 验证安装 验证OVS是否正常工作: ```bash ovs-vsctl show ``` 此命令会显示当前OVS的桥接、端口和其他配置信息。 --- #### 5. Docker环境中使用OVS 在Docker场景下,可能需要额外启用特定隧道协议支持(如Geneve或STT)。确保内核版本满足需求(Geneve最低支持3.18[^4]),并通过加载相应模块来激活功能: ```bash lsmod | grep geneve ``` 如果没有加载,则手动加载: ```bash sudo modprobe geneve ``` --- ### 总结 通过APT安装是最简单的方式,而从源码构建则允许更灵活地定制功能。无论哪种方法,都需要正确初始化数据库和服务才能正常使用OVS---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值