PPPoE

什么是PPPoE?

  • PPPoE(Point-to-Point Protocol over Ethernet)可以称作为以太网上的PPP协议,应用在链路层。
  • 它通过在以太网上提供点到点的连接,建立PPP会话,封装PPP报文为PPPoE报文。
  • PPPoE技术可以将用户连接到远程接入设备上,并提供良好访问控制功能,提供了一种经济的用户接入技术。

PPPoE利用以太网络,提供远程的多个用户主机接入功能,并且能够提供数据传输的出入报文数、字节数以及连接的起始、结束时间等计费数据,解决用户上网收费等实际应用问题,因而被广泛应用于接入运营商网络。

PPPoE解决了哪些问题?

PPP协议的一个重要功能便是提供了身份验证功能。但是在通信双方身份验证协议报文中没有提供地址信息,而以太网是一个广播类型的多路访问网络,因而PPP协议是无法直接应用在以太网链路上的。

以太网技术虽然具有简单易用,成本低等特点,但是以太网广播网络的属性,使得其通信双方无法相互验证对方的身份,因而通信是不安全的。

如何解决以上问题,同时又在现有的网络结构基础上,保证网络的低成本运营?答案便是PPPoE技术。PPPoE结合了PPP协议通信双方身份验证的功能,在PPP组网结构的基础上,将PPP报文封装成PPPoE报文,从而实现以太网上的点对点通信,使得以太网中的客户端能够连接到远端的宽带接入设备上。

PPPoE的特点

PPPoE在功能上具有以下特点:

  • PPPoE由于集成了PPP协议,实现了传统以太网不能提供的身份验证、加密等功能。
  • PPPoE通过唯一的Session ID可以很好地保障用户的安全性。

PPPoE在应用上具有以下特点:

  • PPPoE拨号上网作为一种最常见的方式让终端设备能够连接ISP(Internet Service Provider)从而实现宽带接入。
  • PPPoE可用于缆线调制解调器(Cable Modem)和数字用户线路(Digital Subscriber Line)等以太网线,通过以太网协议向用户提供接入服务。

总而言之,PPPoE技术将以太网技术的经济性与PPP协议的可管理控制性结合在一起,提供接入互联网的功能。对于运营商来说,它能够最大限度地利用电信接入网现有的体系结构,利用现有的拨号网络资源,运营和管理的模式也不需要很大的改变;对于用户来说,使用感与原来的拨号上网没有太大区别,较容易接受。

PPPoE如何建立连接?

PPPoE报文

PPPoE报文的格式就是在以太网帧中携带PPP报文,报文封装结构如图1 PPPoE协议报文结构图所示,PPPoE报文字段说明如表1 PPPoE报文字段说明所示。

图1 PPPoE协议报文结构图
报文字段说明
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头部的长度。

PPPoE建立连接的阶段

在了解PPPoE建立连接的阶段之前,先了解下PPPoE组网结构中的各种角色。PPPoE协议采用Client/Server模式,如PPPoE接入组网图所示,基本的PPPoE组网中的角色有PPPoE Client,PPPoE Server(通常为BRAS设备),以及RADIUS设备。

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

具体的PPPoE发现阶段和PPP会话阶段的时序如下图所示。

发现阶段

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

  • PPPoE Client广播一个PADI(PPPoE Active Discovery Initiation,PPPoE激活发现起始)报文,在此报文中包含用户想要得到的服务类型信息。
  • 以太网内的所有PPPoE Server在收到这个初始化报文后,将其中请求的服务与自己能提供的服务进行比较,其中可以为PPPoE Client提供此服务的PPPoE Server会回应PADO(PPPoE Active Discovery Offer,PPPoE激活发现服务)报文。
  • PPPoE Client可能会收到多个PPPoE Server回应的PADO报文。PPPoE Client会根据一定的条件从返回PADO报文的PPPoE Server中选定符合条件的PPPoE Server,并向它返回一个会话请求报文PADR(非广播)(PPPoE Active Discovery Request,PPPoE激活发现请求),在PADR报文中封装所需的服务信息。
  • 被选定的PPPoE Server在收到PADR报文后,PPPoE Server会产生一个唯一的会话标识以标识它和PPPoE Client的这段PPPoE会话。并把这个特定的会话标识包含在会话确认报文PADS(PPPoE Active Discovery Session-confirmation,PPPoE激活发现会话确认)中回应给PPPoE Client,如果没有错误发生就进入到PPP会话阶段,而PPPoE Client在收到会话确认报文后如果没有错误发生也进入到PPP会话阶段。

PPP会话阶段

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

LCP( Link Control Protocol链路控制协议)、PAP(Password Authentication Protocol,密码认证协议)、CHAP协议(Challenge Handshake Authentication Protocol挑战握认证协议)、NCP(Network Control protocol,网络控制协议)、magic-number:魔术字。

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报文,报文中带上不能支持的选项。

PAP/CHAP认证

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

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

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进行计费。

IPCP:IP Control Protocol,

PPPoE与IPoE相比有哪些不同?

