实验目标:掌握PPPoE拨号技术

实验TOP

173804935.png

\\以上ISP三台路由器各自运行环回口以自身路由器号为准。R3连接的三台电脑用loopback1 loopback2 loopback3表示。


PPPoE简介:

pppoe是point-to-point protocol over ethernet的简称,可以使以太网的主机通过一个简单的桥接设备连到一个远端的接入集中器上。通过pppoe协议,远端接入设备能够实现对每个接入用户的控制和计费。

与传统的接入方式相比,pppoe具有较高的性能价格比,它在包括小区组网建设等一系列应用中被广泛采用,目前流行的宽带接入方式ADSL 就使用了pppoe协议。

  modem接入技术面临一些相互矛盾的目标,既要通过同一个用户前置接入设备连接远程的多个用户主机,又要提供类似拨号一样的接入控制,计费等功能,而且要尽可能地减少用户的配置操作。

PPPOE的目标就是解决上述问题,1998年后期问世的以太网上点对点协议(PPPoverEthernet)技术是由Redback网络公司、客户端软件开发商RouterWare公司以及Worldcom子公司UUNET Technologies公司在IETFRFC的基础上联合开发的。通过把最经济的局域网技术-以太网和点对点协议的可扩展性及管理控制功能结合在一起,网络服务提供商和电信运营商便可利用可靠和熟悉的技术来加速部署高速互联网业务。它使服务提供商在通过数字用户线、电缆调制解调器或无线连接等方式,提供支持多用户的宽带接入服务时更加简便易行。同时该技术亦简化了最终用户在选择这些服务时的配置操作。


PPPoE协议工作原理

  PPPoE协议的工作流程包含发现和会话两个阶段,发现阶段是无状态的,目的是获得PPPoE终结端(在局端的ADSL设备上)的以太网MAC地址,并建立一个唯一的PPPoESESSION-ID。发现阶段结束后,就进入标准的PPP会话阶段。

当一个主机想开始一个PPPoE会话,它必须首先进行发现阶段,以识别局端的以太网MAC地址,并建立一个PPPoESESSION-ID。在发现阶段,基于网络的拓扑,主机可以发现多个接入集中器,然后允许用户选择一个。当发现阶段成功完成,主机和选择的接入集中器都有了他们在以太网上建立PPP连接的信息。直到PPP会话建立,发现阶段一直保持无状态的Client/Server(客户/服务器)模式。一旦PPP会话建立,主机和接入集中器都必须为PPP虚接口分配资源。


PPPoE协议会话的发现和会话两个阶段具体进程如下。

1.发现(Discovery)阶段

在发现(Discovery)阶段中用户主机以广播方式寻找所连接的所有接入集中器(或交换机),并获得其以太网MAC地址。然后选择需要连接的主机,并确定所要建立的PPP会话标识号码。发现阶段有4个步骤,当此阶段完成,通信的两端都知道PPPoESESSION-ID和对端的以太网地址,他们一起唯一定义PPPoE会话。这4个步骤如下。

(1)主机广播发起分组(PADI)

主机广播发起分组(PADI),分组的目的地址为以太网的广播地址0×ffffffffffff,CODE(代码)字段值为0×09,SESSION-ID(会话ID)字段值为0×0000。PADI分组必须至少包含一个服务名称类型的标签(标签类型字段值为0×0101),向接入集中器提出所要求提供的服务。

(2)接入集中器

接入集中器收到在服务范围内的PADI分组,发送PPPoE有效发现提供包(PADO)分组,以响应请求。其中CODE字段值为0×07,SESSION-ID字段值仍为0×0000。PADO分组必须包含一个接入集中器名称类型的标签(标签类型字段值为0×0102),以及一个或多个服务名称类型标签,表明可向主机提供的服务种类。

(3)主机选择一个合适的PADO分组

主机在可能收到的多个PADO分组中选择一个合适的PADO分组,然后向所选择的接入集中器发送PPPoE有效发现请求分组(PADR)。其中CODE字段为0×19,SESSION_ID字段值仍为0×0000。PADR分组必须包含一个服务名称类型标签,确定向接入集线器(或交换机)请求的服务种类。当主机在指定的时间内没有接收到PADO,它应该重新发送它的PADI分组,并且加倍等待时间,这个过程会被重复期望的次数。

