1. 程式人生 > >PPTP/L2TP協議詳解以及應用部署

PPTP/L2TP協議詳解以及應用部署

PPTP/L2TP協議講述以及應用部署

一、基本概念

PPTP

PPTP是對端對端協議(PPP)的一種擴充套件,它採用了PPP所提供的身份驗證、壓縮與加密機制。PPTP能夠隨TCP/IP協議一道自動進行安裝。PPTPMicrosoft端對端加密(MPPE)技術提供了用以對保密資料進行封裝與加密的VPN服務。 MPPE將通過由MS-CHAPMS-CHAP v2身份驗證過程所生成的加密金鑰對PPP幀進行加密。為對PPP幀中所包含的有效資料進行加密,虛擬專用網路客戶端必須使用MS-CHAPMS-CHAP v2身份驗證協議。

L2TP

PPTP不同,Windows所支援的L2TP協議並非利用

MPPEPPP幀進行加密。L2TP依靠Internet協議安全性(IPSec)技術提供加密服務。L2TPIPSec的結合產物稱為L2TP IPSEC VPNVPN客戶端與VPN伺服器都必須支援L2TPIPSec。也可以單獨使用L2TP,這就需要修改windows主機的登錄檔,具體的修改過程,在建立"簡單的L2TP隧道"中講述。

二、資料封裝

PPTP     

1.控制連線和隧道維護

PPTP控制連線建立在PPTP客戶端機IP地址和PPTP伺服器IP之間,PPTP客戶端機使用動態分配的TCP埠號,而PPTP伺服器則使用保留TCP埠號1723。PPTP控制連線攜帶PPTP呼叫控制和管理資訊,用於維護PPTP隧道,其中包括週期性地的傳送回送請求和回送應答訊息,用於檢測出客戶端與伺服器之間可能出現的連線中斷。PPTP控制連線數包包括一個IP報頭,一個TCP報頭和PPTP控制訊息。

Star-Control-Connection-Request:由PPTP客戶機發出,請求建立控制連線

Star-Control-Connection-Reply:PPTP伺服器對Star-Control-Connection-Request迴應

Outgoing-Call- Request:由PPTP客戶機發出,請求建立PPTP隧道,該訊息包含GRE報頭中call id,該id可唯一地標識一條隧道

Outgoing-Call- Reply:PPTP伺服器對Outgoing-Call- Request t迴應

Set-Link-Info:由PPTP客戶機或伺服器任一方發出,設定PPP協商選項

Call-Clear-Request:由PPTP客戶機發出,請求終止隧道

Call-Disconnect-Notify:PPTP伺服器對Call-Clear-Request迴應或者其他原因指示必須終止隧道

Stop-Control-Connection-Request:由PPTP客戶機或者伺服器任一方發出,通知對端控制連線將被終止

Stop-Control-Connection-Reply:迴應Stop-Control-Connection-Request訊息

2.PPTP資料封裝

將原來Ethernet資料包先封裝成PPP packet,再由GRE封裝,通過Internet傳送至接收端(注意:當身份認證協議選擇MS-chap以及MS-chapv2的時候,ppp payload將被加密)

L2TP

  1. L2TP控制連線

L2TP控制連線建立在L2TP客戶端機IP地址和L2TP伺服器IP之間,PPTP客戶端機使用動態分配的UDP埠號,而L2TP伺服器則使用保留UDP埠號1701。L2TP控制連線用於隧道和會話連線的建立、維護以及傳輸控制。L2TP控制連線數包包括一個IP報頭,一個UDP報頭和L2TP控制訊息。

控制連線建立和會話建立

首先由客戶端發起隧道建立請求SCCRQ(start-control-connection-request)

伺服器收到後用SCCRP(start-control-connection-reply)

客戶端收到應答後返回確認SCCCN(start-control-connection-conneted)

伺服器收到之後用ZLB(zero-length boby)訊息作為最後應答,其中ZLB訊息是一個只有L2TP頭的控制訊息,其作用是作為一個明確應答,以確保控制訊息的可靠傳輸

客戶端發起建立請求ICRQ(incoming-call-request)

伺服器收到請求後返回應答ICRP(incoming-call-reply)

客戶端收到應答會返回確認ICCN(incoming-call-conneted)

伺服器收到ICCN後,用ZLB訊息作為最後的應答,會話建立

  1. L2TP資料連線

L2TP資料訊息用於封裝PPP幀,並在隧道上傳輸。

  1. 工作原理

