目录

Portal组网架构

Portal协议报文格式

用户接入Portal认证的方式

Portal认证的认证方式

注意事项


802.1x认证点多,配置量大,因此提出了portal认证

Portal认证也称为Web认证,通过网站的形式进行身份认证,免除客户端(只需要网络浏览器的支持,也可以使用Portal客户端软件进行认证),一般将Portal认证网站称为门户网站

Portal组网架构

认证客户端

一般为运行HTTP/HTTPS协议的浏览器,也可以是运行Portal客户端软件的主机

接入设备NAS

一般为交换机或路由器,主要有三个作用

在认证之前,将用户的所有HTTP请求都重定向到Portal服务器

在认证过程中,与Portal服务器、认证/计费服务器等进行交互,完成身份认证/计费的功能

在认证通过后,允许用户访问被管理员授权的互联网资源

Portal服务器

接收Portal客户端认证请求,提供基于Web认证的界面

与接入设备交互认证客户端的认证信息

认证/计费服务器

与接入设备进行交互,完成对用户的认证和计费

通常为Radius服务器

Portal协议报文格式

Portal端口号为UDP 2000

Version Portal协议版本号

默认为0x02

Poratl协议常用报文Type

REQ_CHALLENGE Portal服务器向接入设备发送的挑战请求报文 0x01(也可以是终端发给Portal服务器)

ACK_CHALLENGE 接入设备对Portal服务器的挑战请求的响应报文 0x02(也可以是Portal服务器发给终端)

REQ_AUTH Portal服务器向接入设备发送的认证请求报文0x03(也可以是终端发给Portal服务器)

ACK_AUTH 接入设备对Portal服务器的认证请求报文的响应 0x04(也可以是Portal服务器发给终端)

AFF_ACK_AUTH Portal服务器向接入设备发送认证成功的响应报文 0x07(也可以是终端发给Portal服务器)

REQ_LOGOUT Portal服务器向接入设备发送的下线请求报文 0x05

ACK_LOGOUT 接入设备对Portal服务器下线请求的响应报文0x06

NTF_LOGOUT 接入设备向Portal服务器发送用户被强制下线通知的报文 0x08

ACK_NTF_LOGPUT Portal服务器通知接入设备用户强制下线成功 0x0e

注意事项

REQ_CHALLENGE和ACK_CHALLENGE只有在使用CHAP协议时才会使用到

AuthType 认证方式

目前只支持CHAP和PAP

CHAP:0x00 三次握手,密文方式传输用户名

PAP: 0x01 两次握手,明文方式传输用户名

SeriaINo与RequestID

SeriaINo报文的序列号,由Portal服务器随机生成;Portal服务器必须保证再同一个认证流程中的所有报文序列号相同(不同认证流程下的报文序列号在一定时间不得重复)

RequestID报文ID,由接入设备生成,RequestID不会重复

UserIP

Portal用户的IP地址

UserPort

保留字段,为0

ErrCode

错误码,根据不同的Type值,错误码有不同的含义

Authenticator

验证字段,由MD5算法对各个字段计算后得出来的数据

Attribute

可变长字段,为TLV格式

关于Radius报文

AAA与Radius协议讲解_radius协议详解_静下心来敲木鱼的博客-CSDN博客

用户接入Portal认证的方式

通过HTTP/HTTPS进行接入,主要在客户端和Portal服务器之间进行交互

用户触发Portal认证的两种方式

用户开机获取IP地址后,通过登录Portal认证网站进行认证,认证通过后即可访问Internet

主动认证

用户需要知道Portal服务器的IP地址,主动登录到Portal门户网站进行Portal认证

重定向认证

用户输入的访问地址不是Portal服务器的IP地址,然后被接入设备强制重定向到Portal服务器

根据客户端与接入设备之间的网络分为不同的认证方式

二层直连Portal认证:客户端与接入设备之间为二层网络

接入设备在连接用户的二层端口上开启Portal认证,只允许源MAC通过认证的用户才可以访问外部网络;目前该认证方式仅支持本地Portal认证(即接入设备作为本地的Portal服务器向用户提供Web认证服务;也就是内置Portal认证)

三层Portal认证:客户端与接入设备之间为三层网络

在连接用户的三层端口上开启Portal认证,其中又细分为三种不同的认证方式

直接认证

