Friday, March 14, 2025

虛擬專用網絡(VPN)連接基礎

遠程訪問是指通過透明的方式將位於本地網絡以外(遠程網絡)位置上的特定計算機連接到本地網絡中的一系列相關技術。當啟用遠程訪問時,遠程客戶可以通過遠程訪問技術像直接連接到本地網絡一樣來使用本地網絡中的資源。在Windows服務器操作系統中均包含了遠程訪問服務,它是作為路由和遠程訪問服務中的一個組件,遠程訪問服務支持遠程訪問客戶端使用撥號網絡連接和虛擬專用網絡連接這兩種方式的遠程訪問:

  • 撥號網絡連接遠程訪問方式:通過撥號遠程訪問方式,遠程訪問客戶端可以利用電信基礎設施(通常情況下為模擬電話線路)來創建通向遠程訪問服務器的臨時物理電路或虛擬電路。一旦這種物理電路或虛擬電路被創建,其餘連接參數將通過協商方式加以確定。
  • 虛擬專用網絡(VPN)連接遠程訪問方式:通過虛擬專用網絡遠程訪問方式,VPN客戶端可以通過IP網絡(例如Internet)與充當VPN服務器的遠程訪問服務器建立虛擬點對點連接。一旦這種虛擬點對點連接被創建,其餘連接參數將通過協商方式加以確定。

由於IP網絡的流行,撥號網絡連接遠程訪問方式已經基本不再使用。在此我僅對虛擬專用網絡(VPN)連接遠程訪問方式進行闡述。對於一個完整的VPN遠程訪問連接,它由以下元素組成:

遠程訪問VPN客戶端

VPN客戶端既可以是獨立的計算機,也可以是建立站點到站點VPN連接的VPN服務器。而根據VPN客戶端類型的不同,VPN分為以下兩種連接類型:

  • 遠程訪問VPN:由一台獨立的計算機作為VPN客戶端向VPN服務器發起VPN連接,從而此VPN客戶端計算機可以訪問VPN服務器所連接的內部網絡中的資源。Windows XP、Windows 2000、Windows NT 4.0、Windows ME和Windows 98 VPN客戶端均可與Windows的VPN服務器或運行其它大多數VPN服務器的遠程訪問服務器建立VPN連接。這種類型的VPN又稱為客戶端到服務器VPN。
  • 站點到站點VPN:在連接到不同內部網絡的兩台VPN服務器之間進行VPN連接,當VPN連接成功建立後,它們所連接的內部網絡中均可以相互進行訪問,就像直接通過物理鏈路連接到一起。VPN服務器會將通過VPN連接的數據進行加密和封裝,但是本地子網中的客戶和VPN服務器之間的通訊並不會進行加密。Windows的VPN服務器均可以和其他VPN服務器創建站點到站點的VPN連接。這種類型的VPN又稱為網關VPN或路由器到路由器VPN。

遠程訪問VPN服務器

基於Windows服務器操作系統的遠程訪問服務器能夠接受基於PPTP或L2TP/IPSec的遠程訪問VPN連接,或者基於PPTP、L2TP/IPSec或IPSec隧道模式的站點到站點VPN連接。

VPN承載鏈路

遠程訪問VPN客戶端必須能夠通過IP網絡訪問到遠程訪問VPN服務器,如果VPN服務器位於某個內部網絡而VPN客戶端位於Internet之上,那麼必須在VPN服務器連接到Internet的網關上為VPN服務器做端口映射。

 

VPN協議

Windows遠程訪問服務器與客戶端支持兩種遠程訪問VPN協議:

  • 端到端隧道協議(PPTP)
  • 第二層隧道協議(L2TP)

而對於站點到站點VPN連接,除了使用上述協議外,你還可以使用IPSec隧道模式。

端到端隧道協議(PPTP)

端到端隧道協議(PPTP)是微軟基於PPP協議開發的隧道協議,在RFC 2637中進行定義,在Windows系統中廣泛使用。PPTP首先在Windows NT 4.0中提供支持,並且隨TCP/IP協議一起自動進行安裝。PPTP是對端到端協議(PPP)的一種擴展,它採用了PPP所提供的身份驗證、壓縮與加密機制,並且通過Microsoft端到端加密(MPPE)技術來對數據包進行加密、封裝和隧道傳輸。

