☰
RouterOS WEB认证实战:Hotspot登录页、免认证与限速配置
2026/10/6 16:32:17 网站建设 项目流程

简介:面向公共场所无线网络接入控制场景,这份RAR压缩资源聚焦ROS(RouterOS)的Web认证功能,适合网络管理员、运维工程师以及正在学习MikroTik路由器热点认证的读者。压缩包共71个文件,整体仅95KB,包含登录、注销、错误、重定向、状态提示等HTML页面模板;同时配有CSS样式表、JS脚本以及JPG/PNG/GIF图片素材(其中图片素材数量较多,用于登录页面背景、按钮和提示图标),便于自定义认证门户的界面风格和品牌元素;另有TXT错误说明与XSD接口定义文件,可辅助排查认证异常并理解后台接口格式。已有306人学习下载。通过这套资源,读者可以直接获得一套现成的ROS热点登录页面和配套素材,直观理解页面跳转、表单提交、用户状态反馈等关键环节。同时还能参照文件结构替换或调整自身网络的认证界面,快速搭建符合运营需求的公共Wi-Fi认证入口。

1. ROS WEB认证:先分清是哪个世界

“ROS WEB认证”在搜索框里有两副面孔。一部分人想找的是机器人操作系统 ROS 的认证节点,想看节点间怎么鉴权;更多的人是手边真有一台 MikroTik 的 RouterOS 设备,想让访客连上 WiFi 后先看到登录页,输入房间号或工号才能上网。这篇讲的是后者。ROS 是 RouterOS 的常用缩写,这类 WEB 认证常被叫作 Hotspot 或强制门户(Captive Portal),本质不是一道安全墙,而是一套流量引导机制:网关把未认证终端发出的网页请求截住,重定向到一个本地页面,认证通过后才放行。它解决的是酒店、民宿、公寓、园区访客网最实际的问题——谁、什么时间、用哪个账号、占了多大带宽都有迹可查,还能按套餐限速、按日期到期。适合正在选型测试的运维、做访客 WiFi 集成的工程商,以及想给自己门店加一道登录门槛的老板。

2. 为什么是 Hotspot:三个方案对比与认证重定向原理

很多第一次接触这个需求的人会问:ROS 里能实现 WEB 认证的又不只 Hotspot,为什么最后都选它?不把选型和机制搞明白,后面配置出问题就不知道往哪里查。这一章把最常见的选择路径和认证链路拆开讲清楚。

2.1 三个备选方案:PPPoE、802.1X 与 Hotspot 怎么选

在 RouterOS 上做接入认证,常见做法有三种:PPPoE、802.1X、Hotspot,也就是 WEB 认证。三者定位完全不同,选错会让现场运维痛不欲生。

方案客户端要求适合场景主要问题
PPPoE手动建拨号连接运营商宽带、包月账号访客不会配置,手机体验差
802.1X终端需支持并配置企业有线接入手机配置麻烦,证书部署复杂
Hotspot WEB认证任意浏览器,系统自动弹窗访客 WiFi、酒店、校园、门店HTTPS 站点无法直接重定向,需引导

PPPoE 方案看起来最成熟,但它把拨号动作交给了终端用户。酒店客人不会在手机里新建一个 PPPoE 连接,门店顾客更不会。802.1X 在企业有线网络里是标准做法,可一旦面对访客和手机,光是“安装证书”这一步就能劝退九成人。Hotspot 的优势在于终端零配置——手机连上 WiFi 后系统会自动探测是否需要登录,然后弹出认证页面。这也是为什么在 RouterOS 语境里搜“WEB认证”,最后几乎都落到 Hotspot 上。这里要提醒一句:ROS 是 RouterOS 的缩写,如果你在找机器人操作系统那套 ROS 学习资料,这个标题把你带到了另一个世界。

2.2 认证链路拆解:从 DHCP 到 Captive Portal 探测

Hotspot 的完整认证链路可以拆成四步看。第一步,终端连上 WiFi 或有线口,通过 DHCP 拿到 IP、网关、DNS。第二步,终端发起任意 HTTP 请求,RouterOS 拦截了未认证设备发往 80 端口的 TCP 连接,直接返回 302 跳转,把浏览器导向本地登录页。第三步,终端在登录页输入账号密码,提交给 RouterOS 的 hotspot 服务。第四步,服务校验通过后,把这个终端的 IP-MAC 状态标记为 authorized,后续流量正常转发。

