• 推荐
  • 前端
  • 后端
  • Android
  • IOS
  • 人工智能

2021-08-27关注

网络技术之PPPOE拨号实例详解!

这是我参与 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阶段。

image.png

Discovery阶段

  1. PPPoE Client广播发送一个PADI(PPPoE Active Discovery Initial)报文,在此报文中包含PPPoE Client想要得到的服务类型信息。
  2. 所有的PPPoE Server收到PADI报文之后,将其中请求的服务与自己能够提供的服务进行比较,如果可以提供,则单播回复一个PADO(PPPoE Active Discovery Offer)报文。
  3. 根据网络的拓扑结构,PPPoE Client可能收到多个PPPoE Server发送的PADO报文,PPPoE Client选择最先收到的PADO报文对应的PPPoE Server做为自己的PPPoE Server,并单播发送一个PADR(PPPoE Active Discovery Request)报文。
  4. 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配置实例

image-20210822132459475

PPPOE-Server配置:

ip pool dhcp-pool
 gateway-list 192.168.10.1 //设置dhcp的网关
 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  //用于NAT的ACL
 rule 5 permit source 192.168.2.0 0.0.0.255 
    
dhcp enable //开启dhcp服务
ip pool dhcp-pool
 gateway-list 192.168.2.254 //配置DHCP地址池分配的网关地址
 network 192.168.2.0 mask 255.255.255.0 //配置DHCP服务器分配的网段地址

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 //设置地址获取方式为ppp协商,即通过pppoeserver获取ip地址
 dialer user test
 dialer bundle 1 //配置拨号捆绑编号,此编号要与路由器拨号接口的编号一致
 nat outbound 2000 //配置NAT,ACL为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 //设置默认路由
复制代码

image-20210822140439706

image-20210822140622855

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

image-20210822134209557

在PPPOE-Server上可以看到会话

image-20210822140817726

推荐阅读

Linux Shell编程基础!

Linux sudo和sudoers详解!

Linux部署samba服务器!

Linux Zabbix 5.0安装详解!

docker之docker-compose的使用!

docker之Dockerfile文件详解!

参考华为官方文档

云星球用户

关于

京ICP备2021005633号-1

京公网安备11010502044331号

站长电话:18401753012

举报邮箱: 761292449@qq.com

云星球 @ 2025

生活影视公众号

circle-left3 circle-left4 new-tab github