HotSpot - Captive portal

MikroTik HotSpot 网关为公共网络提供客户端认证,具备 DHCP 地址池、多种认证方式以及 walled-garden 访问等功能。它需要 IPv4,并存在特定的路由限制,下文提供了配置示例。

HotSpot - Captive portal

MikroTik HotSpot 网关在客户端访问公共网络之前对其进行认证。

警告

HotSpot(captive portal)使用 web-proxy,目前只能使用默认路由表;由于会使用多个路由表,因此 PCC(per connection-classifier)并不是一种有效的方法。 警告

HotSpot 功能可能会被 device-mode 阻止。在配置 HotSpot 之前,请确保已在 /system/device-mode 中启用它(更多信息。

HotSpot 属性

属性描述
nameHotSpot 服务器实例的描述性名称。
interfaceHotSpot 服务用于监听客户端请求的特定本地接口(物理或虚拟)。
address-poolHotSpot 客户端通过 DHCP 获取 IP 地址所用的 IP 地址池。
profile对 HotSpot Server Profile 的引用,其中包含登录方式和 HTML 目录等通用设置。
idle-timeout无活动的时间段;超过该时间且检测不到流量时,客户端会被自动注销。
keepalive-timeout用于检查客户端是否仍可达的时间间隔;如果客户端无响应,会话将被终止。
login-timeout登录页面显示后,允许客户端完成认证过程的最长时间。
addresses-per-mac限制可与单个 MAC 地址关联的 IP 地址数量。
proxy-status指示 HotSpot 系统所使用的内部 web-proxy 的当前运行状态。

HotSpot 网关功能

  • 使用路由器上的本地客户端数据库或远程 RADIUS 服务器,对客户端采用不同的认证方式。
  • 在路由器上的本地数据库或远程 RADIUS 服务器上进行用户计费(accounting)。
  • walled-garden 系统,无需授权即可访问某些网页。
  • 登录页面修改,可在其中放置公司信息。
  • 自动且透明地将客户端的任意 IP 地址更改为有效地址。
  • HotSpot 可以告知 DHCP 客户端它们位于 captive portal 之后(RFC7710)。

只有在使用 IPv4 时,HotSpot 才能可靠工作。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 网络执行 masquerade;当为 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 服务器的域名,需要是完全限定域名(FQDN),例如 www.example.com
name of local hotspot user (string; 默认: "admin")自动创建的 HotSpot 用户的用户名,会添加到 /ip/hotspot/user
password for the user (string; 默认: )自动创建的 HotSpot 用户的密码

HotSpot

Sub-menu: /ip/hotspot

该菜单用于管理路由器的 HotSpot 服务器。可以在 Ethernet、无线、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 Profile

此子菜单包含 HotSpot 服务器配置文件的列表。同一台网关机器上可以有多个不同的 HotSpot 系统,它们被定义为 Server Profile。一个或多个接口可以归入同一个服务器配置文件。针对特定接口的服务器设置很少,大部分配置都在服务器配置文件中设置。例如,可以为每个服务器配置文件制作一套完全不同的 servlet 页面,并为认证定义不同的 RADIUS 服务器。

属性描述
dns-name (string; 默认: "")HotSpot 服务器的 DNS 名称。这是用作 HotSpot 服务器名称的 DNS 名称(即它显示为登录页面的位置)。该名称会自动作为静态 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-lifetime 有效期内,不会要求用户输入登录名/密码,而是自动进行认证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)用于设置用户 mac 地址格式的选项,该地址会在 AAA 会话期间发送到 RADIUS 服务器。
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'(1,000)或 '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 地址识别的 trial 用户无需 HotSpot 认证即可访问公共网络的时长。第二个时间值指定在允许该用户再次使用 trial 之前必须经过的时间。
trial-user-profile (string; 默认: default)为 trial 用户指定 HotSpot 用户配置文件。
use-radius (yes | no; 默认: no)使用 RADIUS 认证 HotSpot 用户。

HotSpot 用户配置文件

Sub-menu: /ip/hotspot/user/profile

用户配置文件菜单用于设置通用的 HotSpot 客户端设置。配置文件类似于具有相同设置集(速率限制、过滤链名称等)的用户组。

属性描述
add-mac-cookie (yes|no; 默认: yes)允许为用户添加 mac cookie。
address-list (string; 默认: )用户的 IP 地址将被添加到其中的地址列表名称。用于按用户组标记流量,以便进行 queue tree 配置。
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 的 jump 规则
incoming-packet-mark (string; 默认: )为来自此配置文件每个用户的入站数据包设置的 packet mark
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 的 jump 规则
outgoing-packet-mark (string; 默认: )为来自此配置文件每个用户的出站数据包设置的 packet mark
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)IP 地址,指定后,客户端将从 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 Active

