PPPoE工作原理及配置实例

科技   2025-01-23 11:20   河北  

1.什么是PPPoE?

PPPoE(Point-to-Point Protocol over Ethernet)是以太网上的PPP协议,它通过在以太网上建立点到点的连接,封装PPP报文为PPPoE报文,实现用户远程接入并提供访问控制功能。该技术广泛应用于接入运营商网络,利用客户端/服务器模型进行会话协商和认证,提供计费数据和用户上网收费解决方案。用户上线过程包括PPPoE协商和PPP协商两个阶段。

2.PPPoE的特点

PPPoE技术结合了以太网的经济性与PPP协议的可管理性,具有以下功能和应用特点:

# 功能特点:

  • 集成PPP协议,提供身份验证、加密等功能。
  • 通过唯一Session ID保障用户安全性。

# 应用特点:

  • 允许终端设备通过拨号上网连接ISP,实现宽带接入。
  • 适用于缆线调制解调器、DSL等以太网线路,提供接入服务。
  • 对运营商而言,能充分利用现有电信网络结构,减少运营模式改变。
  • 对用户而言,使用感与拨号上网相似,易于接受。

3.PPPoE的组网结构

根据PPPoE会话起止点位置不同,可以将其分为两种组网结构:

# 共享PPP会话结构

适用于企业,所有主机通过同一CPE(PPPoE客户端设备)与运营商PPPoE服务器建立单个PPP会话,主机无需安装PPPoE客户端软件,共享一个账号。

# 独立PPP会话结构

适用于校园、小区等,每个Host作为PPPoE客户端与运营商PPPoE服务器建立独立PPP会话,需安装PPPoE客户端拨号软件,便于运营商计费和控制,每个Host一个账号。

4.PPPoE如何建立连接?

4.1PPPoE报文

PPPoE报文的格式就是在以太网帧中携带PPP报文,报文封装结构如下图:

报文字段说明如下表:

报文字段说明
Ver4bit,PPPoE版本号,值为0x01。
Type4bit,PPPoE类型,值为0x01。
Code8bit,PPPoE报文类型。
Code域为0x00,表示会话数据。   
Code域为0x09,表示PADI报文。   
Code域为0x07,表示PADO或PADT报文。   
Code域为0x19,表示PADR报文。
Code域为0x65,表示PADS报文。
Session_ID16bits,对于一个给定的PPP会话,该值是一个固定值,并且与以太网Source_address和Destination_address一起实际地定义了一个PPP会话。值0xffff为将来的使用保留,不允许使用。
Length16bits,定义PPPoE的Payload域长度。不包括以太网头部和PPPoE头部的长度。
4.2PPPoE建立连接的阶段

PPPoE协议采用Client/Server模式,如PPPoE接入组网图所示,基本的PPPoE组网中的角色有PPPoE Client,PPPoE Server(通常为BRAS设备),以及RADIUS设备。

PPPoE用户上线需要经过两个阶段,发现阶段和PPP会话阶段。发现阶段主要是选择PPPoE服务器,并确定所要建立的会话标识符Session ID。PPP会话阶段即执行标准的PPP过程,包括LCP协商、CHAP/PAP认证、NCP协商等阶段。

# PPPoE工作原理实现过程:

# PPPoE发现阶段和PPP会话阶段时序图

4.2.1发现阶段

发现阶段是指设备为用户分配接入的Session ID,用来标识一条用户与设备之间的PPPoE虚拟链路。

1)PPPoE Client广播一个PADI(PPPoE Active Discovery Initiation,PPPoE激活发现起始)报文,在此报文中包含用户想要得到的服务类型信息。

2)以太网内的所有PPPoE Server在收到这个初始化报文后,将其中请求的服务与自己能提供的服务进行比较,其中可以为PPPoE Client提供此服务的PPPoE Server会回应PADO(PPPoE Active Discovery Offer,PPPoE激活发现服务)报文。

