PPP

November 4, 2017

PPP 廣域網路協定

廣域網路

廣域網路(Wide Area Network,WAN )和一般所謂的區域網路不一樣。區域網路通常是指範圍較小的網路區段,可能是同一棟大樓、同一層樓或是一個區域較小的地理位置。 而廣域網路是範圍比較廣的網路區段,一般跨國型的企業都會使用廣域網路來連結位於不同國家的各個分部,好讓資訊能夠相互流通。

PPP 協定

PPP(Point to Point Protocol)協定是普遍被使用的廣域網路協定,如同名稱所示,PPP 協定是指點對點的網路協定,通常用於兩個網路節點的直接連接,例如兩台電腦透過電話線的網路連接,經常使用在寬頻網路連線上。目前許多ADSL 網路服務供應商(ISP )提供使用者以 PPP 協定的方式撥接到本身的機房,然後再連上網際網路。以往,則大多使用 SLIP(Serial Line Internet Protocol )協定,該協定採用的是TCP/IP 協定的點對點串列連線的標準。SLIP 協定是很久以前的協定,主要用於串列埠與數據機之間的連線,現在慢慢地已經被 PPP 協定取代。

PPP 協定在廣域網路連線上的定位

PPP 協定算是廣域網路在網路協定第二層封裝協定的種類之一,當網路封包要傳送到廣域網路之前,在網路第二層協定時,就一定會先透過特定的方式進行封裝,而為了保證能使用正確的封裝方式,在設定 Cisco 設備來支援廣域網路時就必須選對正確的封裝協定,而封裝協定的選擇與所使用的廣域網路技術和廣域網路設備有關。 因此,網路管理人員一定要瞭解廣域網路所使用的封裝協定,才能夠正確的選擇並且設定第二層封裝協定。

一般廣域網路的網路協定第二層封裝協定有以下幾個種類:

所以 PPP 協定正是其中一種。

PPP RFC 中定義資訊

PPP 協定包含了各種認證方式、加密與解密方式、壓縮資料方式以及 PPP 協定如何與其他網路協定的合作與交互關係。

PPP 協定中的CHAP 協定,也就是握手(Handshake )協定,用於建立撥號連接。

PPPoE 協定在乙太網路中用於傳輸PPP 協定中的資料,經常使用於ADSL 上。

PPPoA 協定,主要應用在以ATM 網路卡來傳輸PPP 協定的資料。由於PPPoA 使用於ATM 網路,所以也稱為PPPoATM。

PPP 協定可以在兩個網路系統之間支援多點連接以便增加網路頻寬,在這樣的網路環境之下,PPP 協定支援兩個頻寬的合併,同時也支援流量平衡的功能。

PPP 協定分成 LCP 和 NCP 兩個部分,各負責不同的工作內容。

PPP 協定的連線種類

廣域網路有以下三種類型

PPP 協定屬於 Leased LineCircuit Switched 類型。

廣域網路封裝協定與連線種類的關係

廣域網路種類OSI 網路第二層的封裝協定
Leased LineHDLC 、PPP 以及SLIP
Packet SwitchedX.25 、Frame Relay 以及 HDLC
Circuit SwitchedHDLC 、PPP 以及SLIP

PPP 協定的階層式架構

PPP 協定中的階層式架構主要分成兩層,

LCP 的設定與特性

會被使用的認證協定有 PAP 協定和 CHAP 協定。

功能主要工作內容運作的協定
認證(Authentication)要求密碼、執行握手(Handshake)過程PAP CHAP
壓縮(Compression)在來源端壓縮資料、在目的端解壓縮資料Stacker Predictor
錯誤偵測監視連線中被丟棄的資料、避免訊框迴路Quality Magic Number
多連結(Multilink)在多連結的環境使用流量平衡(Load Balancing)Multilink PPP(MLP)

壓縮主要是用來增加 PPP 連線的網路流量,透過壓縮的方式來減少傳遞資料所需承載的網路封包大小。Cisco 路由器一般會使用 StackerPredictor 這兩種壓縮協定。