原始使用者資料為IP報文,先經過PPP封裝,然後鏈路層將PPP幀進行L2TP封裝,將其封裝成UDP,並繼續封裝成可以在internet上傳輸的IP報文,此時的結果就是IP報文中有PPP幀,PPP幀中還有IP報文,但兩個IP地址不同,裡面的IP頭部是私有地址(原地址為L2TP伺服器動態分配的地址,目的地址為公司內網伺服器的地址),外層IP頭部的原IP是客戶端的原始地址,目的IP是L2TP伺服器的地址,至此完成客戶端資料封裝,然後通過L2TP隧道將報文傳送到L2TP伺服器,L2TP伺服器收到封裝的IP報文,發現外層IP頭部的目的地址是指定自己的,然後L2TP伺服器解封裝報文,得到裡面的IP報文,然後根據IP頭部的的目的IP地址將資料包傳送到內網區域網伺服器。

  1. L2TP IPSEC VPN

可以發現L2TP IPSEC VPN的資料封裝是在原始L2TP資料連線的IP頭部後面加入ESP欄位的,所以這是一種傳輸模式的IPSEC隧道。因為ESP後面的資料是經過加密的,所以這裡就不例舉抓包結果了。

三.協議和演算法介紹

PPP

1.工作流程

一個IP分組需要傳輸,出發PPP層啟動連線過程,LCP協議負責完成連線的建立過程,PAP或者CHAP協議完成身份認證,IPCP協議進一步完成網路層協議協商,當以上過程都成功完成之後,IP分組封裝在PPP幀中傳輸到對方

2.協議分析

LCP:負責鏈路的建立,維護以及拆除

CHAP:對客戶端進行身份認證

IPCP:負責協商IP地址以及DNS等資訊

CCP:負責壓縮的協商

GRE

1.概述

GRE(通用路由封裝)定義了在任意一種網路層協議上封裝任意一個其它網路層協議的協議。

2.封裝

在大多數情況下,系統擁有一個有效載荷包,需要將它封裝併發送某個目的地。首先將有效載荷封裝在一個GRE包中,然後將此GRE包封裝在其它某協議中並進行轉發。比如在PPTP隧道中,IP包封裝GRE包,在IP頭部中指明下層協議GRE的協議號47,GRE包封裝PPP包,在GRE頭部中指明下層協議PPP的協議號0x880b

3.應用

GRE OVER IPSEC

當資料包到達隧道一端A,A查詢路由,發現去往該目的地的資料包需要經過GRE封裝,在原始的資料包上加上GRE頭部以及新的ip頭部,然後A重新查詢規則,發現該新的ip頭部需要經過ipsec模組處理,所以資料包又經過加密封裝之後,查詢路由之後傳送到隧道對端B,B發現該資料包的目的是發給自己的,解封裝時ip頭部的協議欄位指明封裝的是ESP或者AH,然後B解密等操作,發現該資料包的原始目的,查詢路由之後,該資料包送到保護網路中。因為ipsec並不能承載動態路由協議以及組播,所以需要用到這兩種技術的時候,可以選擇GRE OVER IPSEC。

IPSEC OVER GRE

沒有什麼實際的使用意義

PPTP

請檢視PPTP的講述

L2TP

請檢視L2TP的講述

PAP

口令直接以明文在網路上傳輸,建議選擇CHAP,更安全。

CHAP

CHAP是一種加密的驗證方式,能夠避免建立連線時傳送使用者的真實密碼,伺服器向客戶端傳送一個挑戰口令challenge,其中包括會話ID和一個任意生成的挑戰字串。當客戶端收到後,必須使用MD5演算法計算使用者口令以及挑戰口令的hash值,然後將這個hash值和使用者名稱傳送給伺服器。因為伺服器上有該使用者名稱和口令,然後伺服器同樣使用MD5演算法計算出該使用者密碼和挑戰口令的hash值,與客戶端傳送給自己的hash值比較,如果相同的話,則身份驗證通過。

Challenge=session_id+challenge_string
Respond=md5(session_id+challenge_string+user_passwd)+uer_name

四.應用環境

建立虛擬專用網路

第一步: pc機上網路鄰居-----屬性

第二步:在網路連線中選擇"建立一個新的連線"

第三步:在彈出的"新建連線嚮導"中選擇下一步

第四步:選擇"連線到我的工作場所的網路",然後下一步