这里有个关键机制值得多说一句:手机连上 WiFi 后为什么会自动弹窗?原因是 Android 和 iOS 都有 Captive Portal 探测机制,系统会向固定的 HTTP 地址发送探测请求,用来判断当前网络是否需要认证。RouterOS 把这类探测请求也一并重定向到了登录页,手机收到响应后就知道“这个 WiFi 需要登录”,于是自动弹出横幅。对终端设备来说,这套认证过程更像一个黑匣子:连上 WiFi 就知道该弹窗,但背后的重定向逻辑用户完全无感。

有一点是这个机制的天然边界:HTTPS 流量没法被透明重定向。TLS 握手发生在 HTTP 请求之前,网关不能解密用户流量,也就没法把“打开任意网站”的请求改写成登录页。所以纯 HTTPS 站点(比如微信、支付宝)不会自动跳到认证页。这不是配置错误,是机制限制,后面排查章节会再展开。

2.3 先记住这几个参数:地址池、dns-name、session 与 keepalive

不用背全 Hotspot 的所有参数,真正影响日常运行的是四个:address-pool、dns-name、session-timeout、keepalive-timeout。address-pool 决定给未认证用户发放哪个网段的 IP,必须和 DHCP 保持一致。dns-name 是认证服务的对外名称,相当于这台路由器对外宣传的“登录页域名”。session-timeout 是认证后的最长在线时长,到期后强制重新认证。keepalive-timeout 是空闲多久断开会话,用户半天没流量,会话就被回收。

参数作用常用取值
address-pool未认证用户 IP 池与 DHCP 网段一致
dns-name登录页对外域名建议用内部域名,方便记忆
session-timeout认证会话最长时长按套餐定,8h / 24h / 7d
keepalive-timeout空闲断开阈值建议 5m,太短掉线频繁,太长浪费会话资源

我一般会在上线前用一条命令把当前生效值全部拉出来核对一遍,避免 Web 界面和命令行配置不一致:

/ip hotspot print detail

重点看 session-timeout 和 keepalive-timeout 的数值。门店访客网络 session-timeout 设 24h 就够,酒店可以设到套餐截止时间;办公访客网建议 8h,避免隔夜不用的设备长期占着会话。

3. 跑通最小 Hotspot:从零到认证成功的完整命令

原理聊完,这一章直接上手。目标是让一台全新 RouterOS 设备在十分钟内跑起一个能用的认证环境:访客连上 WiFi,打开网页看到登录页,输入账号密码,顺利上网。

3.1 最小部署:四条命令起一个可用认证服务

假设路由器上的 bridge1 已经建好,并且是给访客网络用的桥接接口。手工配置 Hotspot 只需要四条命令,先把地址池、DHCP 和认证服务串起来:

/ip pool add name=hs-pool ranges=192.168.100.2-192.168.100.254 /ip dhcp-server network add address=192.168.100.0/24 gateway=192.168.100.1 dns-server=192.168.100.1 /ip dhcp-server add name=hs-dhcp interface=bridge1 address-pool=hs-pool /ip hotspot add name=hs interface=bridge1 address-pool=hs-pool

第一条命令创建地址池,范围避开网关 .1。第二条命令让 DHCP 知道网关和 DNS 都指向路由器自身,这样才能保证用户后续的 DNS 请求也被路由器接管。第三条命令把 DHCP 服务挂到 bridge1 上。第四条命令是这个方案的核心:在 bridge1 上启用 Hotspot,并把刚才的地址池绑定给它。

RouterOS 还提供了交互式向导/ip hotspot setup,按提示选接口、输入地址池范围就能完成同样的事情。我的习惯是:测试环境用向导,交付环境用手工命令。手工命令可以存成脚本,新设备进场直接跑一遍,避免在向导里点错选项。Hotspot 启用后系统会自动生成防火墙和 NAT 规则来配合重定向,这一步不需要手工干预。

这里有个容易踩的坑:如果这台设备之前被人手动清空过防火墙规则,Hotspot 的自动规则可能不完整。启用后最好检查一下规则链里有没有 hotspot 相关的条目,具体命令放到排查章节再说。

3.2 创建用户与 profile:密码、限速与到期时间一次配好

认证服务起来之后,下一步就是建用户。RouterOS 的用户管理逻辑是两层:profile 定义一组策略(限速、有效期、共享连接数),user 是具体的账号密码,挂在某个 profile 下面。先建 profile 再建用户:

/ip hotspot user profile add name=vip validity=7d rate-limit=1024/2048 /ip hotspot user add name=room801 password=2024 profile=vip

