问题描写叙述:

近期搭建了vCenter环境,并使用vCenter创建的VM搭建了一套openstack环境。在验证openstack的外网功能时。发现报文死活ping不通外网,抓包发现报文在vcenter的dvs处给丢掉了,这是很奇怪的事情。细致排查后。现vCenter居然感知报文的mac对于不受vCenter管理的VM发出的报文直接忽视。

先上图:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

解释例如以下:

1)ESX-B016是安装了VMWare ESX的主机,受vCenter管理和控制。我使用vCenter创建一个虚拟分布式交换机(dvs01),使用ESX-B016主机的eth2作为这个交换机的上行口(可能有人会问,为什么用eth2作为上行口,这个由于eth0和eth1被别人占用了:))。ESX-B016     的eth2网卡连接到外部物理交换机switch1的g1口。然后通过交换机的g3口连接到了物理网关路由器Rrouter1上;物理网关路由器的IP为162.3.110.1。

2)使用vCenter在ESX-B016主机上创建了一个VM(虚拟机名称为OpenStack_VM),用来安装OpenStack环境,这个VM的网卡eth0连接到dvs01的port组dVPort1上;

3) 在OpenStack环境上。我创建了租户网络(net1:192.168.0.0/24)、虚拟机(user_vm),路由器(R),将net1关联到router上,并创建了网络(ext1:162.3.0.0/16)作为外部网络

4) 创建的ext外部网络是vlan类型,vlanid设置为1000。 dVPort1port组为vlan中继。同意2-4094通过,同一时候g1设置为trunk口。g2设置为access口,仅仅同意vlan 1000通过.

一起就绪后。我进入user_vm虚拟机中运行ping 162.3.110.1操作,理论上应该可以ping通网关,可是奇怪的是怎么也不通。

定位过程

好吧,仅仅能祭出抓包的利器tcpdump,首先看一下报文的传输路线:user_vm -> br-int ->R -> snat -> br-int -> br-eth0 -> eth0 -> dvs01 -> uplink口(eth2)->  g1 –> g3 -> Router1,

1) 第一步我在User_VM运行ping 162.3.110.1

2) 首先确定ping报文是否发出去了,在user_vm虚拟机的eth0上抓包。发现可以抓到通往162.3.110.1的ICMP请求报文。但没有响应;

3) 在R上抓包。也能抓到通往162.3.110.1的ICMP请求报文。但没有响应;

4) 在eth0口抓包,相同能抓到通往162.3.110.1的ICMP请求报文,但没有响应,说明报文已经从openstack_VM虚拟机中发出去了,进入了dvs01分布式交换机;

5) 分布式交换机dvs01通过上行口送给了物理交换机switch1的g1口,我在switch1上运行displaymac-address | include GE0/0/1命令,监控全部经过g1口的报文。没有发现源mac地址为snat的外网口mac的不论什么报文(这里为何是外网口的源mac。不明确的同学能够细致思考下),这说明报文没有如期送到switch1中。难道经过dvs01时凭空消失了?

解决的方法:

经过查资料,发现原来的确是被dvs01丢失了。这是由于port组的配置导致的,将OpenStack_VM相应的port组配置改动例如以下就可以解决这个问题:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

根本原因在于,我们使用openstack创建的snat上面的外网口对dvs01来说是不被承认的, 假设将伪传输设置为拒绝的话, ESX会将正在传输的报文mac和全部适配上有效的mac进行比对,发现有不一致的报文会进行丢弃。

这里何谓有效?肯定是ESX自己分配的mac地址是有效的,而openstack分配的mac地址ESX感知不到,也因此觉得是无效的。

附加资料:

以下是VMware官方文档对混杂模式和伪传输的描写叙述:

Promiscuous Mode(混杂模式):

混杂模式控制虚拟机能否够查看 ESX 主机上其它节点的单播通信量。

默认情况下,此选项设置为 [Reject(拒绝)],这意味着虚拟网络适配器在混杂模式下无法执行。在混杂模式中,虚拟网络适配器无需执行不论什么接收过滤。因此客户操作系统可接收线路上观察到的全部通信量。

虽然混杂模式能够有效跟踪网络活动,但这样的执行模式极不安全,由于不管某些数据包是否仅仅能由特定的网络适配器接收,在混杂模式中全部适配器都可訪问这类数据包。

这意味着虚拟机中的管理员或 Root 用户能够查看传输至其它客户机或主机操作系统的通信量。

虽然最经常使用的混杂模式应当处于关闭状态,但假设正在执行网络入侵检測软件或数据包port扫描器。那么也可将虚拟交换机配置为在混杂模式中执行。

Forged Transmits(伪传输):  

伪传输将影响出站通信量。默认情况下,此选项设置为 [Accept(接受)],这意味着 ESX 主机不会将源 MAC 地址与有效 MAC 地址进行比較。假设将此选项设置为 [Reject(拒绝)],ESX 主机会将操作系统正在传输的源 MAC 地址与其适配器的有效 MAC 地址进行比較。查看它们是否匹配。假设地址不匹配,ESX 会丢弃此数据包。客户操作系统不会检測到其虚拟网络适配器无法使用模拟的 MAC 地址发送数据包。