目前,PPPoE和IPoE(IP over Ethernet)作为用户接入两大最常见的接入方式,已经实现了广泛的应用。虽然两者都属于用户接入的方式,但PPPoE和IPoE之间有很大的区别。接下来对PPPoE和IPoE进行对比。

IPoE是一种在以太网络上直接封装传输IP报文的用户接入方式。IPoE技术依赖DHCP协议提供IP地址,但是DHCP协议本身并不具备建立链路、认证用户以及链路监测的功能。因而IPoE技术将DHCP协议和可扩展身份验证协议,例如Web协议,802.1X协议等,结合在一起,提供了与PPPoE相同的功能。详细对比如下图所示。

对比项PPPoEIPoE
所在协议层数据链路层应用层
承载协议二层以太网UDP协议
封装开销
IP地址分配IPCP协议,基于用户名和密码,认证通过后分配IP地址DHCP协议,认证前分配IP地址,基于用户的用户物理或逻辑信息,配合其它协议进行认证
访问控制方式业务认证统一业务认证分离
会话建立过程面向连接的SessionID无连接
客户端软件需要不需要
PPPoE和IPoE对比

PPPoE的认证方式可管理性强,本身安全性很高,其代价是限制了网络的使用范围和组播业务的开展,因此在HSI(High Speed Internet,高速上网业务)和光纤宽带拨号上网业务应用比较广泛,给学校、企业、家庭用户带来了快速、方便的宽带接入方式。

IPoE可以自主管理IP地址的使用期限,可以在局域网范围内进行设置,无需客户端软件,操作简单,但是需要配合其他协议来进行认证,在IPTV(Internet protocol television,互联网协议电视)/VoIP(Voice over IP,IP承载语音)业务上应用比较广泛

IPoE的安全性方面需要家庭网关,网络接入设备,宽带网络网关协同工作。其保证策略包括:反地址欺骗、用户终端数限制、防Dos攻击、业务隔离、非法组播源抑制、端口隔离。IPoE在组播业务场景下,可以将组播复制下移到靠近用户的设备,因此在IPTV和VoIP方面得到了广泛应用。

PPPOE如何防环?

Magic-Number,魔术字:Magic Numer是在PPP协议的LCP协商阶段使用的一个特殊字段,他的作用是检测和防止环路和其他异常情况。

  1. 检测环路:在PPP链路建立过程中,双方交换各自的Magic Number。通过接受到的魔术字,可以判断链路是否存在环路。魔术字还可以用于检测其他异常异常情况。
  2. 协商过程:在LCP协商阶段,双方通过交换Configure-Request和Configure-Ack报文来协商魔术字等链路参数;如果接收到的Configure-Request报文中包含不可识别的魔术字,就会发送Configure-Rejected报文,要求重新请求参数。
  3. 特性:魔术字随机生成,以确保两端尽可能产生不同的魔术字;每个PPP会话的魔术字是唯一的,用于表示该会话。

PPP协议的Protocol字段值有哪些?

Protocol字段
IP0x0021
IPX0x002B
AppleTalk0x0029
NCP/IPCP0x8021
LCP0xC021
PAP0xC023
CHAP0xC223

PPPOE拨号配置

  • 角色:
    • 服务端:运营商提供服务,一般用户接触不到,但现在需要模拟运营商的服务器来建立PPP链路、协商以及为用户(出口设备)分配IP(公网IP)。PPPOE拨号获取公网IP一般为服务端的地址池动态分配,PPPOE拨号是其中一种方式,运营商提供了三种方式:
      • PPPOE拨号:获取动态IP地址,通过IPCP协商获取。
      • 静态以太网接入方式:从运营商购买静态IP,运营商提供IP地址、网关、DNS等。
      • DHCP以太网接入方式:也是动态方式获取IP地址。
    • 客户端:一般为用户的出口设备,与服务商通过PPP连接,通过PPPOE拨号来完成认证获取IP。

服务端配置:

#1、配置宽带账户。

[server]aaa
[server-aaa]local-user pppoeuser password cipher admin123  //创建宽带用户
[server-aaa]local-user pppoeuser service-type ppp  //配置用户服务类型ppp

#2、配置用于分配的公网地址池。
[server]ip pool CLIENT  //创建地址池,用于分配给客户端。
[server-pool-CLIENT]network 100.1.1.0 mask 24  
[server-pool-CLIENT]gateway-list 100.1.1.1
[server-pool-CLIENT]dns-list 8.8.8.8

#3、配置虚拟接口模板。
[server]interface virtual-template 1 //创建虚拟模板,编号为1,可选编号为0-1023;
[server-virtual-template1]ip address 100.1.1.1 24 //为虚拟模板配置ip地址;
[server-virtual-template1]ppp authentication-mode chap //配置PPP认证模式为CHAP;
[server-virtual-template1]remote address pool CLIENT  //配置用于分配给客户端的地址池。

#4、将虚拟接口模板绑定在物理接口。
[server]interface g0/0/0
[server-interface g0/0/0]pppoe-server bind Virtual-Template 1 //在物理接口上绑定虚拟接口模板。