第五步:選擇"虛擬專用網路連線",然後下一步

第六步:輸入公司名,我這裡輸入的是leadsec,這個是隨便怎麼寫的,然後下一步

第七步:選擇"不撥初始連線",然後下一步

第八步:輸入伺服器的ip地址,然後下一步

第九步:選擇完成即可

不經過NAT的PPTP隧道

1. 拓撲圖

2.環境描述

經過專線的遠端使用者連線網際網路,該遠端使用者需要連線到公司區域網,需要與公司出口防火牆建立PPTP隧道,當建立PPTP隧道成功之後,測試該遠端使用者是否還能訪問網際網路

3.配置

在遠端使用者的虛擬專用網路屬性中指定VPN型別是PPTP VPN,專案只選擇Internet協議(TCP/IP),常規選項中填入目的主機地址124.1.1.2,在安全選項中選擇高階,指定資料加密可選加密,允許認證協議MSCHAP以及MS-CHAPV2,其他引數保持預設(3.4.6.8版本以及之前的版本必須這麼配置)

 

在防火牆處開啟PPTP服務,配置遠端撥號使用者以及全域性的地址池或者使用者中的虛擬ip地址(如果使用者中配置有虛擬ip地址,則該地址優先與地址池中地址分配給遠端使用者)

連線虛擬專用網路leadsec

檢視防火牆給遠端使用者分配的虛擬地址10.10.10.2

檢視虛擬專用網路leadsec的狀態,型別是PPTP,身份驗證MS CHAP V2,,分配給遠端客戶端地址為10.10.10.2,防火牆PPTP伺服器虛擬地址10.10.10.1

檢視遠端客戶端的路由變化,第一條預設路由是虛擬專用網路leadsec連線成功之後新增,它的閘道器為它自己,並且它的度量值為1,比第二條預設路由的度量值小,所以預設查不到明細路由的資料包都送到第一條預設路由進行處理。所以虛擬專用網路leadsec連線之後,遠端使用者不能再訪問網際網路地址,只能訪問公司區域網

檢視防火牆的路由變化,多了到目的網路10.10.10.2的出介面ppp0的明細路由

經過NAT的PPTP隧道

1.拓撲圖

2.環境描述

分支機構通過出口FW1連線網際網路,在出口FW1上作NAT,將172.16.1.0/24網段轉換為出口FW1的外網口地址211.103.135.192,現在分支結構需要通過PPTP隧道連線到公司總部區域網。

3.配置

在公司總部出口FW2上新增兩個遠端撥號使用者,並且開啟PPTP服務

在出口FW1上作NAT轉化,將172.16.1.0/24到any的流量源地址轉化為211.103.135.192

分別在分支結構的兩個客戶端建立虛擬撥號連線,連線到211.103.135.192,具體的引數配置參考"不經過NAT的PPTP隧道",這裡不再詳述了。接下來要分析的是PPTP穿越NAT的工作機制

PPTP穿越NAT的工作機制

我們知道GRE(請看GRE協議介紹)是沒有埠資訊的,並且它是跟TCP、UDP是同一層的,GRE的ip協議號是47,TCP的ip協議號是6,UDP的ip協議號是17。那GRE穿越NAT的時候怎麼對映呢?這個時候你可能會想到那就只轉換ip不就得了,但是這對防火牆是個問題。接下來我們就來分析下:如果處於分支機構的主機A172.16.1.2(NAT轉換為211.103.135.192)與pptp伺服器211.103.135.221建立連線,控制連線成功建立,資料連線由於沒有埠,NAT只做其ip的轉換,於是在出口FW1上有這樣的一個NAT表:

SIP

SPort 

Proto

轉換地址

轉換埠

DIP 

DPort 

172.16.1.2 

5000 

TCP 

211.103.135.192 

5001 

192.168.1.2 

1723 

172.16.1.2 

GRE 

211.103.135.192 

192.168.1.2 

當211.103.135.192這個防火牆收到來自於pptp伺服器211.103.135.221的資料流包時,211.103.135.192這個 nat裝置發現來自於網路211.103.135.221的gre 協議資料包,是給分支結構的172.16.1.2主機的,所以成功通訊。分析如果位於分支結構的172.16.1.3 也與211.103.135.221的pptp伺服器通訊,結果就不太理想了。因為如果在nat表中還有一條到達主機172.16.1.3的gre通訊,到收到一個gre協議資料包時,211.103.135.192這個nat裝置猶豫了,這個包給誰呢?172.16.1.2?還是172.16.1.3呢?在此大家也不要忘了,我們的實驗環境是隻有一個公網ip,分支結構的172.16.1.2和172.16.1.3出去的時候,源ip都轉換成了公網的ip211.103.135.192,所以收到的資料包都是目標ip為211.103.135.192,然後nat裝置根據埠的不同轉發到不同的主機,但是又因為GRE根本就沒有埠這一說法,所以有兩個客戶端就無法通訊。