ESX 主机将在不论什么使用模拟地址传递数据包传输之前将其截获。因此,客户操作系统可能会假设数据包已被丢弃。

VCenter中嵌套openstack VM不能ping通外部网络问题解决的方法的更多相关文章

  1. CENTOS7配置静态IP后无法ping通外部网络的问题

    我今天想谈论的并不是如何配置静态IP,这样的话题已经有好多高手再谈. 我想谈的是为什么,我按照他们的教程无论如何也要发生各种问题,没办法连接外网的问题. 先给大家看我的最终版配置方案:我只修改了一个文 ...

  2. Centos7配置静态IP后无法ping通外部网络的问题(无法上网)

    打开ifcfg-ens33配置文件,注意下面标记部分 建议: (1)ifcfg-ens33 DNS 配置 DNS1=8.8.8.8 DNS2=8.8.4.4 (2)配置DNS解析才能够识别外部的IP域 ...

  3. openstack 主机无法ping通instance,无法ssh到instance

    https://docs.openstack.org/zh_CN/user-guide/cli-nova-configure-access-security-for-instances.html 好不 ...

  4. openstack VM可以ping外部网络,但是外部网络ping不通VM

    经过无数次的尝试,终于搭建好了完整的Openstack,本来VM可以获取到IP地址,但是等到我大功告成的时候,突然发现外部网络却不能ping进VM,我可是整整折腾了我几个通宵,这是哭啊.然而,皇天不负 ...

  5. VM不能ping通www.baidu.com的问题【NAT】 更新了【桥接模式】

    NAT模式 1.为NAT设置子网及掩码等信息 点击VMWare菜单栏“编辑” —> 虚拟网络编辑器 [下图第一张图]—> 选中VMnet8(当然这个看自己的设备后缀是多少了,只要外部连接方 ...

  6. win10升级后,无法ping通vmware的centos解决方法

    win10是lenovo thinkpad460上面的,是正版的.无法做设置,不让其自动升级.10月8日节后第一天上班,电脑要求更新,我就点更新. 结果就发现无法ping通vmware中的centos ...

  7. 开发板无法ping通虚拟机的问题解决一例

    先描述一下遇到的问题: 使用的开发板是Tq2440,我将虚拟机和开发板都设在在了同一个网段,并且虚拟机使用的是桥接的方式,我用nfs的方式挂载根文件系统是失败,系统无法起来,后来我进入uboot命令模 ...

  8. VMware中虚拟机与主机不能ping通解决办法

    先去看看服务全部启动了没? VMware相关服务启动关闭脚本     启动了还报错,接着往下看......     一.如果是桥接模式,那么 可能性1:虚拟机防火墙禁ping,请关闭虚拟机防火墙重试: ...

  9. delphi中检测局域网ip能够ping通模块

    // 函数PingHost用于ping目标IP是否连通 // uses winsock    在uses中加入  winsock // 用法:  if PingHost(edit2.Text) the ...

随机推荐

  1. CSS 样式的优先级(重要,一定要理解)

    1. 同一元素引用了多个样式时,排在后面的样式属性的优先级高 例如,下面的 div,同时引用了 [.default] 和 [.user] 中的样式,其中 [.user] 样式中的 width 属性会替 ...

  2. Python安装distribute包

    从官网https://pypi.python.org/pypi/distribute/0.6.49#downloads上下载distribute包,解压后进入解压文件的目录下,使用 python se ...

  3. 313 Super Ugly Number 超级丑数

    编写一段程序来寻找第 n 个超级丑数.超级丑数是指其所有质因数都在长度为k的质数列表primes中的正整数.例如,[1, 2, 4, 7, 8, 13, 14, 16, 19, 26, 28, 32] ...

  4. Hibernate 配置双向多对多关联

    本文解决问题:Hibernate 中配置项目(Project) 员工(Employee)   双向多对多关联 方案一:直接配置双向多对多 方案二:配置第三个关联类(xml)   将多对多查分开来(形成 ...

  5. 12.Nodes

    Nodes(节点) Animation(动画)       KeyframeAnimation 逐帧动画,该节点中包含了所有绑定属性的动画逻辑   Animation Group 逐帧动画分组   S ...

  6. Element type "LinearLayout" must be followed by either attribute specifications, ">" or "/>"的解决办法

    看老师的word文档开始学习.复制了一段代码,在layout中新建了一个Android XML file,发现有提示错误. 代码如下: <?xml version="1.0" ...

  7. [Android]异常7-Error:Configuration with name 'default' not found.

    背景:使用SVN更新代码,运行出现 异常原因: 可能一>缺少Modules 解决办法有: 解决一>Android Studio切换为Project,settings.gradle中引用和现 ...

  8. JS高级——Object.prototype成员

    基本概念 成员 描述 Object.prototype.__proto__ 指向当对象被实例化的时候,用作原型的对象. Object.prototype.hasOwnProperty() 返回一个布尔 ...

  9. Ajax——php基础知识(二)

    header header('content-type:text/html; charset= utf-8');//设置编码格式为:utf-8 header('location:http://www. ...

  10. django 加日志

    LOGGING = { 'version': 1, 'disable_existing_loggers': False, # 指定输出的格式,被handler使用. 'formatters': { ' ...