第一条命令创建了一个叫 vip 的套餐:有效期 7 天,限速 1024/2048。这里的 rate-limit 格式是 rx/tx,单位是 kbps,rx 是用户下载方向,tx 是上传方向。1024/2048 代表下载 1Mbps、上传 2Mbps,实际项目里按运营商带宽反着填就行,别把上下行搞反。validity 支持 1h、7d、30d 这类写法,到期的用户自动失效。

第二条命令创建了一个具体用户 room801,密码 2024,套用 vip 套餐。如果只是临时测试,直接用默认 profile 建一个简单用户就够了:

/ip hotspot user add name=demo password=demo123 profile=default

这里有一个常见误用:rate-limit 写成“1024k/2048k”或者“1M/2M”。RouterOS 的部分版本能识别带单位的写法,但为了脚本通用,我一般直接写纯数字,单位就是 kbps,不会有歧义。

3.3 上线验证:active 表、host 表与手机实测

配置完成后不要急着宣布成功,先看两张表。在命令行执行:

/ip hotspot active print /ip hotspot host print

第一张表 active 列出当前已经通过认证的会话,能看到用户名、IP 地址、上线时长。第二张表 host 列出网段里所有出现过 DHCP 请求的终端,包括还没认证的,以及它们的流量计数。用手机连上 WiFi,打开任意 HTTP 页面,输入 demo 账号,然后回来看 active 表有没有多出一条记录。有记录就说明认证链路通了。

再做一个更贴近日常的动作:手机开飞行模式再关掉,重新连接 WiFi。正常情况下系统会在几秒内弹出“需要登录网络”的横幅。如果弹出的登录页能正常提交,整条链路就验证完毕。如果手机直接打开了微信、抖音这类纯 HTTPS 应用,看不到登录页,这不代表配置失败,是 HTTPS 重定向的天然限制,下一章会专门讲这个现象。

4. 把登录页做成能用的样子:模板改版、批量建号与免认证

最小系统跑通了,接下来才是交付阶段真正费功夫的部分:登录页要能看、账号要能批量管、内网设备要能免认证。这一章把这三种常见需求逐个落地。

4.1 改登录页:三个模板变量与一套完整表单

RouterOS 的默认登录页是自带的,样式简陋且一眼就能看出是路由器厂商的页面。真实交付时客户一定会要求放上自己的 LOGO、服务条款或者联系方式。默认页面文件存放在 Files 里的 hotspot 目录,核心文件是 login.html。

自己改登录页,真正需要掌握的只有三个模板变量:$(link-login-only)、$(error)、$(link-login)。写一个最简可用表单:

<form name="login" action="$(link-login-only)" method="post"> <input name="username" type="text" placeholder="工号/房号"> <input name="password" type="password" placeholder="密码"> <button type="submit">连接网络</button> </form> <p class="error">$(error)</p>

$(link-login-only)是表单的提交地址,RouterOS 会把它替换成实际的认证接口;$(error)用于回显错误信息,比如密码错误、账号到期。表单里的字段名 username 和 password 不能改,改了就认证失败。$(link-login)变量在部分模板里用于带原始访问地址的跳转,适合做“登录后跳回原网页”的场景。

改模板时有一个容易被忽略的细节:页面里的 CSS、JS、图片全部要本地存放,不要引用外部 CDN。认证前的用户处于未放行状态,外部资源加载不出来,页面会白屏。默认模板里带了 CHAP 认证相关的隐藏字段,自己写表单时最好保留这些字段,否则密码会以明文方式传输。这个页面走的是内网,风险可控,但既然能做对就不要省。

4.2 用户批量导入:写 rsc 文件比在 Web 界面逐个点快十倍

酒店一开就是几十上百个房间号,门店一搞促销就要临时生成几百个兑换码,在 Web 界面上逐个点击添加用户不是工程师该干的事。RouterOS 支持直接导入脚本文件,批量建号的正确姿势是生成一个 rsc 文件,内容就是逐条的 add 命令:

/ip hotspot user add name=1001 password=abc123 profile=default /ip hotspot user add name=1002 password=abc456 profile=default /ip hotspot user add name=1003 password=abc789 profile=default

把这个文件上传到路由器的 Files 目录,然后在命令行执行:

/import users.rsc

RouterOS 会逐条执行文件里的命令,并回报每一条的执行结果。用 Excel 拼这样的 rsc 文件和拼 CSV 一样简单:第一列是账号,第二列是密码,第三列是 profile 名,下拉填充后导出文本就行。后期要调整某个套餐的限速,只需要改 profile 的参数,所有挂在该 profile 下的用户会一并生效。