PPP 協定的連線也具備錯誤偵測的功能,通常會使用 Quality Magic Number 來確保比較穩定而且不會有網路迴圈的資料傳輸。

PPP 協定的連線也可以在路由器的介面(Interfaces )上使用流量平衡(Load Balancing )的功能。

Load balancing ,就是在具有相同路徑選擇時將網路流量平均分配到這些網路路徑上,以便達到網路流量平均分攤的效果,減少每一條網路路徑的負擔。

多通道的 PPP 協定

Cisco 的網路設備必須把 Cisco IOS 升級到 11.1,才能支援 Multilink PPP。

PPP 協定連線的建立過程

PPP 協定連線的建立過程分成三個階段。

  1. 網路連線建立 建立 PPP 協定的連線,在這個階段中,每一個使用 PPP 協定的網路設備(Cisco 路由器)都會發送 LCP 協定的網路封包,以便設定和測試網路連線。此時,可以透過 LCP 協定的設定值來設定 PPP 協定的連線,其設定包含最多能接收的封包單位數目、壓縮設定以及認證協定的設定等等,如果此時沒有設定這些設定值,就會自動採用預設值。

  2. 認證確認 一旦網路連線建立,而且認證協定被決定之後,就代表連線的雙方可進入認證確認的階段。而認證確認的階段可有可無,不一定需要這個階段也可以完成 PPP 協定的連線。PPP 協定支援兩種認證協定:PAP 協定和 CHAP 協定。

  3. 網路層協定處理 最後一個階段是網路層協定的處理階段,這個階段是必須的。在這個階段中,PPP 協定會發送 NCP 協定封包來選擇,並且設定一個以上的網路層協定(IP 協定等等)。決定網路層的協定後,雙方就可以開始發送網路封包。

PPP 協定的認證協定

PAP 認證協定

PAP 認證協定是一種雙向握手(Two way handshake )協定,透過雙向握手的流程讓遠端的電腦或網路設備進行辨識(Identity )認證的工作。一旦建立網路連線而且認證協定被決定之後,就代表連線的雙方可進入認證確認的階段。因此,==認證的發生時間是在 PPP 協定連線建立之後就進行==。 進行時,遠端的電腦或是網路設備會不斷地發送帳號和密碼到 Cisco 路由器,這樣的發送過程會一直持續,直到這個認證被接受或是這個 PPP 連線被中斷為止。

PAP 認證協定的隱憂

雖然 PPP 協定使用著 PAP 認證協定,但事實上 PAP 認證協定本身並不是一個很嚴謹的認證協定,因為,PAP 認證協定會把密碼用純文字的方式(Clear Text)來傳送,這代表==傳送過程之中密碼不會被加密==,因此如果有人攔截到這樣的網路封包,就可以直接看到密碼。除了 Token Ring 網路架構之外,這樣的運作模式在大部分的網路環境中是相當不安全的。不僅如此,PAP 協定針對 PlaybackTrial-and-error 的攻擊方式也沒有任何的保護措施。

CHAP 認證協定

CHAP 認證協定採用的運作流程是 3-way handshake ,如果使用 CHAP 認證協定,當 PPP 連線建立階段完成之後,Cisco 路由器設備(本地端)就會發送所謂的 Challenge 封包給遠端的網路設備,接著遠端的網路設備會透過 One way hash 的方式,針對傳送過來的 Challenge 值和密碼計算出一個特定的值,然後將這個特定的值傳回給原本發送的 Cisco 路由器設備。這裡所使用的 One way hash 方式一般都採用 MD5(Message Digest 5 )演算法。接下來,本地端的 Cisco 路由器設備根據已知的計算方式再次計算出 hash 值,然後比對自己所計算的 hash 值和收到的 hash 值是否相同。如果兩個計算出來的 hash 值相同,代表這個認證已經通過,否則就會立刻中斷目前這個 PPP 連線。

CHAP 認證協定為何比較安全

