目录
[2. OVS 集群 使用VXLAN 流表(单租户)](#2. OVS 集群 使用VXLAN 流表(单租户))
[3. OVS 集群 使用VXLAN 流表(多租户)](#3. OVS 集群 使用VXLAN 流表(多租户))
一、实验
1.环境
(1) 主机
表1 宿主机
|----------------|-----|--------------------|----------------|---------------------------------|-----|
| 主机 | 架构 | 软件 | IP | 网卡 | 备注 |
| ovs_controller | 控制端 | karaf 0.7.3 | 192.168.204.63 | 1个NAT网卡 (204网段) | 已部署 |
| ovs_server01 | 服务端 | OpenvSwitch v2.5.1 | 192.168.204.61 | 1个NAT网卡 (204网段), 1个仅主机网卡 (88网段) | 已部署 |
| ovs_server02 | 服务端 | OpenvSwitch v2.5.1 | 192.168.204.62 | 1个NAT网卡 (204网段), 1个仅主机网卡 (88网段) | 已部署 |
表2 目标云主机
|---------------|------------|-----------------|
| 云主机 | IP | 备注 |
| cloudserver01 | 172.16.1.1 | 宿主机ovs_server01 |
| cloudserver02 | 172.16.1.2 | 宿主机ovs_server02 |
(2) 查看IP
ovs_controller
ovs_server01
ovs_server02
(3)查看OVS
bash
ovs-vsctl show
ovs_server01
ovs_server02
(4)查看OVS流表节点
ovs_server01
bash
ovs-ofctl show ovs01 -O OpenFlow13
ovs_server02
bash
ovs-ofctl show ovs02 -O OpenFlow13
(5) 查看OVS流表信息
ovs_server01
bash
ovs-ofctl dump-flows ovs01 -O OpenFlow13
ovs_server02
bash
ovs-ofctl dump-flows ovs02 -O OpenFlow13
2. OVS 集群 使用VXLAN 流表(单租户)
(1)服务端删除云交换机端口
ovs_server01
bash
ovs-vsctl del-port vxlan0
ovs-vsctl show
ovs_server02
bash
ovs-vsctl del-port ovs02 vxlan0
ovs-vsctl show
(2)添加端口与VXLAN接⼝
ovs_server01
bash
ovs-vsctl add-port ovs01 vtep -- set interface vtep type=vxlan option:remote_ip=192.168.204.62 option:key=flow ofport_request=10
ovs-vsctl show
ovs_server02
bash
ovs-vsctl add-port ovs02 vtep -- set interface vtep type=vxlan option:remote_ip=192.168.204.61 option:key=flow ofport_request=10
ovs-vsctl show
(3)查看接口
ovs_server01
bash
ovs-ofctl show ovs01
ovs_server02
bash
ovs-ofctl show ovs02
(4)查看接口列表
bash
ovs-vsctl -- --columns=name,ofport list Interface
ovs_server01
ovs_server02
(5)添加控制端
ovs_server01
bash
ovs-vsctl set-controller ovs01 tcp:192.168.204.63:6633
ovs_server02
bash
ovs-vsctl set-controller ovs02 tcp:192.168.204.63:6633
(6)查看ODL
Nodes节点信息Topology拓扑信息(VXLAN-TRUNK没有连接线)
(7)查看控制端下发的OVS默认流表
ovs_server01
bash
ovs-ofctl dump-flows ovs01 -O OpenFlow13
ovs_server02
bash
ovs-ofctl dump-flows ovs02 -O OpenFlow13
(8)流量抓包
ovs_server01 抓取ens33网卡,发送端口随机,接收端口都为4789
bash
tcpdump -i ens33 | grep -i vxlan
(9)流量写入本地
ovs_server01
bash
tcpdump -i ens33 -w vxlan-vni0.pcap
云主机01 ping 云主机02
ovs_server01 结束抓包
(10)流向分析
表3 流向分析
|----------------------------|----|----------------------------|
| 云主机cloudserver01 | 流向 | 云主机cloudserver01 |
| in_port=1,action=output:10 | → | in_port=10,action=output:1 |
| in_port=10,action=output:1 | ← | in_port=1,action=output:10 |
(11)查看下载的流量包
过滤vxlan
所有VNI 都被打上标签0
3. OVS 集群 使用VXLAN 流表(多租户)
(1)初始化流表
ovs_server01
bash
ovs-ofctl del-flows ovs01 -O Openflow13
ovs_server02
bash
ovs-ofctl del-flows ovs02 -O Openflow13
(2)查看流表
ovs_server01
bash
ovs-ofctl dump-flows ovs01 -O openflow13
ovs_server02
bash
ovs-ofctl dump-flows ovs02 -O openflow13
(3)查看MAC
ovs_server01
bash
ovs-appctl fdb/show ovs01
ovs_server02
bash
ovs-appctl fdb/show ovs02
(4)关闭云主机
cloudserver01
cloudserver02
(5)查看MAC
cloudserver01
cloudserver02
(6)查看云主机
bash
virsh list --all
ovs_server01
ovs_server02
(7)ovs_server01 修改云主机MAC
bash
virsh edit cloudserver01
:/interface
修改前:
修改后:
bash
00:00:00:00:aa:01
(8)ovs_server02修改云主机MAC
bash
virsh edit cloudserver02
:/interface
修改前:
修改后:
bash
00:00:00:00:aa:02
(9)再次查看云主机MAC
cloudserver01已更新
cloudserver02已更新
(10)启动云主机
cloudserver01
cloudserver02
(11)修改云主机网卡
cloudserver01
cloudserver02
(12)网络测试
云主机01 ping 云主机02,目前不通
(13)构建⾃定义多租户VXLAN流表
ovs_server01
bash
sudo ovs-ofctl -O OpenFlow13 add-flow ovs01 "table=0,in_port=1,actions=set_field:10001->tun_id,resubmit(,1)"
sudo ovs-ofctl -O OpenFlow13 add-flow ovs01 "table=0,actions=resubmit(,1)"
sudo ovs-ofctl -O OpenFlow13 add-flow ovs01 "table=1,tun_id=10001,dl_dst=00:00:00:00:aa:01,actions=output:1"
sudo ovs-ofctl -O OpenFlow13 add-flow ovs01 "table=1,tun_id=10001,dl_dst=00:00:00:00:aa:02,actions=output:10"
sudo ovs-ofctl -O OpenFlow13 add-flow ovs01 "table=1,tun_id=10001,arp,nw_dst=172.16.1.1,actions=output:1"
sudo ovs-ofctl -O OpenFlow13 add-flow ovs01 "table=1,tun_id=10001,arp,nw_dst=172.16.1.2,actions=output:10"
sudo ovs-ofctl -O OpenFlow13 add-flow ovs01 "table=1,priority=100,actions=drop"
ovs_server02
bash
sudo ovs-ofctl -O OpenFlow13 add-flow ovs02 "table=0,in_port=1,actions=set_field:10001->tun_id,resubmit(,1)"
sudo ovs-ofctl -O OpenFlow13 add-flow ovs02 "table=0,actions=resubmit(,1)"
sudo ovs-ofctl -O OpenFlow13 add-flow ovs02 "table=1,tun_id=10001,dl_dst=00:00:00:00:aa:02,actions=output:1"
sudo ovs-ofctl -O OpenFlow13 add-flow ovs02 "table=1,tun_id=10001,dl_dst=00:00:00:00:aa:01,actions=output:10"
sudo ovs-ofctl -O OpenFlow13 add-flow ovs02 "table=1,tun_id=10001,arp,nw_dst=172.16.1.2,actions=output:1"
sudo ovs-ofctl -O OpenFlow13 add-flow ovs02 "table=1,tun_id=10001,arp,nw_dst=172.16.1.1,actions=output:10"
sudo ovs-ofctl -O OpenFlow13 add-flow ovs02 "table=1,priority=100,actions=drop"
(14) 查看流表
ovs_server01
bash
ovs-ofctl dump-flows ovs01 -O openflow13
ovs_server02
bash
ovs-ofctl dump-flows ovs02 -O openflow13
(15)网络测试
云主机01 ping 云主机02,目前已通
(16)流量抓包下入本地
ovs_server01
bash
tcpdump -i ens33 -w vxlan-vni10001.pcap
云主机01 ping 云主机02
抓包结束
(17)流量分析
过滤vxlan
VNI为10001
其他LLDP的VNI为0
(18)流量抓包在线获取
bash
tcpdump -i ens33 | grep -i vxlan
云主机01 ping 云主机02
抓包结束(1口的流量VNI为10001,其他LLDP的VNI为0)
二、问题
1.如何添加VXLAN接⼝
(1)ovs_server01 添加
key=flow表示隧道的VNI是通过流表来指定;ofport_request=10 表示端⼝号码设置为10
bash
ovs-vsctl add-port ovs01 vtep -- set interface vtep type=vxlan option:remote_ip=192.168.204.62 option:key=flow ofport_request=10
ovs-vsctl show
(2)ovs_server02 添加
key=flow表示隧道的VNI是通过流表来指定;ofport_request=10 表示端⼝号码设置为10
bash
ovs-vsctl add-port ovs02 vtep -- set interface vtep type=vxlan option:remote_ip=192.168.204.61 option:key=flow ofport_request=10
ovs-vsctl show
2.virsh修改云主机MAC报错
(1)报错
bash
错误:(domain_definition):71: attributes construct error
<mac address=''00:00:00:00:aa:01'/>
---------------------^
失败的。 Try again? [y,n,i,f,?]:
(2)原因分析
配置错误,MAC地址前多了1个单引号。
(3)解决方法
修改配置。
输入重新配置
修改前:
修改后: