Skip to content
Skip to content
Networking

MikroTik Hotspot in Bridge Mode: The Complete Production Guide

Zill E Ali
May 20, 2026 4 min read
MikroTik router with glowing cyan ethernet ports and floating captive portal login panels

Running a MikroTik hotspot in bridge mode lets you drop a RouterOS box into an existing layer-2 network without renumbering a single subnet. Done right, it is invisible to the network and obvious to the user. Done wrong, half your clients never see the splash page and the other half walk straight past it.

This is the exact configuration I deploy on cafés, hostels, and small ISP hotspot zones, plus the mistakes that cost me the most call-outs.

When bridge mode is the right choice#

Use bridge mode when:

  • The gateway and DHCP already exist and you cannot change them (hotel, campus, shared building).
  • You need the hotspot to be removable — pull the box and the network still works.
  • Multiple APs already share one flat VLAN and re-addressing them is not on the table.

Use routed mode instead when you own the whole edge. Routing is simpler to reason about, and every "clients are invisible" ticket disappears.

The minimum working config#

routeros
/interface bridge
add name=bridge-hotspot protocol-mode=none
/interface bridge settings
set use-ip-firewall=yes
/interface bridge port
add bridge=bridge-hotspot interface=ether2
add bridge=bridge-hotspot interface=ether3
/ip pool
add name=hs-pool ranges=10.20.0.10-10.20.0.254
/ip dhcp-server
add address-pool=hs-pool interface=bridge-hotspot name=hs-dhcp disabled=no
/ip hotspot profile
set [find default=yes] use-radius=yes login-by=http-chap,mac-cookie html-directory=hotspot
/ip hotspot
add address-pool=hs-pool interface=bridge-hotspot name=hotspot1 profile=default

The single most important line is use-ip-firewall=yes. Without it, bridged frames never enter the IP firewall — and the hotspot's redirect rules live in the IP firewall. Everything else can be perfect and clients will still ride straight past the login page.

Trade-off worth knowing: use-ip-firewall pushes bridged traffic through the firewall path, which raises CPU on low-end hardware. On an hEX or hAP ac² you will feel it above roughly 150–200 concurrent users. Plan a CCR or RB5009 above that.

Where the DHCP server must live#

This is the second most common failure. The hotspot only sees a client as "active" if it learns the client's IP-to-MAC binding. If an upstream router hands out addresses, RouterOS sees MAC addresses with no leases and the session table stays empty.

Two valid options:

  1. Move DHCP onto the RouterOS box (shown above) — simplest, most reliable.
  2. Keep upstream DHCP and add /ip dhcp-relay on the bridge so leases pass through RouterOS.

Walled garden essentials#

Modern devices probe a known URL to decide whether they are behind a captive portal. Block the probe and the user sees "connected, no internet" even after a successful login.

HostWhy it matters
connectivitycheck.gstatic.comAndroid and ChromeOS portal detection
captive.apple.comiOS and macOS portal detection
www.msftconnecttest.comWindows 10/11 portal detection
Your payment gateway domainPaid vouchers must load before auth
routeros
/ip hotspot walled-garden
add dst-host=connectivitycheck.gstatic.com
add dst-host=captive.apple.com
add dst-host=*.msftconnecttest.com

Add DNS to the IP-level walled garden too, otherwise name resolution for those hosts fails before HTTP is ever attempted:

routeros
/ip hotspot walled-garden ip
add action=accept dst-address=8.8.8.8 protocol=udp dst-port=53

Closing the common bypasses#

MAC cloning. A user copies the MAC of an authorised device and inherits the session. Bind sessions to MAC and IP, and keep mac-cookie lifetimes short (a working day, not a month):

routeros
/ip hotspot profile
set [find default=yes] mac-cookie-timeout=1d

Static IP self-assignment. A user sets a manual address in your subnet and skips DHCP. Drop unauthenticated forwarding at the firewall:

routeros
/ip firewall filter
add chain=forward src-address=10.20.0.0/24 hotspot=!auth action=drop \
comment="Block non-authenticated hotspot subnet"

DNS tunnelling. Restrict outbound port 53 to the router itself and force clients through it:

routeros
/ip firewall nat
add chain=dstnat protocol=udp dst-port=53 action=redirect to-ports=53 \
in-interface=bridge-hotspot

Verifying the deployment#

Work down this list before you leave site:

  1. /ip hotspot active print — a freshly logged-in client shows MAC and IP. IP missing means DHCP placement is wrong.
  2. /ip hotspot host print — unauthenticated devices should appear here. Empty table means use-ip-firewall is off.
  3. Connect an iPhone and an Android handset. Both should auto-open the portal. Only one working means a walled-garden entry is missing.
  4. Set a manual IP on a laptop. It must have no internet.
  5. /tool profile under load — if the firewall process is pegged, the hardware is undersized for bridge mode.

RADIUS: when to add it#

For a single site, local hotspot users are fine. Move to RADIUS the moment you have more than one site, need per-plan bandwidth profiles, or want usage accounting for billing. FreeRADIUS with a MySQL or PostgreSQL backend handles thousands of concurrent sessions on modest hardware, and rate limits arrive as a Mikrotik-Rate-Limit attribute rather than being hard-coded per router.

That is exactly the layer NexaLink automates — plans, vouchers, and per-user rate limits pushed to every RouterOS box from one panel.

Field checklist#

  • use-ip-firewall=yes on bridge settings
  • DHCP on the RouterOS box or relayed through it
  • Walled garden covers Android, iOS, Windows, DNS, payment gateway
  • Forward drop rule for hotspot=!auth
  • Portal tested on two phone platforms and a laptop
  • Configuration exported and stored off-box

Get those six right and the hotspot stops generating tickets.

Zill E Ali

MTCNA-certified network engineer & founder of NexaLink. ISP infrastructure, MikroTik, and FTTH.

View all posts by Zill E Ali →

Related articles

Comments coming soon — powered by Giscus in Phase 2.