CHAP 認證協定比 PAP 認證協定安全許多,因為雙方都會計算出特定的 hash 值加以比對,而且並不會把密碼直接用明文的方式來傳送。不僅如此,CHAP 認證協定對於 Playback 的攻擊方式也有相對應的保護措施。 剛剛提到的 Challenge 值很難被預測,因為 Challenge 值是由亂數產生,所以這也同時代表著所計算出來的 hash 值也是由亂數產生的。此外,Challenge 封包會不斷發送,這種作法也可以避免受到攻擊,因為每次發送的Challenge 值都不一樣。

實作

R1 s1/0 與 R2 s2/0 PAP 單向驗證
R1(config)#hostname STU  #方便管理
STU(config)#username KUAS password 9487  # 通常會以 hostname 作為帳號
STU(config)#interface s 1/0
STU(config-if)#encapsulation ppp  #改變封裝 HDLC變PPP
STU(config-if)#ppp authentication pap #設定認證協定為pap
R2(config)#hostname KUAS
KUAS(config)#interface serial 2/0
KUAS(config-if)#encapsulation ppp  #改變封裝
KUAS(config-if)#ppp pap sent-username KUAS password 9487 # 寄送R1 username &Password

encapsulation ppp 雙方必須一樣的協定,否則無法溝通。

R1 s1/0 與 R2 s2/0,PAP 雙向驗證

R2 設定成 R1 格式 username KUAS password 9487 username 以 hostname(對方)設定,Password 隨意

ppp pap sent-username [遠端hostname] password [遠端Password]
R1 s1/1 與 R3 s1/1,CHAP 雙向驗證
STU(config)#username NTU password itachi # username使用對方的host name 密碼雙方要相同
STU(config)#interface serial 1/1
STU(config-if)#encapsulation ppp
STU(config-if)#ppp authentication chap
STU(config-if)#ppp chap hostname STU  #向(NTU)R3 s1/1發起連線的帳號
STU(config-if)#ppp chap password itachi  #向(NTU)R3 s1/1發起連線的密碼

R3(config)#hostname NTU
NTU(config)#username STU password itachi
NTU(config)#interface serial 1/1
NTU(config-if)#encapsulation ppp
NTU(config-if)#ppp authentication chap
NTU(config-if)#ppp chap hostname NTU #向(STU)R1 s1/1發起連線的帳號
NTU(config-if)#ppp chap password itachi #向(STU)R1 s1/1發起連線的密碼
R1 s1/1 與 R3 s1/1,CHAP 單向驗證

假設 R3 s1/1 向 R1 s1/1 建立連線,再 R1 s1/1 把 R1 s1/0 PAP 單向驗證的認證協定改 CHAP,即可。

建立連線

NTU (config-if)#ppp chap hostname [(STU)的username]
NTU (config-if)#ppp chap password [(STU)的password]
R2 s2/1 與 R3 s1/2,PAP、CHAP 混合驗證

先試著採用 PAP 認證協定,如果連進來的 PPP 連線並非使用 PAP 認證協定,則會試試 CHAP 認證協定。

KUAS(config-if)#interface serial 2/1
KUAS(config-if)#encapsulation ppp
KUAS(config-if)#ppp authentication pap chap
KUAS(config)#username NTU password naruto

NTU(config)#interface serial 1/2
NTU(config-if)#encapsulation ppp
NTU(config-if)#ppp authentication pap chap
NTU(config)#username KUAS password Naruto

路由協定設定

設置 EIGRP,以下以 show runn 顯示

R1 路由設置

R1 介面設置

R2 路由設置

R2 介面設置

R3 路由設置

R3 介面設置

Wireshark 觀察

PPP frame

雙方 LCP 期間同意 Address field and Control field compression,將會被省略。

Protocol
        LCP:0xC021
  NCP:0x80xy
  IP:0x0021
  AppleTalk:0x0029
  IPX:0x002B
  Multilink:0x003D
  NetBIOS:0x003F
  MPPC&MPPE:0x00FD
 Information
        最大 MTU 是 1500 byte
抓取 R1 s1/0 to R2 s2/0 專線(注意 Point-to-Point Protocol)

LCP

Code

Ref