再补一个到期管理的细节:profile 的 validity 改动不会影响已经在线的用户,要等他们下一次认证时才按新策略走。如果客户说“我改了有效期怎么不生效”,基本上就是这个原因。批量清理过期用户可以用顺序遍历删掉所有挂某个 profile 的账号,但执行前最好先导出备份。

4.3 免认证名单:ip-binding 与 walled-garden 的分工

不是所有设备都需要走登录页。打印机、网络摄像头、AP 管理口这些设备没办法在浏览器里输账号密码,必须做免认证。RouterOS 提供两个层面的免认证手段,很多人混着用,搞不清区别。

第一种是针对终端的整体免认证,命令是:

/ip hotspot ip-binding add mac=AA:BB:CC:DD:EE:FF type=bypassed

填入设备的 MAC 地址,type 指定为 bypassed,这台设备就彻底绕开认证流程,不弹窗、不限制、直接上网。适合打印机、监控摄像头、以及需要远程运维的 AP 管理地址。

第二种是针对目标地址的定向放行,叫 walled-garden:

/ip hotspot walled-garden add dst-host=mp.weixin.qq.com action=allow

这条命令的意思是:未认证用户也可以访问 mp.weixin.qq.com 这个域名。适合做“仅可上微信”“仅可查订单”这类窄通道场景。注意 dst-host 是精确匹配,带 www 和不带 www 是两条规则,需要分别添加。要放行 IP 段时写法是 dst-address,例如:

/ip hotspot walled-garden add dst-address=114.114.114.114/32 action=allow

区分这两个命令是排查免认证问题的关键:打印机不上网,用 ip-binding;访客要能免认证访问某个特定网站,用 walled-garden。方向上搞反了,配置永远不生效。

5. 常见问题与排查:5 个让 Hotspot 翻车的细节

功能做完整之后,最不值钱但最磨人的是现场排错。下面五条是我部署和帮人排查时反复踩过的坑,每一条都按现象、原因、解决的顺序写,可以直接对应到实际场景。

5.1 连上 WiFi 却不弹页面,打开 https 网站还报证书错

现象是手机连上 WiFi 后没有横幅提示,浏览器打开百度能正常跳转登录页,但打开微信或某个 HTTPS 站点时,要么一直转圈,要么弹出“证书不受信任”的警告。

原因是 Hotspot 重定向的是 80 端口的明文 HTTP 流量,HTTPS 的 TLS 握手在 HTTP 请求之前就完成了,网关没法把加密流量改写成登录页。用户访问 HTTPS 站点时,路由器只能把连接引到自己的认证服务上,浏览器比对证书发现不对劲,就报了安全告警。

解决的思路不是让 HTTPS 也能弹页,而是让用户知道“先打开一个 HTTP 页面”。手机系统自带的 Captive Portal 探测请求走的就是 HTTP,所以多数手机会自动弹窗;不弹的情况,我一般会在前台或楼梯口放一个引导牌,写清楚“首次联网请打开任意网页或手动访问 http://wifi 开头的地址”。另外有一种隐蔽情况:用户浏览器挂了代理插件,流量不经过网关,认证页自然出不来。企业场景遇到说不弹页的,先让用户关代理再试。

5.2 认证通过了还是不能上网:防火墙规则被顺手清掉

现象是用户在登录页输入账号密码后,页面显示“认证成功”,但打开任何网站都不通,路由器上 active 表里也能看到该用户的会话记录。

原因是 Hotspot 启用时自动生成了一套防火墙规则,用来放行已认证用户的流量。很多运维习惯把 RouterOS 默认防火墙清空后从头配置,结果把 hotspot 的自动规则也带走了。认证逻辑和服务本身没坏,但流量在转发阶段被其他规则丢弃了。

解决方法是先检查规则链:

/ip firewall filter print where chain~"hotspot"

正常情况下能看到 hotspot-auth、hotspot-toclients、hotspot-fromclients 等链。如果一条都没有,最简单的恢复做法是把 hotspot 服务删掉重新添加一次,自动规则会重新生成。我自己在第三方交付项目里遇到过的最典型情况,不是这些规则被删,而是“Drop All”规则被放在了规则列表最顶部,所有转发流量直接被打死。标准做法是把 Drop All 这类兜底规则放在最后,hotspot 的放行规则必须在它前面。

5.3 打印机、摄像头也要认证:IP 绑定与云服务放行

现象是网段里的打印机不能云打印,网络摄像头连不上厂商的云平台,但它们明明已经接在同一个交换机上。

原因是这些设备没有交互界面,没法在浏览器里输账号密码。它们也被当成未认证终端拦截了,哪怕只是访问特定云平台的流量。