(4)准备开始PPP会话

接入集中器收到PADR分组后准备开始PPP会话,它发送一个PPPoE有效发现会话确认PADS分组。其中CODE字段值为0×65,SESSION-ID字段值为接入集中器所产生的一个唯一的PPPoE会话标识号码。PADS分组也必须包含一个接入集中器名称类型的标签以确认向主机提供的服务。当主机收到PADS分组确认后,双方就进入PPP会话阶段。


2.PPP会话阶段

  用户主机与接入集中器根据在发现阶段所协商的PPP会话连接参数进行PPP会话。一旦PPPoE会话开始,PPP数据就可以以任何其他的PPP封装形式发送。所有的以太网帧都是单播的。PPPoE会话的SESSION-ID一定不能改变,并且必须是发现阶段分配的值。

PPPoE还有一个PADT分组,它可以在会话建立后的任何时候发送,来终止PPPoE会话,也就是会话释放。它可以由主机或者接入集中器发送。当对方接收到一个PADT分组,就不再允许使用这个会话来发送PPP业务。PADT分组不需要任何标签,其CODE字段值为0×a7,SESSION-ID字段值为需要终止的PPP会话的会话标识号码。在发送或接收PADT后,即使正常的PPP终止分组也不必发送。PPP对端应该使用PPP协议自身来终止PPPoE会话,但是当PPP不能使用时,可以使用PADT。


PPPoE的验证过程

  假如客户端要通过一个局域网与远程的PPPoE服务器进行身份验证,这时,它们会有两个不同的会话阶段,Discovery阶段和PPP会话阶段。当一个客户端想开始一个PPPoE会话时,它必须首先进行发现阶段以识别对端的以太网MAC地址,并建立一个PPPoESESSON_ID。在发现阶段,基于网络的拓扑结构,客户端可以发现多个PPPoE服务器,然后从中选择一个,不过通常都是选择反应最快的一个。

  Discovery阶段是一个无状态的阶段,该阶段主要是选择接入服务器,确定所要建立的PPP会话标识符Session ID,同时获得对方点到点的连接信息;PPP会话阶段执行标准的PPP过程。当此阶段完成,通信的两端都知道PPPoESESSON_ID和对端的以太网地址,它们一起定义了一个唯一的PPPoE会话。这些步骤包括客户端广播一个发起分组(PADI),一个或多个PPPoE服务器发送响应分组(PADO),客户端向选中的服务器发送请求分组(PADR),选中的PPPoE服务器发送一个确认分组(PADS)给客户端。当客户端接收到确认分组,它可以开始进行PPP会话阶段。当PPPoE服务器发送出确认分组,它可以开始PPP会话。

  当客户端在指定的时间内没有接收到PADO,它应该重新发送它的PADI分组,并且加倍等待时间,这个过程会被重复期望的次数。如果客户端正等待接收PADS,应该使用具有客户端重新发送PADR的相似超时机制。在重试指定的次数后,主机应该重新发送PADI分组。PPPOE还有一个PADT分组,它可以在会话建立后的任何时候发送,来终止PPPOE会话。它可以由客户端或者PPPOE服务器发送。当接收到一个PADT,不再允许使用这个会话来发送PPP业务在发送或接收PADT后,即正常的PPP不能使用时,可以使用PADT,一旦PPPOE会话开始,PPP数据就可以以任何其它的PPP封装形式发送。所有的以太网帧都是单播的,身份验证是发生在会话阶段的,PPPoE会话的SESSION_ID一定不能改变,并且必须是发现阶段分配的值。


基本配置:

R1

!
hostname PPPoE-Client
!
no ip domain lookup
!
interface Ethernet0/0
 no ip address
!
interface Ethernet0/0.13
 encapsulation dot1Q 13
 no snmp trap link-status
!
interface Serial1/0
 no ip address
 shutdown
 serial restart-delay 0