3)PPPoE Client可能会收到多个PPPoE Server回应的PADO报文。PPPoE Client会根据一定的条件从返回PADO报文的PPPoE Server中选定符合条件的PPPoE Server,并向它返回一个会话请求报文PADR(非广播)(PPPoE Active Discovery Request,PPPoE激活发现请求),在PADR报文中封装所需的服务信息。

4)被选定的PPPoE Server在收到PADR报文后,PPPoE Server会产生一个唯一的会话标识以标识它和PPPoE Client的这段PPPoE会话。并把这个特定的会话标识包含在会话确认报文PADS(PPPoE Active Discovery Session-confirmation,PPPoE激活发现会话确认)中回应给PPPoE Client,如果没有错误发生就进入到PPP会话阶段,而PPPoE Client在收到会话确认报文后如果没有错误发生也进入到PPP会话阶段。

4.2.2PPP会话阶段

PPP会话阶段包括LCP协商、PAP/CHAP认证、NCP协商等阶段。

(1)LCP协商

进入PPP会话阶段之后,首先进行LCP协商,LCP协商过程如下。

1)PPPoE Client与PPPoE Server互相发送LCP Configure-Request报文。

2)双方收到Configure-Request报文后,根据报文中协商选项支持情况做出适当的回应(请参见下表)。若两端都回应了Configure-ACK,则标志LCP链路建立成功,否则会继续发送Request报文:

  • 如果在设定的LCP协商间隔与协商次数内,对端回应了Configure-ACK,则LCP链路建立成功。
  • 如果在超过了设定的LCP协商次数后,对端尚未回应Configure-ACK,则终止LCP协商。

3)LCP链路建立成功后,PPPoE Server会周期性地向PPPoE Client发送LCP Echo-Request报文,然后接收PPPoE Client回应的Echo-Reply报文,来探测LCP链路是否正常,以维持LCP连接。

回应报文类型列表:

回应报文类型含义
Configure-ACK若完全支持对端的LCP选项,则回应Configure-ACK报文,报文中必须完全协带对端Request报文中的选项。
Configure-NAK若支持对端的协商选项,但不认可该项协商的内容,则回应Configure-NAK报文,在Configure-NAK的选项中填上本端期望的内容,如:对端MRU值为1500,而本端期望MRU值为1492,则在Configure-NAK报文中填上1492。
Configure-Reject若不能支持对端的协商选项,则回应Configure-Reject报文,报文中带上不能支持的选项。

(2)PAP/CHAP认证

LCP协商完成后,会进入认证阶段,该阶段支持PAP认证和CHAP认证两种认证方式。

1)PAP认证

PAP为两次握手协议,是通过用户名和密码来对用户进行认证,并且是以明文的方式传递用户名和密码。PPPoE Server(或者RADIUS服务器)根据本端的用户表查看用户名和密码是否正确。适用于网络安全要求相对较低的环境。

2)CHAP认证

CHAP为三次握手协议,也是由PPPoE Server(或者RADIUS服务器)根据本端的用户表查看用户名和密码是否正确。但是CHAP认证方式只在网络上传输用户名,不传输用户密码,安全性比PAP要高。

(3)NCP协商

NCP协商的主要功能是协商PPP报文的网络层参数,如IPCP、IPv6CP等。PPPoE Client主要通过IPCP协议来获取访问网络的IP地址或IP地址段。

NCP协商的流程与LCP流程类似。NCP协商成功之后,PPPoE Client可以正常访问网络。

NCP协商成功之后,即为PPPoE Client上线,此时PPPoE Server(通常为BRAS设备),会给RADIUS服务器发送计费请求报文,通过RADIUS服务器对PPPoE Client进行计费。

5.PPPoE配置实例

如下图,企业通过PPPoE拨号上网:

配置过程如下:

5.1PPPoE客户端R1配置

1)创建Dialer Rule

创建了一个Dialer规则10,指定允许IP报文触发拨号。当路由器收到目的地址不在本地网络中的IP报文时,会触发拨号过程。

[R1]dialer-rule
[R1-dialer-rule]dialer-rule 10 ip permit
[R1-dialer-rule]quit

2)配置ACL访问控制列表

允许源IP地址为192.168.1.0/24网段的报文通过。这个ACL将用于NAT转换,指定哪些内部地址需要进行转换。

