1. 程式人生 > >VCenter中巢狀openstack VM不能ping通外部網路問題解決辦法

VCenter中巢狀openstack VM不能ping通外部網路問題解決辦法

問題描述:

最近搭建了vCenter環境,並使用vCenter建立的VM搭建了一套openstack環境,在驗證openstack的外網功能時,發現報文死活ping不通外網,抓包發現報文在vcenter的dvs處給丟掉了,這是非常奇怪的事情,仔細排查後,現vCenter竟然感知報文的mac對於不受vCenter管理的VM發出的報文直接忽視。

先上圖:

 

解釋如下:

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的埠組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, dVPort1埠組為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丟失了,這是因為埠組的配置導致的,將OpenStack_VM對應的埠組配置修改如下即可解決問題:

   根本原因在於,我們使用openstack建立的snat上面的外網口對dvs01來說是不被承認的, 如果將偽傳輸設定為拒絕的話, ESX會將正在傳輸的報文mac和所有適配上有效的mac進行比對,發現有不一致的報文會進行丟棄。這裡何謂有效?肯定是ESX自己分配的mac地址是有效的,而openstack分配的mac地址ESX感知不到,也因此認為是無效的。


附加資料:

下面是VMware官方文件對混雜模式和偽傳輸的描述:

Promiscuous Mode(混雜模式):

混雜模式控制虛擬機器是否可以檢視 ESX 主機上其他節點的單播通訊量。預設情況下,此選項設定為 [Reject(拒絕)],這意味著虛擬網路介面卡在混雜模式下無法執行。在混雜模式中,虛擬網路介面卡無需執行任何接收過濾,因此客戶作業系統可接收線路上觀察到的所有通訊量。儘管混雜模式可以有效跟蹤網路活動,但這種執行模式極不安全,因為無論某些資料包是否只能由特定的網路介面卡接收,在混雜模式中所有介面卡都可訪問這類資料包。這意味著虛擬機器中的管理員或 Root 使用者可以檢視傳輸至其他客戶機或主機作業系統的通訊量。  

儘管最常用的混雜模式應當處於關閉狀態,但如果正在執行網路入侵檢測軟體或資料包埠掃描器,那麼也可將虛擬交換機配置為在混雜模式中執行。

Forged Transmits(偽傳輸):  

偽傳輸將影響出站通訊量。預設情況下,此選項設定為 [Accept(接受)],這意味著 ESX 主機不會將源 MAC 地址與有效 MAC 地址進行比較。如果將此選項設定為 [Reject(拒絕)],ESX 主機會將作業系統正在傳輸的源 MAC 地址與其介面卡的有效 MAC 地址進行比較,檢視它們是否匹配。如果地址不匹配,ESX 會丟棄此資料包。客戶作業系統不會檢測到其虛擬網路介面卡無法使用模擬的 MAC 地址傳送資料包。ESX 主機將在任何使用模擬地址傳遞資料包傳輸之前將其截獲,因此,客戶作業系統可能會假設資料包已被丟棄。

相關推薦

VCenteropenstack VM不能ping外部網路問題解決辦法

問題描述: 最近搭建了vCenter環境,並使用vCenter建立的VM搭建了一套openstack環境,在驗證openstack的外網功能時,發現報文死活ping不通外網,抓包發現報文在vcenter的dvs處給丟掉了,這是非常奇怪的事情,仔細排查後,現vCenter竟然

【Linux開發】OpenCV在ARM-linux上的移植過程遇到的問題4---共享庫庫帶路徑【已解決

【Linux開發】OpenCV在ARM-linux上的移植過程遇到的問題4—共享庫中巢狀庫帶路徑【已解決】 標籤:【Linux開發】 緊接著上一篇,我居然又嘗試了一下編譯opencv,主要是因為由於交叉編譯ARM-Linux,opencv,好像剛開始ma

ScrollViewLinearlayout顯示不全的解決辦法

以為ScrollView只能巢狀一個元素,所以把幾個控制元件都包裹在了一個LinearLayout中了。但是發現底部顯示不全,滑動不到最底下。 程式碼: <ScrollView android:id="@+id/scrollView

iview框架遇到在modalmodal