PPTP具有以下特性:

  • PPTP幀通過通用路由封裝(Generic Routing Encapsulation,GRE,協議ID 47)報頭和IP報頭(TCP 1723)進行封裝,在IP報頭中提供了與VPN客戶端和VPN服務器相對應的源IP地址和目標IP地址;
  • 使用Microsoft端到端加密(MPPE)技術來對多種協議的數據包進行加密、封裝和在IP網絡上進行隧道傳輸;
  • PPTP隧道連接協商身份驗證、壓縮與加密;
  • PPTP支持VPN客戶端IP地址的動態分配;
  • MPPE使用RSA/RC4算法和40位、56位或128位的密鑰進行加密;
  • MPPE將通過由MS-CHAP、MS-CHAP v2或EAP-TLS身份驗證過程所生成的加密密鑰對PPP幀進行加密,因此為對PPP幀中所包含的有效數據進行加密,虛擬專用網絡客戶端必須使用MS-CHAP、MS-CHAP v2或EAP-TLS身份驗證協議;PPTP將利用底層PPP加密功能並直接對原先經過加密的PPP幀進行封裝;
  • 初始加密密鑰在用戶身份驗證時產生並且定期刷新;
  • 在PPTP數據包中,只有數據負載才進行了加密。

如果使用PPTP協議的VPN客戶端部署在NAT網關之後,那麼要求NAT網關具有理解PPTP協議的NAT編輯器,否則VPN客戶將不能創建VPN連接。目前的絕大部分NAT網關中都具有PPTP NAT編輯器,均可以很好的支持PPTP協議。

第二層隧道協議(L2TP)

第二層隧道協議(L2TP)是微軟PPTP隧道協議和CISCO第二層轉發協議(L2F)的結合體,在RFC 2661中進行定義(最新的版本是L2TPv3,在RFC 3931中定義)。與PPTP利用MPPE進行數據包加密不同,L2TP依靠Internet協議安全性(IPSec)技術提供加密服務。L2TP與IPSec的結合產物稱為L2TP/IPSec,VPN客戶端與VPN服務器都必須支持L2TP和IPSec才能使用L2TP/IPSec。L2TP將隨同路由與遠程訪問服務一起自動進行安裝。

在IPSec數據包基礎上所進行的L2TP封裝由兩個層次組成:

  • L2TP封裝: PPP幀(IP或IPX數據包)將通過L2TP報頭和UDP報頭進行封裝。
  • IPSec封裝: 上述封裝後所得到的L2TP報文將通過IPSec封裝安全性有效載荷(ESP)報頭、用以提供消息完整性與身份驗證的IPSec身份驗證報尾以及IP報頭再次進行封裝。IP報頭中將提供與VPN客戶端和VPN服務器相對應的源IP地址和目標IP地址。IPSec加密機制將通過由IPSec身份驗證過程所生成的加密密鑰對L2TP報文進行加密。

L2TP具有以下特性:

  • L2TP隧道數據可以在任何支持點對點傳輸的網絡中進行傳輸,例如IP、幀中繼、ATM網絡等等;
  • L2TP使用UDP協議來進行隧道管理;
  • L2TP基於UDP協議發送封裝的PPP數據包;
  • 負載數據可以被加密和壓縮;
  • 使用IPSec封裝安全性有效載荷(ESP)進行加密,IPSec ESP在RFC 3193中進行定義;
  • 雖然L2TP/IPSec提供了用戶驗證機制,但是同樣要求計算機進行驗證。計算機驗證是相互的,每一端的計算機都必須向對方進行驗證;
  • 對於計算機驗證,要求計算機證書。VPN客戶端和VPN服務器(遠程訪問VPN)、或兩端的VPN服務器(站點到站點VPN)都必須具有有效的證書。你可以配置使用預共享的L2TP密鑰,這樣就無需計算機證書,但是由於所有VPN客戶都必須配置相同的預共享密鑰,這樣帶來的後果是極大的降低了L2TP的安全性。
  • 每一端都必須能夠驗證另一端提供的證書是否有效,如果計算機證書是由不同的證書權威頒發,那麼會出現問題。

