PPPoE原理和配置
DSL应用场景
- DSL是一种利用现有电话网络实现数据通信的宽带技术。在使用DSL接入网络时,用户侧会安装调制解调器,然后通过现有的电话线与数字用户线路接入复用器(DSLAM)相连。DSLAM是各种DSL系统的局端设备,属于最后一公里接入设备。
- 然后,DSLAM通过高速ATM网络或者以太网将用户的数据流量转发给宽带远程接入服务器(BRAS)。BRAS是面向宽带网络应用的接入网关,位于骨干网的边缘层。
PPPoE再DSL中的应用
- 运营商希望通过同一台接入设备来连接远程的多个主机,同时接入设备能够提供访问控制和计费功能。在众多的接入技术中,把多个主机连接到接入设备的最经济的方法就是以太网,而PPP协议可以提供良好的访问控制和计费功能,于是产生了在以太网上传输PPP报文的技术,即PPPoE。
- PPPoE利用以太网将大量主机组成网络,通过一个远端接入设备连入因特网,并运用PPP协议对接入的每个主机进行控制,具有适用范围广、安全性高、计费方便的特点。
- PPPoE技术解决了用户上网收费等实际应用问题,得到了宽带接入运营商的认可并被广泛应用。
PPPoE报文
- PPPoE报文是使用Ethernet格式进行封装的,Ethernet中各字段解释如下:
- DMAC:表示目的设备的MAC地址,通常为以太网单播目的地址或者以太网广播地址(0xFFFFFFFF)。
- SMAC:表示源设备的以太网MAC地址。
- Type:表示协议类型字段,当值为0x8863时表示承载的是PPPoE发现阶段的报文。当值为0x8864时表示承载的是PPPoE会话阶段的报文。
- PPPoE字段中的各个字段解释如下:
- VER:表示PPPoE版本号,值为0x01。
- Type:表示类型,值为0x01。
- Code:表示PPPoE报文类型,不同取值标识不同的PPPoE报文类型。
- PPPoE会话ID,与以太网SMAC和DMAC一起定义了一个PPPoE会话。
- Length:表示PPPoE报文的Payload长度,不包括以太网头部和PPPoE头部的长度。
PPPoE会话建立过程
PPPoE协议报文
- PADI(PPPoE Active Discovery Initiation)报文:用户主机发起的PPPoE服务器探测报文,目的MAC地址为广播地址。
- PADO(PPPoE Active Discovery Offer)报文:PPPoE服务器收到PADI报文之后的回应报文,目的MAC地址为客户端主机的MAC地址。
- PADR(PPPoE Active Discovery Request)报文:用户主机收到PPPoE服务器回应的PADO报文后,单播发起的请求报文,目的地址为此用户选定的那个PPPoE服务器的MAC地址。
- PADS(PPPoE Active Discovery Session Configuration)报文:PPPoE服务器分配一个唯一的会话进程ID,并通过PADS报文发送给主机。
- PADT(PPPoE Active Discovery Terminate)报文:当用户或者服务器需要终止会话时,可以发送这种PADT报文。
PPPoE会话建立过程
- 用户客户端向服务器发送一个PADI报文,开始PPPOE接入。
- 服务器向客户端发送PADO报文。
- 客户端根据回应,发起PADR请求给服务器。
- 服务器产生一个Session ID,通过PADS发给客户端。
- 客户端和服务器之间进行PPP的LCP协商,建立链路层通信。同时,协商使用CHAP认证方式。
- 服务器通过Challenge报文发送给认证客户端,提供一个128bit的Challenge。
- 客户端收到Challenge报文后,并将密码和Challenge做MD5算法运算后,在Response回应报文中把结果发送给服务器。
- 服务器根据用户发送的信息判断用户是否合法,然后回应认证成功/失败报文,将认证结果返回给客户端。
- 进行NCP(如IPCP)协商,通过服务器获取到规划的IP地址等参数。
PPPoE配置
-
PPPoE客户端配置包括三个步骤。
-
首先需要配置一个拨号接口。
-
dialer-rule命令用于进入Dialer-rule视图,在该视图下,可以通过拨号规则来配置发起PPPoE会话的条件。
-
interface dialer number命令用来创建并进入Dialer接口。
-
dialer user user-name命令用于配置对端用户名,这个用户名必须与对端服务器上的PPP用户名相同。
-
dialer-group group-number命令用来将接口置于一个拨号访问组。
-
dialer bundle number命令用来指定Dialer接口使用的Dialer bundle。设备通过Dialer bundle将物理接口与拨号接口关联起来。
-
第二个步骤是在接口上将Dialer Bundle和接口绑定:
-
pppoe-client dial-bundle-number number命令来实现Dialer Bundle和物理接口的绑定,用来指定PPPoE会话对应的Dialer Bundle,其中number是与PPPoE会话相对应的Dialer Bundle编号。on-demand表示PPPoE会话工作在按需拨号模式。AR2200支持报文触发方式的按需拨号。目前ARG3系列路由器支持的按需拨号方式为报文触发方式,即当物理线路Up后,设备不会立即发起PPPoE呼叫,只有当有数据需要传送时,设备才会发起PPPoE呼叫,建立PPPoE会话。
-
第三个步骤是配置一条缺省静态路由,该路由允许在路由表中没有相应匹配表项的流量都能通过拨号接口发起PPPoE会话。
-
display interface dialer[ number ]命令用于查看拨号接口的配置,便于定位拨号接口的故障。
-
LCP opened, IPCP opened表示链路的状态完全正常。
常用命令
工作原理有点类似与DHCP的工作原理
PPPOE服务器这端 server端
//先配置一个AAA认证 服务类型选择ppp
[ISP]aaa
[ISP-aaa]local-user wmlwml password cipher wmlwml
[ISP-aaa]local-user wmlwml service-type ppp
//创建一个PPPOE的地址池 不用创建网关
[ISP]ip pool PPPOE
[ISP-ip-pool-PPPOE]network 60.30.1.0 mask 24
[ISP-ip-pool-PPPOE]dns-list 8.8.8.8
//建立一个虚模板
[ISP]interface Virtual-Template 1
//给这个虚模板做个认证
[ISP-Virtual-Template1]ppp authentication-mode chap
//给这个虚模板下发一个地址池
[ISP-Virtual-Template1]remote address pool PPPOE
//给这个虚模板配置要给地址
[ISP-Virtual-Template1]ip address 60.30.1.1 24
//最后再物理接口上调用这个虚模板
[ISP-GigabitEthernet0/0/0]pppoe-server bind virtual-template 1
PPPOE客户端配置
//定义一个PPPOE的规则
[GW]dialer-rule
///PPPOE的接口允许IP报文的转发
[GW-dialer-rule]dialer-rule 1 ip permit
//进入这个dialer虚拟接口
[GW]interface Dialer 1
//定义一个dialer名字,名字可以随意 没有什么含义
[GW-Dialer1]dialer user wml
//把这个接口置于PPPOE的访问组
[GW-Dialer1]dialer-group 1
//设备需要通过这个dialer bundle 绑定这个物理接口
[GW-Dialer1]dialer bundle 1
//PPP的部分 开启使用PPP的验证用户名密码,使用ppp-negotiate来获取IP地址
[GW-Dialer1]ppp chap user wmlwml
[GW-Dialer1]ppp chap password cipher wmlwml
[GW-Dialer1]ip address ppp-negotiate
//再物理端口上调用这个dial-bundle-number 1 这个组
[GW-GigabitEthernet0/0/0]pppoe-client dial-bundle-number 1
//最后再写一条默认路由,下一跳走dialer这个出接口
[GW]ip route-static 0.0.0.0 0.0.0.0 Dialer 1
//再网关上记得写上回程路由 也叫回执路由
//做上nat 也是需要再dialer接口上做的
//这里的ACL也是需要写的,这里就不写出来了
[GW]interface Dialer 1
[GW-Dialer1]nat outbound 2000
//向运营商买一个IP地址后,运营商会加上这么一个路由
//运营商会写上你购买的这个公网地址然后下一跳指向你的网关
[internet]ip router-static 70.1.1.1 32 60.30.1.2