PPPOE协议 思科
为什么有PPPoE协议?
①PPP协议最经济接入方式是用以太网
所以把PPP帧封装到以太网帧中的链路层协议,我们可以在以太网上抓到PPP报文
②PPP协议又能提供良好的访问控制和计费功能
结合以上两点,所以就有了PPPoE协议
PPPoE利用以太网将大量主机组成网络
通过一个远端接入设备连入因特网,并运用PPP协议对接入的每个主机进行控制,具有适用范围广、安全性高、计费方便的特点。
PPPoE拨号的工作原理
PPPoE 五个报文
① PADI : PPPoE Active Discovery Initial
PPPoE Client 通过广播发送的报文,用于搜索并请求可用的PPPoE服务器。
内容:客户端的MAC地址、服务名称标识符,以及其他可选参数
② PADO : PPPoE Active Discovery Offer
PPPoE Server 发送的单播报文,作为对PADI报文的响应
其中每个响应提供了服务器的MAC地址、服务名称标识符等信息
③ PADR : PPPoE Active Discovery Request
由客户端发送给选择的PPPoE服务器的报文,用于请求建立连接
内容包括 客户端和服务器的MAC地址、PPPoE会话ID(用于标识该连接),以及其他可选参数
④ PADS : PPPoE Active Discovery Session-confirmation
由PPPoE服务器发送给客户端的报文,用于确认连接的建立
报文中包含了客户端和服务器的MAC地址、PPPoE会话ID等信息
⑤ PADT : PPPoE Active Discovery Terminate
它是由任一一方(客户端或服务器)发送的报文,用于终止连接
报文中包含了正在终止连接的一方的MAC地址和PPPoE会话ID
PPPoE 三个阶段
① Discovery 阶段
Discovery阶段由四个过程组成。
-
PPPoE Client 广播发送PADI(PPPoE Active Discovery Initiation)报文,查找可用的PPPoE服务器。
-
PPPoE Server 收到PADI报文后,如果有可用的服务,则会向客户端单播发送PADO(PPPoE Active Discovery Offer)报文,其中可能包含多个PPPoE服务器的响应。
-
PPPoE Client 选择最先收到的 PADO 报文对应的 PPPoE Server 做为自己的PPPoE Server,并向所选的PPPoE服务器单播发送一个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。
Discovery阶段的 报文交互过程
② Session 阶段
PPPoE Session阶段可划分为两部分
一是PPP协商阶段,二是PPP数据传输阶段
PPPoE Session上的PPP协商和普通的PPP协商方式一致,分为LCP、认证、NCP三个阶段
-
LCP阶段
主要完成建立、配置和检测数据链路连接。 -
认证协商
认证协议类型由LCP协商结果(CHAP或者PAP)决定,最常用的是PAP认证 -
NCP阶段
NCP是一个协议族,用于配置不同的网络层协议,常用的是IP控制协议(IPCP)
IPCP :主要负责协商用户的IP地址和DNS服务器地址
PPPoE Session的PPP协商成功后,就可以承载PPP数据报文
在PPPoE Session阶段所有的以太网数据包都是单播发送的
Session阶段的 报文交互过程
③ Terminate 阶段
PPP通信双方可以使用PPP协议自身来结束PPPoE会话
当无法使用PPP协议结束会话时可以使用PADT(PPPoE Active Discovery Terminate)报文。
进入PPPoE Session阶段后
PPPoE Client和PPPoE Server 都可以通过发送PADT报文的方式来结束PPPoE连接
PADT数据包可以在 会话建立以后的任意时刻单播发送
在发送或接收到PADT后,就不允许再使用该会话发送PPP流量了
Terminate阶段的 报文交互过程
配置
拓扑
ISP配置
PPPOE 服务端
记忆口诀:
① 先创建用户库
② 再创建虚拟接口
- 先配地址
- LCP
- 认证
- NCP
③ 用BBA组与之关联
④ 进入物理接口,进行关联
ISP(config)#username cisco password ccie
ISP(config)#ip local pool R1 202.101.1.10
ISP(config)#int virtual-template 1 --- 创建虚拟接口
ISP(config-if)#no shutdown
ISP(config-if)#ip address 202.101.1.1 255.255.255.0 --- 需要在虚拟接口上配置IP地址,而不是在物理接口上
ISP(config-if)#encapsulation ppp --- LCP,链路层协商,在虚拟接口封装PPP协议
ISP(config-if)#ppp authentication pap --- 认证协商,PAP
ISP(config-if)#peer default ip address pool R1 --- NCP,网络层协商,用来下发IP地址
ISP(config-if)#ppp timeout idle ? --- 开启计时功能
<1-4294967> Idle timeout value in seconds
ISP(config-if)#ex
ISP(config)#bba-group pppoe R1 --- 创建BBA组
ISP(config-bba-group)#virtual-template 1 --- 将刚才创建的虚拟接口1 放在BBA组里面
ISP(config-bba-group)#ex
ISP(config)#int e0/0
ISP(config-if)#no shutdown
ISP(config-if)#pppoe enable group R1 --- 用BBA组,使虚拟接口与物理接口关联
ISP(config-if)#ex
DNS 服务器
ISP(config)#int loobpack 1 --- 创建一个环回口,当做外网地址
ISP(config-if)#ip address 8.8.8.8 255.255.255.255
ISP(config-if)#ex
ISP(config)#ip dns server --- 将ISP作为一个DNS的服务器
ISP(config)#ip host www.baidu.com 8.8.8.8 --- 设定静态主机(DNS)映射,访问 www.baidu.com 它会进行域名解析服务,将域名转换为 8.8.8.8
R1配置
PPPOE 客户端
记忆口诀:
① 先创建拨号口
- LCP
- 认证(PAP、CHAP)
- 下发默认地址
- NCP
- 创建拨号池
②进入物理接口与拨号池关联
R1(config)#int dialer 1 --- 创建拨号口
R1(config-if)#no shutdown
R1(config-if)#encapsulation ppp --- 链路层协商,将接口的封装协议设置为PPP协议
R1(config-if)#ppp pap sent-username cisco password ccie --- 认证协商,PAP
R1(config-if)#ppp ipcp route default --- 下发一条默认路由,指向ISP
R1(config-if)#ip address negotiated --- 网络协商,获取上网的IP地址
R1(config-if)#dialer pool 1 --- 创建拨号池
R1(config-if)#ex
R1(config)#int e0/0
R1(config-if)#no shutdown
R1(config-if)#pppoe-client dial-pool-number 1 --- 用拨号池,将拨号口和物理接口关联
R1(config-if)#ex
DHCP 服务端
R1(config)#int e0/1
R1(config-if)#no shutdown
R1(config-if)#ip address 192.168.10.254 255.255.255.0
R1(config-if)#ex
R1(config)#ip dhcp pool PC
R1(dhcp-config)#network 192.168.10.0 255.255.255.0
R1(dhcp-config)#default-router 192.168.10.254
R1(dhcp-config)#dns 8.8.8.8
R1(config)#ip dhcp excluded-address 192.168.10.254
NAT(PAT)配置
这里,一定要注意
是要把 拨号口设置为NAT的外接口 ,而不是物理接口!!!
R1(config)#int dialer 1 ---- 特别注意,是要把拨号口设置为NAT的外接口
R1(config-if)#ip nat outside
R1(config-if)#ex
R1(config)#int e0/1
R1(config-if)#ip nat inside
R1(config-if)#ex
R1(config)#access-list 1 permit 192.168.10.0 0.0.0.255 --- 配置ACL,匹配感兴趣流量
R1(config)#ip nat inside source list 1 interface dialer 1 overload --- 这边也是一样
PC配置
获取IP地址
PC(config)#no ip routing --- 关闭路由功能,我是用路由器模拟PC
PC(config)#int e0/0
PC(config-if)#no shutdown
PC(config-if)#ip address dhcp --- 用DHCP方式获取IP地址
PC(config-if)#ex
PC(config)# --- 获取成功
*Aug 4 04:10:22.773: %DHCP-6-ADDRESS_ASSIGN: Interface Ethernet0/0 assigned DHCP address 192.168.10.1, mask 255.255.255.0, hostname PC
检验NAT是否配置成功
PC能 ping 到 ISP 的 域名网址 ,表明内网可以访问外网,NAT配置成功
拨号成功
当弹出这两条日志的时候,就说明拨号成功,成功获得到上网地址
查看IP地址表,发现已经分配到上网地址了
查看路由表,存在一条默认路由,并且指向ISP