和PPTP協議不一樣,如果基於L2TP/IPSec協議的VPN客戶端部署在NAT網關之後,只有VPN服務器和VPN客戶端支持IPSec NAT穿越(NAT-T)時,VPN客戶端才能和VPN服務器成功創建VPN連接。NAT-T在RFC 3947中進行定義,它描述了IPSec協議如何穿越NAT服務器。和L2TP/IPSec使用UDP端口500、1701不同,NAT-T使用UDP 4500端口。Windows Server 2003、Microsoft L2TP/IPSec VPN客戶端軟件和L2TP/IPSec NAT-T更新後的Windows XP和Windows 2000支持NAT-T。

但是,微軟不推薦在NAT網關後的Windows server 2003上使用IPSec NAT-T,並且修改了Windows XP SP2中的IPSec通訊行為,使其默認情況下不再支持NAT網關後的IPSec NAT-T。詳情請參見KB885348,IPSec NAT-T is not recommended for Windows Server 2003 computers that are behind network address translatorsKB885407,The default behavior of IPsec NAT traversal (NAT-T) is changed in Windows XP Service Pack 2

 

IPSec隧道模式

對於站點到站點VPN連接,除了上述的PPTP和L2TP/IPSec外,你還可以使用IPSec隧道模式。IPSec隧道模式單獨使用IPSec來創建一個加密的隧道,通常用於和不支持L2TP/IPSec或PPTP協議的非Windows VPN服務器之間創建加密通訊。和L2TP、PPTP不同,IPSec隧道模式不需要驗證用戶賬戶,它具有以下特性:

  • IP數據包通過IPSec進行加密,並在IP網絡上進行隧道傳輸;
  • IPSec隧道模式只能用於站點到站點的VPN類型;
  • IPSec隧道模式需要額外的IPSec安全策略配置;

選擇遠程訪問VPN協議

PPTP和L2TP/IPSec的區別主要有:

  • PPTP使用MPPE進行加密,L2TP/IPSec和IPSec隧道模式使用IPSec ESP進行加密。
  • PPTP加密在PPP身份驗證通過後處理連接時開始,因此,身份驗證過程沒有被MPPE加密。L2TP/IPSec會先進行安全協商再進行身份驗證,並對PPP身份驗證數據包進行加密,因此L2TP/IPSec比PPTP提供了更高的安全性。
  • PPTP使用MMPE和RC4,而L2TP/IPSec使用DES或3DES;
  • PPTP和L2TP/IPSec均要求用戶使用基於PPP的身份驗證協議進行身份驗證;
  • L2TP/IPSec還要求使用計算機證書進行計算機驗證。因此,L2TP/IPSec提供了更強壯的身份驗證過程。但是,帶來的不便之處是L2TP/IPSec需要公共密鑰基礎服務(PKI)或預共享的連接密鑰,而PPTP則無需PKI。
  • IPSec ESP要求基於數據包的數據源驗證和數據完整性驗證,另外,IPSec ESP提供了中繼保護,這防止了數據包的重現攻擊;而PPTP沒有提供這些保護。
  • IPSec ESP和PPTP(通過使用MPPE)提供了基於每個數據包的加密。
  • 你可以將基於PPTP的VPN服務器部署在NAT網關後,但是不建議將基於L2TP/IPSec、IPSec的VPN服務器部署在NAT網關後。
  • L2TP/IPSec比PPTP更耗費CPU性能。

