一、前言
近年來,網絡數據業務發展迅速,寬帶用戶呈爆炸式的增長,運營商在采用xDSL,LAN,HFC,無線等多種接入方式的同時,為了構建一個可運營、可管理、可盈利的寬帶網絡,十分關心如何有效地完成用戶的管理,PPPoE(PPP over Ethernet)就是隨之出現的多種認證技術中的一種。
1、PPP over Ethernet
1998年後期問世的以太網上點對點協議(PPP over Ethernet)技術是由Redback 網絡公司、客戶端軟件開發商RouterWare公司以及Worldcom子公司UUNET Technologies公司在IETF RFC制的基礎上聯合開發的。通過把最經濟的局域網技術——以太網和點對點協議的可擴展性及管理控制功能結合在一起,網絡服務提供商和電信運營商便可利用可靠和熟悉的技術來加速部署高速互聯網業務。它使服務提供商在通過數字用戶線、電纜調制解調器或無線連接等方式,提供支持多用戶的寬帶接入服務時更加簡便易行。同時該技術亦簡化了最終用戶在動態地選擇這些服務時的操作。
PPPoE 基於以太網的點對點協議,當前的 PPPOE 主要被 ISP用於 xDSL 和 cable modems 與用戶端的連接,他們幾乎與以太網一樣。PPPoE 是一種標准的點對點協議 (PPP), 他們之間只是傳輸上的差異:PPPoE 使用 modem 連接來代替普通的以太網。一般來說 ,PPPoE 是基於與用戶認證和通過分發 IP 地址給客戶端。一個PPPoE連接由客戶端和一個訪問集線服務器組成,客戶端可以是一個安裝了 PPPoE 協議的windows電腦。PPPoE 客戶端和服務器能工作在任何以太網等級的路由器接口
2、網通的寬帶接入方式
網通的寬帶接入方式通常都是LAN的方式,即所有的用戶都位於一個大的局域網中,客戶端要上網,需要先使用相應的賬號進行PPPoE撥號,通過驗證之後獲得公網IP,然後才能上網。
二、PPPoE驗證過程
1、PPPoE驗證過程
首先了解一下PPPoE驗證過程:
假如客戶端要通過一個局域網與遠程的PPPoE服務器進行身份驗證,這時,它們會有兩個不同的會話階段,Discovery階段和PPP會話階段。當一個客戶端想開始一個PPPoE會話時,它必須首先進行發現階段以識別對端的以太網MAC地址,並建立一個PPPoESESSON_ID。在發現階段,基於網絡的拓撲結構,客戶端可以發現多個PPPoE服務器,然後從中選擇一個,不過通常都是選擇反應最快的一個。
Discovery階段是一個無狀態的階段,該階段主要是選擇接入服務器,確定所要建立的PPP會話標識符Session ID,同時獲得對方點到點的連接信息;PPP會話階段執行標准的PPP過程。當此階段完成,通信的兩端都知到PPPoESESSON_ID和對端的以太網地址,它們一起定義了一個唯一的PPPoE會話。這些步驟包括客戶端廣播一個發起分組(PASI),一個或多個PPPoE服務器發送響應分組(PADO),客戶端向選中的服務器發送請求分組(PADR),選中的PPPoE服務器發送一個確認分組(PADS)給客戶端。當客戶端接收到確認分組,它可以開始進行PPP會話階段。當PPPoE服務器發送出確認分組,它可以開始PPP會話。
當客戶端在指定的時間內沒有接收到PADO,它應該重新發送它的PADI分組,並且加倍等待時間,這個過程會被重復期望的次數。如果客戶端正等待接收PADS,應該使用具有客戶端重新發送PADR的相似超時機制。在重試指定的次數後,主機應該重新發送PADI分組。PPPOE還有一個PADT分組,它可以在會話建立後的任何時候發送,來終止PPPOE會話。它可以由客戶端或者PPPOE服務器發送。當接收到一個PADT,不再允許使用這個會話來發送PPP業務在發送或接收PADT後,即正常的PPP不能使用時,可以使用PADT,一旦PPPOE會話開始,PPP數據就可以以任何其它的PPP封裝形式發送。所有的以太網幀都是單播的,身份驗證是發生在會話階段的,PPPoE會話的SESSION_ID一定不能改變,並且必須是發現階段分配的值。
2、PPP over Ethernet基本幀格式
建立一個以太網上點對點協議會話包括兩個階段:1。發現(Discovery)階段。在Discovery過程中用戶主機以廣播方式尋找可以連接的所有的接入集線器,並獲得其以太網MAC地址。然後選擇需要連接的主機並確定所要建立的PPP會話識別標號。2。PPP會話階段。用戶主機與接入集線器根據在發現階段所協商的PPP會話連接參數進行PPP會話。因此對應於這兩種過程,以太網上點對點協議幀格式(如圖2)也包括兩種類型:發現階段的以太網幀中的類型字段為0x8863;PPP會話階段的以太網幀中的類型字段為0x8864,它們均已得到IEEE的認可。PPPoE包中的版本(VER) 字段和類型(TYPE)字段長度均為4比特,在當前版本PPPoE建議中這兩個字段值都固定為0x1。代碼(CODE)字段長度為8比特,根據兩階段中各種數據包的不同功能而值不同。在PPP會話階段CODE字段為0x00,發現階段中的各種數據包格式將在下面詳細介紹發現階段時給出。版本標識號碼(SESSION_ID)字段長度為16比特,在一個給定的PPP會話過程中它是固定不變的。值0xffffff為保留值。長度(LENGTH)字段為16比特長,指示PPPoE淨荷長度。發現階段PPPoE載荷可以為空或由多個標記(TAG)組成,每個標記都是TLV(類型-長度-值)的結構;PPP會話階段PPPoE載荷為標准的點對點協議包。
3、發現(Discovery)階段的詳細介紹
一個典型的發現(Discovery)階段共包括4個步驟:
1、主機發出PPPoE有效發現啟動(PADI)包。以太網目的地址為廣播地址0xffffffffffff, CODE字段為0x09,SESSION_ID為0x0000。PADI包必須至少包含一個服務名稱類型的標簽(標簽類型字段為0x0101),向接入集線器提出所要求提供的服務。
2、接入集線器收到在服務范圍內的PADI包後,發送PPPoE有效發現提供(PADO)包以響應請求。其CODE字段為0x07,SESSION_ID仍為0x0000。PADO包必須包含一個接入集線器名稱類型的標簽(標簽類型字段為0x0102)以及一個或多個服務名稱類型標簽,表明可向主機提供的服務種類。
3、主機在可能收到的多個PADO包中選擇一個合適的,然後向所選擇的接入集線器發送PPPoE有效發現請求(PADR)包。其CODE字段為0x19,SESSION_ID仍為0x0000。PADR包必須包一個服務名稱類型標簽,確定向接入集線器請求的服務種類。
4、接入集線器收到PADR包後准備開始PPP會話,它發送一個PPPoE有效發現會話確認(PADS)包。其CODE字段為0x65,SESSION_ID為接入集線器所產生的一個唯一的PPPoE會話標識號碼。PADS包也必須包含一個接入集線器名稱類型的標簽確認向主機提供的服務。當主機收到PADS包確認後,雙方就進入PPP會話階段。
三、PPPoE驗證的利用
從上面的過程我們需要注意兩點:發現階段是廣播方式進行的。會話階段是單播;客戶端通常選擇反應最的PPPOE服務器進行身份驗證和接入,什麼是反應快?我們可以理解成客戶端將與最近的PPPOE服務器進行身份驗證。
利用思路:這就是今天要說的關鍵,如果我們架設一個PPPOE服務器,那麼與我們同一交換機或集線器(通常是一個樓層)的用戶都將會選擇這個服務器進行接入和身份驗證,而不會去尋找遠方的PPPOE服務器。
下面說一下利用過程:
1、架設PPPOE服務器。架設PPPOE服務器,原作者是利用Windows Server2003的“路由與遠程訪問”服務來架設的,然後安裝PPPoE驅動,這樣使得路由與遠程訪問服務增加了PPPOE服務。當然也可使用Linux系統,網上有一篇關於Linux+PPPoE服務器的文章。
2、將PPPOE身份驗證設為未加密方式(具體情況還得取決與PPPOE服務器),不用多說,這主要是為了方便明文嗅探。
3、使用Sniffer進行嗅探。