!
interface Serial2/0
 no ip address
 shutdown
 serial restart-delay 0
!      
line con 0
 exec-timeout 0 0
 logging synchronous
line aux 0
line vty 0 4
!

R2

!
hostname PPPoE-Server
!
no ip domain lookup
!
interface Loopback0
 ip address 2.2.2.2 255.255.255.0
 ip ospf network point-to-point
!
interface Ethernet0/0
 no ip address
!
interface Serial1/0
 ip address 24.1.1.2 255.255.255.0
 serial restart-delay 0
!
interface Serial2/0
 no ip address
 shutdown
 serial restart-delay 0
!
router ospf 10
 router-id 2.2.2.2
 log-adjacency-changes
 passive-interface Ethernet0/0
 network 0.0.0.0 255.255.255.255 area 0
!
line con 0
 exec-timeout 0 0
 logging synchronous
line aux 0
line vty 0 4
!

R3

!
hostname R3
!
no ip domain lookup
!
interface Loopback1
 ip address 10.1.1.1 255.255.255.0
!
interface Loopback2
 ip address 10.2.2.2 255.255.255.0
!
interface Loopback3
 ip address 10.3.3.3 255.255.255.0
!
interface Ethernet0/0
 no ip address
!
interface Ethernet0/0.13
 encapsulation dot1Q 13
 no snmp trap link-status
!
interface Serial1/0
 no ip address
 shutdown
 serial restart-delay 0
!
interface Serial2/0
 no ip address
 shutdown
 serial restart-delay 0
!
line con 0
 exec-timeout 0 0
 logging synchronous
line aux 0
line vty 0 4
!

R4

!
hostname R4
!
no ip domain lookup
!
interface Loopback0
 ip address 4.4.4.4 255.255.255.0
 ip ospf network point-to-point
!
interface Ethernet0/0
 no ip address
 shutdown
!
interface Serial1/0
 ip address 45.1.1.4 255.255.255.0
 serial restart-delay 0
!
interface Serial2/0
 ip address 24.1.1.4 255.255.255.0
 serial restart-delay 0
!
router ospf 10
 router-id 4.4.4.4
 log-adjacency-changes
 network 0.0.0.0 255.255.255.255 area 0
!      
line con 0
 exec-timeout 0 0
 logging synchronous
line aux 0
line vty 0 4
!

R5

!
hostname R5
!
no ip domain lookup
!
interface Loopback0
 ip address 5.5.5.5 255.255.255.0
!
interface Ethernet0/0
 no ip address
 shutdown
!
interface Serial1/0
 no ip address
 shutdown
 serial restart-delay 0
!
interface Serial2/0
 ip address 45.1.1.5 255.255.255.0
 serial restart-delay 0
!
router ospf 10
 router-id 5.5.5.5
 log-adjacency-changes
 network 0.0.0.0 255.255.255.255 area 0
!      
line con 0
 exec-timeout 0 0
 logging synchronous
line aux 0
line vty 0 4
!


批注:路由器接口默认是关闭的,所以应将对应的接口开启,R2、R4、R5运行ospf路由协议,保证Area0中所有路由可达。


配置PPPoE-Server

R2

!

ip audit po max-events 100

vpdn enable

//打开路由器支持拨号的功能相当于一个开关

!

vpdn-group 1

accept-dialin

protocol pppoe

//建立一个用于拨号的组,在这个组中要设置允许客户端拨入的配置,并且限制了用PPPOE协议才能拨入

virtual-template 1

//这是一个虚拟的模板,这个模板的作用是等一下客户端拨入到路由器以后,路由器会动态的推送一些必要的参数给客户端,你可以理解为虚拟模板其实就是一个虚拟的接口

!

username itaa password 0 itaa

//创建用户名密码 (如果用户名密码很多的情况下,不建议存在路由器上,是单独用一台服务器来专门存放,路由器在需要时候会通过某种协议去查询)

!

interface Ethernet0/0

no ip address

pppoe enable

//在以太网口上打开支持PPPOE拨号的功能