在選擇VPN協議時,你應考慮以下幾點:

  • 是否存在公共密鑰基礎服務(PKI),如果不存在則選擇PPTP;強烈建議不要在商用網絡中通過預共享的連接密鑰來使用L2TP,這樣會極大的降低L2TP的安全性;
  • 如果要求最高的安全級別,選擇L2TP/IPSec;
  • 只有在特別需要時才使用IPSec隧道模式;
  • 如果企業安全策略要求DES或3DES,則使用L2TP/IPSec;
  • 如果使用IPSec導致CPU負荷過重,使用PPTP;
  • 如果VPN服務器部署在NAT網關後,選擇PPTP;
  • 部署PPTP比部署IPSec更為簡單。
  •  

    對於VPN客戶的身份驗證、訪問授權和記賬,你可以選擇兩種不同的方式:Windows或RADIUS。你可以為這三種功能選擇一種方式,也可以選擇一種方式用於身份驗證和授權,而另一種用於記賬。

    當使用Windows驗證時,如果VPN服務器是獨立服務器,則使用本地賬戶(SAM)來驗證VPN客戶;如果VPN服務器是域成員服務器,則使用活動目錄數據庫來驗證VPN客戶。如果使用RADIUS進行身份驗證,那麼就算VPN服務器是獨立服務器,也可以通過RADIUS使用活動目錄數據庫來進行驗證。在Windows服務器中同樣提供了RADIUS服務器組件,不過被稱為Internet驗證服務器(IAS),關於Internet驗證服務器更詳細的信息,請參見Internet驗證服務使用指南一文。

    PPTP和L2TP/IPSec均要求用戶進行身份驗證,並且對於L2TP/IPSec,你必須配置用戶身份驗證和計算機身份驗證。Windows VPN服務器支持的身份驗證方式有:

    • 可擴展身份驗證協議(EAP)
    • Microsoft質詢式握手身份驗證協議(MS-CHAP)
    • MS-CHAP第2版(MS-CHAP v2)
    • 質詢式握手身份驗證協議(CHAP)
    • Shiva式口令身份驗證協議(SPAP)
    • 可擴展身份驗證協議(EAP,包含EAP-MD5、EAP-TLS、EAP/MS-CHAPv2等等)

    它們之間的詳細區別請參考Windows的幫助,常用的身份驗證方式是MS-CHAP、MS-CHAP v2和EAP-TLS。

    當VPN客戶通過身份驗證時,VPN服務器將通過撥入VPN的用戶賬戶的撥入屬性來決定是否允許它的遠程訪問,

    其中:

    允許訪問:顯式允許VPN客戶的遠程訪問;

    拒絕訪問:顯式拒絕VPN客戶的遠程訪問;

    通過遠程訪問策略控制訪問:根據VPN服務器配置的授權方式的不同(Windows還是RADIUS),通過自己的遠程訪問策略(Windows方式)或RADIUS服務器的遠程訪問策略(RADIUS方式)來決定是否允許VPN客戶的訪問。遠程訪問策略是定義是否授權VPN客戶遠程訪問的一系列規則集合,VPN服務器按照從上到下的順序執行第一個匹配VPN客戶連接請求的遠程訪問策略。如果VPN客戶匹配某個授權訪問的遠程訪問策略,則VPN服務器允許VPN客戶的撥入,如果VPN客戶不匹配任何授權訪問的遠程訪問策略或者匹配某個拒絕訪問的遠程訪問策略,則VPN服務器拒絕VPN客戶端的訪問。

    如果此RRAS服務器屬於活動目錄,你需要提升域功能級為Windows 2000 Native或者Windows server 2003後,才能使用通過遠程訪問策略控制訪問選項。並且此RRAS服務器的計算機賬戶必須加入到域本地安全組RAS and IAS Servers組中,否則該RRAS服務器不能讀取域用戶的撥入權限設置。在啟用路由和遠程訪問服務時,會自動加入到RAS and IAS Servers組中,如果沒有自動加入,你可以手動進行添加或者在路由和遠程訪問服務器上運行Netsh ras add registeredserver命令。

    當VPN服務器允許VPN客戶撥入VPN時,將會為VPN客戶分配一個IP地址。你可以配置VPN服務器通過內部網絡中的DHCP服務器來為VPN客戶分配一個IP地址,也可以手動配置一個靜態IP地址範圍來為VPN客戶進行分配。但是,如果配置使用和內部網絡不一致的子網來用於VPN客戶的地址分配時,你必須添加內部網絡通過VPN服務器到達VPN客戶的路由。關於VPN客戶的地址分配更詳細的信息,請參見網絡專家Gable Guy的文章“IP 地址分配與“路由和遠程訪問”服務”以及ISA中文站中我的文章關於ISA防火牆中VPN服務的一些補充說明

    當VPN客戶創建VPN撥號連接時,默認會啟用遠程網絡上的默認網關,即把VPN連接作為自己的默認網關。這將導致VPN客戶不能訪問除自己本地子網外的其他本地網絡,也不能通過本地網絡連接到Internet。關於此選項的詳細信息,請參見網絡專家Gable Guy的文章“針對並行訪問Internet和Intranet的分割隧道功能”。

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.