当前位置: 代码迷 >> 综合 >> OpenvSwitch Port Mirror in OpenStack Neutron
  详细解决方案

OpenvSwitch Port Mirror in OpenStack Neutron

热度:51   发布时间:2023-12-10 21:27:02.0
  • 前言

最近使用搭建了一个基于VXLAN的OpenStack 环境,发现要去dump ovs interfaces的包其实还是蛮麻烦的,经过多番努力,找到了如下的在openstack下网络环境的一些trouble shooting的方法。

除了常见的工具如:ping, host, traceroute, tcpdump, ip neighbor, arp, arping, 还可以使用port mirror来完成ovs 包的dump。 

  • 环境

我的环境里面有两个nodes,node1 启用了Nova和Neutron,node2只启用了Nova相关服务。

Node1的ovs环境:

sudo ovs-vsctl show
47a7cda2-1263-485a-8ae4-1be7cf53ed44Bridge br-tunfail_mode: securePort "veth0"Interface "veth0"Port patch-intInterface patch-inttype: patchoptions: {peer=patch-tun}Port br-tunInterface br-tuntype: internalPort "vxlan-0a674d0e"Interface "vxlan-0a674d0e"type: vxlanoptions: {df_default="true", in_key=flow, local_ip="10.103.77.13", out_key=flow, remote_ip="10.103.77.14"}Bridge br-intfail_mode: securePort "tapb5e83be9-f9"tag: 2Interface "tapb5e83be9-f9"type: internalPort "qvo42d126bc-e1"tag: 2Interface "qvo42d126bc-e1"Port int-br-exInterface int-br-extype: patchoptions: {peer=phy-br-ex}Port patch-tunInterface patch-tuntype: patchoptions: {peer=patch-int}Port br-intInterface br-inttype: internalBridge br-exPort "eth1"Interface "eth1"Port br-exInterface br-extype: internalPort phy-br-exInterface phy-br-extype: patchoptions: {peer=int-br-ex}ovs_version: "2.0.2"

我要做的是dump出br-tun上patch-int这个interface的所有packages, 以便看到package在经过br-tun转换后的样子

  • 首先,创建类型为veth的interface
ip link add type veth
ip link set veth0 up
ip link set veth1 up
  • 其次,把这个veth0添加到br-tun上面
ovs-vsctl add-port br-tun "veth0"
  • 然后,创建port mirror
ovs-vsctl -- set Bridge br-tun mirrors=@m \
-- --id=@veth0 get Port veth0 \
-- --id=@patch-int get Port patch-int \
-- --id=@br-tun get Port br-tun \
-- --id=@m create Mirror name=veth select-src-port=@br-tun,@patch-int \
select-dst-port=@br-tun,@patch-int output-port=@veth0

成功后会输出一个mirror的id,你可以使用

ovs-vsctl list bridge

查看mirror是否在outout里面

_uuid               : 18303d75-8715-408d-b9d7-5ef0424734f2
controller          : []
datapath_id         : "0000763d30188d40"
datapath_type       : system
external_ids        : {}
fail_mode           : secure
flood_vlans         : []
flow_tables         : {}
ipfix               : []
mirrors : [d2bcbe65-ae4c-4b88-9172-cf84dae39d0e] name                : br-tun
netflow             : []
other_config        : {}
ports               : [3eb258b0-f9db-4dfa-bbd5-697162f26142, 6755f9ce-a8fa-4b52-ba3a-06c798e12b9b, c45bbbd7-6baf-4774-b0e4-493d74ae0589, ffcf5619-baaf-469a-bb2d-9016ede95c92]
protocols           : ["OpenFlow10"]
sflow               : []
status              : {}
stp_enable          : false 
  • 最后,使用tcpdump来查看veth0上的package(我一般会把output输出到cap文件,然后用wireshark查看,非常直观)
sudo tcpdump -i veth0 -vv -ne -w veth0.cap

使用wireshark查看你会发现,这些package已经是被translate成普通而不是VXLAN的package了,所以看不到vxlan的tunnel id了

 

参考资料:

VXLAN:https://tools.ietf.org/pdf/rfc7348.pdf

Neutron Troubleshooting:http://docs.openstack.org/openstack-ops/content/network_troubleshooting.html

  相关解决方案