大家都知道VMWare的三種組網(wǎng)模式,分別為Bridge,NAT,Host-Only。VMWare認為使用這三種組網(wǎng)模式則可以搭建出任意的網(wǎng)絡(luò)拓
撲了,事實上也正是如此。如果你對網(wǎng)絡(luò)很精通,那么應(yīng)該很容易就可以理解VMWare的網(wǎng)絡(luò)配置模式,然而即使如此,VMWare由于只是一個虛擬機,沒
有形象的拓撲展示出來。本文簡單的給出三種組網(wǎng)模式的形象化的圖示,另外,VMWare的幫助文檔中也有相當詳細的介紹VMNet的章節(jié)。一.Bridge模式顧名思義,Bridge模式就是橋接模式,虛擬機里面的網(wǎng)卡直接橋接在宿主機的某一個物理網(wǎng)卡所在的網(wǎng)段。示意圖如下:![]() 這種方式很多時候是為像我這樣的懶人提供的,然而在非DHCP的情況下,很容易造成IP地址沖突,因此如果不是非要將虛擬機配置在一個網(wǎng)段,就不要用Bridge模式。Bridge模式的組網(wǎng)拓撲如下: ![]() 二.NAT模式所謂NAT模式就是將虛擬機網(wǎng)卡隱藏在了一個NAT設(shè)備之后,在外界看來,只能看到宿主機物理網(wǎng)卡,甚至連NAT設(shè)備都看不到,NAT設(shè)備默默地轉(zhuǎn)換著虛擬機內(nèi)部出來的連接的源地址,如下圖所示:![]() 然而,有一個細節(jié),那就是上圖中的菱形到底是如何實現(xiàn)的,VMWare到底如何在不同的宿主操作系統(tǒng)下模擬出一個一致的NAT設(shè)備的。為了實現(xiàn)的一致和簡 單,VMWare使用了用戶態(tài)連接代理的方式來實現(xiàn)NAT設(shè)備,因此NAT設(shè)備其實就是一個用戶態(tài)進程,它來執(zhí)行地址轉(zhuǎn)換,如下圖所示: ![]() 所謂的地址轉(zhuǎn)換其實不是真正的IP網(wǎng)絡(luò)意義上的地址轉(zhuǎn)換,而是一個代理。虛擬機里面發(fā)起的連接在宿主機的NAT進程中完全被截獲,然后NAT進程偷梁換柱 代替虛擬機里面的連接單獨向目的地發(fā)起一個連接,隨后和目的地通信,然后將數(shù)據(jù)轉(zhuǎn)發(fā)給虛擬機。我們可以通過一個簡單試驗來說明這一點: 1.只允許本地的TCP syn包發(fā)出去,禁止任何回包iptables -A OUTPUT -p tcp --tcp-flags SYN SYN -j ACCEPTiptables -A OUTPUT -j DROP iptables -A INPUT -j DROP 2.在虛擬機中建立到百度的tcp連接telnet 74.125.128.94 803.查看宿主機上的用戶態(tài)nat進程的文件描述符lsof -p 271 -n... vmnet-nat 271 root 7u IPv4 0xffffff8017b62160 0t0 TCP 192.168.1.101:49256->74.125.128.94:http (ESTABLISHED) ... 4.結(jié)論虛擬機里面只能發(fā)出syn包,然而宿主機里面到74.125.128.94的連接已經(jīng)建立,說明nat進程是一個用戶態(tài)的連接代理。同樣的結(jié)論還可以通過 tcp抓包來觀測到,怎么觀測呢?很簡單,查看序列號即可,虛擬機里面抓取的數(shù)據(jù)包的序列號和確認號和宿主機上抓取的“同樣連接”(實際上不是一個連接, 而是被代理的)的序列號以及確認號不是一致的,而我們知道,常規(guī)的NAT只修改五元素,不會修改序列號。可見,由于NAT是一個代理,NAT模式可能會造成目的主機TCP連接統(tǒng)計的不準確,比如上述實驗中,虛擬機明明沒有連接成功目的地,然而宿主機的NAT 進程卻已經(jīng)建立了一個TCP連接。使用NAT模式,就需要知道它所帶來的一切副作用。最后NAT模式的組網(wǎng)拓撲如下: ![]() 三.Host-Only模式這種模式其實是最純粹的了,虛擬機和宿主機的一塊網(wǎng)卡(虛擬網(wǎng)卡)直連,僅此而已,如下圖所示:![]() 可是Host-Only模式的虛擬機如何連接外網(wǎng)呢?虛擬機可以將宿主機作為一臺路由器來看待,如此一來,剩下的問題就是如何來配置這個路由器了。以下步驟是必須的: 1.在虛擬機中將默認網(wǎng)關(guān)指向宿主機的虛擬網(wǎng)卡vmnet1,如果你不嫌麻煩也可以配置主機路由2.打開宿主機的路由功能Linux:sysctl -w net.ipv4.ip_forward=1Mac OS:sysctl -w net.inet.ip.forwarding=1 Windows:打開Tcpip的IPEnableRouter注冊表項 3.以下方法選其一3.1.配置SNAT。Linux使用iptables配置出口網(wǎng)卡的SNAT;Mac OS使用natd以及ipfw配置;Windows使用網(wǎng)卡的“共享”上網(wǎng)來配置3.2.配置純路由,主要是解決回程路由的問題,然而很多外網(wǎng)服務(wù)器的路由我們沒法配置,因此這個只適用于實驗環(huán)境Host-Only模式的組網(wǎng)拓撲如下所示:![]() 四.vnnetX的含義VMWare在宿主機中虛擬了幾塊網(wǎng)卡,這些網(wǎng)卡實際上都是一些帶有多個port的二層或者三層網(wǎng)絡(luò)設(shè)備。本文到此為止沒有談到DHCP,實際上每種組網(wǎng)模式都可以有一臺DHCP服務(wù)器插入這些虛擬設(shè)備的port,為虛擬機里面的網(wǎng)卡分配IP地址。默認情況下,VMWare提供了vmnet0/1/8三塊虛擬網(wǎng)卡,vmnet0外界看不到,它實際上是一個純鏈路層Bridge,該Bridge設(shè)備沒 有任何三層功能,該Bridge的其中一個port就是宿主機的某一塊物理網(wǎng)卡。vmnet1專門給Host-Only來使用,vmnet8專門用于 NAT,這兩個虛擬網(wǎng)卡都有三層的功能,都可以配置IP地址,實實在在是一塊宿主機上可見的網(wǎng)卡啊,除此之外,這兩塊網(wǎng)卡同時也是Bridge設(shè)備,只是 該Brdige并沒有橋接任何宿主機上的任何物理網(wǎng)卡。 |
|
|