VLAN(Virtual Local Area Network)的中文名為"虛擬局域網(wǎng)"。
虛擬局域網(wǎng)(VLAN)是一組邏輯上的設(shè)備和用戶,這些設(shè)備和用戶并不受物理位置的限制,可以根據(jù)功能、部門及應(yīng)用等因素將它們組織起來,相互之間的通信就好像它們在同一個網(wǎng)段中一樣,由此得名虛擬局域網(wǎng)。VLAN是一種比較新的技術(shù),工作在OSI參考模型的第2層和第3層,一個VLAN就是一個廣播域,VLAN之間的通信是通過第3層的路由器來完成的。與傳統(tǒng)的局域網(wǎng)技術(shù)相比較,VLAN技術(shù)更加靈活,它具有以下優(yōu)點: 網(wǎng)絡(luò)設(shè)備的移動、添加和修改的管理開銷減少;可以控制廣播活動;可提高網(wǎng)絡(luò)的安全性。
在計算機(jī)網(wǎng)絡(luò)中,一個二層網(wǎng)絡(luò)可以被劃分為多個不同的廣播域,一個廣播域?qū)?yīng)了一個特定的用戶組,默認(rèn)情況下這些不同的廣播域是相互隔離的。不同的廣播域之間想要通信,需要通過一個或多個路由器。這樣的一個廣播域就稱為VLAN。
這個問題其實已經(jīng)困擾很多年了。
剛畢業(yè)那會,都去網(wǎng)吧上網(wǎng),不會考慮那么多。
幾年之后,申請了ADSL寬帶,上網(wǎng)變得十分容易,同時自己電腦還具備了公網(wǎng)IP地址(當(dāng)然是動態(tài)IP),
再下載一個花生殼客戶端,于是有了一個固定域名,有了這個固定域名,做什么都方便了,
可以隨意的在公司里遠(yuǎn)程自己家的電腦, 做任何需要做的事情。
有了這些還不滿足,很想在家里遠(yuǎn)程公司的電腦,當(dāng)時以為很簡單,可仔細(xì)考慮之后,一點也不簡單。
首先公司網(wǎng)管肯定不愿意員工在外面隨意操控公司電腦,于是肯定是不愿意從網(wǎng)關(guān)上做端口映射。
中國的網(wǎng)絡(luò),很大一部分電腦都是做NAT轉(zhuǎn)發(fā)的,尤其是公司電腦,他們不具備外網(wǎng)地址,不能從internet網(wǎng)直接訪問。
有些網(wǎng)絡(luò)更離譜,是通過多層NAT轉(zhuǎn)發(fā)。
一直都想著解決這個問題,想著如何在家里控制公司的電腦,早期,從應(yīng)用層軟件解決,
做個服務(wù)程序,一個運行在家里的電腦,一個運行在公司電腦上,公司電腦通過TCP持續(xù)連接到家里電腦,
家里電腦通過這個TCP連接發(fā)送命令給公司電腦,從而達(dá)到控制公司電腦的目的,
但是這種辦法是有限的,并不具備完全控制的目的。
當(dāng)時多想有種辦法,能讓公司電腦和家里電腦互相訪問,就像在一個網(wǎng)絡(luò)里一樣,
(這種辦法其實早就有產(chǎn)品,類似VPN一樣的東西,但是我只是個人需求,況且我真的是想自己解決這個問題)
當(dāng)時局限于自己的知識水平,無法從驅(qū)動層面解決這個問題,只好擱置。
直到再幾年后的現(xiàn)在,接觸了windows驅(qū)動,尤其是NDIS驅(qū)動,知道該怎么解決這么一個問題,
并真正的建立起了屬于自己的虛擬局域網(wǎng)絡(luò)。
說到原理,其實并不是像想象的那么復(fù)雜。
要組建這么一個虛擬局域網(wǎng),需要一下兩個條件:
一,一個具有公網(wǎng)IP的機(jī)器和運行在此機(jī)器上的一個服務(wù)程序,這個程序類似HUB(集線器)一樣,轉(zhuǎn)發(fā)虛擬以太網(wǎng)數(shù)據(jù)包。
二,需要組建虛擬局域網(wǎng)的每臺機(jī)器都需要安裝一個虛擬網(wǎng)卡驅(qū)動程序和一個客戶端程序。
NDIS驅(qū)動分為三層,
一是NIC驅(qū)動,又叫微端口驅(qū)動,直接跟物理網(wǎng)卡打交道,
二是協(xié)議驅(qū)動,用來處理類似TCP/IP等協(xié)議包,
三是中間層驅(qū)動,介于協(xié)議驅(qū)動和微端口驅(qū)動之間。大家熟悉的防火墻就屬于中間驅(qū)動,它可以任意串改阻止數(shù)據(jù)包。
而這個用于組建虛擬局域網(wǎng)的網(wǎng)卡驅(qū)動,是屬于底層的微端口驅(qū)動,本來物理網(wǎng)卡的微端口驅(qū)動是在
鏈路層上得到上層驅(qū)動的原始以太網(wǎng)數(shù)據(jù)包,并傳輸?shù)轿锢砭W(wǎng)卡上去;從物理網(wǎng)卡上得到原始以太網(wǎng)數(shù)據(jù)包,并傳遞給上層驅(qū)動。
而虛擬網(wǎng)卡驅(qū)動注冊一個功能設(shè)備,應(yīng)用層程序用CreateFile打開這個設(shè)備,
調(diào)用Win32函數(shù)ReadFile/WriteFile,從驅(qū)動里讀出以太網(wǎng)數(shù)據(jù)包和寫入以太網(wǎng)數(shù)據(jù)包,
也就是本來把傳輸?shù)轿锢砭W(wǎng)卡的工作,交給了這個注冊的功能設(shè)備。
客戶端應(yīng)用程序打開虛擬網(wǎng)卡驅(qū)動注冊的功能設(shè)備,從里邊讀取傳輸?shù)竭@塊虛擬網(wǎng)卡的原始以太網(wǎng)數(shù)據(jù)包,
通過真實的TCP/UDP套接字傳輸?shù)焦W(wǎng)機(jī)器上的一個服務(wù)程序上, 服務(wù)程序分析這個數(shù)據(jù)包,
并向正確的也在這個虛擬局域網(wǎng)的機(jī)器的客戶端程序轉(zhuǎn)發(fā)這個數(shù)據(jù)包,
客戶端程序接收到屬于發(fā)往自己的別的機(jī)器的原始以太網(wǎng)數(shù)據(jù)包,通過WriteFile寫入到虛擬網(wǎng)卡驅(qū)動中,
從而完成數(shù)據(jù)交互。
為了減少服務(wù)器端壓力,可以利用P2P等技術(shù)讓兩個需要通訊的機(jī)器直接通訊,但我這屬于小網(wǎng)絡(luò),沒必要搞那么復(fù)雜。
這樣一個虛擬的局域網(wǎng)就這么組建起來了。
簡單的說就是把屬于真實的物理網(wǎng)絡(luò)剝離出來,建立在internet公網(wǎng)的邏輯鏈路上。
這里的技術(shù)難點要屬這個虛擬網(wǎng)卡驅(qū)動的開發(fā),不過熟悉了之后,其實也不太難。
順便一提的是,在多年前,搞得很火的浩方平臺,能讓大家在不同的網(wǎng)絡(luò)里玩CS等局域網(wǎng)游戲,
記得上大學(xué)的時候,有很多人在玩,當(dāng)時覺得很神奇,現(xiàn)在想想其實也不算什么,實現(xiàn)的原理都差不多的。
現(xiàn)在虛擬局域網(wǎng)是建立起來了,但是要怎么跟別的真實網(wǎng)絡(luò)通訊呢,舉個例子:
公司里有多臺電腦,都是其他同事的,當(dāng)然其中一臺電腦肯定是自己的。
這些電腦都在同一個真實的局域網(wǎng)里,假設(shè)我家的電腦是A,公司里我的電腦是B,
并且都安裝上了虛擬網(wǎng)卡,已經(jīng)是組建好了的一個虛擬局域網(wǎng),這個虛擬網(wǎng)只有A,B兩臺機(jī)器,
假設(shè)家里的A機(jī)器要訪問其他同事的機(jī)器怎么辦呢? 一個辦法是讓其他同事也裝虛擬網(wǎng)卡,加入到這個虛擬網(wǎng)里。
但是多種原因,人家不一定愿意安裝或者怕自己家的電腦成了公用機(jī)器給人隨意訪問。
其實一個辦法是把公司的B機(jī)器作為NAT網(wǎng)關(guān),這個虛擬網(wǎng)就在這個NAT之后,NAT軟件網(wǎng)上可下載的很多,
也可以用windows自帶的“Internet共享”功能,其實就是一個簡單的NAT。
直到寫這篇文章,我才調(diào)通了這個NAT功能,
方法如下:
首先在公司機(jī)器B上,設(shè)置好“Internet共享”,物理網(wǎng)卡右擊屬性-》高級-》Internet共享,
在這里的”家庭網(wǎng)絡(luò)連接“,選擇自己開發(fā)的虛擬網(wǎng)卡 ,
這樣NAT算是設(shè)置好了,
接著要在家里的電腦A上加一條路由,這點很重要,否則無法訪問。
比如公司真實局域網(wǎng)是 192.168.100.X, 虛擬局域網(wǎng)是 192.168.0.X, B機(jī)器的虛擬IP地址是192.168.0.1
在A機(jī)器上加:
router -p add 192.168.100.0 mask 255.255.255.0 192.168.0.1
意思是發(fā)往192.168.100.X網(wǎng)段的數(shù)據(jù)包,都朝網(wǎng)關(guān) 192.168.0.1(也就是公司的B機(jī)器)發(fā)送,
這樣家里的機(jī)器就能正確的路由到公司的網(wǎng)絡(luò)上。
如果萬一要想家里的電腦和公司的所有同事的電腦都在一個網(wǎng)段怎么辦呢?用橋接方式,
熟練Vmware的人一定很熟悉它的網(wǎng)絡(luò)連接中的橋接方式,這里用到的技術(shù)跟Vmware的橋接技術(shù)差不多。
原理如下
需要開發(fā)一個NDIS協(xié)議驅(qū)動,在協(xié)議驅(qū)動里分析每個數(shù)據(jù)包,把發(fā)往虛擬局域網(wǎng)的數(shù)據(jù)包提取出來(這個通過IP地址來區(qū)分),
通過一個功能設(shè)備讀取這些數(shù)據(jù),發(fā)往客戶端應(yīng)用程序,應(yīng)用程序發(fā)給公網(wǎng)的服務(wù)器程序,
客戶端應(yīng)用程序從公網(wǎng)機(jī)器獲得數(shù)據(jù)包,寫給協(xié)議驅(qū)動,協(xié)議驅(qū)動改寫源MAC地址為真實的物理網(wǎng)卡地址,并發(fā)送出去。
這種叫MAC地址欺騙,真實局域網(wǎng)的其他機(jī)器一直以為都在同一臺真實機(jī)器通訊,實際是和很多虛擬的機(jī)器通訊,
vmware即采用這種類似的技術(shù)實現(xiàn)橋接功能,讓虛擬機(jī)IP地址跟真實網(wǎng)絡(luò)融合在一起。
新聞熱點
疑難解答
圖片精選