
简介面向网络管理员、无线热点运维人员及路由器系统学习者的ROSRouterOSWeb认证资源包用于解决公共场所Wi-Fi接入的认证页面定制与部署问题。资源共71个文件压缩包仅95KB包含login.html、alogin.html、logout.html、error.html等19个HTML认证页面模板配合21张JPG场景图、18张PNG界面元素、8个GIF动效以及CSS样式表、md5.js脚本可完整搭建自定义热点登录流程。内容覆盖MikroTik ROS 5.20及以上版本的Web认证配置思路涉及认证服务器、热点接口、PAP/CHAP策略等关键环节。已有306人学习下载适合需要快速获取可直接修改使用的热点认证页面资源、并理解其文件组织结构的初学者与实施人员。1. 搜「ROS WEB 认证」时你先要分清是 RouterOS 还是机器人系统在酒店大堂、连锁门店或学校机房的网络改造里「WEB 认证」四个字几乎等于「访客怎么上网」。你搜「ROS WEB 认证」大概率是手里有一台 MikroTik RouterOS 设备想让客人连上 WiFi 后先弹出一个登录页输账密或拿验证码才能出网也有一小部分人会被机器人操作系统 ROS 的检索结果带偏翻半天找不到「认证」在哪毕竟「ros学习」、「鱼香ros一键安装」这类内容在社区里声量太大。这篇文章要讲的是前者MikroTik RouterOS 上的 Web Portal 认证也就是业内常说的 Hotspot。它适合谁适合只有一台路由、没有额外认证服务器的中小网络或者想先用低成本方案把访客网络管控起来的运维。2. RouterOS 的 WEB 认证三种形态Hotspot、Walled Garden、PPPoE 拨号怎么选RouterOS 里能承担「WEB 认证」的机制不止一个。我见过不少人在 Hotspot 和 PPPoE 之间纠结甚至在接口上同时开了几个服务互相打架。先花一点时间把形态分清后面配置才不返工。三种常见形态分别是 HotspotWeb Portal 认证、Walled Garden未认证放行名单和 PPPoE 拨号它们解决的问题表面相似实际工作的网络层级完全不同。2.1 先看认证放在哪一层二层网关认证与三层准入的差别Hotspot 是典型的网关层认证。客户端连上无线或有线后DHCP 从 RouterOS 拿到 IP只要发出 HTTP 请求流量在网关被策略拦截响应被替换成登录页。用户是否已认证由路由器的 Hotspot 活动表Active Table决定跟物理端口、VLAN 都没关系你甚至可以把它理解成「IP 会话的准入控制」。PPPoE 拨号则是三层准入。客户端需要主动发起 PPPoE 会话由 NAS也就是这台 RouterOS完成认证后建立 PPP 链路再获得 IP。它的优点是计费和会话管理非常成熟运营商级系统几乎都用它但缺点也很明显手机对 PPPoE 的支持很差iOS 和 Android 不会主动拨号给客人用基本是自找麻烦。如果再把目光放到交换机上的 802.1X Web 认证那又是另一套体系通常配合企业级 AP 和 Radius 服务器使用接入层设备做认证点。对绝大多数「一台 RouterOS 管整个客网」的场景来说用不上也不该用因为维护成本和终端兼容性都不可控。下面这张表可以直接帮你看清选型方向。认证形态认证层级终端体验手机适配典型场景Hotspot网关层IP 会话打开浏览器自动弹登录页极好系统主动探测酒店、门店、办公室访客Walled Garden网关层URL/端口白名单无感无感未认证放行特定域名PPPoE三层隧道PPP 会话需手动拨号差宿舍、出租屋、企业固定工位2.2 Hotspot 的认证流程从 DNS 劫持到 Cookie 记忆理解 Hotspot 的认证流程不需要把协议细节背下来但顺序必须对。第一步客户端关联 AP 或接入交换DHCP 从路由器拿到 IP网关和 DNS 都指向 RouterOS。第二步客户端打开浏览器访问任意 HTTP 站点这个 80 端口的明文请求被 Hotspot 规则命中RouterOS 返回 511 Network Authentication Required浏览器自动跳到登录页。第三步用户提交账密RouterOS 查本地用户表或转发给 Radius。第四步认证通过后该 IP 被加入 Hotspot Active 表后续流量按用户 Profile 限速和计时同时下发一个 HTTP Cookie避免用户每次重开浏览器都重新输密码。这里有几个参数直接决定体验。Cookie Lifetime 是浏览器免登录凭证的存活时间默认 1 天设置太短会导致用户频繁重登。Idle Timeout 是会话静默回收时间手机息屏两三分钟就掉线多半是它太短。Shared Users 决定同一个账号允许几个终端同时在线一张房卡给两个人用这个值就得大于 1。Session Timeout / Uptime Limit 则是硬性总时长到点必须重新认证常用于卖时长票的场景。整个流程走完后你会在/ip hotspot active里看到一条记录那就是一个真实的在线会话。2.3 选型理由什么场景用 Walled Garden什么场景上 RadiusWalled Garden 翻译成「围墙花园」有点吓人其实语义很朴素——游客不用认证也能访问的白名单。我一般会在这里放三类内容手机系统探测域名、支付平台回调、以及厂商设备应急管理地址。以苹果手机为例iOS 连上 WiFi 后会主动访问captive.apple.com来判断网络是否需要登录如果这个域名不被放行弹窗经常出不来Android 也有对应的connectivitycheck.gstatic.com。这两种域名放行后手机系统的「需要登录」提示才会可靠出现。选型上没有银弹只有匹配。只有一两台设备、几十个用户本地 User 表加 Hotspot 就够了Radius 完全是杀鸡用牛刀多门店、要统一账密、要做计费和到期自动踢人就得把 Radius 接上让认证和计费从设备里抽离出去如果只是想放行一批资源同时登录页只是个品牌展示页那 Walled Garden 配合 Hotspot 的试用功能就能满足。很多人在第一步就做错了——直接照抄别人的 Radius 配置结果本地账号也不建Radius 又没调通最后连登录页都出不来。所以后续配置我会从最朴素的本地认证讲起再把 Radius 作为进阶选项单独展开。3. 用 RouterOS 命令行把 WEB 认证跑起来从地址池到登录页的最小配置我习惯先梳理网络拓扑再动手RouterOS 设备作为网关LAN 口接 AP 或交换机访客网段单独划一个不要跟办公网混在一起。下面给的命令在 RouterOS 6.x 和 7.x 的 CLI 里都能跑个别参数在 7.x 有更名但整体结构没变。如果你习惯用 Winbox把这套命令理解透之后在图形界面里点起来反而更快。3.1 网络规划三件事独立网段、地址池和 DNS先把地址池、接口地址和 DHCP 服务建好这一步做扎实Hotspot 才有载体。以下是三组命令。# 1. 建访客网段的地址池预留 10-200 给 DHCP 动态分配 /ip pool add namepool-guest ranges192.168.88.10-192.168.88.200 # 2. 给 LAN 桥配置网关地址 /ip address add address192.168.88.1/24 interfacebridge-lan # 3. 建 DHCP 服务并把 DNS 强制下发为网关地址 /ip dhcp-server add namedhcp-guest interfacebridge-lan address-poolpool-guest /ip dhcp-server network add address192.168.88.0/24 gateway192.168.88.1 dns-server192.168.88.1地址池为什么用 10-200 而不是整段因为 .1 是网关.2-.9 我习惯留给打印机、AP 管理口这类固定地址设备避免 DHCP 把关键设备地址冲掉。DHCP 服务添加在 bridge-lan 上表示整个桥接网络的终端都能来拿租约。最关键的参数是dns-server192.168.88.1这一步把 DNS 解析权收回到路由器手里后续登录页域名解析、重定向才有掌控力。如果把 DNS 指向 114 或网关之外的公共 DNSHotspot 的跳转链路会断在第一步。租约时间我没写默认 10 分钟对访客网络偏短可以单独调长但这不影响认证逻辑后面想改再改。3.2 创建 HotspotServer Profile 与三条关键命令网络底座就绪后创建 Hotspot 本体。这里有三条命令一条建 Profile一条把服务挂到接口上一条加测试账号。# 1. 定义 Server Profile登录页地址和域名 /ip hotspot profile add namehs-guest hotspot-address192.168.88.1 dns-nameportal.example.local # 2. 在 LAN 桥上启用 Hotspot 服务 /ip hotspot add namehs-guest interfacebridge-lan profilehs-guest # 3. 添加一个测试账号server 参数绑定到刚才的服务 /ip hotspot user add nameguest01 passwordchange-me serverhs-guesthotspot-address是登录页的 IP 地址客户端被重定向时就是跳到这个地址dns-name是登录页域名配了之后客户端访问任意 HTTP 站点都会被重定向到这个域名下不配就用 IP 访问。这里有个细节dns-name需要能被客户端解析如果你内网有自己的 DNS就把portal.example.local这条解析记录加上如果没有直接用 IP 更省事。/ip hotspot add interfacebridge-lan会让服务监听整个桥接口流量后续新增访客 VLAN只要把 VLAN 接口也加进来或者单独再建一个 Hotspot 服务。测试账号的serverhs-guest参数是把用户限定在特定服务内多服务并存时不会被串用。建完之后未认证终端访问任意 HTTP 页面会看到 RouterOS 自带的登录页。这一步先不要急着美化页面先确认「登录 — 上网 — 登出」这条主链路是通的。3.3 用密码票而不是固定账号批量用户生成、限速与到期运营访客网络我从不建议给所有人同一个guest/guest123。固定密码一旦泄露整个网络就失去管控意义。更常见的做法是一次性密码票Voucher客人办理入住时拿一张小票上面是独立的账号密码。用 RouterOS 脚本批量生成非常快。# 批量生成 20 个临时账号密码带 4 位随机数归属 hs-guest :for i from1 to20 do{ \ /ip hotspot user add \ name(ticket- . $i) \ password(T . $i . 9K3) \ serverhs-guest \ profileguest-5M \ }脚本里:for是 RouterOS 的循环语法.用于连接字符串生成的名字是ticket-1到ticket-20。profileguest-5M需要先建好用户 Profile否则会报错。限速和时长都挂在 Profile 上这样同一批账号可以共用一套策略。# 定义限速策略下行 5M上行 2M同账号最多 1 台终端在线会话 4 小时 /ip hotspot user profile add nameguest-5M rate-limit5M/2M shared-users1 session-timeout4h idle-timeout30m关于rate-limit有两种常见误会第一5M/2M的顺序是「下行/上行」即客户端接收 5M、发送 2M别写反第二单位是 bit 而不是 Byte5M是 5Mbps换算下载速度要除以 8。shared-users1在卖房卡场景很实用既能防止一个账号拖一堆设备也能在有人蹭网时快速定位。session-timeout4h到点强制重新认证这和idle-timeout是两回事——前者是硬时长后者是静默清理。3.4 验证最小闭环看活动用户和流量日志配置落完别急着收工先用三条命令确认服务真的在工作。# 查看在线用户重点看 up-time 和 bytes-in/out /ip hotspot active print detail # 查看免登录 Cookie确认浏览器记住了会话 /ip hotspot cookie print # 查看认证过程日志失败原因会在这里 /log print where topics~hotspot/ip hotspot active print detail是现场排障的第一道门如果用户输完账密但active里没有新记录说明认证没通过去日志里翻原因如果active有记录但网页打不开问题在防火墙或 DNS不在认证。/ip hotspot cookie print看的就是 2.2 里说的免登录凭证Cookie 过期但会话还在时用户重开浏览器会重新弹登录页但输入一次账密又能立刻恢复这是 Cookie 机制的正常表现不是故障。日志里常见的错误码无非是账密错误、用户被禁用、限速触发对应处理后基本就能闭环。4. WEB 认证上线后常见翻车点登录页不弹、老断线、用户超时的排查清单Hotspot 本身不是黑匣子但现场踩坑的次数多了我总结出一套固定排查顺序先看 Active 表有没有命中再看 DNS 是不是下发到网关最后怀疑 HTTPS 拦截和手机系统探测。下面这 5 个问题基本覆盖了 80% 的现场状况每一条我都按「现象 → 原因 → 解决」记录。4.1 登录页不弹HTTP 拦截对 HTTPS 和 App 失效现象电脑打开百度能正常弹出登录页手机打开微信、抖音这类强制 HTTPS 的 App 却一直转圈认证页完全不出来。原因Hotspot 的透明拦截只处理 80 端口的明文请求443 密文流量会被直接放行RouterOS 不做中间人解密。App 内部不发 HTTP 明文请求自然触发不了重定向。解决先确认 Walled Garden 里放行了手机系统探测域名见 4.3让系统先弹认证窗同时在前台、房间提示卡上写明「第一次连接请打开手机浏览器访问任意网页」。不要指望给 HTTPS 做透明注入这既不是 RouterOS 的内置能力在访客网络上做中间人解密也是给自己找麻烦。4.2 手机息屏后频繁重登Idle Timeout 与随机 MAC 双重作用现象安卓手机息屏几分钟再亮WiFi 还连着却要重新登录同一台手机一天要登三四次。原因两个因素叠加。一是息屏后无线进入省电模式流量静默超过 Idle Timeout默认很短会话被回收二是 Android 对每个 SSID 默认开启随机 MAC只要触发重连设备换了个 MAC 身份路由器认不出这是刚才那个已认证终端。解决把用户 Profile 的idle-timeout调到 30 分钟以上cookie-lifetime同步调大这样即使用户临时离线回来也在免登录周期内。MAC 随机化的问题只能引导用户在手机端把该网络设置为「使用设备 MAC」路由侧能做的是不以 MAC 作为唯一标识维度做限速绑定别把 MAC 写死在账号上否则随机 MAC 用户永远登不进去。4.3 苹果设备连上不弹窗Captive Network Assistant 探测域名现象iPhone 连上 WiFi 后图标正常但没有弹出「需要登录网络」的提示手动打开浏览器有时也打不开Android 偶尔也有类似情况。原因iOS 的 Captive Network AssistantCNA会主动访问captive.apple.com判断网络是否需要认证Android 则是访问connectivitycheck.gstatic.com和generate_204。这些域名如果没被放行系统探测请求在网关这里被 Hotspot 策略截住反而破坏了自动弹窗逻辑。解决把这些探测域名加入 Walled Garden放行未认证访问。# 放行苹果和安卓的系统连通性探测域名 /ip hotspot walled-garden add dst-hostcaptive.apple.com actionallow /ip hotspot walled-garden add dst-hostconnectivitycheck.gstatic.com actionallow /ip hotspot walled-garden add dst-hostgenerate_204 actionallowdst-host按域名匹配actionallow表示未认证用户也能访问。配完后让测试手机忘记网络再重连系统会自动弹出认证提示。这一步是苹果体验的生死线我在多个现场验证过不放行这组域名iPhone 用户大概率会投诉「连不上网」。4.4 用户改 DNS 或开静态 IP 绕过认证把出口限制在网关现象有用户手动把手机 DNS 改成公共 DNS登录页时而能出时而出不来还有人配了静态 IP完全不经过 DHCP认证环节直接跳过去。原因Hotspot 拦截 IP 层面流量仍然有效但 DNS 被外部化之后登录页域名解析到错误地址重定向链就断了。静态 IP 用户如果自己填了个网段内地址且没触发 Hotspot 的会话建立确实能绕过验证这是网关认证这类方案的天然边界。解决DHCP 强制下发网关 DNS同时把 RouterOS 的防火墙规则收口——只允许「已认证用户」和「established 连接」访问外网未认证用户除了 DNS、DHCP 和 Walled Garden 白名单之外一律拦截。我一般会在/ip firewall filter里加两条规则一条放行 Hotspot 已认证流量一条把其他转发流量 DROP 掉。别指望靠一个开关杜绝绕过网关认证本来就不是安全边界它是「合规边界」——让审计溯源时有账可查。4.5 计时票时长缩水shared-users 与会话维度现象一张 8 小时的票两台设备轮流用2 小时就提示在线数达到上限另一张 24 小时票第二天一早打开还是要重新登录。原因shared-users默认是 1限制的是「同时在线终端数」两台设备轮流用本质上不同时在线但因为会话保持时间没到第一台设备的旧会话还占着名额不对——更常见的情况是第二台设备登录时把旧会话踢掉或者账号并发限制被触发。而 24 小时票第二天要重登是因为cookie-lifetime默认只有 1 天浏览器免登录凭证过期不代表流量额度用完。解决按真实业务调整三个参数。设备轮流用就把shared-users调到 2 或 3卖天数票就把cookie-lifetime、idle-timeout调得比票时长还长一些同时保证session-timeout不为空卖小时票则相反session-timeout是硬性总时长到点必须重新认证。这三个值分开调互相独立别指望只改一个参数解决所有到期问题。5. 把 WEB 认证做得像运营级Radius 对接、页面定制与限速策略跑通最小闭环之后接下来做的事才是让方案能真正交给运营团队去用的关键。我按做项目时的顺序来先定制登录页让品牌和提示语到位再决定要不要接 Radius最后把限速和到期策略梳理成一套可以复制的模板。5.1 登录页定制改 HTML 模板而不动核心认证逻辑RouterOS Hotspot 的登录页本质是一组 HTML 模板文件常见有index.html、login.html、login-error.html、logout.html、radvert.html。正常做法是把模板上传到 Profile 指定的 HTML 目录然后刷新页面生效。登录表单的核心结构很简单但有几个字段不能乱改。form methodpost action/login input typehidden namedst value$(link-orig) input nameusername placeholder请输入账号 input namepassword typepassword placeholder请输入密码 button typesubmit登录上网/button /form表单必须post到/login这是 RouterOS Hotspot 的固定动作路径隐藏字段dst用来保存用户最初想访问的地址登录成功后跳转回去$(link-orig)是模板变量会被 RouterOS 替换成实际目标 URL。username和password是标准字段名改了名字就收不到参数。定制时品牌 Logo、联系方式和上网条款可以任意加但表单逻辑这块保持原样最省事。模板文件修改后不需要重启 Hotspot 服务浏览器强制刷新就能看到新版但终端浏览器有缓存时用户可能看到旧页面可以在 HTML 头部加上禁止缓存的 meta 标签。5.2 对接 Radius统一账号、计费与到期踢人门店数量超过 5 家或者需要在后台统一管理用户时长本地 User 表就不够用了。Radius 对接是标准做法RouterOS 这一侧只需要三条命令。# 1. 添加 Radius 服务器只用于 hotspot 服务 /radius add servicehotspot address192.168.50.10 secretradius-secret # 2. 开启接收 Radius 下发的断开报文用于到期踢人 /radius incoming set acceptyes port3799 # 3. 让 hotspot profile 把认证和计费都交给 Radius /ip hotspot profile set [find namehs-guest] radiusyesservicehotspot限定该 Radius 只服务 Hotspot不对 PPPoE 等其他服务生效。secret要和 Radius 服务端配置的密钥一致不一致时认证会静默失败。acceptyes port3799的意义是让 RouterOS 能收到来自 Radius 的 Disconnect-Message也就是用户时长用尽、管理员手动踢人时由服务器主动断掉会话。radiusyes开启后RouterOS 本地 User 表依然存在但认证优先级会先走 Radius本地用户表只作为调试备用。Radius 服务端我常用的方案是 FreeRADIUS需要配置 NAS 的 IP 和 Secret然后在用户库里下发与限制相关的属性。下面这张表是通过 Radius 下发限速和时长最常用的属性属性名是 MikroTik 私有的服务端装了 RouterOS 字典就能识别RADIUS 属性作用示例Mikrotik-Rate-Limit下发带宽策略2M/4MSession-Timeout会话总时长秒3600Idle-Timeout空闲回收秒1800Acct-Interim-Interval计费上报间隔秒60计时准确性依赖Acct-Interim-Interval设得太久客户找前台说「我时长还剩好多」时你连实时数据都没有但设得太短会增大 Radius 服务器压力一般 60 秒是一个平衡点。5.3 限速与到期处理本地 profile 与 RADIUS 属性的优先级限速策略有两个落点本地 User Profile 和 Radius 下发属性。两者同时存在时以 Radius 下发的属性为准本地 Profile 作为兜底。客房网络的典型分档是「基础 5M/2M、高级 10M/5M、VIP 不限速」我一般在 Radius 用户库里按套餐分组而不是在 RouterOS 里建一堆 Profile。本地侧要注意rate-limit的解析细节。5M/2M的斜杠前后分别是下行和上行M 是 Mbpsk代表 kbps大小写都认但K在这里是 1000 还是 1024 在不同版本里有差异别依赖这个精确值做计费。另外Hotspot 的速率限制是基于单会话的同一个账号开两台设备每台都能跑满 Profile 限速值总带宽会翻倍所以 QoS 要求严格的场景要把shared-users和出口总带宽的 Queue 一起做。5.4 多门店统一配置把脚本导出和导入作为后悔药配置做复杂之后最怕的是改坏。RouterOS 的/export命令是最实用的后悔药它能把当前配置导出成一段可再次执行的 CLI 脚本新设备上线或故障回滚都靠它。# 导出全部配置到磁盘文件 /export filehotspot-backupfile后面不需要带路径文件会生成在 RouterOS 的 Files 列表里通过 Winbox 或 FTP 下载到本地保存。恢复时把.rsc文件上传回设备在命令行执行/import hotspot-backup.rsc。需要注意两点第一导出的文件会包含脚本里的机密信息比如 Radius Secret、用户密码保存时要当敏感文件对待第二跨大版本导入比如 6.x 导到 7.x会有个别命令不兼容导入后一定要回头检查 Hotspot Profile 和 Radius 配置不能直接假设「导入成功就是配置一致」。6. 验证一台 Hotspot 到底好不好用用 curl 和日志复现真实用户路径我从不用「能打开登录页」作为验收标准。真正该验证的是三个动作未认证拦截、认证后放行、到期回收。用 curl 就能把用户路径完整走一遍适合在部署完成后做冒烟测试。# 1. 未认证时访问 HTTP 页面应返回 511 或重定向到登录页 curl -k -v -I http://192.168.88.1/ 21 | head -20 # 2. 模拟浏览器提交登录表单保存返回的 Cookie curl -s -c /tmp/hs.cookie \ -d usernameguest01passwordchange-medsthttp://192.168.88.1/ \ http://192.168.88.1/login # 3. 携带 Cookie 再访问外网 HTTP 页面应返回 200 curl -s -b /tmp/hs.cookie -o /dev/null -w %{http_code}\n http://example.com/第 1 步看到 511 或登录页跳转说明 Hotspot 策略已经接管流量第 2 步登录成功后RouterOS 会返回一个包含 Set-Cookie 的响应-c /tmp/hs.cookie把它存下来第 3 步用同一个 Cookie 请求外网返回 200 说明会话已放行。如果第 3 步还是 511回 RouterOS 里查/ip hotspot active print detail确认登录后有没有生成会话记录。现场排障时这套 curl 比浏览器干净——浏览器有缓存、有代理插件不可控因素太多。验证通过后我通常会在 RouterOS 里把日志确认一遍/log print where topics~hotspot能看到认证成功和失败的全部记录。我做网络交付有个习惯每次上线前让两个人同时用一台 Android、一台 iPhone 做真实连网测试再跑一遍上面的 curl两点都过了才敢把网络交给运营。上次我以为配置万无一失结果 iPhone 怎么都不弹窗最后查 Walled Garden 才发现少放行了一个系统探测域名。这类小坑记进排查清单就再也不会踩第二次。希望帮到你。本文还有配套的精品资源点击获取