ovs学习记录

1、安装

# 安装依赖环境
apt install gcc make uuid

# 下载源码
https://www.openvswitch.org/releases/openvswitch-3.1.1.tar.gz

# 编译安装
tar -xvf openvswitch-3.1.1.tar.gz
cd openvswitch-3.1.1 && ./configure
make && make install

2、运行

openvswitch有几个脚本放在/usr/local/share/openvswitch/scripts下,为了方便使用,可以设置PATH路径。由于运行需要root权限,可以切换到root,再设置PATH。

export PATH=$PATH:/usr/local/share/openvswitch/scripts

启动ovs,需要使用random或UUID工具生成系统ip。

ovs-ctl --system-id=`uuid` restart

3、创建自启动服务

创建服务脚本

touch /etc/systemd/system/ovs.service
nano /etc/systemd/system/ovs.service

脚本内容

[Unit]
Description=Open vSwitch server daemon
After=network.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/local/share/openvswitch/scripts/ovs-ctl start
ExecStop=/usr/local/share/openvswitch/scripts/ovs-ctl stop

[Install]
WantedBy=multi-user.target

加载服务并设置开机自启

systemctl daemon-reload
systemctl enable ovs

4、配置网桥

(1)创建虚拟网桥

# 创建网桥
ovs-vsctl add-br br0
# 将端口加入网桥
ovs-vsctl add-port br0 eth0
ovs-vsctl add-port br0 eth0
# 物理端口开启混杂模式,采用vm虚拟机时需要虚拟主机端口开启混杂模式和伪传输
ip link set eth0 promisc on
ip link set eth1 promisc on
# 启用网桥
ip link set eth0 up
ip link set eth1 up
ip link set br0 up

(2)查看网桥状态

ovs-vsctl show
# 查看所有网桥
ovs-vsctl list-br
# 列出挂载了端口的网桥
ovs-vsctl port-to-br eth0
# 删除网桥上已经挂接的网口
ovs-vsctl del-port br0 eth0
# 删除网桥
ovs-vsctl del-br br0
# 查看网桥上的phy1端口信息
ovs-vsctl list port br0 phy1

(3)配置stp

默认网桥是没有开启生成树协议的,如果出现冗余线路,则可能会出现环路的情况

# 检查br0的网桥功能是否开启
ovs-vsctl get bridge br0 stp_enable
# 开启stp功能
ovs-vsctl set bridge br0 stp_enable=true
# 查看网桥配置信息
ovs-vsctl list bridge br0

(4)设置网桥不连接控制器的转发模式

ovs 交换机在连接不上控制器时有一个fail_mode的标志,当sdn控制器故障时,交换机的模式;fail_mode 故障模式有两种状态,standalone、secure。

  • standalone mode,在三次探测控制器连接不成功后,此时ovs-vswitchd将会接管转发逻辑(后台仍然尝试连接到控制器,一旦连接则退出fail状态),OpenvSwitch将作为一个正常的mac 学习的二层交换机。
  • secure mode,则ovs-vswitchd将不会自动配置新的转发流表,OpenvSwitch将按照原先有的流表转发
# standalone(default):清除所有控制器下发的流表,ovs自己接管 
# secure:按照原来流表继续转发
# 查看当前转发模式
ovs-vsctl get-fail-mode br0
# 配置为secure模式
ovs-vsctl set-fail-mode br0 secure 
# 查看网桥信息
ovs-vsctl show

删除fail mode标志

ovs-vsctl del-fail-mode br0 

(5)mac表学习

工作在普通交换机模式下就有mac自学习功能。和普通的交换机一样,ovs交换机也能查看mac和端口关系的对应表。

ovs-appctl fdb/show br0

5、流表配置

(1)将port1 in方向的流量转发到port2,port2同理,port编号通过ovs-vsctl show查看

ovs-ofctl add-flow br0 in_port=1,action=output:2
ovs-ofctl add-flow br0 in_port=2,action=output:1

(2)匹配ip地址

dl_type:表示指定的协议。ip为:0x0800

nw_src: 源ip地址

nw_dst: 目的ip地址

ovs-ofctl add-flow br0 dl_type=0x0800,nw_dst=10.0.0.0/8,action=output:0
ovs-ofctl add-flow br0 dl_type=0x0800,nw_dst=10.0.0.0/10,action=output:1

(3)删除流表

dl_type字段名称表

字段名称 说明
in_port=port 传递数据包的端口的 OpenFlow 端口编号
dl_vlan=vlan 数据包的 VLAN Tag 值,范围是 0-4095,0xffff 代表不包含 VLAN Tag 的数据包
dl_vlan_pcp=priority VLAN 优先级,改值取值区间为[0-7]。数字越大,表示优先级越高。
dl_src= dl_dst= 匹配源或者目标的 MAC地址01:00:00:00:00:00/01:00:00:00:00:00 代表广播地址00:00:00:00:00:00/01:00:00:00:00:00 代表单播
dl_type=ethertype 匹配以太网协议类型,其中: dl_type=0x0800 代表 IPv4 协议 dl_type=0x086dd 代表 IPv6 协议 dl_type=0x0806 代表 ARP 协议
nw_src=ip[/netmask]nw_dst=ip[/netmask] 当 dl_typ=0x0800 时,匹配源或者目标的 IPv4 地址,可以使 IP 地址或者域名
nw_proto=proto 和 dl_type 字段协同使用。当 dl_type=0x0800 时,匹配 IP 协议编号 当 dl_type=0x086dd 代表 IPv6 协议编号
table=number 指定要使用的流表的编号,范围是 0-254。在不指定的情况下,默认值为 0 通过使用流表编号,可以创建或者修改多个 Table 中的 Flow
reg=value[/mask] 交换机中的寄存器的值。当一个数据包进入交换机时,所有的寄存器都被清零,用户可以通过 Action 的指令修改寄存器中的值
tp_src=number TCP/UDP/SCTP 源端口
tp_dst=number TCP/UDP/SCTP 目的端口
上一篇
下一篇