!

interface Virtual-Template1

ip address 12.1.1.1 255.255.255.0

peer default ip address pool pppoe

ppp authentication chap callout

//进入虚拟模板在里面配置具体的参数

1:配置一个IP地址供用户来访问

2:虚模板给客户端分配IP地址的时候一定调用pppoe这个地址池(这样可以避免当存在多个地址池的时候不会出现冲突的情况)

3:配置这个PPP协议让他支持CHAP的高级认证功能(其实这个是PPP的单向认证的方法)

!

ip local pool pppoe 12.1.1.100 12.1.1.200

//做一个DHCP服务准备给客户端分配IP地址的时候使用

!

配置PPPoE-Client

R1

!

interface Ethernet0/0

no ip address

pppoe enable

//在以太网口上打开支持PPPOE拨号的功能

pppoe-client dial-pool-number 1

//客户端拨号的地址池号码为1

!

interface Dialer1

ip address negotiated

//地址获取方式为协商

encapsulation ppp

//封装协议ppp

dialer pool 1

ppp chap hostname itaa

ppp chap password 0 itaa

//建立一个拨号地址池1 定义用户名和密码 使用chap认证

!


配置完毕后查看R1的接口是否获得地址

R1

PPPoE-Client#show ip int brief

Interface IP-Address OK? Method Status Protocol

Ethernet0/0 unassigned YES unset up up

Ethernet0/0.13 unassigned YES unset up up

Serial1/0 unassigned YES unset administratively down down

Serial2/0 unassigned YES unset administratively down down

Virtual-Access1 unassigned YES unset up up

Dialer1 12.1.1.100 YES IPCP up up

//从接口可以看出已经获得地址,证明我们已经拨号成功了。


配置dhcp服务

R1

!

ip dhcp excluded-address 192.168.1.1 192.168.1.100

!

ip dhcp pool 13

network 192.168.1.0 255.255.255.0

default-router 192.168.1.1

!

interface Ethernet0/0.13

encapsulation dot1Q 13

ip address 192.168.1.1 255.255.255.0

no snmp trap link-status

!


R3

!

interface Ethernet0/0.13

encapsulation dot1Q 13

ip address dhcp

no snmp trap link-status

!

配置完毕后查看R3的接口是否获得地址:

R3# show ip int bri

Interface IP-Address OK? Method Status Protocol

Ethernet0/0 unassigned YES unset up up

Ethernet0/0.13 192.168.1.101 YES DHCP up up

Serial1/0 unassigned YES unset administratively down down

Serial2/0 unassigned YES unset administratively down down

\\从以上可以看出已经获得地址




配置nat

R1

!

ip nat inside source list 10 interface Dialer1 overload

ip route 0.0.0.0 0.0.0.0 Dialer1 permanent

ip route 10.0.0.0 255.0.0.0 Ethernet0/0.13

!

access-list 10 permit 10.0.0.0 0.255.255.255

!

!

interface Ethernet0/0.13

ip nat inside

!

interface Dialer1

ip nat outside

!

配置完毕后我们测试一下是否成功:

R3#ping 2.2.2.2 source 10.1.1.1


Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 2.2.2.2, timeout is 2 seconds:

Packet sent with a source address of 10.1.1.1

.!!!!

Success rate is 100 percent (5/5), round-trip min/avg/max = 1/2/4 ms


R3#ping 2.2.2.2 source 10.2.2.2


Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 2.2.2.2, timeout is 2 seconds:

Packet sent with a source address of 10.2.2.2

.!!!!

Success rate is 100 percent (5/5), round-trip min/avg/max = 1/2/4 ms


R3#ping 2.2.2.2 source 10.3.3.3


Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 2.2.2.2, timeout is 2 seconds:

Packet sent with a source address of 10.3.3.3

.!!!!

Success rate is 80 percent (4/5), round-trip min/avg/max = 1/1/4 ms


在真实的环境中我们通常所用的pppoe拨号上网的时候,只需要配置pppoe-server就可以了,大家可以用GNS模拟试验一下,效果和我们平常的拨号上网一样。