二、PPPoE原理及配置
1、PPPoE的基本原理
运营商希望把一个站点上的多台主机连接到同一台远程接入设备,并实现对用户进行认证、授权和计费、访问控制的功能,通过应用RFC2516定义的PPPoE(Point-to-Point Protcol over Ethernet)技术很好的解决了以太网接入应用中的用户认证问题。将PPP帧封装到以太帧,使用PPP协议(点到点协议)在以太网上传输PPP报文的技术称为PPPoE。
PPP是一种数据链路层协议,遵循HDLC(高级数据链路控制协议)族的一般报文格式。它使用链路控制协议(LCP)来建立和维护数据链路连接。应用网络控制协议(NCP)在一条点到点连接上使用多种网络层协议(被路由协议)。PPP协议栈只涉及到物理层和数据链路层。
链路控制协议(LCP)提供以下配置:身份验证、压缩、错误检测、多链路、PPP回拨。网络控制协议(NCP)用于标识和封装网络层协议,允许通过同一条PPP链路传输多种网络层协议,包括IPCP(因特网协议控制协议)和IPXCP(网间分组交换控制协议)。
PPPoE组网结构采用Client/Server模型,PPPoE的客户端为PPPoE Client,PPPoE的服务器端为PPPoE Server。PPPoE Client向PPPoE Server发起连接请求,PPPoE Server为PPPoE Client提供接入控制、认证等功能。 PPPoE Client可以是电脑主机也可以是网关设备,常见的是现在通过光猫或者路由器设置帐号和密码后,输入上网帐号和密码连接网络,然后将PPP帧封装以太帧传输到PPPoE Server上进行PPP认证。在网络运营商的宽带接入服务器(Broadband Remote Access Server,BRAS)提供接入控制、认证、动态分配IP地址等功能。
企业接入 所有主机不用安装PPPoE Client拨号软件,同一个局域网中的所有主机共享一个账号,通过企业路由器与运营商的集中路由器建立PPPoE会话。
PPPoE利用以太网将大量主机组成网络,通过一个远端接入设备连入因特网,具有适用范围广、安全性高、计费方便的特点。
1.1、PPPoE拨号的三个阶段
PPPoE拨号可分为三个阶段,即Discovery阶段、Session阶段和Terminate阶段。
1、discovery发现阶段 发现阶段是无状态的,目的是获得 PPPoE终结端(在局端的ADSL设备上)的以太网MAC地址,并建立一个惟一的PPPoESESSION-ID。发现阶段结束后,就进入标准的PPP会话阶段。
主机可以发现多个接入集中器,然后允许用户选择一个。
2、PPP Session会话阶段 当PPPoE进入session阶段后,PPP报文就可以作为PPPoE帧的净荷封装在以太网帧发到对端,SESSION_ID必须是Discovery阶段的确定的ID,MAC地址必须是对端的MAC地址。
进行普通的LCP、NCP、IPCP协商来进行PPP验证和IP地址分配。
3、Terminate阶段 PPP通信双方可以使用PPP协议自身来结束PPPoE会话,当无法使用PPP协议结束会话时可以使用PADT(PPPoE Active Discovery Terminate)报文。
进入PPPoE Session阶段后,PPPoE Client和PPPoE Server都可以通过发送PADT报文的方式来结束PPPoE连接。PADT数据包可以在会话建立以后的任意时刻单播发送。在发送或接收到PADT后,就不允许再使用该会话发送PPP流量了。
1.2、PPPoE报文格式
字段 | 长度 | 含义 |
---|
Destination_Address | 48bits | 以太网单播目的地址或者以太网广播地址(0xFFFFFFFF)。 | Source_Address | 48bits | 源设备的以太网MAC地址。 | Ethernet_Type | 16bits | 表示PPPoE拨号的阶段。·当值为0x8863时表示Discovery阶段或Terminate阶段。·当值为0x8864时表示Session阶段。 | VER | 4bits | 表示PPPoE版本号,值为0x01。 | Type | 4bits | 表示PPPoE类型,值为0x01。 | Code | 8bits | 表示PPPoE报文类型。 | Session_ID | 16bits | 用于唯一标识一个PPP Session,在discovery发现阶段被定义。值0xFFFF为将来的使用保留,不允许使用。 | Length | 16bits | 表示PPPoE报文的Payload长度。它不包括以太网头部和PPPoE头部的长度。 | Tag_Type | 16bits | 表示网络字节序。 | Tag_Length | 16bits | 是一个网络字节序的无符号值,表示Tag_Value的字节数。 | Tag_Valus | 可变 | Tag_Value的数据。 | Checksum | 16bits | 表示校验和字段,用于检验报文的正确性。 |
Destination_Address目标地址:
- Discovery会话阶段,该域的值是单播或者广播地址,PPPoE Client寻找PPPoE Server的过程使用广播地址,确认PPPoE Server后使用单播地址。
- PPP Session会话阶段,该域必须是Discovery阶段已确定的通信对方的单播地址。
Code表示PPPoE报文类型:
- Code域为0x09,表示PADI报文。
- Code域为0x07,表示PADO报文。
- Code域为0x19,表示PADR报文。
- Code域为0x65,表示PADS报文。
- Code域为0x00,表示会话数据。
- Code域为0xa7,表示PADT报文。
1.3、PPPoE协商过程
1.3.1、discovery发现阶段:
1、PPPoE Client广播发送一个PADI(PPPoE Active Discovery Initial)报文,在此报文中包含PPPoE Client想要得到的服务类型信息。
PPPoE 头部:分组的目的地址为以太网的广播地址0×ffffffffffff,CODE(代码)字段值为0×09,SESSION-ID(会话ID)字段值为0×0000。
PPPoE Payload:TAG_Type域为0x0101(Service-Name),表明后面紧跟的是服务的名称,用于请求服务,也可以包含其他的TAG。
2、所有的PPPoE Server收到PADI报文之后,将其中请求的服务与自己能够提供的服务进行比较,如果可以提供,则单播回复一个PADO(PPPoE Active Discovery Offer)报文。
PPPoE 头部:CODE字段值为0×07,SESSION-ID字段值仍为0×0000。
PPPoE Payload:TAG_Type域为0x0101(Service-Name),表明后面紧跟的是服务的名称;为0x0102(AC-Name),表明后面紧跟的字符串唯一地表示了某个特定的访问集中器。
3、PPPoE Client可能收到多个PPPoE Server发送的PADO报文,PPPoE Client选择最先收到的PADO报文对应的PPPoE Server做为自己的PPPoE Server,并单播发送一个PADR(PPPoE Active Discovery Request)报文。
PPPoE 头部:Code域为0x19,SESSION-ID字段值仍为0×0000。
PPPoE Payload:0x0101(Service-Name),表明后面紧跟的是服务的名称。有且只有一个TAG_Type为Service-Name的TAG,其他类型的TAG可选。
4、PPPoE Server产生一个唯一的会话ID(Session ID),标识和PPPoE Client的这个会话,通过发送一个PADS(PPPoE Active Discovery Session-confirmation)报文把会话ID发送给PPPoE Client,会话建立成功后便进入PPPoE Session阶段。
PPPoE 头部:Code域为0x65,SESSION-ID字段值为分配的数值。
1.3.2、PPP Session会话阶段:
1、PPP协商阶段 Ethernet_Type域设置为0x8864,PPPoE 头部:Code域为0x00,SESSION-ID字段值为Discovery阶段所指定的值,TAG_Type域包含一个PPP帧。PPP帧的开始字段是PPP Protocol-ID。
- LCP阶段主要完成建立、配置和检测数据链路连接。(负责设备之间链路的创建、维护和终止。)
- LCP协商成功后,开始进行认证,认证协议类型由LCP协商结果(CHAP或者PAP)决定。
- 认证成功后,PPP进入NCP阶段。NCP是一个协议族,用于配置不同的网络层协议,常用的是IP控制协议(IPCP),它主要负责协商用户的IP地址和DNS服务器地址。
2、PPP数据传输阶段
1.3.3、Terminate阶段:
PPPoE头部:Code域为0xa7,SESSION-ID字段值为Discovery阶段所指定的值。
1.4、密码验证协议
PPP提供密码验证协议PAP(Password Authentication Protocol)和质询握手验证协议CHAP(Challenge-Handshake Authentication Protocol)两种验证方式。
PAP认证过程非常简单,二次握手机制。使用明文格式发送用户名和密码。
CHAP认证过程比较复杂,三次握手机制;使用密文格式发送CHAP认证信息;认证方发起CHAP认证,有效避免暴力破解。
两者的区别是CHAP认证用户使用MD5算法对该随机报文进行加密,将生成的密文和自己的用户名发给验证方,验证方用自己保存的被验证方密码和MD5算法对原随机报文加密,比较二者的密文,若比较结果一致,认证通过,若比较结果不一致,认证失败。
2、PPPoE的配置
2.1、PPPoE Server配置
要求:以太网内路由器设备作为PPPoE Server端,每台PC机都可通过拨号上网,接入Internet。
实现效果:PPPoE Server为主机动态分配IP地址;通过AAA本地认证认证主机用户;为主机分配DNS服务器地址。
第一步、配置全局地址池pool1
[R1] ip pool pppoe
[R1-ip-pool-pool1] network 192.168.1.0 mask 255.255.255.0
[R1-ip-pool-pool1] gateway-list 192.168.1.1
[R1-ip-pool-pool1] quit
第二步、配置域用户使用本地认证方案
[R1] aaa
[R1-aaa] authentication-scheme scheme0 //创建名为scheme0的授权方案。
[R1-aaa-authen-scheme0] authentication-mode local
[R1-aaa-authen-scheme0] quit
[R1-aaa] domain xyz //创建域xyz
[R1-aaa-domain-xyz] authentication-scheme scheme0
[R1-aaa-domain-xyz] authorization-scheme scheme0
[R1-aaa-domain-xyz] quit
[R1-aaa] local-user user1@xyz password
Please configure the login password (8-128)
It is recommended that the password consist of at least 2 types of characters, i
ncluding lowercase letters, uppercase letters, numerals and special characters.
Please enter password:
Please confirm password:
Info: Add a new user.
[R1-aaa] local-user user1@xyz service-type ppp
[R1-aaa] quit
第三步、配置虚拟接口模板参数
[R1] interface virtual-template 1 //创建虚拟模板接口
[R1Virtual-Template1] ppp authentication-mode chap domain xyz //ppp使用chap验证
[R1-Virtual-Template1] ip address 192.168.1.1 255.255.255.0
[R1-Virtual-Template1] remote address pool pppoe //调用地址池pppoe
[R1-Virtual-Template1] ppp ipcp dns 8.8.8.8 4.4.4.4
[R1-Virtual-Template1] quit
第四步、绑定虚拟接口模板在以太网接口上。
[R1] interface gigabitethernet 1/0/0
[R1-GigabitEthernet1/0/0] pppoe-server bind virtual-template 1 //物理接口与虚拟接口进行绑定
[R1-GigabitEthernet1/0/0] quit
各主机安装PPPoE Client拨号软件后,配置好用户名(此处为user1@xyz)和密码就能使用PPPoE协议,拨号连接PPPoE Server。
显示PPPoE会话的状态信息和配置信息命令: display pppoe-server session all
2.2、PPPoE Client配置
要求:以太网内路由器设备R1作为PPPoE Client端,通过这个帐号到R2作为PPPoE Server端进行认证。
实现效果:每台PC机都可通过自动拨号方式,接入Internet。
第一步、配置PPPoE Server如2.1PPPoE Server配置,此处省略。
第二步、配置拨号访问组1以及对应的拨号访问控制条件。
[R2] dialer-group 1 rule ip permit //配置拨号访问组1
[R2] interface dialer 1 //创建拨号接口1
[R2-Dialer1] dialer bundle enable //共享DDR
[R2-Dialer1] dialer-group 1 //将Dialer1接口与拨号访问组1关联。
[R2-Dialer1] ip address ppp-negotiate //通过协商获取IP地址
[R2-Dialer1] ppp chap user user1@xyz //用户帐号
[R2-Dialer1] ppp chap password cipher 12345678 //用户密码
[R2-Dialer1] quit
第三步、配置PPPoE会话
[R2] interface gigabitethernet 2/0/0
[R2-GigabitEthernet2/0/0] pppoe-client dial-bundle-number 1
[R2-GigabitEthernet2/0/0] quit
第三步、配置到PPPoE Server的静态路由
[R2] ip route-static 0.0.0.0 dialer 1
[R2] interface dialer 1
[R2-Dialer1] dialer timer idle 150 //配置空闲时间间隔为150秒
[R2-Dialer1] quit
第四步、验证配置 display pppoe-client session summary
|