介紹VPN的基礎知識
VPN的英文是VirtualPrivateNetwork,這是近幾年隨著Internet的發展而迅猛發展起來的技術,這種技術本身是通過公共網絡來實現私人專有網絡的搭建,在vpn之前要構建私人專有網絡只能通過專線,專線的好處是任何時刻該線路都是私人的,同時也保證了數據傳輸的可靠性,因為它本身就是條私有鏈路,任何時候都是可靠的,它的最大缺點是費用太高昂。
虛擬專用網本身是通過額外的技術來實施的,所以在物理上不用更改聯網的一些特征,而是在邏輯上針對這個網絡連接作了一些額外的定義,所以這種組網是非常靈活的,我們可以很方便的添加或者刪除一個連接,那么一些異地辦事處和出差員工就很容易的通過私有專網接入公司總部。
VPN要搭建起來,有兩個重要的概念:
*隧道:隧道是在公共網上實現類似于專線連接的鏈路,這條鏈路當然是虛擬的鏈路,在這個鏈路里面它具備了專線鏈路的所有特征,并且我們在這個隧道里面傳遞數據的時候,其他的同樣在公網中傳遞的用戶或者黑客他沒有跟這個隧道建立聯系的話是沒辦法竊聽到隧道里面的數據的。
*加密:畢竟這個隧道也是個邏輯上的鏈路,這個邏輯上的通道也有可能被一些人所竊取,為了保證傳輸數據的安全性,所以要對隧道中的數據進行加密。
VPN的分類:
VPN有很多種類型,對于我們tcp/ip的網絡環境下,ip的vpn是通過利用ip設施(公共的internet或者專用的ip骨干網絡)來實現廣域網專線業務。
按照應用類型來分類:
*AccessVPN:主要面向與出差的流動的員工,還有一些遠程的辦公室搭建VPN連接,它主要借助于撥號網絡(PSTN、ISDN)來實現,連接的時候它又有兩種類型,也就是通過發起的源或者發起vpn連接的起點不同可分為兩種類型,第一種是由客戶端發起的(CLIENTAccessVPN),第二種是由接入服務器發起的(NASVPN),這種連接跟第一種的區別是它只在pap和公司路由器之間建立了虛擬專用網連接,而用戶到PAP之間的連接是不能保證其安全性的。第二種靈活性更高,第一種安全性更高。
*IntranetVPN:一般用于總部加上一些大型的分支機構,是同一個公司或同一個企業內部的各個分支結構的連接,我們叫它內聯網,
*ExtranetVPN:一般用于總部加上一些合作伙伴,公司跟合作伙伴之間有頻繁的業務,需要類似專線的連接來保證業務的安全傳遞,他和intranetvpn實際上沒有什么區別,只是名稱上的不同,我們叫他外聯網
按照VPN實現的層次來分類;
VPN必然涉及到隧道和加密機制,隧道是用來衡量這個VPN連接究竟是哪一種層次的vpn的重要標準,vpn的隧道可以架構在數據鏈路層,也可以架構在網絡層,如果是架構在數據鏈路層的vpn我們把它叫做二層隧道VPN,如果是架構在網絡層的VPN我們把它叫做三層隧道VPN。
典型的二層vpn是通過PPTP(Point-to-PointTunnelingProtocol)、L2TP(Layer2TunnelingProtocol)、L2F(Layer2Forwarding)協議實現的隧道
典型的三層VPN是通過GRE(GenericRoutingEncapsulation),IPSec(IPSecurity)協議實現的隧道
VPDN
AccessVPN也叫VPDN(VirtualPrivateDialNetwork):他是通過撥號鏈路來實現的,比如像中國電信中國網通在每個地方都會有個本地的撥號接入存在點叫做PAP(撥號存在點),PAP呢會有一個設備叫做撥號服務介入設備,這種通過撥號連結和總部連接的VPN我們叫他VPDN,由于它的速率比較慢,因此它的適用范圍為出差員工或者一些小型的異地辦公室。
對于VPDN來說,大部分情況下采用的隧道協議都是L2TP協議。
IntranetVPN
對于構建IntranetVPN采用的隧道協議,通常適用IPSec,還有GRE,這樣的協議建立隧道更加靈活并且更加有安全性保障。
ExtranetVPN
技術上跟IntranetVPN完全一樣,只是參與的對象并不局限于同一公司或者企業,而是還有其合作伙伴和供應商等的參與。有關的隧道協議還是采用IPSec或者GRE。
對很多大型企業來說,都是采用VPDN和IntranetVPN的結合方式,采用這種更為靈活的組網方案能夠大大降低企業成本。
按照實現層次分類:
有二層VPN和三層VPN,二層VPN主要是由其隧道協議來體現的,二層VPN上一般說來是PPP的數據封裝,在傳輸的時候它在PPP的數據包前面封裝了二層的封裝包頭。二層協議主要有:
L2TP:l2tp主要是有IETF制定的,并且已經成為了標準,它由RFC2661所定義,l2tp既可以實現VPDN的連接,也可以實現專線連接的業務。
pptp:支持ppp協議,ppp封裝的數據包都可以在PPTP的鏈路里面直接傳播,它本身就是一個呼叫控制和管理協議,它使用了增強的GRE,這里說的增強,是說他借用了GRE的一些技術,來增強它的流控能力和擁塞的調控能力,并不是說它比GRE工作的層面更高,所以整體上來說pptp還是一個工作在第二層的協議。
l2f:第二層轉發協議,它由思科和北電共同研發制定。他支持對更高層協議鏈路層的隧道封裝,并且實現了撥號服務器和撥號協議連接在物理位置上的分離。
三層vpn,所謂三層,是說他這個隧道是建立在網絡層上的,它和應用層無關,也和鏈路協議無關,因此靈活性更高,三層隧道協議主要有:
GRE:也叫通用路由封裝協議,用于實現任意一種網絡層協議在另一種網絡層上的封裝,也就是說可以實現不同協議環境下數據的穿越,比如ipx的數據要通過ip來傳遞的話,我們可以先在IP的環境下搭建一個GRE的通道來傳遞ipx報文,這個時候雖然ip和ipx本身都是第三層的協議,但現在ipx的數據包封裝在ip之上,那ip把ipx的數據當作一個傳輸層以上的數據,當作一些普通數據來傳遞,它不會去識別這個數據是不是符合我ip規范的數據,它不是管這個東西的,所以體現了通用的意義。是指有多網絡協議的時候要實現他們之間的穿越傳遞的時候可以通過借助于GRE來實現。GRE是一個純粹的隧道協議,它本身沒有任何的數據加密的操作。
IPSec:他并不是一個單獨的協議,它實際上是一整套的框架體系架構,它具體有AH(AuthenticationHeader)頭標驗證協議、ESP(EncapsulatingSecurityPayload)、IKE(InternetKeyExchange)這些協議來協同它的工作。AH主要是驗證數據的完整性和真實性,而ESP完成的是數據的私密性的驗證,而IKE是完成隧道協議上的時候、數據加密的時候它的密鑰交換。
三層隧道協議的靈活性遠遠高于二層隧道協議,因為它本身獨立于介質也獨立于應用,另外對二層協議來說,因為它本身跟鏈路相關,所以有可能存在根據不同鏈路選擇不同協議的問題,所以在架構的時候它由他的局限性,而且二層隧道協議很容易受到一些中間人攻擊,所以安全性也不會有太高的保障。
另外從安全方面考慮,因為二層隧道一般中止在用戶端的設備上,對于用戶網的安全以及防火墻技術都提出了十分嚴峻的挑戰,而三層隧道一般中止在ISP的網關,因此不會對用戶網構成任何的威脅。
從擴展性來說,二層隧道封裝了整個ppp數據幀,這可能會導致傳輸效率太低的問題,而且二層隧道中止在用戶這邊,所以用戶端必須保存大量的ppp會話和信息,因此會對整網的性能產生非常大的影響,也會影響到系統的擴展性。而且鏈路層是采用lcp和ncp的協商,采用了隧道之后,lcp和ncp的協商將會變得非常非常的敏感,可能會造成會話超時。而三層隧道中止在isp網關,所以用戶端不需要管理和維護會話,因此減輕了系統負荷。當然二層隧道實現起來比三層隧道簡單一些。
VPN的設計原則
對于一個VPN來說,他首先要考慮的是安全性問題,這個安全性是VPN設計時候的第一個問題也是最主要的問題,對于這個安全,主要體現在兩個方面:
->隧道的建立和數據的加密機制
因為安全完全是依賴于這樣一條虛擬鏈路,那么這個隧道可不可靠、隧道里面傳輸的數據是否有了加密機制保護阿就顯得尤其重要。
隧道可以實現多個協議的封裝,并且可以增加有關VPN應用的靈活性,可以在無連接的IP網上提供點到點的邏輯通道,在對安全性要求更高的場合里面,我們必須應用加密機制,這些加密機制是針對那些可以傳輸在隧道中的數據提供了進一步的數據私密性的保護,使得黑客即使圖突破了隧道也沒辦法篡改原始數據。
->數據驗證
為了防止數據被篡改,就必須要有簽名或者驗證機制來驗證這些數據有沒有被篡改過,也就是所謂的完整性驗證機制,比如md5機制。
->用戶驗證
也就是說使得該VPN可以讓合法用戶可以訪問他們所需的網絡資源,同時還禁止未授權用戶的非法訪問,一般是借助于AAA來實現。
->除了安全性外,在VPN構建的時候還要考慮防火墻的攻擊和檢測機制,一般大型的網絡我們都會部屬防火墻,防火墻有兩種,一種是ACL的軟體防火墻,一種是針對實際硬件的防火墻,這個防火墻有沒有部屬和他的有關策略、規則部屬的怎么樣,還有針對一些可能受到的攻擊的檢測的機制,來避免一些不必要的一些攻擊。
VPN設計的可靠性
因為VPN構建的環境是公網,不同于我們傳統上的專線廣域網,那么用戶對這個網絡的控制能力大大降低,他基本上是不可控的,所以可靠的運行VPN是我們必須要考慮的。
VPN設計的經濟性
也就是說在保證可靠性的同時不能過多的增加操作成本。
VPN設計的擴展性
是說這個VPN的管理需要增對日益增多的客戶和合作伙伴做出迅捷的一些反映。
L2TP協議:
L2TP:Layer2TunnelProtocol第二層隧道協議,是為在用戶和企業的服務器之間透明傳輸PPP報文而設置的隧道協議。L2TP是由IETF制訂的,這個協議是在PPTP和L2F的基礎上發展起來的,它吸收了pptp和l2f的優點,同時也擴大了應用范圍,因此它是現在應用最廣泛的在點到點上實現隧道的協議。
l2tp的特征:
->靈活的身份驗證機制以及高度的安全性:配合ppp模塊支持本地或者遠端的身份驗證,針對有關用戶的身份,可以是用戶的全名、用戶的域名、或者一些特殊號碼;對l2tp來說,它有高度的安全性,可以借助IPSec這樣一些數據加密的協議,在用戶數據報文發往Internet之前就對數據報文進行加密,也可以在VPN的lac(l2tp的接入集中器)側來進行加密。
->可以實現多協議傳輸,這個多謝以傳輸是什么概念呢,是說它本身是作為一個第二層隧道協議,它獨立于網絡層,那么網絡層的很多協議都可以借助于第二層隧道來實現傳輸,所以很方便各種不同的操作系統之間和各種不同的網絡之間私密數據的傳遞任務。
->支持RADIUS服務器得驗證:借助RADIUS還可以完成對用戶的一些授權和記費
->支持內部地址的分配:用戶和企業之間的數據可以實現透明傳輸,也就是說私有數據可以穿越隧道到達另外一個網絡,也就是說支持在隧道里面來完成私有數據的傳遞,它的原有地址可以是私有地址,接入后,可以是公司內部動態分配的地址。
->網絡記費的靈活性:記費的靈活性也是數據RADIUS的一個操作。
->可靠性:這個可靠性是由l2tp本身在和internet協商時候的可靠性來保障的。
使用l2tp構建vpdn
在使用l2tp構建vpdn的時候它有很多種靈活方式來實現用戶到總部的接入,這個方式大體上分為兩種,
第一種方式是隧道模式的VPDN,用戶首先通過isdn或者pstn的一些網絡接入ISP的LAC,然后再由LAC發起去往總部的隧道連接,總部的網絡接入設備我們叫他LNS,這種接入方式在用戶和LAC之間是沒有任何加密數據保障的。這種方式接入對于用戶來說是透明的,用戶只需要登陸一次就可以接入企業網,用戶本身不需要安裝任何VPN的客戶端軟件,因此它的操作平臺可以非常非常靈活。這種接入方式有個問題就是你必須確保isp要支持VPDN,這就并不是任何得LAC或者POP或者接入服務器都可以滿足條件的,因此可能會限制了isp得選擇面。
第二種方式是傳輸模式的VPDN,員工直接撥號到POP,pop在這里只是完成有關數據服務,用戶直接在Client這邊采用vpdn的撥號軟件和總部直接建立隧道。也就是說隧道建立在用戶和企業的lns之間。這種方式用戶上網的時間和地點沒有限制,但是要客戶端支持VPDN的撥號。
不管是哪種方式,都需要一些消息數據包來實現VPDN的傳輸,l2tp存在兩種消息類型,第一種是控制類型消息,主要用于隧道和會話的建立、維護和刪除,第二種是數據消息,也就是當已經建立了隧道,實現了ppp會話之后呢,就可以通過這個隧道實現ppp數據得端到端的傳輸。
下面來介紹一個相關概念:
LAC:L2TPAccessConcentratorL2TP服務接入集中器,提供各種用戶接入AAA的一些服務,具有發起隧道和會話連接的一些功能以及對vpn用戶代理認證的一些功能,這些LAC一般是由ISP來提供接入設備。
LNS:L2TPNetworkServerL2TP的網絡服務器,它是VPN企業側的服務器,這個服務器也可以完成對用戶的最終授權和驗證,并且可以接受來自LAC的隧道連接請求并且更具連接請求來實現和用戶之間的ppp的會話通道。在有關驗證的時候,用戶數據可以采用RADIUS服務器來保存。
L2TP隧道和會話得建立流程
L2TP的會話建立是由PPP來觸發的,隧道的建立由會話觸發,由于多個會話可以復用在一條隧道上,如果會話建立前隧道已經建立,則隧道不用重新建立。
這里所探討的隧道和會話建立流程主要是指LAC和LNS之間的建立流程,而Client與LNS建立的過程因操作系統和軟件的不同而不同,而且過程更加簡單一些。
如果在LAC和LNS之間直接建立傳輸報文的隧道,那這個隧道就必須涉及到有關傳輸會話的操作,因此隧道本身必須具備具有相同會話連接特性的一組用戶可以共享連接屬性所定義的一個通道。而會話是針對每個用戶與企業VPN服務器建立連接ppp的數據通道,同一個LAC與LNS之間指可以建立一個L2TP的隧道,但是在這個隧道種可以傳遞多個會話,不管是隧道也好會話也好,他們都可以動態的建立維護以及刪除。
由于隧道的建立是一個三次握手的流程,類似于TCP連接的建立,三次握手保證了有關隧道的可靠性,隧道建立的三次握手過程如下:
首先由LAC端像LNS端發起一個建立隧道的請求:SCCRQ
然后LNS端會針對請求分配一些資源,分配好后給源端做出一個回應:SCCRP
LAC端收到回應之后要對它做一個確認:SCCCN,這就表示隧道已經完全建立了。
有了隧道后,會話就可以在隧道里面來傳遞,在觸發建立了隧道之后,那么后續得一些同一對LAC和LNS之間的會話就會復用在這條隧道里面。
會話的建立流程同樣也是三次握手,會話的建立本身是由PPP模塊來觸發的,如果在會話之前沒有可用會話呢,它會首先建立隧道連接,建立之后在實現有關的會話,而會話建立完成之后就可以完成數據的傳輸。
首先由LAC端發起會話請求:ICRQ
LNS收到這個ICRQ之后會對它做一個應答:ICRP
然后LAC端在收到這個應答后會對它做一個確認:ICCN
除了建立之外,隧道和會話的維護和拆除也有那么一個流程
隧道建立之后,一直要等所屬會話全部下線之后才可以拆除,為了確認對端隧道依然存在,必須定時發送一些維護報文,其流程為LAC端或者LNS端互相發出Hello報文進行查詢,對應的LNS或者LAC發出ZLB(Zero-LengthBody:零長度實體報文)進行確認。ZLB只有一個L2TP的報文頭。
如果這個隧道已經沒有必要在進行維護下去了(比如會話已經全部中斷了),即進行拆除行為,先由任意一端發出拆除鏈接通知StopCCN(Stop-Control-Connection-Notification),另外一端回應ZLB報文。
同樣會話的拆除也是由一端發出拆除通知CDN(Call-Disconnect-Notify),另外一端返回zlb
隧道拆除是一定要在會話完全拆除之后才能拆除的。
L2TP協議棧結構及數據包的封裝過程
用戶端的IP報文數據,首先封裝成PPP的數據,通過物理層發送到LAC端,發送到LAC端之后會傳遞給L2TP隧道協議,來完成對數據的進一步的處理,這個處理實際上就是叫做封裝,LAC收到報文后,首先還原成p2p的數據,然后傳遞給l2tp,l2tp這個協議會封裝在ppp的前面,然后通過udp協議這個傳輸介質來傳遞,因此要封裝成UDP的數據包,因為首先要在公網上傳遞,所以必須具有ip地址,因此在udp報頭前面加上一個ip報頭,然后通過鏈路層打上幀頭幀尾傳遞給物理層,轉換為二進制傳輸出去。
經過internet傳輸之后到達對端LNS,收到該報文后,就會有一個解封裝的過程,跟LAC端的封裝過程相反,解封裝后,它就已經跟總部內網實現通訊了,這個時候會封裝一個新的鏈路層發往總部的server。
【編輯推薦】