这是我参与 8 月更文挑战的第 26 天,活动详情查看: 8月更文挑战
PPPOE简介
PPPoE(PPP over Ethernet)
属于链路层协议,主要功能是在以太网上提供点到点的连接,建立PPP会话,以及封装PPP数据包的方法,是PPP协议在更广范围内应用的补充性协议。
人们想通过相同的接入设备来接入多个主机并连入因特网,同时接入设备能够提供对主机的访问控制和计费功能。在众多的接入技术中,把多个主机连接到接入设备的最经济的方法就是以太网,而PPP协议可以提供良好的访问控制和计费功能,于是产生了在以太网上传输PPP报文的技术,即PPPoE。
PPPoE利用以太网将大量主机组成网络,通过一个远端接入设备连入因特网,并运用PPP协议对接入的每个主机进行控制,具有适用范围广、安全性高、计费方便的特点。
PPPoE技术解决了用户上网收费等实际应用问题,得到了宽带接入运营商的认可并被广泛应用。
由于PPPoE在以太网上提供点到点的连接,因此可以实现对用户的集中管理、集中控制。由此带来如下优势:
- 用户间互相独立,互不干扰,运营性大大增强,ARP病毒对其毫无影响,在校园网中有天然优势。
- PPPoE接入必须经过认证过程和网络参数协商过程,因此天然解决了IP地址的冲突过程,不存在私接DHCP服务器以及IP地址盗用等问题。
PPPOE的工作过程
PPPoE协议采用Client/Server方式,它将PPP报文封装在以太网帧之内,在以太网上提供点对点的连接。
PPPoE可分为三个阶段,即Discovery阶段、Session阶段和Terminate阶段。

Discovery阶段
- PPPoE Client广播发送一个PADI(PPPoE Active Discovery Initial)报文,在此报文中包含PPPoE Client想要得到的服务类型信息。
- 所有的PPPoE Server收到PADI报文之后,将其中请求的服务与自己能够提供的服务进行比较,如果可以提供,则单播回复一个PADO(PPPoE Active Discovery Offer)报文。
- 根据网络的拓扑结构,PPPoE Client可能收到多个PPPoE Server发送的PADO报文,PPPoE Client选择最先收到的PADO报文对应的PPPoE Server做为自己的PPPoE Server,并单播发送一个PADR(PPPoE Active Discovery Request)报文。
- PPPoE Server产生一个唯一的会话ID(Session ID),标识和PPPoE Client的这个会话,通过发送一个PADS(PPPoE Active Discovery Session-confirmation)报文把会话ID发送给PPPoE Client,会话建立成功后便进入PPPoE Session阶段。
完成之后通信双方都会知道PPPoE的Session_ID以及对方以太网地址,它们共同确定了唯一的PPPoE Session。
Session阶段
PPPoE Discovery阶段的工作为PPPoE Client和PPPoE Server之间建立了Session,之后PPPoE便进入到Session阶段,Session阶段可划分为两部分,一是PPPoE认证的PPP协商阶段,二是PPP报文传输阶段。
PPPoE认证过程中的PPP协商和普通的PPP协商方式一致,分为LCP、认证、NCP三个阶段。
Terminate阶段
PPP通信双方应该使用PPP协议自身来结束PPPoE会话,但在无法使用PPP协议结束会话时可以使用PADT(PPPoE Active Discovery Terminate)报文。
进入PPPoE Session阶段后,PPPoE Client和PPPoE Server都可以通过发送PADT报文的方式来结束PPPoE连接。PADT数据包可以在会话建立以后的任意时刻单播发送。在发送或接收到PADT后,就不允许再使用该会话发送PPP流量了。
用户组授权功能
设备支持根据用户组对用户进行授权控制,即用户认证成功后,认证服务器下发用户组,将用户进行分类。每个用户组可以关联不同的* ACL*规则,通过用户组和ACL规则的关联,实现对每类用户进行ACL授权信息控制,即同类用户采用同样的授权信息。
PPPOE配置实例

PPPOE-Server配置:
ip pool dhcp-pool
gateway-list 192.168.10.1
network 192.168.10.0 mask 255.255.255.0
aaa
authentication-scheme test.com
domain test.com
authentication-scheme test.com
local-user test password cipher 123456
local-user test service-type ppp
interface Dialer0
link-protocol ppp //链路类型为ppp
interface Virtual-Template1
ppp authentication-mode chap domain test.com
remote address pool dhcp-pool //绑定dhcp池
ip address 192.168.10.1 255.255.255.0 //为模板配置IP地址
interface GigabitEthernet0/0/0
pppoe-server bind Virtual-Template 1 //在端口上应用认证模板
interface LoopBack0
ip address 100.100.100.100 255.255.255.0 //使用环回口地址模拟外网,用于测试是否可以访问外网
复制代码
PPPOE-Client配置:
acl number 2000
rule 5 permit source 192.168.2.0 0.0.0.255
dhcp enable
ip pool dhcp-pool
gateway-list 192.168.2.254
network 192.168.2.0 mask 255.255.255.0
interface Dialer0 //配置拨号接口
link-protocol ppp //配置链路协议为ppp
ppp chap user test //配置chap认证账号
ppp chap password cipher 123456 //配置chap认证密码
mtu 1492 //修改MTU为1500-8=1492 ,1500是以太网最大传输单元,8是PPP头部长度
ip address ppp-negotiate
dialer user test
dialer bundle 1
nat outbound 2000
interface GigabitEthernet0/0/0
pppoe-client dial-bundle-number 1
interface GigabitEthernet0/0/1
ip address 192.168.2.254 255.255.255.0
dhcp select global //在端口应用dhcp功能
dialer-rule
dialer-rule 1 ip permit //设置拨号规则为ip流量出发ppp拨号
ip route-static 0.0.0.0 0.0.0.0 Dialer0 //设置默认路由
复制代码


使用wireshark
在PPPOE-Server
上抓包可以看见数据包最后都转化成了PPPOE-Client
的接口地址

在PPPOE-Server
上可以看到会话

推荐阅读
Linux Shell编程基础!
Linux sudo和sudoers详解!
Linux部署samba服务器!
Linux Zabbix 5.0安装详解!
docker之docker-compose的使用!
docker之Dockerfile文件详解!
参考华为官方文档