用户在认证前通过手工配置或DHCP直接获取一个IP地址,只能访问Portal服务器以及设定的免费访问地址;认证通过后才可以访问网络资源

二次地址分配认证

用户在认证前通过DHCP获取到一个私网地址,只能访问Portal服务器以及设定的免费访问地址;认证通过后会重新申请一个公网地址来访问网络资源,认证失败后不会获取IP地址

可跨三层认证

和直接认证类似,只不过此认证方式允许认证用户和接入设备之间跨三层设备转发

用户接入Portal认证的流程

Portal认证的认证方式

对于Porta认证我们由一代Portal认证和二代Portal认证,它们之间的主要区别如下(以下我们介绍的都是二代Web认证流程)

一代Web认证 –Poratl服务器和Radius服务器进行认证报文交互

终端把用户名和密码提交上来之后,通过Portal界面提交给Portal服务器

Porta服务器直接把用户名和密码发给Radius服务器

Radius服务器校验之后告诉给Portal服务器,Portal向终端返回认证成功界面;

Portal服务器再把认证的结果告诉接入设备,接入把相应的上网通道给打开

二代Web认证—接入设备代替Portal服务器和Radius服务器进行认证报文交互(Portal感知不到Radius服务器)

终端输入用户名和密码之后,通过Portal界面提交到Portal服务器

Portal服务器把用户名和密码提交给接入设备,接入设备去发送Radius报文和Radius服务器去交互进行认证

认证成功之后,接入设备放通用户上网权限,并告诉Portal服务器,Portal服务器通过下发认证成功的界面给终端

通过二层认证接入,三层直连认证接入、可跨三层认证接入Portal认证时的认证流程

通过Web认证(免客户端) 基于HTTP/HTTPS进行认证

客户端直接将用户信息通过HTTP请求传递给接入设备,支持GET和POST两种请求

此时用户提交的用户名密码通过HTTP/HTTPS报文传输

POST:请求数据放置在HTTP请求消息的正文中,不作为URL的一部分

GET: 请求的数据会加在URL之后,以“?“分隔,对所有人可见(以下就是此方式)

通过Portal客户端软件进行认证(基于Portal协议进行Portal认证)

Portal服务器直接使用Portal协议报文与接入设备进行交互

采用客户端软件/服务器的架构,基于UDP运行,支持PAP/CHAP认证

此时用户提交的用户名密码通过Portal报文传输,Portal报文采用TLV格式携带用户名、密码、用户MAC等属性信息

  1. 用户发送认证请求,将用户名和密码发给Portal设备,通过Req_auth报文的TLV携带
  2. Portal服务器发送Req_challenge给接入设备;Req_challenge表示告诉接入设备开始CHAP的认证,开始认证请求
  3. 接入设备收到后,产生随机数发送给Portal服务器,发送Ack_challenge响应认证请求
  4. Portal服务器收到接入设备发来的随机数后,使用密码和随机数做hash得到密文发给接入用户,进行请求认证,发送Req_auth
  5. 接入设备将收到的密文以及自己产生的随机数发给Radius服务器,进行认证请求,发送radius报文Access-request进行认证请求
  6. Radius服务器根据此随机数结合该用户的密码做hash的到密文,然后比较hash的结果是否一致;结果一致发送readius报文Access-accept告诉认证结果成功
  7. 此时接入设备进行计费请求(Accounting-Request)
  8. Radius服务器回应计费响应(Accounting-Response)
  9. 接入设备收到之后告诉Portal服务器用户通过认证并放通用户上网通道;发送ack_auth报文
  10. Portal服务器收到认证成功报文后,并通知用户认证成功发送ack_auth报文
  11. Portal服务器并响应接入设备的认证成功报文,发送Aff_ack_auth报文

通过二次地址分配认证接入时的认证流程(Portal客户端方式)


注意事项

在现网中,可能会存在运营商认证设备,此种情况下真正的认证设备是运行商认证设备,而不是本地部署的radius服务器

大致的认证流程如下:

客户端将认证请求送达到Portal服务器,Portal服务器将其送到接入设备,接入设备将请求发送到本地radius服务器,本地radius服务器收到后,转发给运营商认证设备去做校验

运营商校验成功,将结果返回给本地radius服务器,本地radius服务器再将结果转发给接入设备,接入设备转发给Portal服务器,Portal服务器转发给终端,返回认证成功

之后的计费是由本地radius服务器进行计费的