Sub-menu: /ip/hotspot/active

HotSpot active 菜单显示所有已在 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 Host

Sub-menu: /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 walled-garden

Walled garden 是一种允许未授权使用某些资源、但访问其他资源需要授权的系统。例如,这对于提供有关 HotSpot 服务提供商或计费方式的一些常规信息很有用。

该菜单仅管理 HTTP 和 HTTPs 协议的 Walled Garden。其他协议也可以包含在 Walled Garden 中,但这在其他位置配置(在 /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")。可用的通配符有 '*'(匹配任意数量的任意字符)和 '?'(匹配任意一个字符)。这里也接受正则表达式,但如果该属性应被视为正则表达式,则应以冒号(':')开头。为了表明给定模式之前不允许有任何符号,我们在模式开头使用 ^ 符号。为了表明给定模式之后不允许有任何符号,我们在模式末尾使用 $ 符号。

示例

若要将 walled garden 中允许绕过认证的访问限制为仅 "www.example.com/test" 而不包括 "www.example.com/test/test.php":

/ip/hotspot/walled-garden
add dst-host=:^www.example.com path=":/test\$"

HotSpot walled-garden ip

为其他协议和不同的源/目标地址(或地址列表)绕过 HotSpot 认证。用于不同的服务(Winbox、SSH、Telnet、SIP 等)

属性描述
action (accept |drop|reject; 默认: allow)当数据包匹配规则时要执行的动作allow - 无需授权即可访问已开放的服务drop - 访问该服务需要授权reject - 访问该服务需要授权;当访问该服务时,会生成一条 ICMP reject 消息 host-unreachable
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 服务器的域名。指定此参数后,会向 Walled Garden 添加一条动态条目
dst-port (integer; 默认: )客户端发送请求的 TCP 端口号
protocol (integer | string; 默认: )IP 协议

IP 绑定

Sub-menu: /ip/hotspot/ip-binding

IP-Binding 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-addressbypassed - 执行转换,但将该客户端排除在 HotSpot 登录之外blocked - 不执行转换,并且来自主机的数据包会被丢弃

Cookie

该菜单包含所有发送给 HotSpot 客户端的 cookie,这些客户端通过 cookie 方法获得授权。所有条目均为只读。

Sub-menu: /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 active 菜单中被移除。
  • nas-request - 达到流量限制。
  • session-timeout。

要调试 mac-cookie 的问题,你需要启用 HotSpot 调试日志,并查找某个主机 mac-cookie 登录失败的原因。

服务器移除 mac cookie 的原因

  • /ip/hotspot/cookie/remove [number]。
  • RADIUS 服务器发送 Disconnect-Request。
  • 最终用户通过 HotSpot 状态页面自行注销。
  • 最终用户已达到其数据上限("traffic limit reached")。
  • Session-Timeout。
  • 如果 mac-cookie 登录失败。
  • 如果服务器检测到主机表中存在多个具有相同 mac-address 的条目。

HotSpot API JSON 的属性(RFC 7710)

根据文档中提供的 api.json 模板,以下是用于向客户端设备传达 captive portal 状态的各属性说明:

  • captive:一个布尔值(true 或 false),用于告知客户端设备它当前是否受 captive portal 限制。如果用户已经过认证,则返回 false。
  • user-portal-url:用户可用来访问登录页面或管理其当前会话的特定 URL。在 MikroTik RouterOS 中,该值由 $(link-login-only) 变量动态填充。
  • seconds-remaining:(可选)一个整数,表示当前会话过期之前剩余的秒数。仅在配置了会话超时时才会包含该项。
  • bytes-remaining:(可选)一个整数,表示用户可用的剩余数据配额(字节)。仅在为 HotSpot 用户应用了数据限制时才会包含该项。
  • can-extend-session:一个布尔值,表示用户是否有能力延长其当前会话,或通过门户购买/请求更多时间/数据。

在 HotSpot 服务器上使用 mangle 进行负载均衡

在多上行链路 HotSpot 设置中(例如 PCC),默认路由可能经常无法按预期工作,因为路由器会优先处理 mangle 规则,而不是本地目的地检查。

要解决此问题,请确保发往 HotSpot 服务器的流量在评估 mangle 链之前先通过 local 表路由。你可以通过以下方式实现:

  1. 调整 "/routing/settings"(路由表查找。
  2. 或者,添加特定的 "/routing/rule" 条目,以强制 HotSpot 服务器的流量优先使用 local 表(包括用于检测 HotSpot 服务器的 HTTP 80 流量)。