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