简介这份资源面向网络管理员与RouterOS学习者聚焦ROSRouterOS的Web认证Hotspot功能帮助解决公共场所无线接入的授权与计费问题。压缩包共71个文件约95KB以19个html登录与状态页面、21个jpg与18个png界面素材、8个gif图标为主另含css样式表、md5.js脚本、WISPAccessGatewayParam.xsd及错误日志文本构成一套可直接套用的认证页面模板。内容覆盖登录、跳转、状态、注销等完整流程页面并附带错误提示与日志文件便于对照排查认证失败、页面跳转异常等常见问题。已有306人学习下载。读者可借此快速搭建热点认证界面理解认证服务器、热点接口与认证策略的配合方式并在此基础上定制品牌化登录页与访问控制策略。1. ROS WEB认证一张被低估的知识地图很多人第一次接触 ROS WEB 认证以为它只是路由器上勾选一个“Hotspot”就能跑起来的功能。真到要交付一个能稳定运行、能对接外部计费、能自定义登录页面的认证系统时才发现它横跨了网络协议、Web 服务、模板渲染、用户管理、计费对接好几个模块。这张地图大致可以分成四块底层是 Hotspot 网关与 RADIUS 交互中间是 HTTP 拦截与重定向流程上层是登录页模板与参数传递最外层是用户数据、计费策略与日志排查。适合谁看适合已经会配基础 Hotspot、但一遇到“认证页不跳转”“登录后不跳回原页面”“计费不准”就卡住的人。梳理下来会发现真正难的不是某一个命令而是这几层之间的数据怎么流动、状态怎么保持。2. 认证流程拆解从客户端请求到放行上网2.1 未认证客户端的 HTTP 请求到底经历了什么理解 ROS WEB 认证第一步是把“用户打开浏览器”到“看到登录页”之间发生的事拆开。客户端连上无线后会先拿到一个 IP但这个 IP 在 Hotspot 里处于未认证状态。此时客户端发出的任何 HTTP 请求都会被 Hotspot 的规则拦截并重定向到路由器本地的登录页面。这个过程不是简单的 302而是涉及 DNS 解析、HTTP 拦截、本地 Web 服务响应三个环节。梳理下来会发现最容易忽略的是 DNS 环节。如果客户端用的是自定义 DNS或者 DNS 请求本身没有被正确拦截浏览器可能直接报“无法解析域名”而不是跳到登录页。所以排查“登录页不出现”时第一步不是看模板而是确认 DNS 请求是否被 Hotspot 接管。# 查看 Hotspot 服务端配置确认 DNS 相关参数 /ip hotspot print detail # 关注 address-pool、dns-name 以及 login-by 这几个字段dns-name决定了登录页使用的域名login-by决定了允许哪些认证方式。如果login-by里没有勾选 HTTP PAP 或 HTTP CHAP浏览器提交的账号密码就不会被正确处理。参数改完后需要清理客户端 ARP 表和 DNS 缓存否则旧状态会干扰测试。2.2 登录页模板与参数传递的关键字段登录页不是随便写个 HTML 就能用。ROS 的 Hotspot 会在渲染登录页时注入一批变量比如$(link-login-only)、$(error)、$(username)。这些变量决定了表单提交到哪个地址、错误信息怎么显示、用户名是否回填。很多人从网上下载一套模板直接替换文件结果登录后跳转异常就是因为模板里写死了 action 地址没有用变量。重点在于三个字段表单的action必须指向$(link-login-only)隐藏域里要带上dst参数用来记录用户原本想访问的地址如果启用了 HTTPS 重定向还要处理ssl相关变量。梳理下来会发现登录后能不能跳回原页面几乎全看dst有没有正确传递。!-- 登录表单的核心结构注意 action 和隐藏域 -- form namelogin action$(link-login-only) methodpost input typehidden namedst value$(link-orig) / input typehidden namepopup valuetrue / input typetext nameusername value$(username) / input typepassword namepassword / input typesubmit value登录 / /form$(link-orig)是用户原始请求的 URL$(link-login-only)是仅用于登录提交的地址。这两个变量不能混用否则会出现“登录成功但跳回登录页”的循环。参数说明就这些改模板时逐项对照即可。2.3 RADIUS 对接与计费策略的衔接点当 Hotspot 本地用户不够用或者需要对接外部计费系统时就要引入 RADIUS。ROS 作为 RADIUS 客户端把认证请求转发给外部服务器服务器返回 Accept 或 Reject同时可以下发速率限制、会话超时等属性。重点在于本地 Hotspot 用户和 RADIUS 用户的优先级、计费开始时间是从认证成功算还是从拿到 IP 算、中断后重连是否重新计费。最容易翻车的地方是计费开始时间。如果 Hotspot 的login-by同时启用了 HTTP PAP 和 MAC 认证而 RADIUS 那边按 MAC 认证也计费就会出现用户还没打开浏览器就被扣时长的情况。梳理下来建议在 RADIUS 侧明确区分认证类型或者在 Hotspot 侧关闭不需要的登录方式。# 配置 RADIUS 客户端 /radius add servicehotspot address192.0.2.10 secrettesting123 # 在 Hotspot 服务端启用 RADIUS 认证 /ip hotspot profile set [find] use-radiusyesservicehotspot表示只对 Hotspot 流量生效secret要和服务器端一致。改完后用/radius monitor看请求和响应计数如果只有请求没有响应优先查网络连通性和共享密钥。3. 模板与页面定制登录页、错误页与跳转逻辑3.1 登录页模板的文件结构与变量清单ROS 的 Hotspot 模板通常放在hotspot目录下核心文件包括login.html、status.html、error.html、logout.html。每个文件里可用的变量不同比如status.html里能拿到$(uptime)、$(bytes-in)而login.html里主要是$(error)、$(username)、$(link-login-only)。很多人把变量写错文件导致页面显示空白或报错。梳理下来建议先列一张变量对照表改模板时逐项核对。重点注意$(if error)这种条件块它决定了错误信息是否显示。如果模板里没有这个条件块用户输错密码后页面不会有任何提示体验很差。变量名可用页面作用$(link-login-only)login登录表单提交地址$(link-orig)login用户原始请求地址$(error)login错误提示文本$(username)login回填用户名$(uptime)status在线时长$(bytes-in)status下载字节数3.2 登录后跳转与 HTTPS 重定向的注意点登录成功后Hotspot 会根据dst参数把用户重定向回原地址。如果dst为空就跳到status.html。这里最容易忽略的是 HTTPS 请求用户原本访问的是 HTTPS 站点Hotspot 无法直接拦截并重定向因为证书不匹配。此时浏览器会报证书错误用户看到的是安全警告而不是登录页。解决办法通常有两种一是启用 Hotspot 的 HTTPS 重定向功能让路由器生成一个自签名证书二是在登录页里引导用户手动访问一个 HTTP 地址。梳理下来前者配置简单但仍有证书警告后者体验稍好但需要额外说明。重点在于无论哪种方式都要在login.html里处理好ssl变量否则跳转逻辑会乱。# 启用 HTTPS 重定向 /ip hotspot profile set [find] login-byhttp-chap,http-pap /ip hotspot set [find] ssl-certificatehotspot-certssl-certificate指定使用的证书没有证书时 HTTPS 重定向无法工作。改完后用手机浏览器访问一个 HTTPS 站点看是否跳到登录页。3.3 错误页与注销页的联动错误页和注销页经常被当成附属品随便放个链接就完事。实际上错误页要能区分“认证失败”“会话超时”“IP 冲突”几种情况注销页要能正确清理会话并提示用户。如果注销页只是静态 HTML用户点完注销后浏览器缓存里还有登录状态再访问时可能直接放行。重点在于注销页要调用$(link-logout)变量并且配合 Hotspot 的logout服务。梳理下来建议在注销页加一个倒计时跳转跳回登录页避免用户停留在空白页。错误页则要根据$(error)的内容做简单分支至少让用户知道是密码错了还是账号过期了。4. 用户管理与计费本地用户、RADIUS 与限速4.1 本地用户与用户配置文件的区别ROS 里有两个容易混淆的概念/ip hotspot user和/ip hotspot user profile。前者是具体账号后者是一组策略模板比如限速、会话超时、空闲超时。很多人只建用户不建配置文件结果所有用户共享默认策略无法做差异化限速。梳理下来正确的顺序是先建 profile再建 user并在 user 里引用 profile。重点注意rate-limit字段它决定了上下行速率。如果写错单位比如把1M写成1m限速不会生效用户会跑满带宽。# 先建用户配置文件 /ip hotspot user profile add namebasic rate-limit2M/2M session-timeout1h # 再建用户并引用配置文件 /ip hotspot user add nameuser1 passwordpass1 profilebasicrate-limit2M/2M表示上行 2M、下行 2M。session-timeout1h表示一小时后强制下线。改完后用/ip hotspot active print看在线用户是否应用了正确策略。4.2 RADIUS 属性下发与限速的优先级当同时使用本地 profile 和 RADIUS 下发属性时优先级容易搞混。通常 RADIUS 下发的属性会覆盖本地 profile但具体行为取决于 Hotspot 的配置。如果 RADIUS 返回了Mikrotik-Rate-Limit而本地 profile 也有rate-limit最终生效的是 RADIUS 的值。最容易忽略的是属性格式。RADIUS 下发的速率限制字符串必须符合 ROS 的格式比如2M/2M否则会被忽略。梳理下来建议在 RADIUS 侧统一管理限速本地 profile 只做兜底。测试时用/ip hotspot active print detail看实际生效的速率。4.3 计费开始时间与中断重连的处理计费开始时间通常以认证成功为准但如果是 MAC 认证用户可能还没打开浏览器就已经在线。中断重连时如果 RADIUS 侧没有做会话恢复会重新计费。重点在于Acct-Start和Acct-Interim-Update两个计费报文的处理。梳理下来建议在 RADIUS 侧配置Acct-Interim-Update间隔比如每 5 分钟一次这样即使中断也能根据最后一次更新估算时长。Hotspot 侧则要确保radius-accounting已启用否则不会发送计费报文。# 启用 RADIUS 计费 /ip hotspot profile set [find] radius-accountingyes # 查看计费报文发送情况 /radius monitor 0radius-accountingyes表示发送计费报文。如果monitor里只有认证请求没有计费请求检查service是否包含hotspot。5. 易漏点与易错点认证不生效的常见原因5.1 易漏点DNS 拦截与客户端缓存易漏点 → 为什么漏 → 怎么补DNS 拦截没生效客户端直接用自定义 DNS 解析导致登录页不跳转。很多人只检查 Hotspot 配置忘了客户端可能手动设了 DNS。补法是在 Hotspot 里强制dns-name并测试时清理客户端 DNS 缓存。5.2 易错点模板变量写错文件易错点 → 为什么错 → 怎么补把$(uptime)写到login.html里页面渲染时变量为空显示异常。原因是不同页面可用变量不同。补法是改模板前先查变量对照表改完后用浏览器开发者工具看渲染结果。5.3 易漏点HTTPS 重定向的证书警告易漏点 → 为什么漏 → 怎么补用户访问 HTTPS 站点时看到证书警告以为认证坏了。原因是自签名证书不被浏览器信任。补法是提前在登录页说明或者引导用户先访问 HTTP 地址。5.4 易错点限速单位与优先级易错点 → 为什么错 → 怎么补rate-limit写成1m而不是1M限速不生效。原因是 ROS 对单位大小写敏感。补法是统一用大写M或k并在active里确认实际生效值。5.5 易漏点计费报文未启用易漏点 → 为什么漏 → 怎么补只配了认证没配计费RADIUS 侧看不到时长。原因是radius-accounting默认关闭。补法是显式启用并用monitor确认报文发送。6. 复习清单从配置到排查的查漏补缺路径复习 ROS WEB 认证建议按“配置 → 模板 → 用户 → 计费 → 排查”五步走一遍。配置阶段重点看 Hotspot profile 里的login-by、dns-name、radius-accounting三个字段模板阶段重点核对login.html的 action 和隐藏域用户阶段重点确认 profile 引用和限速单位计费阶段重点看 RADIUS 的Acct-Start和Interim-Update排查阶段按“DNS → 模板 → 用户 → RADIUS”顺序逐层排除。检查项命令或位置预期结果DNS 拦截/ip hotspot print detaildns-name已设置登录表单login.htmlaction 为$(link-login-only)用户限速/ip hotspot active print速率与 profile 一致计费报文/radius monitor 0有 Acct 请求错误提示login.html包含$(if error)块查漏补缺时最容易忽略的是“改完配置没清缓存”。Hotspot 的状态会缓存在客户端和路由器两侧改完dns-name或模板后最好重启 Hotspot 服务并让客户端断开重连。另一个习惯是每次改模板前先备份原文件改完后用手机和电脑各测一次因为不同浏览器对重定向和证书的处理不一样。从那以后我每次调 Hotspot 认证都强制走一遍“DNS → 模板 → 用户 → RADIUS → 计费”的检查链哪怕只是改了一个按钮文字。这套流程帮我省掉了很多次“明明配置没错但就是不生效”的玄学时间。希望帮到你。本文还有配套的精品资源点击获取