路由器经常用于构建广域网,广域网链路的封装和以太网上的封装有着非常大的差别。常见的广域网封装有HDLC,PPP 和Frame-relay 等,本次介绍HDLC 和PPP。相对而言,PPP 比HDLC 有较多的功能。
7.1 HDLC 和PPP 简介
7.1.1 HDLC 介绍
HDCL 是点到点串行线路上(同点电路)的帧封装格式,其帧格式和以太网帧格式有很大的差别,HDLC 帧没有源MAC地址和目的MAC 地址。Cisco 公司对HDLC 进行了专有化,Cisco 的HDLC 封装和标准的HDLC 不兼容。如果链路的两端都是Cisco 设备,如果HDLC 封装没有问题,但如果Cisco 设备与非Cisco 设备进行连接,应使用PPP 协议。HDLC不能提供验证,缺少了对链路的安全保护。默认时,Cisco 路由器的串口是采用Cisco HDLC 封装的。如果串口的封装不是HDLC,要把封装改为HDLC,使用”encapsulation hdlc”命令。
7.1.2 PPP 介绍
1.概述
和HDLC 一样,PPP 也是串行线路上(同步电路或异步电路)的一种帧封装格式,但是PPP 可以提供对多种网络层协议的支持。PPP 支持认证、多链路捆绑、回拨和压缩等功能。PPP 经过4 个过程在一个点到点的链路上建立通信连接:
- 链路的建立和配置协调——通信的发起方发送LCP 帧来配置和检测数据链路;
- 链路质量检测——在链路已经建立、协调之后进行,这一阶段是可选的;
- 网络层协议配置协调——通信的发起方发送NCP 帧以选择并配置网络层协议;
- 关闭链路——通信链路将一直保持到LCP 或NCP 帧关闭链路或发生一些外部事件。
2.PPP 认证:PAP 和CHAP
(1)PAP(Password Authentication Protocol)利用2次握手的简单方法进行认证。
在PPP 链路建立完毕后,源节点不停地在链路上发送用户名和密码,直到验证通过。在PAP 的验证中,密码在链路上是以明文传输的,而且由于是源节点控制验证重试频率和次数,PAP 不能防范再生攻击和重复的尝试攻击。
(2)CHAP——询问握手验证协议
CHAP(Challenge Handshake Authentication Protocol)利用3次握手周期地验证源端节点的身份。CHAP 验证过程在链路建立之后进行,而且在以后的任何时候都可以再次进行。这使得链路更为安全;CHAP不允许连接发起方在没有收到询问消息的情况下进行验证尝试。CHAP 每次使用不同的询问消息,每个消息都是不可预测的唯一的值,CHAP 不直接传送密码,只传送一个不可预测的询问消息,以及该询问消息与密码经过MD5 加密运算后的加密值。
所以CHAP可以防止再生攻击,CHAP 的安全性比PAP 要高。
7.2 实验1:HDLC 和PPP 封装
1.实验目的
通过本实验,读者可以掌握如下技能:
① 串行链路上的封装概念;
② HDLC 封装;
③ PPP 封装。
2.实验拓扑
实验拓扑图如图所示。
3.实验步骤
(1)步骤1:在路由器R1 和R2 上配置IP 地址,保证直接链路的连通性
R1(config)#int s0/0/0
R1(config-if)#ip address 192.168.12.1 255.255.255.0
R1(config-if)#no shutdown
R1(config-if)#clock rate 128000(与下面的只能用一条)
R2(config)#int s0/0/0
R2(config-if)#clock rate 128000
R2(config-if)#ip address 192.168.12.2 255.255.255.0
R2(config-if)#no shutdown
R1#show interfaces s0/0/0
(2)步骤2:改变串行链路两端的接口封装为PPP 封装
R1(config)#int s0/0/0
R1(config-if)#encapsulation ppp
R2(config)#int s0/0/0
R2(config-if)#encapsulation ppp
4.实验调试
(1)测试R1 和R2 之间串行链路的连通性
R1#ping 192.168.12.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.12.2, timeout is 2 seconds;
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 12/13/16 ms
如果链路的两端封装相同,则ping 测试应该正常。
(2)链路两端封装不同协议
R1(config)#int s0/0/0
R1(config-if)#encapsulation ppp
R2(config)#int s0/0/0
R2(config-if)#encapsulation hdlc
【提示】
当显示串行接口时,常见以下几种状态。
Serial0/0/0 is up, line protocol is up
//链路正常
Serial0/0/0 is administratively down, line protocol is down
//没有打开该,执行”no shutdown”可以打开接口
Serial0/0/0 is up, line protocol is down
//物理层正常,数据链路层有问题,通常是没有配置时钟、两端封装不匹配或PPP 认证错误
Serial0/0/0 is down, line protocol is down
//物理层故障,通常是连线问题
7.3 实验2:PAP 认证
实验步骤
在实验1 基础上继续本实验。首先配置路由器R1(远程路由器,被认证方)在路由器R2(中心路由器,认证方)取得验证:
①两端路由器上的串口采用PPP 封装,用”encapsulation”命令:
R1(config)#int s0/0/0
R1(config-if)#encapsulation ppp
②在过程路由器R1 上,配置在中心路由器上登录的用户名和密码,使用”ppp pap sent-username 用户名 password 密码”命令:
R1(config-if)#ppp pap sent-username R1 password 123456
③在中心路由器上的路口采用PPP 封装,用”encapsulation”命令:
R2(config)#int s0/0/0
R2(config-if)#encapsulation ppp
④在中心路由器上,配置PAP 验证,使用”ppp authentication pap”命令:
R2(config-if)#ppp authentication pap
⑤中心路由器上为远程路由器设置用户名和密码,使用”username 用户名 password 密码”命令:
R2(config)#username R1 password 123456
以上的步骤只是配置了R1(远程路由器)在R2(中心路由器)取得验证,即单向验证。然而,在实际应用中,通常采用双向验证,即R2 要验证R1,而R1 也要验证R2.我们要采用类似的步骤配置R1,对R2 进行验证,这时R1 为中心路由器,R2 为远程路由器。
⑥在中心路由器R1 上,配置PAP 验证,使用”ppp authentication pap”命令:
R1(config-if)#ppp authentication pap
⑦在中心路由器R1 上为远程路由器R2 设置用户名和密码,使用”username 用户名 password 密码”命令:
R1(config-if)#username R2 password 654321
⑧在远程路由器R2 上,配置以什么用户名和密码在远程路由器上登录,使用”ppp pap sent-username 用户名 password密码”命令:
R2(config-if)#ppp pap sent-username R2 password 654321
【提示】
在ISDN 拨号上网时,却通常只是电信运营商对用户进行验证(要根据用户名来收费),用户不能对电信进行验证,即验证是单向的。
实验调试
使用”debug ppp authentication”命令可以查看PPP 认证过程
R1#debug ppp authentication
PPP authentication debugging is on //打开PPP 认证调试
R1(config)#int s0/0/0
R1(config-if)#shutdown
R1(config-if)#no shutdown
7.4 实验3: CHAP 认证
实验步骤
在实验1 基础上继续本实验
①使用”username 用户名 password 密码”命令为对方配置用户名和密码,需要注意的是双方的密码要相同:
R1(config)#username R2 password hello
R2(config)#username R1 password hello
②路由器的两端串口采用PPP 封装,并采用配置CHAP 验证:
R1(config)#int s0/0/0
R1(config-if)#encapsulation ppp
R1(config-if)#ppp authentication chap
R2(config)#int s0/0/0
R2(config-if)#encapsulation ppp
R2(config-if)#ppp authentication chap
上面是CHAP 验证的最简单配置,也是实际应用中最常用的配置方式。在配置时,要求用户为对方路由器,而双方密码必须一致。原因是:由于CHAP 默认使用本地路由器的名字作为建立PPP 连接时的标识符,路由器在收到对方发送过来的询问消息后,将本地路由器的名字作为身份标识发送给对方;而在收到对方发过来的身份标识之后,默认使用本地验证方法,即在配置文件中寻找,看看有没有用户身份标识和密码;如果,计算加密值,结果正确则验证通过;否则验证失败,连接无法建立。
【提示】在配置验证时也可以选择同时使用PAP 和CHAP 如:
R2(config-if)#ppp authentication chap pap 或
R2(config-if)#ppp authentication pap chap
如果同时使用两种验证方式,那么在链路协商阶段将先用第一种验证方式进行验证;如果对方建议使用第二种验证方式或者只是简单拒绝使用第一种方式,那将采用第二种方式。
7.5 HDLC、PPP 命令汇总
命令 作用
encapsulation hdlc 把接口的封装改为HDLC
encapsulation PPP 把接口的封装改为PPP
ppp pap sent-username R1 PAP认证时,向对方发送用户名R1
password 123456 和密码123456
PPP authentication pap PPP 的认证方式为PAP
user R1 password 123456 为对方创建用户R1,密码为123456
debug ppp authentication 打开PPP 的认证调试过程
ppp authentication chap PPP 的认证方式为CHAP