Unifi Mesh-controller in een Docker-container
Met de wifi-accesspoints van de UniFi-familie van Ubiquiti kun je grote gebouwen of gebieden dekkend van een uniform wifi voorzien – inclusief een gastnetwerk met vouchers en een captive-portal. Een Docker-container op je pc of Raspberry Pi is voldoende voor het configureren en het beheer.
Het instellen van een wifinetwerk in een groot, massief of hoekig gebouw is best lastig. Accesspoints beconcurreren elkaar ongecoördineerd op dezelfde wifikanalen. Maar als je ze op verschillende frequenties instelt wisselen de wifiapparaten pas nadat ze het radiocontact met het vorige accesspoint verloren zijn. De oplossing daarvoor zijn wifimeshes, waarbij de accesspoints de verbindingen met de clients onder elkaar coördineren. Daardoor heb je automatisch contact met het op dat moment best bereikbare accesspoint. Op die manier blijft je wifiverbinding door het hele huis heen stabiel.
De ufovormige wifiaccesspoints van Ubiquiti (zie bijvoorbeeld [1]) zijn een betaalbare en zuinige oplossing voor grotere wifiinstallaties waarbij een afzonderlijk accesspoint of wifirepeater niet voldoende dekking meer biedt. Ze zijn eigenlijk voor het zakelijk segment bedoeld, maar de UAPACLR is met zijn prijs van 100 euro zeker ook interessant voor privégebruik in huis. Hij werkt simultaan op de 2,4en 5GHzband (IEEE 802.11a/b/g/n/ac/h), is ook buitenshuis te gebruiken en verbruikt maar 3,7 watt via PoweroverEthernet. Een bijpassende injectorvoeding en het materiaal voor wandof plafondmontage wordt meegeleverd. Je kunt er meerdere tegelijk in één pakket kopen, maar dat maakt voor de prijs per stuk eigenlijk niet zoveel uit.
Het grote verschil met de standaard accesspoints voor thuisgebruik is dat de UniFiaccessspoints geen webfrontend hebben. Het configureren, beheren en updaten doe je allemaal centraal via de UniFi Network Controller, die wel een webfrontend heeft. Die controller is redelijk makkelijk als Dockercontainer in te richten en uptodate te houden – zelfs op een Raspberry Pi.
DROOGDOK
Het installeren van de Docker Community Edition onder Linux staat op docker.com en in [2] voor de verschillende Linuxdistributies beschreven. Daarnaast heb je docker-compose nodig, dat je als binair bestand in de directory /usr/local/bin downloadt en vervolgens uitvoerbaar moet maken. De commando’s die je daarvoor nodig hebt staan net als alle andere genoemde commando’s klaar om te downloaden als tekstbestand,
via de link op de laatste pagina van dit artikel. Bij een Raspberry Pi moet je op een paar dingen letten: het overzetten van Docker op de nieuwe Raspbian Buster is op het moment van schrijven nog niet afgerond, waardoor we in dit artikel Raspbian Stretch van medio november 2018 gebruikt hebben. Die versie wordt op de webserver van de Raspberry Pi Foundation nog steeds aangeboden. De downloadlink staat ook bij de link op de laatste pagina van dit artikel.
Met de nieuwe Raspberry Pi 4 is dit project dus helaas nog niet te gebruiken. We hebben dan ook een Raspberry Pi 3B+ gebruikt, maar die voldoet in dit geval ruimschoots. Mochten de pakketten van Docker voor Raspbian Buster verschijnen, dan volstaat het om in het bestand /etc/apt/sources.list.d/docker.list de distributienaam ‘stretch’ te veranderen in ‘buster’ – alle andere stappen zullen dan verder hetzelfde zijn als bij Raspbian Stretch.
Het installeren van de Docker Community Edition onder Raspbian is snel gedaan door de Dockerrepository als pakketbron toe te voegen en de bijbehorende sleutel te importeren. Vervolgens werk je de pakketlijsten bij en installeer je de Dockerpakketten: echo "deb [arch=armhf] https://download. docker.com/linux/raspbian stretch stable" | sudo tee /etc/apt/sources.list.d/docker.list curl -fsSL "https://download.docker.com/linux/ raspbian/gpg" | sudo apt-key add - sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io
Eventuele foutmeldingen dat voor sommige kernelversies nog geen modules beschikbaar zouden kunnen zijn, kun je negeren.
Ook het installeren van docker-compose werkt op een Raspberry Pi anders dan bij de gebruikelijke Linuxsystemen. Nadat je eerst de ontwikkelpakketten van Python 3 en Python PIP geïnstalleerd hebt, gebruik je PIP om docker-compose te installeren: sudo apt install python3-dev python3-pip sudo pip3 install docker-compose
CONTAINERBOUW
Voor de UniFicontroller zijn er twee verschillende Dockercontainers: jacobalberty/unifi voor pc’s en ryansch/unifirpi speciaal voor de Raspberry Pi. Het configureren daarvan is kinderspel door bij de link op de laatste pagina van dit artikel het bestand dockercompose.yml te downloaden. Vervolgens start je de UniFicontroller met het volgende commando in de directory van het composebestand:
sudo docker-compose up -d
De container wordt na een herstart van de computer automatisch weer geladen, dus is een eigen systemdscript niet nodig. Om hem af te sluiten, voer je het volgende commando uit in de directory van het composebestand:
sudo docker-compose down Het is niet nodig om de controller permanent te laten draaien. Die heb je namelijk alleen voor het inrichten, beheren, monitoren en updaten van de firmware nodig – en dus niet voor het aansturen van de meshes, bijvoorbeeld de roaming of het verdelen van meerdere clients over meerdere accesspoints. Dat regelen de accesspoints geheel zelfstandig onder elkaar.
Desondanks kan het wel interessant zijn om de UniFicontroller continu te laten draaien om bijvoorbeeld bij wifiproblemen historische data over storingen en verbindingsverbrekingen te kunnen bekijken. Ook automatische firmwareupdates van de accesspoints vergen een continu draaiende controller. Als je niet een computer altijd aan hebt staan om bijvoorbeeld als server te dienen, is de Raspberry Pi een energiezuinig alternatief. Andere mogelijke oplossing zijn het installeren van de UniFi Controller in een Dockercontainer op een NAS of het gebruik van een UniFi Cloud Key (zie [3]).
MESH VERBINDEN
Zoals al vermeld hebben de accesspoints uit de UniFiserie geen eigen webfrontend. Voorheen was het noodzakelijk om elk afzonderlijk accesspoint via SSH voor te bereiden op het verbinden met een UniFicontroller, maar bij de huidige controllerversie 5.10.25 vervalt die stap: de controller herkent de accesspoints automatisch en kan ze, als ze de standaard fabrieksinstellingen nog hebben, zonder verdere handelingen toevoegen (adopteren). Dat werkt ook zo als je later een ander accesspoint aan een mesh wilt toevoegen. Daarom kun je UniFiaccesspoints die je eerder al gebruikt hebt, beter eerst een reset geven om ze weer op de originele instellingen terug te zetten.
Voordat je met installeren van de UniFicontroller begint, moet je alle accesspoints op het netwerk aansluiten en even een paar minuten wachten tot ze opgestart zijn en via DHCP een netwerkadres hebben gekregen. De Dockercontainer kan in de tussentijd al wel gestart worden, het is alleen van belang dat je pas met de eerste configuratie begint als alle accesspoints beschikbaar zijn – dan bespaar je je het werk dat je ze later één voor één moet adopteren.
Voor het configureren van de meshcontroller open je het webfrontend in de browser. Je kunt bij ‘Settings / User Interface’ onder Localization een andere taal instellen, maar wij hebben dat op Engels laten staan. Ga naar de url https://raspberrypi:8443. Als je router niets kan met de hostnaam van dat lokale apparaat, kun je ook het IPadres van de Raspberry Pi of je pc opgeven waar de Dockercontainer op draait – let daarbij echter op HTTPS als protocol en het poortnummer 8443, anders krijg je geen verbinding.
Omdat de UniFicontroller alleen een lokaal ondertekend SSLcertificaat gebruikt, krijg je in de browser een waarschuwing te zien dat de verbinding niet veilig is. Je moet in de browser daarom een uitzondering toevoegen of expliciet bevestigen dat je het webfrontend desondanks toch wilt openen.
Bij de eerste keer dat de webinterface opent, krijg je de basisconfiguratie van de UniFicontroller te zien. Je moet dan bijvoorbeeld eerst het land en de tijdzone selecteren – dat eerste is van belang omdat dat van invloed is op welke wifikanalen de accesspoints later kunnen gebruiken. Bij de volgende dialogen moet je de SSID en het wachtwoord voor je wifinetwerk opgeven. Daarnaast wordt een administratoraccount voor de controller aangemaakt. Dan verschijnen de door de controller al gevonden accesspoints, die zich nog in de begintoestand bevinden. Die worden dan automatisch aan het meshwifi toegevoegd. Als laatste vraagt het webfrontend je nog naar het intypen van de ‘Cloud Login Credentials’ of om je te registreren als je die nog niet hebt – die stap kun je probleemloos overslaan door op Skip te klikken, waarna je bij het Dashboard van de webinterface terechtkomt.
Op het Dashboard staat een overzicht van de belangrijkste parameters van je wifinetwerk. Daar worden bijvoorbeeld storingen getoond, maar ook welke kanalen er gebruikt worden. De UniFicontroller kan niet alleen de accesspoints van Ubiquiti beheren, maar ook switches en routers – zonder de bijbehorende apparaten ontbreken natuurlijk de statistiekdata in het overzicht.
In de basisconfiguratie beheert de UniFicontroller maar één locatie – dat zal voor de meeste gebruikers ook voldoende zijn. De standaard wificonfiguratie houdt bijvoorbeeld echter geen rekening met extra beschikbare wifikanalen – die geeft de controller pas vrij nadat je bij ‘Settings / Site’ onder Services de optie ‘Comply with regulatory domain restrictions’ achter de ‘Outdoor Mode’ geactiveerd hebt.
Op de lijst van wifiaccesspoints staan niet alleen de al geadopteerde acccesspoints, maar ook de accesspoints die al wel op je netwerk zijn aangesloten, maar zich nog in de standaardtoestand bevinden. Krijg je bij het overzicht een melding dat het om een extern beheerd apparaat gaat, dan is het resetten niet gelukt.
Accesspoints die wel goed gereset zijn, zijn met een enkele muisklik te adopteren en op die manier aan je wifinetwerk toe te voegen. Daarbij neemt het nieuwe accesspoint alleen de configuratiedata van het wifinetwerk over, en niet de apparaatspecifieke aanpassingen van andere accesspoints in hetzelfde netwerk. Dat gaat dan met name over de bandbreedte. Standaard configureert de controller alle accesspoints op een kanaalbreedte van 20 MHz op de 2,4GHzband en 40 MHz op de 5GHzband. De accesspoints ondersteunen echter ook 40 respectievelijk 80 MHz met de bijbehorende hogere datadoorvoer.
Je komt er niet omheen om de bandbreedte van elk afzonderlijk accesspoint aan te passen. Het is daarbij van belang dat je na het veranderen bij ‘Config / Radios’ op ‘Queue Changes’ klikt, gevolgd door een ‘Apply Changes’ zodat de veranderingen naar het accesspoint worden gestuurd en vervolgens worden toegepast. Dat geldt overigens voor alle wijzigingen die je in de configuratie aanbrengt. Omdat veel veranderingen tot gevolg hebben dat een accesspoint tijdelijk even offline gaat, moet je dergelijke veranderingen eerst allemaal verzamelen (in de queue zetten) en dan aan het eind pas allemaal tegelijk laten uitvoeren.
VOUCHERS VOOR GASTEN
De UniFicontroller kan ook het beheer van een gastnetwerk op zich nemen. Hij moet dan wel continu aan blijven staan om de geldigheid van de gastvouchers te kunnen controleren en de captiveportal voor het inloggen aan te kunnen bieden.
Het instellen van een dergelijk gastnetwerk met een inlogpagina en toegangscodes doe je bij de Settings op het tabblad ‘Guest Control’. Als je daar ‘Enable Guest Portal’ aanvinkt en Authentication op Hotspot zet, kun je de aanmeldpagina (captiveportal) in het webfrontend configureren en een begroetingstekst, gebruiksvoorwaarden en afbeeldingen toevoegen.
In de bijbehorende Hotspot Manager beheer je de gasttoegang en kun je bijvoorbeeld nieuwe toegangscodes genereren en die als uit te knippen kaartjes laten printen. Bovendien kun je de geldigheid van een code verlengen voor als een gast langer blijft dan zijn voucher geldig is – standaard is dat ingesteld op 24 uur.
Op die manier hoef je je gasten niet langer je privé wifiwachtwoord te geven of een voor onbepaalde tijd geldig wachtwoord voor het gastnetwerk te geven: ieder krijgt zijn eigen voucher – en wie zich niet gedraagt, is met de Hotspot Manager ook snel weer buiten de deur te zetten.
Literatuur
[1] Ubiquiti Unifi UAPACLR, c’t 4/2019, p.23
[2] Merlin Schumacher, Dockertje, Docker op de Raspberry Pi, c’t 4/2019, p.126 [3] UniFi Cloud Key Gen2 (Plus), c’t 9/2019, p.23