☰
ROS WEB认证全链路拆解:从抓包到放行、RADIUS对接与限速落地
2026/10/18 15:06:51 网站建设 项目流程

简介:这份资源围绕RouterOS(ROS)的Web认证功能展开,面向网络管理员、运维人员及无线热点部署学习者,用于解决公共场所网络接入的授权与管控问题。压缩包共71个文件,约95KB,以19个html登录与状态页面、21个jpg与18个png界面素材、8个gif按钮图标为主,另含css样式表、js脚本、xsd参数定义及txt错误说明,构成一套可直接套用的热点认证页面模板。资源涵盖login、alogin、logout、status、error、redirect等完整认证流程页面,并附带WISPAccessGatewayParam.xsd与md5.js,便于对接认证服务器与定制品牌化登录界面。目前已有306人学习下载,适合需要快速搭建ROS热点Web认证环境、参考页面结构与排错思路的读者借鉴使用。

1. ROS WEB认证:从抓包到放行的完整链路拆解

很多人第一次接触 ROS WEB认证,是在一个已经跑了半年、突然被要求“加个上网认证页”的现场。路由器是 RouterOS,底下挂了几十台终端,老板要求:没认证的不能上网,认证过的按账号限速。听起来简单,但真动手才发现,ROS 的 hotspot 认证和常见的 captive portal 完全是两套逻辑——它不是简单弹个页面,而是靠一套基于 HTTP 重定向、IP 绑定和防火墙标记的联动机制在跑。这份资源包围绕的正是这条链路:从 hotspot 服务端配置、认证页面模板、RADIUS 对接,到用户组限速和放行策略,把“认证前只放行认证流量、认证后按组放行”这件事拆成了可复现的步骤。适合手里有 RouterOS 设备、需要落地访客认证或员工上网审计的运维和网络工程师,也适合想搞懂 hotspot 底层怎么跑的人。下面按“先跑通最小闭环,再补限速和排错”的顺序来。

2. 最小闭环:hotspot 服务端与认证页怎么配

2.1 先理解 hotspot 的三层结构

ROS 的 hotspot 不是单一功能,它由三部分组成:hotspot 服务端(监听认证请求、下发重定向)、用户与用户组(决定谁能过、过完什么待遇)、以及防火墙里的 hotspot 链(自动生成的放行规则)。认证前,所有流量被 hotspot 链拦下,只放行到认证服务器的 80/443 和 DNS;认证后,用户 IP 被加入hotspot地址列表,防火墙按用户组策略放行。理解这一点,后面所有配置都是围绕“怎么让用户从被拦到被放”展开。

常见做法是先用ip hotspot setup向导跑一遍,生成基础配置,再手动改。向导会问接口、IP 段、DNS 名称、认证方式,选HTTP CHAP或HTTPS都行,但要注意:如果认证页要跑在 HTTPS 上,证书得自己配,否则浏览器会拦。

2.2 用命令建一个可用的 hotspot 实例

下面这段是在/ip hotspot下建一个最小实例,接口是bridge-lan,认证网段192.168.88.0/24,网关192.168.88.1:

# 建 hotspot 实例,绑定到内网桥接口 /ip hotspot add name=hs-guest interface=bridge-lan address-pool=hs-pool profile=hsprof # 建地址池,给未认证终端分配临时 IP /ip pool add name=hs-pool ranges=192.168.88.10-192.168.88.200 # 建 hotspot 配置文件,指定认证页和 DNS 名称 /ip hotspot profile add name=hsprof hotspot-address=192.168.88.1 dns-name=auth.local login-by=http-chap,http-pap # 建用户组,认证后限速 2M/2M /ip hotspot user profile add name=guest-2m rate-limit=2M/2M shared-users=1 # 建一个测试用户 /ip hotspot user add name=test01 password=test123 profile=guest-2m

逻辑说明:address-pool是给未认证终端用的临时地址池,认证通过后终端会拿到正式 DHCP 地址(如果 DHCP 和 hotspot 在同一接口,ROS 会自动处理)。login-by里http-chap比http-pap安全,但部分老终端只支持 pap,两个都开兼容性更好。rate-limit的格式是上行/下行,单位默认是 kbps,写2M就是 2Mbps。shared-users=1表示一个账号只能一台设备在线,多设备会顶掉前一个。

