Connect your access point to Wibizpro and start selling WiFi access in minutes.
In RouterOS, open New Terminal. Do the blocks below in order — each one depends on the previous.
Recent MikroTik routers ship with the hotspot disabled at a level below user permissions. No password and no API can unlock it.
/system/device-mode/update mode=advancedThen, within 5 minutes: unplug the power, wait 30 seconds, plug it back in.
Verify:
/system/device-mode/print # expected: mode=advanced hotspot=true fetch=trueThe hotspot applies to the interface you give it. On a factory router, the bridge also carries the built-in WiFi — so the hotspot would cover it too. Move the Ethernet ports to their own bridge:
/interface bridge add name=bridge-clients /interface bridge port set [find interface=ether2] bridge=bridge-clients /interface bridge port set [find interface=ether3] bridge=bridge-clients /interface bridge port set [find interface=ether4] bridge=bridge-clients /interface bridge port set [find interface=ether5] bridge=bridge-clients /ip address add address=192.168.90.1/24 interface=bridge-clients /ip pool add name=clients-pool ranges=192.168.90.10-192.168.90.254 /ip dhcp-server add name=dhcp-clients interface=bridge-clients \ address-pool=clients-pool disabled=no /ip dhcp-server network add address=192.168.90.0/24 \ gateway=192.168.90.1 dns-server=192.168.90.1 /ip dns set allow-remote-requests=yes # Stable name printed on ticket QR codes (resolves to this hotspot) :if ([:len [/ip dns static find where name="wifi.wibizpro"]] > 0) do={ \ /ip dns static remove [find where name="wifi.wibizpro"] } /ip dns static add name=wifi.wibizpro address=192.168.90.1Replace rad_xxx with your site's secret. The hotspot lives on the router — never on the access points.
Run these after the hotspot exists — it is what creates the files. Both are required: login.html is the page the client opens, redirect.html is the one the operating system shows automatically when it detects a captive portal.
/file set [find name~"login.html"] contents="<html><head></head><body><script>(function(){var portal='https://wibizpro.online/portal/?token=dt_your-site-token&clientMac=\$(mac-esc)&ap=wibizpro';var code='';try{var m=(window.location.href+'&').match(/[?&]code=([^&]+)/);if(m)code=decodeURIComponent(m[1]);}catch(e){}if(!code){try{var orig='\$(link-orig)';var m2=(orig+'&').match(/[?&]code=([^&]+)/);if(m2)code=decodeURIComponent(m2[1]);}catch(e){}}if(code)portal+='&code='+encodeURIComponent(code);window.location.replace(portal);})();</script><noscript><a href='https://wibizpro.online/portal/?token=dt_your-site-token&clientMac=\$(mac-esc)&ap=wibizpro'>Ouvrir le portail</a></noscript></body></html>" /file set [find name~"redirect.html"] contents="<html><head></head><body><script>(function(){var portal='https://wibizpro.online/portal/?token=dt_your-site-token&clientMac=\$(mac-esc)&ap=wibizpro';var code='';try{var m=(window.location.href+'&').match(/[?&]code=([^&]+)/);if(m)code=decodeURIComponent(m[1]);}catch(e){}if(!code){try{var orig='\$(link-orig)';var m2=(orig+'&').match(/[?&]code=([^&]+)/);if(m2)code=decodeURIComponent(m2[1]);}catch(e){}}if(code)portal+='&code='+encodeURIComponent(code);window.location.replace(portal);})();</script><noscript><a href='https://wibizpro.online/portal/?token=dt_your-site-token&clientMac=\$(mac-esc)&ap=wibizpro'>Ouvrir le portail</a></noscript></body></html>"If the command refuses to run — some firmware versions object to the nested quotes — edit both files by hand: Winbox → Files → hotspot folder → open the file → replace its whole contents.
The expected log line for a client without a pass is: login failed: No active pass — buy one at wibizpro.online. If you see RADIUS server is not responding instead, the server is not returning the Message-Authenticator — contact us rather than changing any router setting.
The WireGuard tunnel and the CoA operations are covered in the full runbook: docs/mikrotik-site-setup.md
Unpaid clients are blocked until they authenticate — including the Wibizpro page itself. Allow it in the walled garden:
/ip hotspot walled-garden add dst-host=wibizpro.online action=allow add dst-host=*.wibizpro.online action=allow /ip hotspot walled-garden ip add action=accept dst-address=144.202.47.181Do not allow *captive.apple.com or 17.0.0.0/8: macOS and iOS then believe the network already has Internet and never open the captive assistant. The portal and server rules above are enough. Add only your payment providers' domains if needed.
Any brand works — the access points are transparent bridges. On each one:
Once configured, here is what your customers experience:
Expired clients are automatically disconnected at the exact end of their pass.
You can monetize several networks differently — all from a single Wibizpro dashboard:
Example:
| SSID | Portal URL | Pricing |
|---|---|---|
| GuestWiFi | /portal/?token=dt_guest |
$1–$25 USD |
| Premium | /portal/?token=dt_prem |
$5–$100 USD |
| Staff | No portal | Free |
The SSIDs can share the same hardware — no extra equipment needed. Revenue from each is tracked separately in your Wibizpro dashboard.
Standalone TP-Link Omada access points are still supported. If you already have one running, this is its configuration — it does not change.
On the Wireless → Portal tab of your EAP (e.g. EAP110), fill in exactly these values:
In the Wireless → Portal tab, open the Free Authentication Policy and add:
Each entry needs a name — e.g. Wibizpro-80, Wibizpro-443, DNS.
Enter each address in the Destination field, and its port in Destination Port — never in Source. The policy is a list of places clients are ALLOWED to reach before paying, so the address belongs on the destination side.
Better still: keep the access point and put a MikroTik router in front of it as the gateway. Your EAP110 keeps working — set it to bridge mode, turn off its captive portal and its RADIUS, and follow the five steps above instead.
Wibizpro hosts the captive portal for you. We handle:
Your Wibizpro dashboard gives you full visibility: