今天聊一下esxi 从5.5开始提供的抓包工具 pktcap-uw, (在5.5之前esxi 上的抓包工具tcpdump-uw 由于只能针对vmkernel 端口进行抓包,有一定局限性)。
对于网络工程师,抓得一手好包,是一个必备技能。尤其是NSX在每个esxi host 里面多部署了一个三层的逻辑路由器VDR,在每个host 里面的网络节点又增加了。并且通过对抓包工具的学习,同时也会对datapath 层面的理解加深。
先从vswitch 开始,二层交换机data path 非常简单
下图是一个逻辑概念,一个数据包,从物理交换机进入到,esxi 物理网卡,vswitch ,虚拟机的虚拟网卡。
Pktcap-uw 可以针对vswitch port , uplink分别进行抓包,需要注意的是pktcap-uw 抓包需要指方向
1 获取vswitch port ID ,有多种方法,这里列出两种
第一种:
好处在于只用一条命令就能获取必要的信息
net-stats -l
[root@localhost:/tmp] net-stats -l
PortNum TypeSubType SwitchName MACAddress ClientName
33554434 4 0 vSwitch0 00:50:56:b6:2b:53 vmnic0
33554437 3 0 vSwitch0 00:50:56:62:59:80 vmk1
50331650 4 0 DvsPortset-0 00:50:56:b6:2e:e3 vmnic1
67108866 4 0 DvsPortset-1 00:50:56:b6:60:fd vmnic2
67108872 3 0 DvsPortset-1 00:50:56:b6:2b:53 vmk0
67108874 5 6 DvsPortset-1 00:50:56:96:5b:99 linux_mirror.eth0
67108875 5 6 DvsPortset-1 00:50:56:96:5b:8e linux_source_231.eth0
67108877 5 6 DvsPortset-1 00:50:56:96:3d:35 linux_dst_233.eth0
第二种
这种方法的好处在于,如果uplink 做了teaming, 通过这个方法也可以获取到使用的uplink
esxcli network vm list 列出worldID
[root@localhost:/tmp] esxcli network vm list
World ID Name Num Ports Networks
-------- ---------------- --------- --------------
711273 linux_mirror 1 dvportgroup-43
711281 linux_source_231 1 dvportgroup-43
714723 linux_dst_233 1 dvportgroup-43
esxcli network vmport list -w worldID
[root@localhost:/tmp] esxcli network vm port list -w 711273
Port ID: 67108874
vSwitch: dvSwitch
Portgroup:dvportgroup-43
DVPort ID: 18
MAC Address:00:50:56:96:5b:99
IP Address: 0.0.0.0
Team Uplink: vmnic2
Uplink Port ID:67108866
Active Filters:
运行以下命令抓取 por tid 上流量注意port ID 需要和实际一致,proto 参数是制定协议号,0x01是 icmp 协议号
一些常用的协议列表
TCP 0x06
UDP 0x11
OSPF 0x59
ISIS 0x7C
完整的列表
https://en.wikipedia.org/wiki/List_of_IP_protocol_numbers
命令含义,是抓取vswitch 从VM收到的icmp 报文,并存储在tmp文件夹下33554437_in.pcap
pktcap-uw --switchport 33554437 --dir 0 --proto 0x01 -o /tmp/33554437_in.pcap
命令含义,是抓取vswitch 向VM发出的icmp 报文,并存储在tmp文件夹下33554437_out.pcap
pktcap-uw --switchport 33554437 --dir 1 --proto 0x01 -o/tmp/33554437_out.pcap
抓取物理网卡vmnic6 出方向的icmp 报文,并存在tmp 文件夹下面vmnic6_out.pcap
pktcap-uw --uplink vmnic6 --dir 1 --proto 0x01 -o/tmp/vmnic6_out.pcap
抓取物理网卡vmnic6 入方向的icmp 报文,并存在tmp 文件夹下面vmnic6_in.pcap
pktcap-uw --uplink vmnic6 --dir 0 --proto 0x01 -o/tmp/vmnic6_in.pcap
如果有三层vdr 参与后在esxihost 内部的data path,图片来自nsx trouble shooting guide
三层跨host数据的逻辑路径
VM<—>vswich port< --->vdr port< --->uplink
Switch port 同样是用 net-state –l 拿到
获取vdrport
[root@localhost:~] net-vdr -C -l
Host locale Id: 4236bed1-638a-8c8a-4e44-f9b2b0de8aa7
Connection Information:
-----------------------
DvsName VdrPort NumLifs VdrVmac
------- ------- ------- -------
dvSwitch vdrPort 4 02:50:56:56:44:52
Vdr Switch Port: 100663301
Teaming Policy:Default Teaming
Uplink : dvUplink1(100663298):00:50:56:f7:6a:ce(Team member)
Stats : PktDropped Pkt Replaced Pkt Skipped
Input : 0 0 1102180957
Output : 33 0 103174
需要注意的是在最后的命令在官方的图片是错误的,就是在pnic处的抓包命令。正确抓取带有vxlan 封装的报文命令格式如下
Pktcap-uw –uplink vmnic0 –capture UplinkSnd
Pktcap-uw –uplink vmnic0 –capture UplinkRcv
命令列表:
esxcli network vm list
esxcli network vm port list -w worldID
net-stats -l
net-vdr -C -l
参考资料
https://docs.vmware.com/en/VMware-NSX-for-vSphere/6.3/nsx_63_troubleshooting.pdf
https://docs.vmware.com/en/VMware-vSphere/6.0/com.vmware.vsphere.networking.doc/GUID-5CE50870-81A9-457E-BE56-C3FCEEF3D0D5.html
No comments:
Post a Comment