用途
本技能面向 RouterOS 热点(Hotspot)的配置与强制门户(captive portal)搭建,用于有线或无线网络的接入控制。
主要能力
热点流量链机制
热点流量拦截发生在常规防火墙 input/forward 链之前,这是最需要理解的一点:
/ip/hotspot绑定到某个桥接或接口后,该接口上的所有流量首先进入热点链。- 从热点接口阻止 TCP 80/443 的防火墙规则并不会阻止强制门户登录页,因为热点在防火墙看到流量之前就已处理。
- RouterOS 会自动注入动态防火墙规则(hs-unauth、hs-auth 链),不要手动创建、删除或干预这些由热点管理的规则。
- 常见错误:添加一条从 bridge-hotspot 丢弃 443 端口的 DROP 规则来“修复安全缺口”,这会静默破坏 HTTPS 登录页。
热点配置文件(Profile)
使用 /ip/hotspot/profile/add 创建,关键属性包括:
ssl-certificate=:引用导入后的证书名称(RouterOS 导入证书后会追加_0)。nas-port-type=:有线热点使用 ethernet,无线热点使用 wireless-ieee-802-11-g。html-directory-override=:必须与路由器文件系统上的文件夹名完全一致。login-by=https:通过 HTTPS 提供登录页,需要启用 www-ssl 服务并使用同一证书。use-radius=yes:设置后本地/ip/hotspot/user条目会被绕过,添加本地用户无效。
热点实例
使用 /ip/hotspot/add 创建,可指定 name、interface、profile、address-pool、addresses-per-mac、idle-timeout、keepalive-timeout、disabled 等参数。
注意:keepalive-timeout=none 禁用保活,keepalive-timeout=0 无效会被忽略。
注意:RouterOS 热点依赖 NAT,仅支持 IPv4,不支持 IPv6 客户端。
DHCP Option 114 — Captive Portal API(RFC 8910)
Option 114 用于向客户端告知强制门户 URI:
- 必须使用
force=yes,否则 DHCP 参数请求列表不含 114 的客户端(如 iOS、Android)会静默跳过。 - 值语法:外层双引号、内层单引号,即
"'https://...'"。缺少内层引号会导致该选项以二进制块而非字符串 URI 发送。 - api.json 时机:RouterOS 仅在首个客户端进行 CAPPORT 探测后才创建
hotspot/api.json,而非在热点启用时创建。需在首个客户端连接后将其移动到 html-directory-override 文件夹,脚本需同时处理 flash/ 与非 flash 存储布局。
白名单(Walled Garden)
建议使用一致的 comment= 标签实现可重复的添加/删除,否则重复运行脚本会累积重复条目。
/ip/hotspot/walled-garden/ip:第 3 层按目标主机匹配,在认证前应用,用于 HTTPS 目标。/ip/hotspot/walled-garden:第 7 层 URL 模式匹配,需要 HTTP,不支持 HTTPS。
SSL 证书
热点 profile 引用 ssl-certificate=name.crt_0(RouterOS 导入时追加 _0)。需用同一证书启用 www-ssl。导入模式:分别导入 .crt 与 .key 文件,导入后证书名称形如 login.example.com.crt_0。
外部强制门户 — HTML 模板变量
RouterOS 会在服务端对 html-directory-override 下任意文件中的 $(variable) 进行替换,这些不是 JavaScript 变量,而是在浏览器收到页面之前填充。
- 常用覆盖页面:login.html、alogin.html、status.html。
- 使用
$(link-login-only)作为登录 POST 端点,通过 dst 传递原始目标。 - 嵌入 URL 或查询字符串时应选用转义变体,如
$(link-orig-esc)、$(mac-esc)、$(username-esc);非转义变体在值包含 &、=、?、# 时可能破坏解析或引入注入路径。 - 支持服务端条件语法(非 JavaScript):
$(if logged-in == "yes")、$(else)、$(endif)、$(elif ...);运算符包括 presence($(if VAR))、==、!=。不支持嵌套算术或字符串运算。 - 外部认证流程:外部提供方在页面中加载重定向脚本,认证用户后将浏览器重定向回
$(link-login-only),附带 username + password + dst POST 字段;RouterOS 校验(本地库或 RADIUS)后颁发认证 cookie 并重定向到 dst。 - 白名单必须包含外部认证主机及任何 CDN/资源主机,否则未认证浏览器无法访问重定向脚本。
使用方式
按需在 RouterOS CLI 中执行上述配置命令,创建热点 profile 与实例,配置 DHCP Option 114、白名单、证书与模板页面。相关命令树可通过 rosetta MCP 服务器(routeros_search、routeros_get_page)检查。
适用场景
在 RouterOS 上配置热点、搭建强制门户、编写热点登录页面、配置 RADIUS 集成、设置 DHCP Option 114 等。
限制
- 热点子系统仅支持 IPv4,不支持 IPv6 客户端。
- 热点仅使用默认路由表;分离 WAN 场景需为热点流量显式添加
/ip route rule。 - 第 7 层白名单不支持 HTTPS,HTTPS 目标须使用第 3 层匹配。
- 不提供收费、价格或效果数据。
附加资源
相关技能:routeros-fundamentals(RouterOS CLI 语法、REST API、脚本基础)、routeros-certificates(证书链处理,处于待办)。RADIUS 客户端配置模式见 references/radius-client.md。MikroTik 官方文档包含 HotSpot 参考与 DHCP Server option 114 配置。