2013年(28)
分类: 网络与安全
2013-02-27 18:54:24
点到点协议(PPP)
PPP(Point-to-Point Protocol 点到点协议)是一种可以用于异步(拨号)或同步串行(ISDN)介质数据链路层协议。它是用LCP(链路控制协议)建立并维护数据链路连接。NCP(网络控制协议)允许在点到点连接上使用多种网络层协议(被动路由协议),即协商链路上的其他网络层协议。它首先在LCP层进行身份验证,通过后才转到NCP层进行网络层协商。PPP提供认证、动态地址以及回叫功能。
点对点协议栈
NCP:一种建立和配置不同网络层协议的方法。NCP设计允许同时使用多个网络层协议。
LCP:一种建立、配置、维护和结束点到点连接的方法。
HDLC:在串行链路上封装数据报的方法。
EIA/TIA-232-C、V.24、V.35、ISDN:串行通信的物理层国际标准。
PPP会话的建立
当PPP连接开始时,链路经过3个会话建立阶段:
Link-establishment phase:链路建立阶段。每个PPP设备发送LCP包来配置和测试链路。LCP包包括一个叫做
“配置选项”的字段,允许每个设备查看数据的大小、压缩和认证。如果没有设置“配置选项”字段,则
使用默认的配置。
Authentication phase:认证阶段。如果配置了认证,在认证链路时可以使用CHAP或PAP。认证发生在读取网
络层协议信息之前。同时可能发生链路质量决策。
Network layer protocol phase:网络层协商阶段。PPP使用NCP(网络控制协议)允许封装成多种网络层协议
并在PPP数据链路上发送。每个网络层协议(如:IP、IPX、等这些被动路由协议)都建立和NCP的服务关系。
PPP认证方法
PPP链路可以使用两种认证方法:
说明:PAP使用明文两次握手实现,CHAP采用三次质询握手实现。
口令认证协议 PAP(Password Authentication Protocol):口令认证协议是两种方法中安全程度较低的一种。
在PPP链路建立完毕后,源节点不停地在链路上反复发送用户名和密码,直到认证通过。PAP在认证过程
中,密码在链路上是以明文传输的,而且由于源节点控制认证重试频率和次数,因此PAP不能防范再生攻击
和重复的尝试攻击,尽管如此,PAP仍可用于以下情形:
①当系统中安装了大量不支持CHAP的客户端应用程序时;
②当不同供应商实现的CHAP互不兼容时;
③当主机远程登录必须使用纯文本口令时。
质询握手认证协议 CHAP(Challenge Handshake Authentication Protocol):利用3次握手周期性地验证远程
节点的身份。CHAP定期执行消息询问,以确保远程节点任然拥有有效的口令值。口令值是个变量,在链路
存在时该值不断改变,并且这种改变是不可预知的。本地路由器或第三方身份认证服务器控制着发送询问
信息的频率和时机,CHAP不允许连接发起方在没有收到询问消息的情况下进行认证尝试,这使得链路更为
安全。CHAP每次使用不同的询问消息,以及该询问消息与密码经过MD5运算后的HASH值。所以CHAP可以防止
再生攻击,CHAP的安全性比PAP要高。
CHAP认证原理:
1.A端向B端发送自己的用户名(默认为主机名),和一个随机数。
2.B端收到后,检查自己的数据库中是否有和收到的用户名一致的用户名:
有:就用这个用户名对应的密码与随机数做HASH,然后将HASH值和自己的用户名(默认为主机名)发送给A端;
没有:一般情况下不会对A端(对端)做出回应。
3.A端检查收到的用户名,在自己的数据库中找到一致的用户名,然后利用这个用户名对应的密码与随机数做
HASH。对比收到的HASH值,判断认证是否通过。通过,发送成功确认。
PPP实验
启用PPP封装:(无认证)
R1(config)#int S0/0
R1(config)#ip add 172.16.12.1 255.255.255.0
R1(config)#clock rate 64000
R1(config-if)#encapsulation ppp //启用PPP封装协议
R1(config)#compress stac //使用Stacker(LZS)压缩算法
R1(config)#ppp quality 80 //指定链路质量阀值
R1(config)#no sh
R2(config)#int S0/0
R2(config)#ip add 172.16.12.2 255.255.255.0
R2(config)#clock rate 64000
R2(config-if)#encapsulation ppp
R2(config)#compress stac
R2(config)#ppp quality 80
R1(config)#no sh
实验调试R1#show int s0/0
R1#debug ppp negotiation //显示PPP启动期间传输的数据包
特别说明:如果把路由器R1的S0/0接口地址改为1.1.1.1/24,把R2的S0/0接口地址改为2.2.2.2/24,然后分别在
两个接口下封装PPP协议,并配置时钟速率。这时双方是可以通信的,在各自的路由表中也会产生一条对
方接口地址的主机路由,这是PPP的特性。
配置PAP认证:
单向认证:(left为主认证端,right为被认证端)
R1(config)#hostname left
left(config)#username right password right //设置主认证端用于验证的用户名和密码
left(config)#int s0/0
left(config-if)#encapsulation ppp
left(config-if)#ppp authentication pap //在主认证端启用PAP认证
R2(config)#hostname right
right(config)#int s0/0
right(config-if)#encapsulation ppp
right(config-if)#ppp pap sent-username right password right //被认证端提交的用户名和密码
说明:如果没有配置本地认证数据库,或者用户名或密码错误,将会导致认证失败。
双向认证(left和right互为对方的主认证端和被认证端)
R1(config)#hostname left
left(config)#username right password right
left(config)#int s0/0
left(config-if)#encapsulation ppp
left(config-if)#ppp authentication pap
left(config-if)#ppp pap sent-username left password left
R2(config)#hostname right
right(config)#username left password left
right(config)#int s0/0
right(config-if)#encapsulation ppp
right(config-if)#ppp authentication pap
right(config-if)#ppp pap sent-username right password right
实验调试
left#debug ppp authentication //查看PPP认证的过程
配置CHAP认证:
CHAP认证没有主和被区别,双方都需要做,也就是双向认证(标准配置)。
R1(config)#hostname left
left(config)#username right password samepwd
left(config)#int s0/0
left(config-if)#encapsulation ppp
left(config-if)#ppp authentication chap //启用CHAP认证
R2(config)#hostname right
right(config)#username left password samepwd
right(config)#int s0/0
right(config-if)#encapsulation ppp
right(config-if)#ppp authentication chap
注意:
①CHAP认证默认时发送的用户名为主机名,而双方密码必须一致(密码都是敏感的,区分大小写);
②可以通过下边的命令更改发送的用户名和密码:
left(config-if)#ppp chap hostname left //更改发送的用户名
left(config-if)#ppp chap password samepwd //更改发送的密码
说明:在配置认证时也可以选择同时使用PAP和CHAP两种认证方式。如果同时配置了这两种认证方式,那么在链
路协商阶段将先用第一种认证方式进行认证;如果对方建议使用第二种认证方式或者只是简单拒绝第一种
方式(如:认证失败),那么将采用第二种方式进行认证。
R1(config-if)#ppp authentication pap chap
或
R1(config-if)#ppp authentication chap pap
多链路捆绑:
PPP协议支持链路捆绑,可以把多条运行PPP协议的链路捆绑成一条链路。这样能合并带宽,提高传输效率,而且物理接口无需再配置IP地址。直接在合并的虚链路上配置IP地址即可。
left(config)#int multilink 1 //建立multilink组
left(config-if)#ip add 192.168.2.1 255.255.255.0
left(config-if)#no sh
left(config)#int s0/0
left(config-if)#encapsulation ppp
left(config-if)#ppp multilink group 1 //将接口加入multilink组中
left(config-if)#no sh
left(config)#int s0/1
left(config-if)#encapsulation ppp
left(config-if)#ppp multilink group 1
left(config-if)#no sh
right(config)#int multilink 1
right(config-if)#ip add 192.168.2.2 255.255.255.0
right(config-if)#no sh
right(config)#int s0/0
right(config-if)#encapsulation ppp
right(config-if)#ppp multilink group 1
right(config-if)#no sh
right(config)#int s0/1
right(config-if)#encapsulation ppp
right(config-if)#ppp multilink group 1
right(config-if)#no sh
实验调试
left#show int multilink 1 //查看链路状态和带宽
额外实验
left(config-if)#int s0/0
left(config-if)#encapsulation ppp
left(config-if)#ip add 192.168.1.1 255.255.255.0
left(config-if)#peer default ip address 192.168.1.2 //给对端接口发送具体IP地址
left(config-if)#no sh
right(config)#int s0/0
right(config-if)#encapsulation ppp
right(config-if)#ip address negotiated //此接口将自动获得IP地址
right(config-if)#no sh