[R1]acl 2001 
[R1-acl-basic-2001]rule permit source 192.168.1.0 0.0.0.255
[R1-acl-basic-2001]quit
[R1]

3)配置Dialer接口

配置PPPoE拨号虚拟接口,设置接口IP地址获取方式,配置PPP认证用户名和密码,以及绑定接口:

[R1]interface Dialer 1         #进入Dialer接口1的配置模式,这个接口是PPPoE拨号使用的虚拟接口。
[R1-Dialer1]ip address ppp-negotiate    #设置接口IP地址通过PPP协商获取
[R1-Dialer1]ppp pap local-user 0335 password simple 123456   #配置PPP的PAP认证,本地用户名为0335,密码为123456。
[R1-Dialer1]dialer user 0335   #指定拨号使用的用户名,这里与PAP认证的用户名一致
[R1-Dialer1]dialer bundle 2    #将Dialer接口绑定到一个Dialer bundle上,这里使用的是bundle 2
[R1-Dialer1]dialer-group 10    #将Dialer接口加入拨号组10
[R1-Dialer1]nat outbound 2001  #应用前面配置的ACL 2001进行出站NAT转换
[R1-Dialer1]quit
[R1]

4)拨号口与物理口绑定

配置局域网接口GE0/0/0的IP地址,以及将路由器R1的外网口GE0/0/1与拨号口dialer 1进行绑定:

[R1]interface GigabitEthernet 0/0/0
[R1-GigabitEthernet0/0/0]ip address 192.168.1.1 24
[R1-GigabitEthernet0/0/0]quit

[R1]int GigabitEthernet 0/0/1
[R1-GigabitEthernet0/0/1]pppoe-client dial-bundle-number 2  #将gi0/0/1和dialer 1口进行绑定关联
[R1-GigabitEthernet0/0/1]quit

5)配置默认路由

[R1]ip route-static 0.0.0.0 0 dialer1

6)配置全局DHCP地址池

配置DHCP地址池,为企业内网主机分配IP地址:

[R1]ip pool my01
Info: It's successful to create an IP address pool.
[R1-ip-pool-my01]gateway-list 192.168.1.1
[R1-ip-pool-my01]network 192.168.1.0 mask 255.255.255.0
[R1-ip-pool-my01]dns-list 223.5.5.5 8.8.8.8
[R1-ip-pool-my01]quit
[R1]dhcp enable
Info: The operation may take a few seconds. Please wait for a moment.done.

[R1]interface GigabitEthernet 0/0/0
[R1-GigabitEthernet0/0/0]dhcp select global
[R1-GigabitEthernet0/0/0]quit
[R1]
5.2PPPoE服务端R2配置

1)配置拨号地址池,为拨号客户端提供IP地址

[R2]ip pool pool1
Info: It's successful to create an IP address pool.
[R2-ip-pool-pool1]gateway-list 202.1.1.2
[R2-ip-pool-pool1]network 202.1.1.0 mask 24
[R2-ip-pool-pool1]quit
[R2]

2)创建拨号用户名和密码

[R2]aaa
[R2-aaa]local-user 0335 password cipher 123456
Info: Add a new user.
[R2-aaa]local-user 0335 service-type ppp
[R2-aaa]quit
[R2]

3)配置virtual-template虚拟拨入接口

[R2]interface Virtual-Template 1
[R2-Virtual-Template1]ppp authentication-mode pap
[R2-Virtual-Template1]remote address pool pool1
[R2-Virtual-Template1]ip address 202.1.1.2 24
[R2-Virtual-Template1]quit

[R2]interface GigabitEthernet 0/0/0
[R2-GigabitEthernet0/0/0]pppoe-server bind virtual-template 1   #将虚拟接口virtual-Template1和物理接口关联
[R2-GigabitEthernet0/0/0]quit
[R2]```

Python运维实践
Python运维实践,专注于互联网技术的总结与交流,内容涉及Python自动化运维、Django框架、园区网络技术、linux云计算、系统架构及网络空间安全等知识的实践与分享。
 最新文章