PPP PPOE详解
个人博客地址
PPP协议是在串行线IP协议SLIP(Serial Line Internet Protocol)的基础上发展起来的。由于SLIP协议具有只支持异步传输方式、无协商过程(尤其不能协商如双方IP地址等网络层属性)、只能承载IP一种网络层报文等缺陷,在发展过程中,逐步被PPP协议所替代。
- 对物理层而言,PPP既支持同步链路又支持异步链路,而X.25、FR(Frame Relay)等数据链路层协议仅支持同步链路,SLIP仅支持异步链路。
- PPP协议具有良好的扩展性,例如,当需要在以太网链路上承载PPP协议时,PPP可以扩展为PPPoE。
- 提供LCP(Link Control Protocol)协议,用于各种链路层参数的协商。
- 提供各种NCP(Network Control Protocol)协议(如IPCP、IPXCP),用于各网络层参数的协商,更好地支持了网络层协议。
- 提供认证协议CHAP(Challenge-Handshake Authentication Protocol)、PAP(Password Authentication Protocol),更好的保证了网络的安全性。
无重传机制,网络开销小,速度快。
- Flag域
- Address域
- Control域
- Protocol域
- Information域
- FCS域
![](https://img2020.cnblogs.com/blog/1867671/202103/1867671-20210317111106994-1254579925.png)
- 通信双方开始建立PPP链路时,先进入到Establish阶段。
- 在Establish阶段,(发送配置请求,回复ack报文)PPP链路进行LCP协商。协商内容包括工作方式是SP(Single-link PPP)还是MP(Multilink PPP)、最大接收单元MRU(Maximum Receive Unit)、验证方式和魔术字(magic number)等选项。LCP协商成功后进入Opened状态,表示底层链路已经建立。
- 如果配置了验证,将进入Authenticate阶段,开始CHAP或PAP验证。如果没有配置验证,则直接进入Network阶段。
- 在Authenticate阶段,如果验证失败,进入Terminate阶段,拆除链路,LCP状态转为Down。如果验证成功,进入Network阶段,此时LCP状态仍为Opened。
- 在Network阶段,PPP链路进行NCP协商。通过NCP协商来选择和配置一个网络层协议并进行网络层参数协商。只有相应的网络层协议协商成功后,该网络层协议才可以通过这条PPP链路发送报文。
- NCP协商成功后,PPP链路将一直保持通信。PPP运行过程中,可以随时中断连接,物理链路断开、认证失败、超时定时器时间到、管理员通过配置关闭连接等动作都可能导致链路进入Terminate阶段。
7. 在Terminate阶段,如果所有的资源都被释放,通信双方将回到Dead阶段,直到通信双方重新建立PPP连接,开始新的PPP链路建立。
PAP与CHAP认证
- 被验证方把本地用户名和口令发送到验证方。
- 验证方根据本地用户表查看是否有被验证方的用户名
- 若有,则查看口令是否正确,若口令正确,则认证通过;若口令不正确,则认证失败。
- 若没有,则认证失败
- 验证方配置了用户名的验证过程
- 验证方主动发起验证请求,验证方向被验证方发送一些随机产生的报文(Challenge),并同时将本端的用户名附带上一起发送给被验证方。
- 被验证方接到验证方的验证请求后,先检查本端接口上是否配置了ppp chap password命令,如果配置了该命令,则被验证方用报文ID、命令中配置的用户密码和MD5算法对该随机报文进行加密,将生成的密文和自己的用户名发回验证方(Response)。如果接口上未配置ppp chap password命令,则根据此报文中验证方的用户名在本端的用户表查找该用户对应的密码,用报文ID、此用户的密钥(密码)和MD5算法对该随机报文进行加密,将生成的密文和被验证方自己的用户名发回验证方(Response)。
- 验证方用报文ID和自己保存的被验证方密码和MD5算法对原随机报文加密,比较二者的密文,若比较结果一致,认证通过,若比较结果不一致,认证失败。
- 验证方没有配置用户名的验证过程
- 验证方主动发起验证请求,验证方向被验证方发送一些随机产生的报文(Challenge)。
- 被验证方接到验证方的验证请求后,利用报文ID、ppp chap password命令配置的CHAP密码和MD5算法对该随机报文进行加密,将生成的密文和自己的用户名发回验证方(Response)。
- 验证方用自己保存的被验证方密码和MD5算法对原随机报文加密,比较二者的密文,若比较结果一致,认证通过,若比较结果不一致,认证失败。
PPPOE
pppoe 是在以太链路上使用ppp协议进行数据包的封装,因为ppp链路是点到点链路,没有广播,在家用adsl拨号场景下需要更多的点到点链路,会造成基础线路资源极大的浪费,而以太网支持广播,但自身不支持认证,所以就有了pppoe的出现,ppp over ethernet
- PPPoE Client广播发送一个PADI(PPPoE Active Discovery Initial)报文,在此报文中包含PPPoE Client想要得到的服务类型信息。
- 所有的PPPoE Server收到PADI报文之后,将其中请求的服务与自己能够提供的服务进行比较,如果可以提供,则单播回复一个PADO(PPPoE Active Discovery Offer)报文。
- 根据网络的拓扑结构,PPPoE Client可能收到多个PPPoE Server发送的PADO报文,PPPoE Client选择最先收到的PADO报文对应的PPPoE Server做为自己的PPPoE Server,并单播发送一个PADR(PPPoE Active Discovery Request)报文。
- PPPoE Server产生一个唯一的会话ID(Session ID),标识和PPPoE Client的这个会话,通过发送一个PADS(PPPoE Active Discovery Session-confirmation)报文把会话ID发送给PPPoE Client,会话建立成功后便进入PPPoE Session阶段。
- LCP阶段主要完成建立、配置和检测数据链路连接。
- LCP协商成功后,开始进行认证,认证协议类型由LCP协商结果(CHAP或者PAP)决定。
- 认证成功后,PPP进入NCP阶段。NCP是一个协议族,用于配置不同的网络层协议,常用的是IP控制协议(IPCP),它主要负责协商用户的IP地址和DNS服务器地址。
PPP PAP与CHAP认证配置
拓扑
PAP认证:
配置要点,客户端需要在接口配置用户名密码,认证过程需要主动把接口配置的用户名密码发送给服务端进行认证,服务端需要在本端aaa配置相应的用户名密码,server-type为ppp,接口开启pap认证
client端 interface Serial0/0/0 link-protocol ppp ppp pap local-user test password simple test123 ip address 12.1.1.1 255.255.255.252 server端 aaa local-user test password cipher test123 local-user dark service-type ppp interface Serial0/0/0 link-protocol ppp ppp authentication-mode pap ip address 12.1.1.2 255.255.255.252
验证
![](https://img2020.cnblogs.com/blog/1867671/202103/1867671-20210317114946089-784050872.png)
CHAP认证:
配置要点,两端接口chap用户名必须配置,接口可以不配置chap用户密码,使用local用户密码进行验证,此外认证方与被认证方接口用户名无需配置一致,只需要local用户与对方接口用户密码一致即可通过认证
client端
aaa
local-user test password cipher O>Sr/xA!t<:z9:%F`[a=}'4#
local-user test service-type ppp
interface Serial0/0/0
link-protocol ppp
ppp chap user test
ip address 12.1.1.1 255.255.255.252
server 端
aaa
local-user test password cipher O>Sr/xA!t<:z9:%F`[a=}'4#
local-user test service-type ppp
interface Serial0/0/0
link-protocol ppp
ppp chap user test
ip address 12.1.1.1 255.255.255.252
验证
PPPOE 配置
配置要点,server端需要配置vt模板和aaa用户,可配置地址池给客户端分配地址使用,可以使用ipcp推送dns配置,cilent端需要配置dialer接口,在端口绑定dialer接口
server端配置
aaa
local-user test password cipher %$%$h[N|$6~U{T%b/20~1P-Qaay#%$%$
local-user test service-type ppp
ip pool 1
gateway-list 10.0.0.1
network 10.0.0.0 mask 255.255.255.0
interface Virtual-Template1
ppp authentication-mode chap
remote address pool 1
ppp chap user test
ppp ipcp dns 8.8.8.8
ip address 10.0.0.1 255.255.255.0
interface GigabitEthernet0/0/0
pppoe-server bind Virtual-Template 1
client端配置
aaa
local-user test password cipher %$%$|L!;K*)DVT,1I2-Pd9|BacpC%$%$
local-user test service-type ppp
interface Dialer1
link-protocol ppp
ppp chap user test
ip address ppp-negotiate
dialer user test
dialer bundle 1
interface GigabitEthernet0/0/0
pppoe-client dial-bundle-number 1
验证