配完后,用一台终端连上bridge-lan,浏览器随便打开一个 http 站点,应该会被重定向到http://auth.local/login。如果没弹,先查/ip hotspot active里有没有会话,再看/ip firewall nat里有没有 hotspot 的 dst-nat 规则。

2.3 认证页模板改哪里

ROS 的认证页文件放在/hotspot目录下,默认有login.html、status.html、logout.html、error.html等。要改品牌或加说明,直接改login.html就行,但注意两点:表单的action必须指向/login,隐藏字段dst和popup不能删,否则认证后跳不回去。常见做法是保留原表单结构,只改样式和文案。

<!-- login.html 核心表单,别动 name 和 action --> <form name="login" action="/login" method="post"> <input type="hidden" name="dst" value=""> <input type="hidden" name="popup" value="true"> <input type="text" name="username" placeholder="账号"> <input type="password" name="password" placeholder="密码"> <input type="submit" value="登录"> </form>

dst是认证成功后要跳转的原始 URL,ROS 会自动填;popup控制是否弹窗模式。如果自己重写页面,这两个字段丢了,用户认证完会停在空白页,血泪经验。

3. 对接外部认证:RADIUS 与用户组限速的落地细节

3.1 什么时候该上 RADIUS

本地用户适合几十个账号的小场景,一旦要对接 AD、LDAP 或已有计费系统,就得走 RADIUS。ROS 作为 NAS,把认证请求转发给 RADIUS 服务器,服务器返回Access-Accept时带上Mikrotik-Rate-Limit、Session-Timeout等属性,ROS 按属性执行。这样账号管理和限速策略都集中在服务端,路由器只负责放行。

配置分两步:先在/radius里加服务器,再在 hotspot 的use-radius打开。

# 加 RADIUS 服务器,secret 要和服务器端一致 /radius add service=hotspot address=10.0.0.100 secret=Str0ngSecret timeout=2s # 在 hotspot profile 里启用 radius /ip hotspot profile set hsprof use-radius=yes # 如果本地用户和 radius 同时存在,用这个控制优先级 /ip hotspot user profile set guest-2m radius-reply=yes

timeout=2s是单次请求超时,RADIUS 挂了会重试,重试次数在/radius的accounting里调。radius-reply=yes表示用户组允许 RADIUS 返回的属性覆盖本地限速,如果服务端没返回限速,就用本地的。

3.2 限速属性怎么传才生效

RADIUS 返回的Mikrotik-Rate-Limit格式是rx-rate/tx-rate,比如2M/2M,和本地rate-limit一致。但有个坑:如果服务端返回的是2M/2M 4M/4M这种带突发(burst)的格式,ROS 也认,但突发只在短时间内生效,别指望靠它跑满。另外Session-Timeout控制会话时长,到点会强制下线,适合做按时计费。

常见做法是在 RADIUS 服务端按用户组下发不同属性,比如访客组2M/2M、员工组10M/10M、VIP 组50M/50M。ROS 这边不用改,只要use-radius=yes且用户组允许覆盖就行。

3.3 认证后放行与防火墙联动

认证通过后,ROS 会把用户 IP 加入hotspot地址列表,防火墙里自动生成的规则会放行这个列表的流量。但如果你自己写了防火墙规则,顺序很重要:hotspot 链的规则必须在forward链之前,否则会被自己的规则拦掉。用/ip firewall filter print看,hotspot 规则通常在最上面,带hotspot链名。

如果认证后还是上不了网,先查/ip hotspot active里用户状态是不是authorized,再看/ip firewall address-list里有没有这个 IP。没有的话,多半是login-by方式不匹配或密码错了。

4. 避坑与排查:认证页不弹、认证后断流、限速不生效

4.1 认证页不弹,浏览器直接报错

现象:终端连上后,打开 http 站点直接超时或显示无法访问,没有重定向。原因通常是 hotspot 服务没起来,或者dns-name解析不到。解决:先/ip hotspot print看实例是不是running,再/ip hotspot profile print看dns-name是不是一个能解析的域名。如果用的是auth.local这种本地域名,终端 DNS 必须指向网关,否则解析不了。另一个常见原因是终端开了 HTTPS 优先,浏览器直接走 443,而 hotspot 只拦 80。解决:在login-by里加上https,并配好证书,或者让终端先访问 http 站点。

