HotSpot - Captive portal
MikroTik HotSpot 网关可为公共网络提供客户端身份验证,具备 DHCP 地址池、多种认证方式以及围墙花园访问等功能。它需要 IPv4,并且有特定的使用限制。
HotSpot - 强制门户
MikroTik HotSpot 网关在客户端访问公共网络之前提供身份验证。
警告
HotSpot(强制门户)使用 web-proxy,目前只能使用默认路由表,因此由于涉及多张路由表,PCC(按连接分类器)不是一种有效的方法。 警告
HotSpot 功能可能会被 device-mode 阻止。在配置 HotSpot 之前,请确保已在
/system/device-mode中启用它(更多信息)。
HotSpot 属性
| 属性 | 说明 |
|---|---|
| name | HotSpot 服务器实例的描述性名称。 |
| interface | HotSpot 服务监听客户端请求的特定本地接口(物理或虚拟)。 |
| address-pool | HotSpot 客户端通过 DHCP 获取 IP 地址的 IP 地址池。 |
| profile | 对 HotSpot 服务器配置文件的引用,其中包含登录方法和 HTML 目录等常用设置。 |
| idle-timeout | 无活动时间,超过该时间且未检测到流量时,客户端会被自动注销。 |
| keepalive-timeout | 用于检查客户端是否仍然可达的时间间隔;如果客户端无响应,则终止会话。 |
| login-timeout | 登录页面显示后,客户端完成认证过程所允许的最长持续时间。 |
| addresses-per-mac | 限制可与单个 MAC 地址关联的 IP 地址数量。 |
| proxy-status | 指示 HotSpot 系统使用的内部 web-proxy 的当前运行状态。 |
HotSpot 网关功能
- 客户端可使用不同认证方式,通过路由器上的本地客户端数据库或远程 RADIUS 服务器进行认证。
- 在路由器本地数据库或远程 RADIUS 服务器上进行用户计费。
- 围墙花园系统,无需授权即可访问某些网页。
- 可修改登录页面,在其中放置公司信息。
- 自动、透明地将客户端的任意 IP 地址更改为有效地址。
- HotSpot 可以通知 DHCP 客户端它们位于强制门户之后(RFC7710)。
HotSpot 只有在使用 IPv4 时才能可靠工作。HotSpot 依赖防火墙 NAT 规则,而目前 IPv6 不支持这些规则。
示例
[admin@MikroTik] /ip/hotspot> setup
Select interface to run HotSpot on
hotspot interface: ether3
Set HotSpot address for interface
local address of network: 10.5.50.1/24
masquerade network: yes
Set pool for HotSpot addresses
address pool of network: 10.5.50.2-10.5.50.254
Select hotspot SSL certificate
select certificate: none
Select SMTP server
ip address of smtp server: 0.0.0.0
Setup DNS configuration
dns servers: 10.1.101.1
DNS name of local hotspot server
dns name: myhotspot
Create local hotspot user
name of local hotspot user: admin
password for the user:
[admin@MikroTik] /ip/hotspot>
验证 HotSpot 配置
[admin@MikroTik] /ip/hotspot> print
Flags: X - disabled, I - invalid, S - HTTPS
# NAME INTERFACE ADDRESS-POOL PROFILE IDLE-TIMEOUT
0 hotspot1 ether3 hs-pool-3 hsprof1 5m
[admin@MikroTik] /ip/hotspot>
[admin@MikroTik] /ip/pool> print
# NAME RANGES
0 hs-pool-3 10.5.50.2-10.5.50.254
[admin@MikroTik] /ip/pool> /ip/dhcp-server
[admin@MikroTik] /ip/dhcp-server> print
Flags: X - disabled, I - invalid
# NAME INTERFACE RELAY ADDRESS-POOL LEASE-TIME ADD-ARP
0 dhcp1 ether3 hs-pool-3 1h
[admin@MikroTik] /ip/dhcp-server> /ip/firewall/nat
[admin@MikroTik] /ip/firewall/nat> print
Flags: X - disabled, I - invalid, D - dynamic
0 X ;;; place hotspot rules here
chain=unused-hs-chain action=passthrough
1 ;;; masquerade hotspot network
chain=srcnat action=masquerade src-address=10.5.50.0/24
[admin@MikroTik] /ip/firewall/nat>
设置过程中询问的参数
| 参数 | 说明 |
|---|---|
| hotspot interface (string;默认:allow) | 运行 HotSpot 的接口名称。要在桥接接口上运行 HotSpot,请确保公共接口未包含在桥接端口中。 |
| local address of network (IP;默认:10.5.50.1/24) | HotSpot 网关地址 |
| masquerade network (yes | no;默认:yes) | 是否对 HotSpot 网络进行伪装;为 yes 时,会向 /ip/firewall/nat 添加一条 action=masquerade 规则 |
| address pool of network (string;默认:yes) | HotSpot 网络的地址池,用于将用户 IP 地址更改为有效地址。在向不愿更改网络设置的移动客户端提供网络访问时很有用。 |
| select certificate (none | import-other-certificate;默认:) | 当需要 HTTPS 认证方式时,选择 SSL 证书。 |
| ip address of smtp server (IP;默认:0.0.0.0) | SMTP 服务器的 IP 地址,用于重定向 HotSpot 网络的 SMTP 请求(TCP 端口 25) |
| dns servers (IP;默认:0.0.0.0) | 用于 HotSpot 客户端的 DNS 服务器地址,配置取自 HotSpot 网关的 /ip/dns 菜单 |
| dns name (string;默认:"") | HotSpot 服务器的域名,需要完全限定域名,例如 www.example.com |
| name of local hotspot user (string;默认:"admin") | 自动创建的一个 HotSpot 用户的用户名,添加到 /ip/hotspot/user |
| password for the user (string;默认:) | 自动创建的 HotSpot 用户的密码 |
HotSpot
子菜单: /ip/hotspot
该菜单用于管理路由器的 HotSpot 服务器。可以在以太网、无线、VLAN 和桥接接口上运行 HotSpot。每个接口只允许一个 HotSpot 服务器。在桥接接口上配置 HotSpot 时,应将 HotSpot 接口设置为桥接接口本身,而不是桥接端口,并且不要将公共接口添加到桥接端口。你可以手动向 /ip/hotspot 菜单添加 HotSpot 服务器,但建议运行 /ip/hotspot/setup,它会添加所有必要的设置。
| 参数 | 说明 |
|---|---|
| name (text) | HotSpot 服务器的名称或标识符 |
| address-pool (name/none;默认:none) | 用于将任意 HotSpot 客户端 IP 地址更改为有效地址的地址空间。适合向不愿更改网络设置的移动客户端提供公共网络访问 |
| idle-timeout (time/none;默认:5m) | 未授权客户端的无活动时间。当该客户端没有流量时(字面意思是客户端计算机应处于关机状态),一旦达到超时时间,用户就会从 HotSpot 主机列表中移除,其使用的地址变为可用 |
| keepalive-timeout (time/none;默认:none) | 主机可保持不可达状态而不从 HotSpot 中移除的时长 |
| login-timeout (time/none;默认:none) | 如果主机在超过该时间后仍未通过系统认证,则从主机表中删除该主机条目。此循环会重复,直到主机登录系统。如果存在主机在主机表中长时间未认证后无法登录的情况,请启用此项。 |
| interface (name of an interface) | 运行 HotSpot 的接口 |
| addresses-per-mac (integer**/**unlimited;默认:2) | 当多个 HotSpot 客户端使用同一个 MAC 地址连接时,允许与该 MAC 地址绑定的 IP 地址数量 |
| profile (name;默认:default) | HotSpot 服务器的默认 HotSpot 配置文件,位于 /ip/hotspot/profile |
只读
| 参数 | 说明 |
|---|---|
| keepalive-timeout (read-only;time) | 应用于该用户的 keepalive-timeout 确切值。该值显示主机可保持不可达状态而不从 HotSpot 中移除的时长 |
HotSpot 配置文件
此子菜单包含 HotSpot 服务器配置文件列表。同一台网关设备上可以存在多个不同的 HotSpot 系统,它们被定义为服务器配置文件。可以将一个或多个接口归入同一个服务器配置文件。特定接口上的服务器可配置项很少 - 大部分配置都在服务器配置文件中设置。例如,可以为每个服务器配置文件制作一套完全不同的 servlet 页面,并定义不同的 RADIUS 服务器进行认证。
| 属性 | 说明 |
|---|---|
| dns-name (string;默认:"") | HotSpot 服务器的 DNS 名称。此 DNS 名称用作 HotSpot 服务器的名称(即显示为登录页面的位置)。该名称会自动作为静态 DNS 条目添加到 DNS 缓存中。 |
| hotspot-address (IP;默认:0.0.0.0) | HotSpot 服务的 IP 地址。 |
| html-directory (string;默认:hotspot) | 存储 HotSpot HTML 页面的目录名(默认为 hotspot 目录)。可以指定包含修改后 HTML 页面的其他目录。要更改 HotSpot 登录页面,请从路由器获取 HotSpot 文件,修改后上传回同一位置。在 html-directory 字段中必须输入完整路径,包括 "/flash/(hotspot_dir)" |
| html-directory-override (string;默认:none) | HotSpot HTML 文件的替代路径。仅当自定义 HotSpot HTML 文件存储在外部存储上时才应使用。 |
| http-cookie-lifetime (time;默认:3d) | HTTP cookie 有效期,此选项与 cookie HotSpot 登录方法相关 |
| http-proxy (IP:Port;默认:0.0.0.0:0) | HotSpot 服务使用的代理服务器地址和端口;使用默认值时,所有请求都由本地 /ip/proxy 解析 |
| https-redirect (yes | no;默认:yes) | 当用户访问 https:// URL 时,是否将未认证用户重定向到 HotSpot 登录页面。由于证书域名不匹配,这通常会导致错误,因此你可以将此参数设置为 "no",所有 https 请求将被直接拒绝,用户必须访问 http 页面。 |
| login-by (cookie|http-chap|http-pap|https|mac|trial|mac-cookie;默认:http-chap, cookie) | 使用的 HotSpot 认证方法。mac-cookie - 启用通过 MAC cookie 方法登录。cookie - 只能与其他 HTTP 认证方法一起使用。用户首次在 HotSpot 中认证时会生成 HTTP cookie。在 cookie 生命周期内,不会要求用户输入登录名/密码,而是自动认证。http-chap - 用户需要登录名/密码才能在 HotSpot 中认证。使用带 MD5 哈希算法的 CHAP 质询-响应方法来保护密码。http-pap - 用户需要登录名/密码才能在 HotSpot 中认证。用户名和密码以明文形式通过网络发送。https - 用户需要登录名/密码才能在 HotSpot 中认证。客户端与服务器之间的登录名/密码交换通过 SSL 隧道加密。mac - 客户端无需填写登录表单即可认证。客户端 MAC 地址会添加到 /ip/hotspot/user 数据库,客户端一连接到 HotSpot 即完成认证。trial - 允许客户端在指定时间内无需 HotSpot 登录即可使用互联网 |
| mac-auth-password (string;默认:) 敏感 | 与 MAC 认证一起使用,用于指定要通过 MAC 地址认证的用户的密码。当特定 RADIUS 服务器拒绝密码为空的客户端认证时,需要此选项 |
| name (string;默认:) | 配置文件的描述性名称 |
| nas-port-type (string;默认:wireless-802.11) | 发送给 RADIUS 服务器的 NAS-Port-Type 值,NAS-Port-Type 值在 RADIUS RFC 2865 中描述。此可选值属性表示 HotSpot 服务器物理端口的类型。 |
| radius-accounting (yes | no;默认:yes) | 为 yes 时,为每个用户发送 RADIUS 服务器计费信息 |
| radius-default-domain (string;默认:) | 用于 RADIUS 请求的默认域。允许为每个 /ip/hotspot/profile 使用单独的 RADIUS 服务器。如果使用,应在 /radius 的 domain 值下指定相同的域名。 |
| radius-interim-update (time | received;默认:received) | 发送计费更新的频率。设置为 received 时,使用来自 RADIUS 服务器的 interim-time。0s 与 received 相同。 |
| radius-location-name (string;默认:) | 发送给 RADIUS 服务器的 RADIUS-Location-Id。用于在与 RADIUS 服务器通信期间标识 HotSpot 服务器的位置。该值是可选的,与 RADIUS 服务器一起使用。 |
| radius-mac-format ("XX XX XX XX XX XX"|XX:XX:XX:XX:XX:XX|XXXXXX-XXXXXX|XXXXXXXXXXXX|XX-XX-XX-XX-XX-XX|XXXX:XXXX:XXXX|XXXXXX:XXXXXX;默认:XX:XX:XX:XX:XX:XX) | 用于设置 AAA 会话期间发送给 RADIUS 服务器的用户 MAC 地址格式。 |
| rate-limit (string;默认:"") | 从路由器角度看的速率限制,格式为 rx-rate[/tx-rate] [rx-burst-rate[/tx-burst-rate] [rx-burst-threshold[/tx-burst-threshold] [rx-burst-time[/tx-burst-time]]]] [priority] [rx-rate-min[/tx-rate-min]](因此 "rx" 是客户端上传,"tx" 是客户端下载)。所有速率应为数字,并可带 'k'(1000)或 'M'(1,000,000)。如果未指定 tx-rate,则 rx-rate 也用作 tx-rate。tx-burst-rate、tx-burst-threshold 和 tx-burst-time 同理。如果未指定 rx-burst-threshold 和 tx-burst-threshold(但指定了 burst-rate),则使用 rx-rate 和 tx-rate 作为突发阈值。如果未指定 rx-burst-time 和 tx-burst-time,则默认使用 1s。rx-rate-min 和 tx-rate-min 是 limit-at 属性的值 |
| smtp-server (IP;默认:0.0.0.0) | 用于重定向 HotSpot 用户 SMTP 请求的 SMTP 服务器地址。 |
| split-user-domain (yes | no;默认:no) | 当 RADIUS 服务器以 "user@domain" 或 "domain\user" 格式提供用户名时,将用户名与域名分离 |
| ssl-certificate (string | none;默认:none) | 路由器上仅用于 HTTPS 认证的 SSL 证书名称。 |
| trial-uptime (time/time;默认:30m/1d) | 仅与 trial 认证方法一起使用。第一个时间值指定由 MAC 地址识别的试用用户无需 HotSpot 认证即可访问公共网络的时长。第二个时间值指定在允许用户再次使用试用功能之前必须经过的时间。 |
| trial-user-profile (string;默认:default) | 为试用用户指定 HotSpot 用户配置文件。 |
| use-radius (yes | no;默认:no) | 使用 RADIUS 对 HotSpot 用户进行认证。 |
HotSpot 用户配置文件
子菜单: /ip/hotspot/user/profile
用户配置文件菜单用于设置 HotSpot 客户端的通用配置。配置文件类似于具有相同设置集合(速率限制、过滤链名称等)的用户组。
| 属性 | 说明 |
|---|---|
| add-mac-cookie (yes|no;默认:yes) | 允许为用户添加 MAC cookie。 |
| address-list (string;默认:) | 用户 IP 地址将添加到的地址列表名称。适合为队列树配置按用户组标记流量。 |
| address-pool (string |none;默认:none) | 用户获取 IP 的 IP 池名称。当用户计算机上的网络设置配置不正确时,HotSpot 服务器会进行转换,并从池中分配正确的 IP 地址代替错误地址 |
| advertise (yes | no;默认:no) | 启用强制广告弹窗。经过特定时间间隔后,会向 HotSpot 用户显示特定网页。广告页面可能会被浏览器弹窗拦截器阻止。 |
| advertise-interval (time[,time[,..]];默认:30m,10m) | 广告弹窗之间的间隔集合。列表用完后,后续所有广告都使用最后一个值,即 10 分钟 |
| advertise-timeout (time | immediately | never;默认:1m) | 在阻止 HotSpot 客户端网络访问之前,广告显示的时长。未显示广告时不允许连接互联网。 |
| advertise-url (string[,string[,..]];默认:) | 用于广告弹窗显示的 URL 列表。最后一个 URL 用完后,列表从头开始。 |
| idle-timeout (time | none;默认:none) | 已授权 HotSpot 客户端的最大无活动时间。当该客户端没有流量经过路由器时(例如计算机关机),计时器开始计时。达到超时后,用户会被注销、从主机列表中移除,并且其使用的地址被释放。 |
| incoming-filter (string;默认:) | 应用于来自此配置文件用户入站数据包的防火墙链名称。需要从内置链(input、forward、output)到 chain=hotspot 的跳转规则 |
| incoming-packet-mark (string;默认:) | 为来自此配置文件每个用户的入站数据包设置的包标记 |
| keepalive-timeout (time | none;默认:) | 已授权 HotSpot 客户端的 keepalive 超时。用于检测客户端计算机是否存活且可达。达到超时值时用户会被注销 |
| mac-cookie-timeout (time;默认:3d) | 从上次登录或注销开始计算 MAC cookie 超时。 |
| name (string;默认:) | 配置文件的描述性名称 |
| on-login (string;默认:"") | 用户从此配置文件登录 HotSpot 时要执行的脚本名称。可以从内部 user 和 interface 变量获取用户名。例如 :log info "User $user logged in!"。如果 HotSpot 设置在桥接接口上,除非在桥接设置中设置了 use-ip-firewall,否则 interface 变量将显示为桥接接口。可用变量列表:$user、$username($user 的替代变量名)、$address、$"mac-address"、$interface |
| on-logout (string;默认:"") | 用户从 HotSpot 注销时要执行的脚本名称。可以从内部 user 和 interface 变量获取用户名。例如 :log info "User $user logged in!"。如果 HotSpot 设置在桥接接口上,除非在桥接设置中设置了 use-ip-firewall,否则 interface 变量将显示为桥接接口。可用变量列表:$user、$username($user 的替代变量名)、$address、$"mac-address"、$interface、$cause。从 v6.34rc11 开始,还提供以下附加变量:$uptime-secs - 最终会话时间(秒)、$bytes-in - 上传字节数、$bytes-out - 下载字节数、$bytes-total - 上传 + 下载字节数、$packets-in - 上传数据包数、$packets-out - 下载数据包数、$packets-total - 上传 + 下载数据包数 |
| open-status-page (always | http-login;默认:always) | 为通过 MAC 登录方法认证的用户显示状态页面的选项。例如,在状态页面(alogin.html)上显示广告。http-login - 仅对 HTTP 登录(包括 cookie 和 HTTPS)打开状态页面。always - 在 MAC 登录时也打开 HTTP 状态页面 |
| outgoing-filter (string;默认:) | 应用于来自此配置文件用户出站数据包的防火墙链名称。需要从内置链(input、forward、output)到 chain=hotspot 的跳转规则 |
| outgoing-packet-mark (string;默认:) | 为来自此配置文件每个用户的出站数据包设置的包标记 |
| rate-limit (string;默认:"") | 用户登录 HotSpot 后,会为其创建一个简单的动态队列。速率限制按以下形式配置:[rx-rate[/tx-rate] [rx-burst-rate[/tx-burst-rate] [rx-burst-threshold[/tx-burst-threshold] [rx-burst-time[/tx-burst-time] [priority] [rx-rate-min[/tx-rate-min]]]]。例如,要为客户端设置 1M 下载、512k 上传,可设置 rate-limit=512k/1M |
| session-timeout (time;默认:0s) | 客户端允许的会话时间。超过此时间后,用户会被无条件注销 |
| shared-users (integer;默认:1) | 使用同一 HotSpot 用户名同时登录的允许用户数 |
| status-autorefresh (time | none;默认:none) | HotSpot 状态页面自动刷新间隔 |
| transparent-proxy (yes |;默认:yes) | 为此配置文件中的已授权用户使用透明 HTTP 代理 |
HotSpot 用户
此菜单用于实际添加客户端的用户名/密码信息,也在此配置 HotSpot 用户的其他选项。
| 属性 | 说明 |
|---|---|
| address (IP;默认:0.0.0.0) | 指定后,客户端将通过 HotSpot 一对一 NAT 转换获取该地址。该地址不会限制 HotSpot 只能从此地址登录 |
| comment (string;默认:) | HotSpot 用户的描述性信息。可供脚本用来更改特定客户端的参数 |
| email (string;默认:) | HotSpot 客户端的电子邮件,作为 HotSpot 用户的信息值 |
| limit-bytes-in (integer;默认:0) | 可从该用户接收的最大字节数。达到限制后,用户会从 HotSpot 断开。 |
| limit-bytes-out (integer;默认:0) | 可向该用户发送的最大字节数。达到限制后,用户会从 HotSpot 断开。 |
| limit-bytes-total (integer;默认:0) | (limit-bytes-in+limit-bytes-out)。达到限制后,用户会从 HotSpot 断开。 |
| limit-uptime (time;默认:0) | HotSpot 客户端的运行时间限制。达到该运行时间后,用户会立即从 HotSpot 断开。 |
| mac-address (MAC;默认:00:00:00:00:00:00) | 客户端只能从指定的 MAC 地址登录。如果值为 00:00:00:00:00:00,则允许任意 MAC 地址。 |
| name (string;默认:) | HotSpot 登录页面用户名。使用 MAC 地址认证时,名称配置为客户端 MAC 地址 |
| password (string;默认:) 敏感 | 用户密码 |
| profile (string;默认:default) | 在 /ip/hotspot/user/profile 中配置的用户配置文件 |
| routes (string;默认:) | 客户端连接时添加到 HotSpot 网关的路由。路由格式为 dst-address gateway metric(例如 192.168.1.0/24 192.168.0.1 1) |
| server (string | all;默认:all) | 允许该用户登录的 HotSpot 服务器名称 |
| otp-secret (string;默认:) 敏感 | 用于 HotSpot 用户授权的一次性密码令牌。它可作为 HotSpot 用户认证的单独“密码”使用。 |
只读属性
| 属性 | 说明 |
|---|---|
| bytes-in (integer) | 从客户端接收的数据总字节数。 |
| bytes-out (integer) | 发送给客户端的数据总字节数。 |
| packets-in (integer) | 从客户端接收的数据包总数。 |
| packets-out (integer) | 发送给客户端的数据包总数。 |
| uptime (time) | 客户端通过认证后的当前会话持续时间。 |
HotSpot 活动会话
子菜单: /ip/hotspot/active
HotSpot 活动会话菜单显示所有已在 HotSpot 中认证的客户端,该菜单仅提供信息(只读)。此处不能更改任何内容,但可以使用 remove 命令将用户注销。
| 参数 | 说明 |
|---|---|
| server (read-only;name) | 客户端登录的 HotSpot 服务器名称 |
| user (read-only;name) | HotSpot 用户名 |
| domain (read-only;text) | 用户的域(如果从用户名中分离),该参数仅与 RADIUS 认证一起使用 |
| address (read-only;IP address) | HotSpot 用户的 IP 地址 |
| mac-address (read-only;MAC-address) | HotSpot 用户的 MAC 地址 |
| login-by (read-only;multiple-choice:cookie / http-chap / http-pap / https / mac / mac-cookie / trial) | HotSpot 客户端使用的认证方法 |
| uptime (read-only;time) | 用户的当前会话时间,显示用户已登录多久 |
| idle-time (read-only;time) | 用户处于空闲状态的时间 |
| session-time-left (read-only;time) | 应用于该用户的 session-time 确切值。该值显示在达到 uptime 被自动注销之前,允许用户在线多久 |
| idle-timeout (read-only;time) | 用户 idle-timeout 的确切值 |
| keepalive-timeout (read-only;time) | 应用于该用户的 keepalive-timeout 确切值。该值显示主机可保持不可达状态而不从 HotSpot 中移除的时长 |
| limit-bytes-in (read-only;integer) | 该值显示从客户端接收的字节数;当为 HotSpot 用户配置了相应参数时,此选项生效 |
| limit-bytes-out (read-only;integer) | 该值显示发送给客户端的字节数;当为 HotSpot 用户配置了相应参数时,此选项生效 |
| limit-bytes-total (read-only;integer) | 该值显示与客户端之间发送/接收的总字节数;当为 HotSpot 用户配置了相应参数时,此选项生效 |
HotSpot 主机
子菜单: /ip/hotspot/host
主机表列出所有连接到 HotSpot 服务器的计算机。主机表仅提供信息,不能更改其中的任何值:
| 参数 | 说明 |
|---|---|
| mac-address (read-only;MAC-address) | HotSpot 用户的 MAC 地址 |
| address (read-only;IP address) | HotSpot 客户端的原始 IP 地址 |
| to-address (read-only;IP address) | HotSpot 分配的新客户端地址,可能与原始 address 相同 |
| server (read-only;name) | 客户端连接的 HotSpot 服务器名称 |
| bridge-port (read-only;name) | 客户端连接的 /interface/bridge/port;当 HotSpot 未配置在桥接上时,该值未知 |
| uptime (read-only;time) | 该值显示用户在线(连接到 HotSpot)的时长 |
| idle-time (read-only;time) | 用户处于空闲状态的时间 |
| idle-timeout (read-only;time) | 客户端 idle-timeout 的值(未授权客户端) |
| keepalive-timeout (read-only;time) | 未授权客户端的 keepalive-timeout 值 |
| bytes-in (read-only;integer) | 从未授权客户端接收的字节数 |
| packet-in (read-only;integer) | 从未授权客户端接收的数据包数 |
| bytes-out (read-only;integer) | 发送给未授权客户端的字节数 |
| packet-out (read-only;integer) | 发送给未授权客户端的数据包数 |
HotSpot 围墙花园
围墙花园是一种允许未经授权使用某些资源,但访问其他资源需要授权的系统。例如,这可用于提供有关 HotSpot 服务提供商或计费选项的一些基本信息。
该菜单仅管理 HTTP 和 HTTPS 协议的围墙花园。其他协议也可以包含在围墙花园中,但需在其他位置配置(在 /ip/hotspot/walled-garden/ip 中)。
| 属性 | 说明 |
|---|---|
| action (allow | deny;默认:allow) | 数据包匹配规则时执行的操作。allow - 无需授权即可访问网页。deny - 访问网页需要授权 |
| server (string;默认:) | 应用此规则的 HotSpot 服务器名称。 |
| src-address (IP;默认:) | 用户的源地址,通常是 HotSpot 客户端的 IP 地址 |
| method (string;默认:) | 请求的 HTTP 方法 |
| dst-host (string;默认:) | 目的 Web 服务器的域名 |
| dst-port (integer;默认:) | 客户端发送请求的 TCP 端口号 |
| path (string;默认:) | 请求路径。路径位于 '''http://dst\_host 之后 |
只读属性
| 属性 | 说明 |
|---|---|
| dst-address (IP) | |
| hits (integer) |
通配符属性(dst-host 和 path)匹配完整字符串(也就是说,如果设置为 "example",它们不会匹配 "example.com")。可用的通配符有 '*'(匹配任意数量的任意字符)和 '?'(匹配任意一个字符)。此处也接受正则表达式,但如果要将属性视为正则表达式,它应以冒号(':')开头。要表示给定模式之前不允许有符号,可在模式开头使用 ^ 符号。要指定给定模式之后不允许有符号,可在模式末尾使用 $ 符号。
示例
仅允许在围墙花园中绕过访问 "www.example.com/test",而不允许访问 "www.example.com/test/test.php":
/ip/hotspot/walled-garden
add dst-host=:^www.example.com path=":/test\$"
HotSpot 围墙花园 IP
用于为其他协议以及不同的源/目的地址(或地址列表)绕过 HotSpot 认证。适用于不同服务(Winbox、SSH、Telnet、SIP 等)
| 属性 | 说明 |
|---|---|
| action (accept |drop|reject;默认:allow) | 数据包匹配规则时执行的操作。allow - 无需授权即可访问开放的服务。drop - 访问该服务需要授权。reject - 访问该服务需要授权,访问该服务时会生成 ICMP 主机不可达的拒绝消息 |
| server (string;默认:) | 应用此规则的 HotSpot 服务器名称。 |
| src-address (IP;默认:) | 用户的源地址,通常是 HotSpot 客户端的 IP 地址 |
| dst-address (IP;默认:) | 目的 IP 地址,即 Web 服务器的 IP 地址。如果已指定 dst-host,则忽略此项。 |
| src-address-list (string;默认:) | 源地址列表名称 |
| dst-address-list (string;默认:) | 目的地址列表。如果已指定 dst-host,则忽略此项。 |
| dst-host (string;默认:) | 目的 Web 服务器的域名。指定此参数时,会向围墙花园添加一条动态条目 |
| dst-port (integer;默认:) | 客户端发送请求的 TCP 端口号 |
| protocol (integer | string;默认:) | IP 协议 |
IP 绑定
子菜单: /ip/hotspot/ip-binding
IP 绑定 HotSpot 菜单允许设置静态一对一 NAT 转换,允许特定 HotSpot 客户端无需任何认证即可绕过登录,还允许阻止特定主机和子网访问 HotSpot 网络
| 属性 | 说明 |
|---|---|
| address (IP Range;默认:"") | 客户端的原始 IP 地址 |
| mac-address (MAC;默认:"") | 客户端的 MAC 地址 |
| server (string | all;默认:"all") | HotSpot 服务器名称。all - 将应用于所有 HotSpot 服务器 |
| to-address (IP;默认:"") | 客户端的新 IP 地址,转换在路由器上进行(客户端不知道发生了转换) |
| type (blocked | bypassed | regular;默认:"") | IP 绑定操作类型。regular - 按规则执行一对一 NAT,将地址转换为 to-address。bypassed - 执行转换,但客户端无需登录 HotSpot。blocked - 不执行转换,并丢弃来自该主机的数据包 |
Cookie
该菜单包含发送给通过 cookie 方法授权的 HotSpot 客户端的所有 cookie。所有条目均为只读。
子菜单: /ip/hotspot/cookie
| 属性 | 说明 |
|---|---|
| domain (string) | 域名(如果从用户名中分离) |
| expires-in (time) | cookie 有效时长 |
| mac-address (MAC) | 客户端的 MAC 地址 |
| user (string) | HotSpot 用户名 |
MAC Cookie
MAC cookie 是一项 HotSpot 功能,旨在改善智能手机、笔记本电脑和其他移动设备的可访问性。
启用 MAC cookie 功能后(在用户配置文件中设置 login-by=mac-cookie、add-mac-cookie=yes),会执行以下操作:
- 首次成功登录。如果只有一个主机使用该 MAC 地址,MAC cookie 会记录该 MAC 地址的用户名和密码。Cookie 超时设置为与 mac-cookie-timeout 相同的值。
- 出现新主机。HotSpot 检查该 MAC 地址是否有 MAC cookie 记录,并使用记录的用户名和密码登录主机。如果同一 MAC 地址有多个主机,则不会登录该用户,并会删除该地址的 MAC cookie 记录。
当用户注销时,在以下情况下会删除 MAC cookie:
- user-request - 用户点击了注销按钮。
- admin-reset - 从 RADIUS 服务器断开连接,或从 HotSpot 活动会话菜单中移除用户。
- nas-request - 达到流量限制。
- session-timeout。
要调试 MAC cookie 问题,需要启用 HotSpot 调试日志,并查找特定主机的 MAC cookie 登录失败的原因。
服务器删除 MAC cookie 的情况
/ip/hotspot/cookie/remove [number]。- RADIUS 服务器发送 Disconnect-Request。
- 最终用户通过 HotSpot 状态页面自行注销。
- 最终用户达到其数据上限(“达到流量限制”)。
- Session-Timeout。
- MAC cookie 登录失败。
- 服务器检测到主机表中存在多个具有相同 MAC 地址的条目。
HotSpot API JSON 属性(RFC 7710)
根据文档中提供的 api.json 模板,以下属性用于向客户端设备传达强制门户状态:
- captive:布尔值(
true或false),告知客户端设备当前是否受强制门户限制。如果用户已通过认证,则返回false。 - user-portal-url:用户可以访问登录页面或管理当前会话的具体 URL。在 MikroTik RouterOS 中,此值由
$(link-login-only)变量动态填充。 - seconds-remaining:(可选)整数,表示当前会话过期前剩余的秒数。仅在配置了会话超时时包含。
- bytes-remaining:(可选)整数,表示用户剩余的数据配额(字节)。仅在为 HotSpot 用户应用了数据限制时包含。
- can-extend-session:布尔值,表示用户是否能够延长当前会话,或通过门户购买/请求更多时间/数据。
HotSpot 服务器上的 mangle 负载均衡
在多上行链路 HotSpot 设置中(例如 PCC),默认路由往往无法按预期工作,因为路由器会优先处理 mangle 规则,而不是本地目的地址检查。
要解决此问题,请确保在评估 mangle 链之前,发往 HotSpot 服务器的流量通过 local 表路由。可以通过以下方式实现:
- 调整 "
/routing/settings"(路由表查找)。 - 或者,添加特定的 "
/routing/rule" 条目,强制 HotSpot 服务器的流量优先使用本地表(包括用于检测 HotSpot 服务器的 HTTP 80 流量)。