Appearance
Other controllers
Every device type that does not have its own setup guide: where it stands today, and what to set for the ones you can deploy.
For the vendors with their own page (MikroTik, Meraki, Cisco WLC, Huawei, TP-Link Omada, Aruba, Ubiquiti, Ruckus, Fortinet, Ruijie / WiFiDog, H3C, Allied Telesis) see Connecting a controller.
Status
| Device type | Status | Notes |
|---|---|---|
| Cambium cnMaestro | Available | Listed in Kiwire as Cambium. Setup below. |
| EnGenius | Available | Setup below. |
| Juniper Mist | Not available yet | Listed as Mist. A guest login does not complete on this controller type today; contact Synchroweb. |
| Motorola / Zebra WiNG | Available | Listed as Zebra Wifi. Setup below. |
| Xirrus | Available | Setup below. |
| Zyxel AP | Available | Listed in the Vendor list. Setup below. |
| Peplink | Available | Listed in the Vendor list. Setup below. |
| SonicWall | Not available yet | Listed as SonicWall. SonicOS external guest authentication uses its own message exchange with the portal server, which Kiwire does not perform today; contact Synchroweb. |
| Sundray | Not available yet | A guest login does not complete on this controller type today; contact Synchroweb. |
| CMCC | Not available yet | A guest login does not complete on this controller type today; contact Synchroweb. |
| Nomadix gateway | Available | Listed as Nomadix. Setup below. |
| Nomadix (XML API) | Available through Synchroweb | Listed as Nomadix - XML. Setup below. |
| ChilliSpot / CoovaChilli | Available | Listed as Chillispot. Setup below. |
| pfSense | Available | Listed as Pfsense. Setup below. |
| Other / generic RADIUS | Available | Listed as Other. For a gateway that can redirect with parameter names you choose; see Other / generic. |
| Virtual NAS | — | Not a controller type of its own: it is an extra record for the name a cloud controller sends in RADIUS. See Identity and Virtual NAS. |
Status: not available yet means the controller type is listed in Kiwire but a guest login does not complete on it today. Contact Synchroweb before deploying one.
Controller-side steps on this page are shorter than on the vendors with their own guide. Where a step could not be checked against the vendor's own documentation it says so; the values Kiwire needs are what matter, and Controller Test shows whether they arrive.
Before you start (all types)
From Kiwire:
- the RADIUS server address shown in the Setup Guide checklist ("Before you add your controller" › "RADIUS Authentication & Accounting"), written
<radius-server-ip>below; - a shared secret of at most 64 characters, written
<shared-secret>; <kiwire-host>, the host name of your portal.
On the device: admin access, the guest SSID or interface, and the identifier the device sends (listed per type below).
Cambium
| Device type in Kiwire | Cambium |
| Redirect URL | https://<kiwire-host>/login/cambium |
| RADIUS | auth 1812 / acct 1813 (UDP) |
| Identity must equal | the NAS ID the AP sends as ga_nas_id in the redirect, and the NAS-Identifier it sends in RADIUS (make them the same) |
| Disconnect / live changes (CoA) | standard RADIUS CoA / Disconnect to the AP's IP Address, port 3799 by default |
| Data caps | Kiwire sends Cambium's own traffic-quota attribute, plus time limits |
How the login finishes. The AP's redirect carries ga_srvr (the AP's address), ga_cmac (guest MAC), ga_nas_id, ga_ssid, ga_orig_url and a token ga_Qv. After the portal, the guest's browser posts ga_user and ga_pass to http://<ga_srvr>:880/cgi-bin/hotspot_login.cgi, with ga_Qv and the original page on the address, as Cambium's guest-access integration guide describes. The AP then checks the credentials against Kiwire over RADIUS.
On the AP or in cnMaestro (menu names vary between firmware versions; the values are what matter):
- WLAN › Guest Access: enable, portal mode External Hotspot, redirect / splash URL
https://<kiwire-host>/login/cambium. - RADIUS authentication server
<radius-server-ip>port 1812 and accounting server port 1813,<shared-secret>; set the NAS ID to a fixed name, for examplesite1-cambium. - Walled garden:
<kiwire-host>and the hosts in Walled garden.
In Kiwire. Vendor Cambium, Identity = the NAS ID (site1-cambium), the AP's IP Address and COA Port 3799.
Test it. Controller Test should show ga_srvr, ga_cmac, ga_nas_id and ga_Qv. Then log in as a guest.
Limits. Data caps depend on the AP applying Cambium's traffic-quota attribute; check a test guest's usage under Reporting before relying on them.
EnGenius
| Device type in Kiwire | EnGenius |
| Redirect URL | https://<kiwire-host>/login/engenius |
| RADIUS | auth 1812 / acct 1813 (UDP) |
| Identity must equal | the nas_id inside the AP's actionurl, and the NAS-Identifier the AP sends in RADIUS |
| Disconnect / live changes (CoA) | standard RADIUS CoA / Disconnect to the AP's IP Address, port 3799 by default — only if the AP accepts them |
| Data caps | time limits only (Session-Timeout) |
What Kiwire expects in the redirect. EnGenius packs everything into one parameter, actionurl: its query holds client_mac, client_ip, userurl, ap_ip, nas_id, vlan and ssidProfileId. Kiwire unpacks it, and after the portal posts username, password and userurl (the original page) to that same actionurl. The AP then checks the credentials against Kiwire over RADIUS.
On the AP or in EnGenius Cloud (menu names vary by firmware version):
- Captive portal / guest SSID with an external splash page
https://<kiwire-host>/login/engeniusand RADIUS authentication. - RADIUS server
<radius-server-ip>, auth 1812, accounting 1813,<shared-secret>. - Walled garden:
<kiwire-host>and the hosts in Walled garden.
In Kiwire. Vendor EnGenius, Identity = the nas_id value (Controller Test shows it), the AP's IP Address and COA Port 3799.
Test it. In Controller Test, check that the guest MAC, nas_id and the login address are all found. If the guest MAC is missing, contact Synchroweb: some firmware places it where it cannot be read.
Limits. No data caps.
Motorola / Zebra WiNG
| Device type in Kiwire | Zebra Wifi |
| Redirect URL | https://<kiwire-host>/login/motorola |
| RADIUS | auth 1812 / acct 1813 (UDP) |
| Identity must equal | the AP MAC inside the controller's Qv value, and the NAS-Identifier it sends in RADIUS |
| Disconnect / live changes (CoA) | standard RADIUS CoA / Disconnect to the controller's IP Address, port 3799 by default — only if it accepts them |
| Data caps | time limits only (Session-Timeout) |
What Kiwire expects in the redirect. WiNG sends an encoded Qv value and the hotspot server address hs_server. Kiwire decodes Qv to find the guest MAC, the AP MAC and the SSID. After the portal, the guest's browser posts f_user, f_pass, f_hs_server and f_Qv to http://<hs_server>:880/cgi-bin/hslogin.cgi, and WiNG checks the credentials against Kiwire over RADIUS.
On the controller (menu names vary by firmware version):
- Captive portal policy with externally hosted pages at
https://<kiwire-host>/login/motorolaand RADIUS authentication. - RADIUS server
<radius-server-ip>, auth 1812, accounting 1813,<shared-secret>. - Walled garden / allowed hosts:
<kiwire-host>and the hosts in Walled garden.
In Kiwire. Vendor Zebra Wifi, Identity = the AP MAC as decoded (Controller Test shows it). If the NAS-Identifier WiNG sends in RADIUS is different, add a record for it too — see Identity and Virtual NAS.
Limits. No data caps.
Xirrus
| Device type in Kiwire | Xirrus |
| Redirect URL | https://<kiwire-host>/login/xirrus |
| RADIUS | auth 1812 / acct 1813 (UDP) |
| Identity must equal | the nasid in the redirect (or apmac when the AP sends no nasid), and the NAS-Identifier it sends in RADIUS |
| Disconnect / live changes (CoA) | standard RADIUS CoA / Disconnect to the AP's IP Address, port 3799 by default — only if the AP accepts them |
| Data caps | time limits only (Session-Timeout) |
How the login finishes. Xirrus uses a ChilliSpot-style exchange. The redirect carries mac, uamip, uamport, a challenge chal, nasid, userurl, ssid and vlan. After the portal, the guest's browser opens http://<uamip>:<uamport>/logon with the username, a hashed response and the original page. The AP checks the login against Kiwire over RADIUS and sends the browser back to Kiwire with res=success, and Kiwire sends the guest on to the page they first asked for.
The shared UAM secret is the Identity. Kiwire signs the hashed response with the controller's Identity as the UAM secret. Set the AP's portal / UAM secret to exactly the same text as the Identity. (The name of this setting varies by firmware version.)
On the AP (menu names vary by firmware version): web page redirect / external portal to https://<kiwire-host>/login/xirrus, RADIUS <radius-server-ip> 1812 / 1813 with <shared-secret>, and <kiwire-host> plus the hosts in Walled garden allowed before login.
Limits. No data caps.
ChilliSpot / CoovaChilli
| Device type in Kiwire | Chillispot |
| Redirect URL | https://<kiwire-host>/login/chillispot (CoovaChilli's uamserver) |
| RADIUS | auth 1812 / acct 1813 (UDP) |
| Identity must equal | the nasid in the redirect (radiusnasid; apmac is used when no nasid is sent), and the NAS-Identifier in RADIUS — the same value |
| Disconnect / live changes (CoA) | yes, port 3799 (CoovaChilli's coaport) |
| Data caps | yes — Kiwire sends ChilliSpot's data-cap attribute, plus time limits |
How the login finishes. CoovaChilli redirects with uamip, uamport, challenge, nasid, mac, userurl, ssid and vlan. After the portal, the guest's browser opens http://<uamip>:<uamport>/logon with the username and the password encoded with the challenge and the UAM secret. CoovaChilli checks them against Kiwire over RADIUS, then sends the browser back to Kiwire with res=success, and Kiwire sends the guest on to their original page.
One secret for everything. Kiwire encodes the password with the record's Shared Secret Key, so the gateway's uamsecret and its RADIUS secret must both be <shared-secret> (64 characters at most).
On the gateway (chilli.conf option names from the CoovaChilli manual; packaged builds such as OpenWrt use their own names for the same settings):
radiusserver1 <radius-server-ip>
radiusauthport 1812
radiusacctport 1813
radiussecret <shared-secret>
radiusnasid site1-chilli
uamserver https://<kiwire-host>/login/chillispot
uamsecret <shared-secret>
uamallowed <kiwire-host>,fonts.googleapis.com,fonts.gstatic.com
coaport 3799
coanoipcheckcoanoipcheck is needed because Kiwire's disconnects come from Kiwire's application server, not from the RADIUS server address. Add the other hosts in Walled garden to uamallowed.
In Kiwire. Vendor Chillispot, Identity = site1-chilli (the radiusnasid), Shared Secret Key = <shared-secret>, the gateway's IP Address and COA Port 3799.
Test it. Controller Test should show uamip, uamport, challenge and nasid. A wrong uamsecret shows as a rejected password for every guest.
Limits. Data caps above 4 GB are sent as the 4 GB maximum when a profile is changed on a live session.
pfSense
| Device type in Kiwire | Pfsense |
| Redirect URL | https://<kiwire-host>/login/pfsense — from a custom portal page on pfSense (below) |
| RADIUS | auth 1812 / acct 1813 (UDP) |
| Identity must equal | CaptivePortal-<zone name> — pfSense's default RADIUS NAS Identifier for the zone |
| Disconnect / live changes (CoA) | no |
| Data caps | time limits only (Session-Timeout) |
How the login finishes. pfSense does not send guests to an external portal by itself: its custom portal page sends them to Kiwire with the login address, guest MAC, guest IP and zone. After the portal, the guest's browser posts auth_user, auth_pass, redirurl, zone and accept to pfSense's login address — the form pfSense's documentation describes — and pfSense checks the credentials against Kiwire over RADIUS.
On pfSense (Services › Captive Portal › the zone):
- Authentication: RADIUS, primary server
<radius-server-ip>port 1812,<shared-secret>; RADIUS accounting on, port 1813. Leave NAS Identifier empty so pfSense sends its default,CaptivePortal-<zone name>. - Use custom captive portal page and upload a portal page that forwards the guest to
https://<kiwire-host>/login/pfsense?loginurl=$PORTAL_ACTION$&zone=$PORTAL_ZONE$&CLIENT_MAC=$CLIENT_MAC$&CLIENT_IP=$CLIENT_IP$. Check with Controller Test thatCLIENT_MACandCLIENT_IParrive filled in; the MAC and IP variables depend on the pfSense version. - Allowed Hostnames:
<kiwire-host>and the hosts in Walled garden. - After authentication Redirection URL: where guests land after login.
In Kiwire. Vendor Pfsense, Identity = CaptivePortal- followed by the zone name exactly as pfSense shows it (for example CaptivePortal-guests), Shared Secret Key = <shared-secret>. If you set your own NAS Identifier on pfSense, add a record for that value too.
Limits. No disconnects or live profile changes. Kiwire sends data caps with pfSense's own attribute (up to 4 GiB), plus time limits.
Nomadix gateway
| Device type in Kiwire | Nomadix |
| Redirect URL | https://<kiwire-host>/login/nomadix |
| RADIUS | auth 1812 / acct 1813 (UDP) |
| Identity must equal | the gateway's node ID it sends as NI in the redirect, and the NAS-Identifier it sends in RADIUS |
| Disconnect / live changes (CoA) | standard RADIUS CoA / Disconnect to the gateway's IP Address, port 3799 by default — only if the gateway accepts them |
| Data caps | time limits only (Session-Timeout) |
What Kiwire expects in the redirect. The gateway's portal-page redirect must carry the guest MAC as MA, the guest IP as SIP, the original URL as OS, the node ID as NI, and optionally the port/VLAN as PORT. These are the parameters a Nomadix portal page redirect normally appends.
How the login finishes. After the guest signs in, Kiwire sends the browser to Nomadix's standard login address http://login.nomadix.com:1111/usg/process with the username, password and original URL. The gateway intercepts that address itself, then checks the credentials against Kiwire over RADIUS.
On the gateway (menu names and commands vary between firmware versions; the values are what matter):
- AAA / RADIUS: authentication server
<radius-server-ip>port 1812, accounting 1813, shared secret<shared-secret>. Turn accounting on. - Set the gateway's RADIUS NAS-Identifier to the same value as its node ID (
NI), so one Kiwire record covers both. If they must differ, register both strings as Identities. - Portal page / home-page redirect: point it at
https://<kiwire-host>/login/nomadixwith the MAC, IP, original URL and node ID appended. - Pass-through (walled garden): add
<kiwire-host>and the other hosts in Walled garden.
Limits. No data caps. Whether the gateway acts on Kiwire's disconnect or profile-change requests depends on its firmware and RADIUS settings; test it before relying on it.
Nomadix (XML API)
With Nomadix - XML, Kiwire's server logs the guest in on the gateway through its XML interface, instead of sending the browser to the gateway's login address. Synchroweb sets up the first site with you, because Kiwire's server has to reach the gateway.
| Device type in Kiwire | Nomadix - XML |
| Redirect URL | https://<kiwire-host>/login/nomadix_xml |
| RADIUS | auth 1812 / acct 1813 (UDP) |
| Identity must equal | the node ID the gateway sends as NI, and its RADIUS NAS-Identifier |
| Speed changes | pushed to the gateway through its XML interface |
- Set up RADIUS, the portal-page redirect (to
https://<kiwire-host>/login/nomadix_xml) and the walled garden as for the Nomadix gateway above. - Enable the gateway's XML interface and allow Kiwire's server to reach it. The address Kiwire connects from is shown at the top of System › Device Controller.
- On the Device Controller record: IP Address = the gateway's address as Kiwire reaches it. Kiwire uses the XML port 1111; if yours differs, add it to the IP Address (
203.0.113.10:8080) or set it as the COA Port. - Test with Controller Test and a real guest login, then check Reporting › Login › Active Session.
Peplink
| Device type in Kiwire | Peplink |
| Redirect URL | https://<kiwire-host>/login/peplink |
| RADIUS | auth 1812 / acct 1813 (UDP) |
| Identity must equal | the device name the router sends as device_name in the redirect, and the NAS-Identifier it sends in RADIUS |
| Disconnect / live changes (CoA) | standard RADIUS CoA / Disconnect to the router's IP Address, port 3799 by default — only if the router accepts them |
| Data caps | time limits only (Session-Timeout) |
What Kiwire expects in the redirect. client_mac (guest MAC), ip (guest IP), host_ip (router IP), form_action (the router's login address), device_name (the Identity) and ssid. After the portal, the guest's browser opens the form_action address with the username, password and command=login; the router then checks them against Kiwire over RADIUS. Kiwire does not pass an original URL back, so set the post-login landing page on the router.
On the router (menu names and commands vary between firmware versions; the values are what matter):
- Network › Captive Portal (or the captive-portal profile in InControl): authentication by RADIUS server, with
<radius-server-ip>, auth port 1812, accounting 1813 and<shared-secret>. Turn accounting on. - Splash page: external / hosted by an external server, URL
https://<kiwire-host>/login/peplink. - Allowed domains (walled garden):
<kiwire-host>and the hosts in Walled garden.
Before you roll out, open Portals › Troubleshoot › Controller Test, trigger the splash page from a test device, and check that device_name and form_action arrive. If your firmware names them differently, contact Synchroweb — the parameter names are part of the Controller Redirection Config, which Synchroweb maintains.
Zyxel AP
| Device type in Kiwire | ZyXEL AP |
| Redirect URL | https://<kiwire-host>/login/zyxelap |
| RADIUS | auth 1812 / acct 1813 (UDP) |
| Identity must equal | the AP MAC, exactly as the AP sends it in apmac (one record per AP) |
| Disconnect / live changes (CoA) | standard RADIUS CoA / Disconnect to the AP's IP Address, port 3799 by default — only if the AP is reachable from Kiwire |
| Data caps | time limits only (Session-Timeout) |
What Kiwire expects in the redirect. The external captive portal redirect Zyxel APs use: usermac, userip, apip, apmac, ssid_name and apurl (the AP's own login address). After the portal, the guest's browser opens apurl with the username, password and a success_url. Kiwire has no original page from Zyxel to pass back, so success_url is Google's home page unless you set a post-login landing page on the AP or in Nebula.
Identity. Register each AP with Identity = its MAC in the same colon form the AP sends (matching ignores upper/lower case, but : and - are different). If the AP sends no NAS-Identifier in RADIUS, Kiwire uses the AP MAC from Called-Station-Id, so the same record covers RADIUS too. If the AP does send a NAS-Identifier, that string must also be a registered Identity — see Identity and Virtual NAS.
On the AP or in Nebula (menu names and commands vary between firmware versions; the values are what matter):
- SSID sign-on / authentication: RADIUS server
<radius-server-ip>, auth 1812, accounting 1813,<shared-secret>. Turn accounting on. - Captive portal: external captive portal URL
https://<kiwire-host>/login/zyxelap(in Nebula: Configure › Access points › Captive portal customization). - Walled garden:
<kiwire-host>and the hosts in Walled garden. Keep SSID names free of special characters — Zyxel carries the SSID in the redirect URL.
Other / generic
For a gateway whose vendor isn't listed but that lets you choose the names of its redirect parameters and posts a username and password to its own login page.
| Device type in Kiwire | Other |
| Redirect URL | https://<kiwire-host>/login/other |
| RADIUS | auth 1812 / acct 1813 (UDP) |
| Identity must equal | the nasid value in the redirect, and the NAS-Identifier it sends in RADIUS |
| Disconnect / live changes (CoA) | standard RADIUS CoA / Disconnect to the device's IP Address, port 3799 by default — only if the device accepts them |
| Data caps | time limits only (Session-Timeout) |
What Kiwire expects in the redirect. Configure the gateway to append exactly these names:
| Parameter | Value |
|---|---|
nasid | the gateway's identifier (register it as the Identity) |
mac | the guest's MAC address |
ip | the guest's IP address |
url | the page the guest first asked for |
login_url | the gateway's own login address |
After the portal, the guest's browser POSTs username and password to login_url; the gateway then checks them against Kiwire over RADIUS. Kiwire does not pass the original page back in this post, so set the post-login landing page on the gateway.
Before you roll out, open Portals › Troubleshoot › Controller Test, trigger the redirect from a test device, and check that all five parameters arrive. Then complete a real guest login and check the session appears under Reporting › Login › Active Session. If your gateway can't use these names, contact Synchroweb about adding the vendor.
In Kiwire (all types on this page)
- System › Device Controller → add: Vendor, Identity (see each table above), Shared Secret Key (same as on the device), and under Advanced Configuration the IP Address and COA Port Kiwire should send disconnects to. For Peplink and Zyxel, ask Synchroweb to add the record.
- Check the redirect parameters — The redirect and the login config.
- Add a zone rule and journey — Controllers and zones and Portal designer.
- Test with Portals › Troubleshoot › Controller Test, a real guest login, then Reporting › Login › Active Session — see Before you leave site.
Vendor reference
- Cambium guest access: Cambium community — Guest Access Portal Integration (cnPilot).
- CoovaChilli options: CoovaChilli — chilli.conf(5).
- pfSense portal page, NAS Identifier and RADIUS attributes: Netgate — Zone configuration options.
- Nomadix login address and portal page: Nomadix Access Gateway user manual, "Setting up the portal page".
- Zyxel Nebula captive portal: Zyxel support — Nebula captive portal via SSID.
- SonicOS guest authentication: SonicWall — CGI replaced with API for guest authentication.