4.2 认证成功但立刻掉线

现象:输入账号密码后提示成功,但几秒后又被踢回认证页。原因多半是shared-users限制或Session-Timeout太短。解决:查/ip hotspot user profile print里的shared-users,如果是 1,同一账号第二台设备登录会顶掉第一台。再看 RADIUS 返回的Session-Timeout,如果是 60 秒,那就是服务端设的,改服务端。还有一种情况是终端 MAC 变了(比如随机 MAC),ROS 按 MAC 绑定会话,MAC 一变就掉。

4.3 限速不生效,测速还是满速

现象:用户组里写了rate-limit=2M/2M,但认证后测速还是几十兆。原因通常是 RADIUS 返回了更高的限速覆盖了本地,或者用户组没绑对。解决:先/ip hotspot active print detail看当前会话用的哪个 profile,再查 RADIUS 返回的属性。如果服务端没返回限速,本地rate-limit一定生效;如果返回了,以服务端为准。另一个坑是rate-limit单位,写2M是 2Mbps,写2048k也是 2Mbps,但写2m可能被解析成 2kbps,大小写敏感。

4.4 认证后部分网站打不开

现象:认证过了,百度能开,但某些站点超时。原因通常是 MTU 或 DNS 问题。hotspot 默认会改 MTU,如果终端不支持,大包会被丢。解决:在/ip hotspot profile里把mtu设成1500或auto,看终端表现。DNS 方面,如果 hotspot 的dns-name和终端 DNS 冲突,也会导致部分域名解析失败。常见做法是让终端 DNS 指向网关,网关再转发到上游。

4.5 用户列表里一堆未认证会话占着 IP

现象:/ip hotspot active里大量authorized为no的会话,把地址池占满,新终端拿不到 IP。原因是没有清理超时会话。解决:在/ip hotspot里设idle-timeout,比如5m,超过 5 分钟没流量就清掉。另外keepalive-timeout也要设,防止死会话。地址池别设太小,按终端数 1.5 倍留余量。

5. 进阶:用脚本做认证日志与自动放行

跑通之后,我一般会加两样东西:认证日志和自动放行脚本。日志用来追溯谁什么时候上的网,自动放行用来处理“认证前就要访问的内部系统”。

日志方面,ROS 的/log里 hotspot 事件默认是info级别,但默认不写文件。常见做法是开一个disk日志,把hotspot,info写进去,再用脚本定期导出。

# 开 disk 日志,只记 hotspot info /system logging add topics=hotspot,info action=disk # 脚本:每小时把 hotspot 日志导出到 ftp(示例,按需改) /system script add name=export-hs-log source={ /log print where topics~"hotspot" file=hs-log /tool fetch address=10.0.0.200 src-path=hs-log.txt upload=yes \ user=loguser password=logpass mode=ftp dst-path=hs-log.txt }

逻辑说明:topics=hotspot,info只抓认证相关事件,避免日志爆炸。file=hs-log会生成hs-log.txt存在路由器上,再用fetch上传到内部 FTP。mode=ftp是明文,内网用没问题,跨网段建议换sftp或scp。脚本可以挂到/system scheduler里每小时跑一次。

自动放行方面,如果认证前就要让终端访问内部 OA 或打印服务器,可以在 hotspot 的walled-garden里加 IP 或域名。walled-garden的规则在认证前就放行,不弹认证页。

# 放行内部 OA 服务器,认证前可访问 /ip hotspot walled-garden add dst-address=10.0.0.50 action=allow comment="OA server" # 放行整个域名后缀 /ip hotspot walled-garden add dst-host=*.internal.local action=allow

dst-address是精确 IP,dst-host支持通配符。注意walled-garden只放行,不认证,所以别把公网地址加进去,否则等于没认证。

验证方法:配完后,用一台未认证终端访问10.0.0.50,应该能直接打开;访问外网,应该弹认证页。如果内部系统也弹了,检查walled-garden规则顺序,ROS 是按顺序匹配的,第一条匹配就停。

从那以后我每次配 hotspot,都强制先跑一遍walled-garden和idle-timeout,再上用户和限速,顺序反了就得推倒重来。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询