客户端配置:

#1、配置客户端拨号接口,Dialer[可用编号0-127]:
#     选择该拨号口的链路类型为ppp;
#     配置CHAP认证的账户和密码;
#     配置客户端获取IP地址的方式为PPP协商;
#     配置虚接口的用户,这里可配可不配;
#     配置拨号组,在这个组里发送数据的用户可以拨号;
#     配置bundle,用于将虚接口和物理接口进行关联/绑定。

      

[client]interface dialer 1 //进入拨号接口 1
[client-dialer1]link-protocol ppp//设置链路类型为PPP
[client-dialer1]ppp chap user pppoeuser //配置CHAP认证的账户
[client-dialer1]ppp chap password cipher admin123 //配置CHAP认证的密码
[client-dialer1]ip address ppp-negotiate  //配置客户端获取ip地址的方式为ppp协商
[client-dialer1]dialer user pppoeuser //配置虚接口用户,这里可配可不配
[client-dialer1]dialer-group 1 //配置拨号组,即规定哪种流量去触发哪个dialer口去拨号。
[client-dialer1]dialer bundle 1 //配置bundle,用于将虚接口与物理接口关联。

#2、绑定客户端物理接口
[client]int g0/0/1  //进入与server连接的接口
[client-g0/0/1]pppoe-client dial-bundle-number 1  //绑定端口

#完成以上所有配置,server与client开始进行协商,协商完即可获得地址。
#输入命令display ip interface brief或display interface dialer 1查看,已获得100.1.1.254/24的地址。

客户端配置默认路由

#客户端完成协商获得服务端分配的 公网ip地址 后,由于没有路由,仍然无法访问互联网。
#display ip routing table查看路由表;
#因此,需要在客户端配置IPCP协商。

#1、配置IPCP协商
[client]interface dialer 1  //进入拨号虚接口;
[client-dialer1]ppp ipcp default-route  //配置在IPCP协议协商成功后生成指向当前接口的默认路由。

#2、重启接口或重启设备,推荐重启接口
[client-dialer1]shutdown
[client-dialer1]undo shutdown 

##结果如下:

Destination/Mask    Proto   Pre  Cost      Flags NextHop         Interface

        0.0.0.0/0   Unr     60   0           D   1.1.1.100       Dialer1
      100.1.1.1/32  Direct  0    0           D   100.1.1.1       Dialer1
    100.1.1.254/32  Direct  0    0           D   127.0.0.1       Dialer1
      127.0.0.0/8   Direct  0    0           D   127.0.0.1       InLoopBack0
      127.0.0.1/32  Direct  0    0           D   127.0.0.1       InLoopBack0

#3、此时尝试ping外网,发现还是ping不同,因为还未配置NAT。
[client]acl 2000
[client-acl--basic-2000]rule 10 permit source any //配置acl,放行所有内网IP。

[client]int dialer 1
[client-dialer1]nat outbound 2000 //在dialer1 口上配置easyip。

#4、此时,依旧不能ping通外网,因为新配置的参数需要重新进行PPP协商,因此需要重启设备或重启dialer1接口。后续如果有新参数,如不同,可尝试重启接口来重新加载配置。

server、client完整配置如下:

#server配置:


#地址池:
ip pool CLIENT
 gateway-list 100.1.1.1 
 network 100.1.1.0 mask 255.255.255.0 
 dns-list 8.8.8.8 


#aaa :
 local-user pppoeuser password cipher %$%$c$-'V(}~H!v'nZI.`uT!Yma4%$%$
 local-user pppoeuser  service-type ppp

#pppoe虚拟接口模板:
interface Virtual-Template1
 ppp authentication-mode chap 
 remote address pool CLIENT
 ppp chap user pppoeuser  
 ip address 100.1.1.1 255.255.255.0 

#物理接口与虚拟接口模板绑定:
interface GigabitEthernet0/0/0
 pppoe-server bind Virtual-Template 1

#client

#acl:
acl number 2000  
 rule 10 permit source any 

#Dialer接口:
interface Dialer1
 link-protocol ppp
 ppp ipcp default-route
 ppp chap user 13417785992
 ppp chap password cipher %$%$x]1^G6o:mQ$JmYLBeu)0,BcR%$%$
 ip address ppp-negotiate
 dialer user 13417785992
 dialer user admin
 dialer bundle 1
 nat outbound 2000

#物理接口绑定:
interface GigabitEthernet0/0/1
 pppoe-client dial-bundle-number 1 

#IPCP宣告默认路由或配置静态IP:
 ppp ipcp default-route 或
 ip route-static 0.0.0.0 0.0.0.0 Dialer1

#指向内网的路由:
ip route-static 192.168.101.0 255.255.255.0 192.168.1.254
ip route-static 192.168.102.0 255.255.255.0 192.168.1.254
或0.0.0.0 0 192.168.1.254

#AC+AP,其他接口配置,略。

No Comments

Send Comment Edit Comment


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
Previous
Next