在iview中modal的z-index是一樣的,都是1000,但是很多時候需要在modal1的上面彈出modal2,這時需要對modal新增一個class-name,然後對這個class新增屬性值{z-index:1002},這時解決了modal2顯示在modal1上,可是modal2的mask(

NavigationView headerLayoutRecyclerView滑動衝突問題

<?xml version="1.0" encoding="utf-8"?> <com.vechain.vecar.ui.view.MyDrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"

Vue私有元件註冊的問題(元件元件)

我們先宣告兩個元件物件 let a-component={ template:` <h1> A元件 </h1> ` } let b-component={ template:` <h1> B元件 <

Vue的 slot插槽的簡單應用——input按鈕的效果

場景: 需要一種類似於把按鈕放在input最右邊的效果 解決辦法: 1,發現在Vue中怎麼巢狀都出不了效果,網上搜到的一種html寫法(但是和Vue中的el-table-column有些影響): <form role="form"> <div cla

sql server事務*

轉自 https://www.cnblogs.com/guanjie20/archive/2013/02/17/2914488.html 我們在寫事務時經常遇到的問題如下: 訊息 266,級別 16,狀態 2,過程 sp1,第 0 行 EXECUTE 後的事務計數指示&nb

NestedScrollViewListview後只顯示一個item

出現這種情況的原因是Listview能識別NestedScrollView的高度。 解決辦法是新建一個MyListView繼承ListView然後重寫其中的onMeasure方法 具體實現: public class MyListView extends ListView {

Asp.net MVC訪問母版頁的iframe頁面時,如果session或cookie過期,登入驗證超時怎樣自動跳轉到登入頁

一般登入驗證的過濾器中,使用驗證過濾器的Redirect方法,將請求重定向到指定的URL。但是如果我們要訪問的頁面是一個巢狀在母版頁中的iframe頁面時,這種重定向只會對iframe頁面湊效,也就是會將iframe也重定向到登入頁,這樣就有違我們的目的了。所以我就嘗試了很多方法來實現讓整個頁面重定向到登入頁

在小程式h5頁面,點選事件不觸發

最近在寫小程式,由於小程式快滿了,就把頁面寫成h5,嵌在小程式裡,原以為很簡單,沒想到遇到問題,問題不多,但是很大 第一個就是點選事件不觸發, 場景如下:     點選按鈕觸發ajax請求,請求成功之後跳轉到另一個頁面,但是頁面始終不跳轉。 解決方法,將http開

解決scrollView編輯框導致不能上下滑動的問題

EditText設定maxLines之後,文字行數超過maxLines,會網上摺疊,上下滑動能夠瀏覽全部文字。 若EditText外層有scrollView。在EditText上下滑動,不會像正常情況那樣上。僅僅會滑動了scrollView。 解決的方法是:

EL表示式EL表示式解決方法

1.模擬需求:從一個商品集合中取出所有商品,第一個商品用它的第一張圖片,第二個商品用它的第二張圖片 2.起初按照通用思路,在c:forEach中定義一個varStatus,再通過vaStatus獲取下標,結果寫成了el表示式巢狀(如下),結果根本出不來 <c:forEach it

vue頁面 iframe 標籤

vue中巢狀iframe,將要巢狀的檔案放在static下面:   <iframe src="../../../static/bear.html" width="300" height="300" frameborder="0" scrolling="auto"></ifr

webviewhtml實現精準定位(百度地圖、高德地圖、騰訊地圖、H5原生定位)js對比

最近在實現一個功能,就是在安卓手機和蘋果手機嵌入html程式碼,實現精準定位,我為此對比幾種定位的方法。我要的是精準定位,就是誤差在100米左右的功能,類似與外賣app那種定位精確度 1. 首先是原生h5定位 if(browser.versions.an

iview之——tableinput、select等

使用iview在table中嵌入button是比較常見的需求,但是在table中嵌入input或者select你是否考慮過呢?本文用例項介紹input和select在table中的巢狀。 理解table如何巢狀input、select首先要理解vue的render函式可以參考:vue render函式介紹。當

【Rails】PostgreSQLjson查詢

備忘:工作記錄。 # attr_json:{"ext": {"conditions": {"appId": "168","templateSettings": {"is_show": true,"

陣列物件,根據物件的某個字對物件進行去重

// 陣列中巢狀物件,根據物件的某個欄位進行物件去重 function uniqObj(data, name) { var dataArr = []; var dataObj = {}; for (var i = 0; i < data.length; i+

【EL 表示式】EL 表示式 EL 表示式

需求 需要從一個文章集合中根據不同的標籤取出文章,第一篇文章用第一個標籤,第二篇文章用第二個標籤 原有思路 <c:forEach items="${articles}" var="article" varStatus="ids"> <img

根據影象名字把一個大資料夾影象分類(matlabfor迴圈if語句)

clear; close all; clc; inpath = 'G:\code\xianzhu\Z_CODE\SalBenchmark-master\Data\DataSet1\Saliency\*.png'; %%需要分類的資料夾路徑 %%分類後圖像儲存路徑%% CA_p