當然了,明知道PPTP穿越NAT的時候有問題,我們就要解決它,就好像IPSEC穿越NAT的時候,就需要在IPSEC包頭前面額外的插上UDP。人們發現gre協議中有一個欄位,可以拿來利用,那就是這個call id值,這個值並不固定,可以改變。這個值是怎麼回事呢?用來標識唯一會話的。這個值最早出現在控制連線中,客戶端與伺服器互相通告彼此的call id值,然後在其資料連線中,伺服器call  id值寫上客戶端的,客戶端寫上伺服器的call id值。所以我可以把call id值當做埠來看,然後新增到nat表中。下面來具體分析下call id和nat轉化的關係了!!!

分析客戶端172.16.1.2到PPTP伺服器211.103.135.221的PPP以及GRE資料報

172.16.1.2到211.103.135.221的Outgoing-Call-Request包中表明自己的call id為3277

211.103.135.221到172.16.1.2的Outgoing-Call-Reply包中表明自己的call id為3712,並指明客戶端的call id為3277

172.16.1.2到211.103.135.221的GRE包中會攜伺服器的call id 3712

211.103.135.221到172.16.1.2的GRE包中會攜客戶端的call id 3277

接下來看下NAT裝置的NAT表

將NAT錶轉化為圖示的形式為:(注意需要把srckey以及deskey當成源埠以及目的埠,並且將十六進位制轉化為十進位制)

SIP

SPort 

Proto

轉換地址

轉換埠

DIP 

DPort 

172.16.1.2 

3277 

TCP 

211.103.135.192 

3277 

211.103.135.221 

相關推薦

PPTP/L2TP協議以及應用部署

PPTP/L2TP協議講述以及應用部署 一、基本概念 PPTP PPTP是對端對端協議(PPP)的一種擴充套件,它採用了PPP所提供的身份驗證、壓縮與加密機制。PPTP能夠隨TCP/IP協議一道自動進行安裝。PPTP與Microsoft端對端加密(MPPE)技術提供

HTTP協議以及URL具體訪問過程

標記語言 初始化 折疊 code 文件類型 scheme 缺少 gif 其他瀏覽器 1、簡介   1.1、HTTP協議是什麽?   即超文本傳輸協議(HTTP,HyperText Transfer Protocol)是互聯網上應用最為廣泛的一種網絡協議,所有的WWW文件都必

WebSocket協議應用

https://blog.csdn.net/u014520745/article/details/52639452   WebSocket協議詳解及應用(一)-初識WebSocket 一、什麼是WebSocket WebSocket是一個允許Web應用程式(通常指瀏覽器)與

(轉載)token以及應用原理

一、我們先解釋一下Token的含義 1、Token的引入: Token是在客戶端頻繁向服務端請求資料,服務端頻繁的去資料庫查詢使用者名稱和密碼並進行對比,判斷使用者名稱和密碼正確與否,並作出相應提示,在這樣的背景下,Token便應運而生。 2、Token的定義: Token是服務端生成的一串字串,以

PCA(主成分分析)原理,步驟以及應用

主成分分析(PCA, Principal Component Analysis) 一個非監督的機器學習演算法 主要用於資料的降維處理 通過降維,可以發現更便於人類理解的特徵 其他應用:資料視覺化,去噪等   主成分分析是儘可能地忠實再現原始重要資訊的資料降維方法   原理推導: 如圖,

LVS原理以及部署

私有地址 命中率 least 支持 靜態 enc dns查詢 state core 一、LVS簡介 linux virtual server簡稱LVS,是章文嵩博士1998年發起的一個開源項目。官網:http://www.linuxvirtualserver.org。Int

SVD在推薦系統中的應用以及演算法推導

前面文章SVD原理及推導已經把SVD的過程講的很清楚了,本文介紹如何將SVD應用於推薦系統中的評分預測問題。其實也就是復現Koren在NetFlix大賽中的使用到的SVD演算法以及其擴展出的RSVD、SVD++。    記得剛接觸SVD是在大二,那會兒跟師兄在做專案的時候就

