问题描写叙述:

近期搭建了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. MVC系列学习(六)-Razor语法

    注:本次代码加了样式,样式如下 <style>     div {         border: 1px solid red;         margin: 10px auto;    ...

  2. DB2使用收集

    db2命令收集 创建带分区的表: create table  table_name( )in table_space index in index_space partition by range(c ...

  3. Angular——表单指令

    基本介绍 这些指定只能针对input标签 基本使用 <!DOCTYPE html> <html lang="en"> <head> <me ...

  4. jenkins环境搭建(Windows)

    1.下载并解压Tomcat Tomcat官方网站:http://tomcat.apache.org/ 下载并解压,解压后的目录结构如下: 2.下载并安装适合自己电脑系统的 jenkins Jenkin ...

  5. PHP 设计模式--基础

    设计模式的宗旨就是:重用. 在面向对象中,类是用于生成对象的代码模版,而设计模式是用于解决共性问题的代码模版. 遵循这样的模板,我们可以设快速地设计出优秀的代码. 注意,设计模式只是模板,不是具体的代 ...

  6. CAD取Excel表格(com接口)

    1 2 3 4 5 6 7 8 9 10 11 12 MxDrawResbuf ret = (MxDrawResbuf)axMxDrawX1.Call("ExApp_GetExcel&quo ...

  7. Autofac 控制反转

    class Program { static void Main(string[] args) { IContainer container = Init(); Go(container); Cons ...

  8. enote笔记语言(3)

    what&why(why not)&how&when&where&which:紫色,象征着神秘而又潜蕴着强大的力量,故取紫色. key&key-memo ...

  9. Luogu P1892 [BOI2003]团伙

    P1892 [BOI2003]团伙 题目描述 1920年的芝加哥,出现了一群强盗.如果两个强盗遇上了,那么他们要么是朋友,要么是敌人.而且有一点是肯定的,就是: 我朋友的朋友是我的朋友: 我敌人的敌人 ...

  10. 关于while((c=getchar()))的一些应用与思考

    最近做题发现一个特别牛逼又特别神奇的读取入字符串的方法 while((c=getchar())!=....) { //do something } 为什么说强大呢,首先这个表达式对空格回车都不怕,他不 ...