PPP
PPP:Point-to-Point Protocol點對點協定(資料鍊路層協定)
- PPP二層不封裝MAC,無需ARP,兩端不同網段可通信
PPP優勢
擴充性好(基于TLV)
提供認證
位址互推、位址擷取
OSPF在PPP上不選舉DR,收斂快
PPP由三個協定族構成:LCP、NCP、CHAP/PAP
PPP鍊路路由表不關心Next_Hop,僅看出接口
- 靜态路由也隻需要寫出接口
PPP鍊路兩端配置/31位址為宜,
如果掩碼<30,存在潛在環路且浪費位址。
PPP協定族
LCP鍊路控制協定:用于建鍊(鍊路層參數協商)、拆鍊、保活。
協商 最大傳輸單元MRU、魔術字
工作方式:SP/MP(Single-link PPP/ Multilink PPP)、鍊路認證方式(PAP/CHAP)
NCP網絡控制協定:用于協商資料包(IP位址等)的格式
CHAP/PAP擴充協定族:用于身份認證
- PPP不要求兩端IP同網段。因為在NCP協商時,IPCP雙方會通知對方自己的IP
PPP幀結構(TLV)
Protocol(Information使用的協定族): 0x值= 0021 IP封包
8021 IPCP封包(位址互推)
C021 LCP
C023 PAP
C223 CHAP
資訊域:PPP幀的載荷,可變長。最大接收單元MRU=1500Byte(Information長度)
LCP:建鍊(協商參數)、拆鍊、保活
code: LCP封包類型
DATA: TLV格式表示LCP協商的内容
Config-Reject不識别對方參數
- 保活:10s周期發Echo-Request/Reply
魔術字(Magic-Number)
作用: PPP鍊路防環
打環測試鍊路通斷(耦合器/自環頭)
- 每台裝置獨立(根據SN号、裝置MAC等)産生唯一的魔術字
在LCP封包中攜帶(除了Terminate Request/ACK)
收到LCP封包中攜帶了自己的魔術字,說明環路,發送Config-NAK
PPP建鍊過程(狀态機)
- LCP除了建鍊、協商參數外,還會保活PPP。是以在拆鍊之前始終存在LCP封包。
- LCP協商參數都是單向的,需要雙向都同意對方參數,才算協商成功。
PPP鍊路認證
- PPP認證是單向的。一邊配置PAP、一邊配置CHAP,互相作為對方的認證方/被認證方是可以建立連接配接的
PAP(Password Authentication Protocol密碼認證協定)
CHAP(Challenge Handshake Authentication Protocol挑戰握手認證協定)
随機數作用 Hash因子、防重播攻擊
封包ID作用 Hash因子、辨別一次CHAP認證的封包(随機數每次都變)
- 封包ID在challenge、response、success、failure封包都帶
- 認證不通過時,
發3次 CHAP 3*【challenge、response、failure】
PAP 3*【au-request、au-nak】
認證方發Terminate-Request,被認證方Terminate-Ack,拆鍊。
30s後,重新發challenge、auth-request,重複認證過程
認證方接口下配置/不配置使用者名
認證方
AAA中必須配置密碼
接口下配置了使用者名,Challenge就會攜帶使用者名
接口下沒配使用者名,Challenge就不帶。
被認證方
接口下必須配置使用者名(在Response封包中攜帶)
密碼可在接口or AAA中配置
- 被認證方根據接口下ppp chap user admin判斷PAP/CHAP認證方式,如果被認證方接口下沒有配置使用者名,LCP協商就通不過
- 被認證方接口必須配置使用者名(Response封包需要攜帶)
記憶:
鍊路上 使用者名+密碼≥2
NCP(IPCP):位址互推、位址擷取
認證通過後,PPP進入NCP階段。 協商網絡層協定(IP則用IPCP)
IPCP:位址互推、位址擷取。
IPCP封包(和LCP封包不同)
Config-Request 攜帶自己位址(不帶掩碼)
Config-ACK 确認收到,生成/32路由
Config-NAK 收到不合法位址0.0.0.0
Terminate-Request IPCP協商位址失敗 請求
Terminate-ACK IPCP協商位址失敗 确認
靜态IP位址協商:位址互推
R1路由表 10.0.0.0/24 → 10.0.0.1 S0/0/0
10.0.0.1/32 → 127.0.0.1
10.0.0.2/32 → 10.0.0.2 S0/0/0
10.0.0.255/32 → 127.0.0.1
動态IP位址協商:位址擷取
NCP(IPCP)可以為遠端配置設定位址
[R1-S0/0/0]ip address ppp-negotiate [R2-S0/0/0] remote address x.x.x.x/pool
pool:還可以配置設定DNS
- Termination封包僅表示IPCP失敗,不拆鍊(僅LCP拆鍊)
環路問題
掩碼=31位,僅PPP兩端位址
掩碼=30位,兩端位址+廣播位址+網絡号
掩碼<30位,出現潛在環路(R1-R2的10.0.0.0/24互指)
解決辦法: 1. 兩端配置不同網段
2. 配置30/31位掩碼
3. 配置 ip route-static 10.0.0.0 25 null0
ip route-static 10.0.0.128 25 null0
還發現一個神奇的現象
PPP鍊路上,ping 網絡号
R1路由12.0.0.0 下一跳=12.0.0.1 出接口=S4/0/0,發出。
是以ping 網絡号會環路。
但是,12.0.0.1→12.0.0.0 TTL逾時後,對方會給我回複Echo Reply,ping網絡号可達。
- 如果寫2條/25的黑洞,就不會有環路,且不可達。
PPP配置
[R-Serial/POS/ATM] link-protocol ppp
CHAP加密配置
使用者名admin 密碼huawei
認證方(AAA必須)
[R1] aaa
local-user admin password cipher huawei
local-user admin service-type ppp //指定該密碼用于PPP認證
[R1-S0/0/1] ppp authentication-mode chap
被認證方(接口使用者名必須)
[R2-S0/0/1] ppp chap user admin
ppp chap password cipher xxx(密碼也可在AAA中配置)
[R-G] ppp peer hostroute-suppress //抑制生成主機路由
[服務端-G] ppp ipcp dns x.x.x.x //通過IPCP配置設定DNS
[用戶端-G] ppp ipcp dns request
1.1.1.1/24 - 2.2.2.2/24 分析路由表
R1的路由表:
網段 下一跳 出接口 類型
1.1.1.1/32 → 127.0.0.1 S0/0/0 直連
1.1.1.255/32 → 127.0.0.1 S0/0/0 直連
1.1.1.0/24 → 1.1.1.1 S0/0/0 直連
2.2.2.2/32 → 2.2.2.2 S0/0/0 直連 //位址互推得到
如果R1-R2建立了ospf鄰居,R1路由表中還會有一條:
2.2.2.0/24 → 2.2.2.2 S0/0/0 ospf(preference=10)
PPP鍊路上ospf的LSA1
上圖中R1-R2建立ospf鄰接關系,R1的lsdb中,以R1的LSA1為例
LINK-ID LINK DATA
P2P R2的RID R1接口IP=1.1.1.1
StubNet 網絡号1.1.1.0 掩碼=255.255.255.0
MP(Multi-Link PPP)
MP作用: 增加帶寬
可靠性、備援性
負載分擔(逐包)
利用分片降低延遲時間
實作方式:
1. 基于MP-Group接口
2. 基于虛拟接口模版VT(Virtual-Template)
2.1 VT ←綁定→ PPP鍊路
2.2 VT ←綁定→ 相同使用者名的PPP鍊路(需要通過認證)
基于MP-Group接口配置:
[R] int Mp-Group 0/0/0 //建立Mp-Group接口
[R-S] ppp mp Mp-Group 0/0/0 //實體接口綁定Mp-Group接口
- Mp-Group接口,僅能配置IP
認證在實體接口配置(每條和對端配置一緻即可,本端多條不一樣也行)
基于VT:
VT ←綁定→ PPP鍊路配置:
[R] int virtual-template 1
[R-S] ppp mp virtual-template 1 重新開機接口
VT ←綁定→ 相同使用者名的PPP鍊路配置:
[R] interface virtual-template 1
ppp mp binding-mode authentication/descriptor/both
[R] ppp mp user xxx bind virtual-template 1
[R-S] ppp mp 重新開機接口
VT、Bundle、PPP鍊路關系
一邊MP、一邊SP,LCP能否協商成功?
能
LCP協商是雙向的
左邊請求MP方式被NAK(實際Reject)
然後雙方以2條SP-SP方式進行通信
PPPoE
PPPoE:PPP over Ethernet,以太網上層的PPP
PPP支援 認證 友善計費
位址擷取 省去DHCP伺服器
Ethernet支援 點對多點 多使用者接入ISP
支援廣播 用來尋找PPPoE伺服器
- PPPoE結合二者優點
PPPoE封包格式
Ethernet + PPPoE + PPP
- PPP DATA ≤ 1500 - 6(PPPoE頭)- 2(PPP頭)= 1492 Byte
Ethernet Type : Discover階段封包 =0x8863
Session階段封包 =0x8864
PPPoE:
Code: PPPoE Active Discovery Init PADI =0x09
Offer PADO =0x07
Request PADR =0x19
Session-confirmation PADS =0x65
Terminate PADT =0xA7
Session-ID:PPPoE Server配置設定,Session ID + S/D MAC辨別一個PPPoE會話
- 營運商通過Session-ID用于區分不同家庭使用者,計費
PPPoE工作過程
Discover階段封包 Eth + PPPoE
Session階段封包 Eth + PPPoE + PPP + DATA
- Session-ID配置設定完後,始終不變。除非PADT拆鍊重建。
Session-ID + S/D MAC唯一辨別PPPoE會話
- PADO提供AC-Name後,PADR、PADS都會攜帶
- PADR是單點傳播發送,和DHCP Request廣播發送區分。
因為DHCP廣播是為了告訴其他伺服器:“我已經使用了這個位址,你們為我配置設定的位址可以收回”
PPPoE PADO并沒有提供位址(後續NCP IPCP提供),是以單點傳播。
PPPoE的Client端除了自己配置IP、位址擷取,還可以Radius擷取位址
- discover階段,C-S學習到對方MAC位址
儲存在dis pppoe-client/server session summary dial-bundle-number 1表中
以供後續PPPoE資料封包封裝目的MAC位址
PPPoE拆鍊
PPP拆鍊 Terminate-Request
Terminate-ACK
PPPoE拆鍊 PADT
PPPoE上PPP拆 先拆PPP Terminate-Request、Terminate-ACK
再拆PPPoE PADT
PPP認證失敗
PAP失敗 3*【Au-Request、Au-NAK】
CHAP失敗 3*【Challenge、Response、Failure】
3次認證失敗後,Terminate-Request、Terminate-ACK拆鍊,30s後重複認證過程。
PPPoE上PPP認證失敗
PAP失敗 3*【Au-Request、Au-NAK】
CHAP失敗 3*【Challenge、Response、Failure】
3次認證失敗後,Terminate-Request、Terminate-ACK拆鍊,PADT拆PPPoE
30s後重複認證過程:
PADI
PADO
PADR
PADS
LCP
認證*3
Terminate-Request、Terminate-ACK
PADT
循環
PPPoE撥号上網配置示例
PPP鍊路: Dialer——VT,配置IP、認證
Ethernet鍊路: 實體接口綁定邏輯接口
- NAT在Dialer接口做
- Dialer接口可以配置多個bundle,bundle需配置user
[C] int Dialer1
ppp chap user admin
ppp chap password simple 123
ip address ppp-negotiate
dialer user admin
dialer bundle 1
nat outbound 2000
[C-G0/0/0] pppoe-client dial-bundle-number 1
[C] ip route-static 0.0.0.0 0 dialer 1
[S-AAA] local-user admin password cipher 123
local-user admin service-type ppp
[S] ip pool POOL
gateway-list 10.0.0.254
network 10.0.0.0 mask 255.255.255.0
[S] int Virtual-Template 1
ppp authentication-mode chap
remote address pool POOL
ip address 10.0.0.254 24
[S-G0/0/0] pppoe-server bind Virtual-Template 1