第六章 應用層(DNS和http協議)

    序言        這是計算機網路基礎的最後一篇博文了,大體的從物理層到最上層的應用層做了一個大概的瞭解,花了也有快1個月的時間了,在本章結尾會給你們我學習該課程的視訊資料,我希望能幫到所有想學習想提高自己技術的同學,我看到很多厲害的的部落格的文章都被鎖了,我希望高手度能夠幫助剛成長並且想努力提高技術

應用協議:HTTP與HTTPS協議、二者的區別

http協議詳解 1、HTTP協議:超文字傳輸協議 是一種分散式、合作式、多媒體資訊系統服務,面向應用層的協議。是一種通用的,不分狀態的協議。是一種請求/應答協議。 1.1、HTTP/1.0和HTTP/1.1的比較 RFC 1945定義了HTT

session機制以及session的相關應用

session是web開發裡一個重要的概念,在大多數web應用裡session都是被當做現成的東西,拿來就直接用,但是一些複雜的web應用裡能拿來用的session已經滿足不了實際的需求,當碰到這樣的情況時候我們需要更加深入的理解session的機制,本文將梳理下session的相關知識,為設計可替代web容

linxu下部署nginx的SSL證書(HTTPS)依賴模組與使用nginx.conf配置https協議

一:開始Nginx的SSL模組1.1 Nginx如果未開啟SSL模組,配置Https時提示錯誤1nginx: [emerg] the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/n

HTTP以及SOAP協議

引言                                        HTTP是一個屬於應用層的面向物件的協議,由於其簡捷、快速的方式,適用於分散式超媒體資訊系統。它於1990年提出,經過幾年的使用與發展,得到不斷地完善和擴充套件。目前在WWW中使用的是HTT

黑馬程式設計師--Java基礎--awt以及簡單應用

GUI 圖形使用者介面 CLI 命令列使用者介面 Java為GUI提供的物件存在java.Awt和Javax.Swing兩個包中. Java當中如何完成圖形化介面的製作呢? AWT:abstract Window ToolKit.需要呼叫本地

IO多路復用select/epoll以及在Python中的應用

end 內核 exc 阻塞 明顯 __name__ 請求 urlparse select() IO multiplexing(IO多路復用) IO多路復用,有些地方稱之為event driven IO(事件驅動IO)。 它的好處在於單個進程可以處理多個網絡IO請求。sel

python子進程模塊subprocess應用實例 之三

app 命令執行 windows rom not tput 一個 網絡 shell命令 二、應用實例解析 2.1 subprocess模塊的使用 1. subprocess.call >>> subprocess.call(["ls", "-l"]) 0

網絡協議

網絡協議 test 未能 第一個 為什麽 體系 index 緩存 hyper 目錄:::::: 一、網絡協議 二、TCP(Transmission Control Protocol,傳輸控制協議) TCP頭格式 TCP協議中的三次握手和四次揮手

Storm概念、原理及其應用(一)BaseStorm

when 結構 tails 並發數 vm 虛擬機 cif 異步 優勢 name 本文借鑒官文,添加了一些解釋和看法,其中有些理解,寫的比較粗糙,有問題的地方希望大家指出。寫這篇文章,是想把一些官文和資料中基礎、重點拿出來,能總結出便於大家理解的話語。與大多數“wordc

HTTP協議(真的很經典)

cnp 運用 web應用 media 服務器端 所有 長度 request bad 轉載:http://e7kan.com/?p=264& 引言 HTTP是一個屬於應用層的面向對象的協議,由於其簡捷、快速的方式,適用於分布式超媒體信息系統。它於1990年提出,經過幾

XML文件以及解析

不同 enume repl 添加 data 的人 中間 load 包含 一、xml基礎詳解: 1、概述: xml:即可擴展標記語言,xml是互聯網數據傳輸的重要工具,它可以跨越互聯網任何的平臺,不受編程語言和操作系統的限制,可以說它是一個擁有互聯網最高級別通行證的數

java基礎回顧(五)線程以及synchronized關鍵字

dom com stack 相互 ++ 關於 而是 。。 str 本文將從線程的使用方式、源碼、synchronized關鍵字的使用方式和陷阱以及一些例子展開java線程和synchronized關鍵字的內容。 一、線程的概念 線程就是程序中單獨順序的流控制。線程本 身不能