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