解决分两种情况。纯内网设备,比如打印机只给局域网用,不需要任何配置,因为 Hotspot 只管出外网的流量,内网互访不受影响。需要访问外网云服务的摄像头,用 walled-garden 放行厂商云平台的域名或 IP 段;如果是完全可信的设备,直接用 ip-binding 做整体免认证更省事。有些摄像头厂商的云平台在不同地区部署了多个域名,建议抓包确认它实际连的是哪个域名,再针对性放行,别猜。

5.4 限速不生效:速率单位、上下行方向与多会话

现象是客户明明买了 100M 宽带,给访客套餐限速 2M,实际测速能跑到 20M 甚至更高。

原因多半是 rate-limit 参数写错了。这个参数的单位是 kbps,不是 KB/s,也不是 Mbps。2048 换算过来就是 2Mbps。写成 2048KB 或者 2M 这种写法,部分版本会解析异常,导致限速不生效。另一个容易搞混的是方向,rate-limit 格式是 rx/tx,rx 是终端下载方向。运营商说的“下行 100M、上行 20M”,填到 RouterOS 里应该是 102400/20480,反过来填就变成了下载 20M、上传 100M。

还有一种容易被忽略的情况:网段里套了多层的 QoS 策略。现场如果还配置了 Simple Queue,和 profile 的 rate-limit 会叠加生效,表现就是速率比预期更慢或干脆不触发。排查时先用一条命令看有没有多余的队列:

/queue simple print

先把和 Hotspot 无关的队列清掉,再回过来看 profile 的限速值。

5.5 昨天免认证的设备今天又弹页:MAC 白名单的边界

现象是给客户的打印机做了 MAC 免认证,过了几个月客户打电话说打印机又开始弹认证页了。

原因是设备的 MAC 地址变了。打印机换了一块无线网卡,或者 Wi-Fi 模块恢复出厂后地址重新分配,都会导致旧的 ip-binding 记录失效。还有一种可能是设备没走 hotspot 接口,而是从另一个网口出去了。

解决方法是把免认证名单当成资产台账来维护。新增设备先确认 MAC 再下发记录,定期导出备份:

/ip hotspot ip-binding print file=ipbinding-backup

导出文件在 Files 目录里,可以下载留档。这里要特别说一个边界:MAC 白名单只适合可信设备。现代手机默认开启 MAC 随机化,每连接一次 WiFi 就可能换一个地址,给员工手机做 MAC 免认证毫无意义。门店场景里员工手机老老实实用账号密码登录,比维护一套随时失效的 MAC 白名单省心得多。

6. 进阶技巧:把认证记录留痕、把登录页做得更像产品

功能完整之后,还有一个交付素养问题:留痕。WEB 认证的价值不只是挡住没账号的人,更重要的是出事了能查到“谁在用、什么时候在用”。RouterOS 的 Hotspot 日志默认在内存里滚动覆盖,关掉就没了,所以我会配合计划任务做定时快照。

6.1 离线用户记录:system script 定时抓快照

用系统计划任务每小时执行一次脚本,把当前在线用户表导出成文件:

:local f "hotspot_snapshot" /file remove $f /ip hotspot active print file=$f

print file=xxx会把命令输出写到 Files 目录下的 txt 文件里。配合 scheduler 定时执行,就能留下在线用户的历史快照。出问题需要定位时,翻当时时间点的快照,谁在线一目了然。这个方案够轻量,适合中小型现场;更大规模的计费和审计需求,应该对接 Radius 服务器把计费报文送到独立系统。

6.2 上线前 10 分钟:快检清单

现场交付最怕的是“配完了没验证就走了”。我给自己定了一张上线前检查清单,照着走一遍不超过十分钟:

检查项方法通过标准
未认证弹页手机连 WiFi 后访问 http 页面跳转到登录页
HTTPS 行为打开一个 https 站点出现证书告警而非正常页面
认证成功输入测试账号可访问外网,active 表有记录
免认证设备打印机开机联网不弹页,可直接使用
限速效果终端跑一次测速速率接近 profile 设定值
到期失效用已过期账号登录提示账号失效,拒绝认证

我给自己的测试网做这套 WEB 认证时,最常栽在“配完没验证”上:改完模板后在浏览器里强制刷新,看到的还是缓存里的旧页面,差点以为模板变量写错了。现在每次上线前必做三件事:查自动生成的防火墙规则还在不在、用同一个账号并发登录会不会互相踢、到期时间是不是按本地时区生效。这套东西做到这个程度,基本算能交付了,剩下的就是把免认证名单维护成日常习惯。希望帮到你。

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

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

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

立即咨询