UniFi Controller Installation auf einer Synology NAS

von Andreas Schreiner · Veröffentlicht 13. Januar 2021· Aktualisiert 13. Juli 2023

mit Anmerkungen von Gunter

Bedingt durch den Umzug in ein Eigenheim inkl. Netzwerkverkabelung und neuer LAN/WLAN Infrastruktur habe ich meine Netzwerk-Komponenten vom Hersteller Ubiquiti (UniFi) bezogen. Damit die Komponenten miteinander interagieren benötigt man einen UniFi Netzwerk-Controller, entweder als kleine „Appliance“, als Cloud Lösung (https://unifi.ui.com) oder als Software. Ich habe mit für die letzte Lösung entschieden, um den Controller On-Premise zu halten.

Basis für meine Installation in diesem Beitrag ist der UniFi Controller 6.0.43 und Synology DSM 6.2.3.

Docker / Container Manager Installation

Falls noch nicht geschehen, muss zuerst Docker (ab DSM7.2: Container Manager) auf der Synology installiert werden. Dazu öffnet man in DSM das Package Center und sucht nach Docker zur Installation. Nachdem die Installation beendet ist, lässt sich Docker direkt über das Package Center öffnen oder über das DSM Menü.

Package Center

UniFi Container Installation

In der Docker Konsole lade ich mir als erstes das UniFi Image herunter. Dazu wechsle ich in den Menüpunkt Registry und suche im Search Fenster nach „unifi“. Eines der Ergebnisse lautet jacobalberty/unifi. Dieses Image lade ich jetzt herunter.

Docker Registry

Ist der Download abgeschlossen, wechsle ich in den Menüpunkt Image und starte einen neuen Container mit Launch.

Docker Image

Nun öffnet sich das Konfigurationsfenster für den neuen Container. Hier gebe ich dem Container einen Namen und limitiere die Ressourcen-Nutzung (je nach Modell kann hier natürlich etwas mehr RAM zugewiesen werden). Für die weitere Konfiguration klicke ich auf den Button Advanced Settings.

Docker Image

Als erstes sorge ich im Reiter Advanced Settings dafür, dass der Container nach einem Neustart der Synology auch automatisch wieder mitgestartet wird.

Docker Image

Im Reiter Volume verbinde ich jetzt einen Ordner und mounte ihn in den Container als /unifi. In diesem Ordner werden persistente Container-Daten gespeichert, damit auch nach einem Versionsupdate (siehe später) die Konfiguration des Controllers erhalten bleibt.

Docker Image

Im Reiter Network wähle ich die Option Use the same network as Docker Host aus. Möchte man die Ports des UniFi Controllers auf alternative Ports ändern (z.B. die Web GUI), wählt man in diesem Fenster statt der Checkbox das bridge Netzwerk aus und konfiguriert das Mapping der Local Ports und der Container Ports für die UniFi Ports, die weiter unten im Beitrag genannt sind.
Achtung: das geht nicht! Netzwerk muss auf Host stehen damit die Geräte den Server finden.
Die Ports können in den Umgebungsvariablen der Containers angepasst werden. Das ist auch nötig damit der Container selbst weiß welche Ports er den Geräten für eine Weiterleitung von http Port 8080 mitteilen muss. Wenn das falsch gemacht wurde siehe unten Wechsel der Netzwerkanbindung des Containers
Docker Image

Jetzt wechsle ich noch auf den letzten Reiter Environment und ändere die 2 Parameter BIND_PRIV und RUNAS_UID0 von true auf false.

Docker Image

Danach ist die Container Konfiguration beendet und kann mit Apply abgeschlossen werden. Den Container starte ich automatisch, wenn der Wizard beendet ist.

Docker Image

Ist der Container fertig hochgefahren, lässt sich das Webinterface des Controllers erreichen über die URL https:////<Synology-IP>:8443.

Sonstige Anpassungen

Ports

Falls auf der Disk Station die Firewall aktiv ist, müssen im aktiven Profil folgende Ports freigeschaltet werden:

TCP/8443: Web GUI

TCP/8080: Device/Controller Communication

TCP/8880: HTTP Portal Redirection

TCP/8843: HTTPS Portal Redirection

TCP/6789: UniFi Mobile Speed Test

UDP/3478: STUN (optional, für UniFi VoIP Telefone)

UDP/10001: Device Discovery

UDP/1900: Layer 2 Network Discovery

UDP/5514: Remote Syslog Capture (optional)

Zudem dürfen die Ports natürlich nicht anderweitig bereits in Verwendung sein (z.B. durch andere Synology Packages oder andere Docker Container).

Prädestiniert für Konflikte sind besonders die Ports 8080 und 8443, die werden als alternative HTTP/HTTPS Ports auch gerne durch andere Produkte verwendet.

Sollte der Container nicht starten oder unerwartet sofort wieder stoppen, ist dies das häufigste Problem.

Da UniFi Controller nicht von den Geräten gefunden werden kann wenn als Netzwerktyp Bridge ausgewählt wird lässt sich auch keine Veränderung der Portzuordnung in Docker erreichen.
Die Ports können aber in den Umgebungsvariablen des Containers angepasst werden wenn nötig:

Aus der Doku von Jacob Alberty:

Environment Variables:

You can pass in environment variables using the -e option when you invoke docker run… See the TZ in the example above. Other environment variables:

UNIFI_HTTP_PORT This is the HTTP port used by the Web interface. Browsers will be redirected to the UNIFI_HTTPS_PORT. Default: 8080

UNIFI_HTTPS_PORT This is the HTTPS port used by the Web interface. Default: 8443

PORTAL_HTTP_PORT Port used for HTTP portal redirection. Default: 80

PORTAL_HTTPS_PORT Port used for HTTPS portal redirection. Default: 8843

Es ist aber wichtig dass Port 8080 bleibt, da die Geräte sich automatisch dort melden!

Aus dem Grunde habe ich alle Ports gleich gelassen.
Es gab damit aber einen Port Konflikt mit Synology Contacts / CardDAV mit dem es möglich ist Kontakte z.B. mit Handys im Kommunenetz zu synchronisieren.
Daher habe ich CardDAV auf Port 8444 geändert, das muss dann natürlich auch auf allen Geräten zum Sync so angepasst werden.
(Mache aktuell nur ich (Gunter) um die Daten von dem Lineage OS Handy zu sichern)

Nach Änderung des Ports für CardDAV muss entweder die Diskstation oder zumindest Contacts, Calendar und ggf. Webstation neu gestartet werden.

Geräte-Registrierung

Im Normalfall läuft der Controller nach der Einrichtung zwar problemlos, man wird aber feststellen, dass sich keine Geräte am Controller melden. Grund hierfür ist, dass sich die Geräte werksseitig bei der URL http://unifi:8080/inform// melden, die NAS aber in den seltensten Fällen den Hostnamen UNIFI hat.

Die am häufigsten gefundene Methode im Internet ist es, sich auf das jeweilige Gerät per SSH zu verbinden und die Registrierungs-URL wie folgt zu ändern: <wp-block-preformatted> set-inform http:////<Synology-IP/-Hostname>:8080/inform </wp-block-preformatted>

Funktioniert das: Yepp!
Ist das charmant: Nope!
Geht das besser: Klaro!

Stellt euch vor, ihr habt eine etwas größere UniFi Umgebung mit 100 oder mehr Geräten. Will man sich wirklich auf unzähligen Geräten händisch einloggen, um die Registrierungs-URL anzupassen? Eher nicht. Wer eine entsprechend große Anzahl an Geräten hat, hat sicher auch eine weitergehende IT-Infrastruktur in Betrieb – inkl. einem eigenen internen DNS-Server. Dieser kann entsprechend genutzt werden, um den Hostnamen UNIFI im Netzwerk verfügbar zu machen.

Hierzu gibt es 2 Optionen:

* CNAME-Record UNIFI mit Alias auf den Hostname der Synology NAS

* A-/AAA-Record UNIFI mit der IPv4-/IPv6-Adresse der Synology NAS Ist der Hostname UNIFI im Netzwerk verfügbar und auflösbar klappt’s auch mit dem automatischen Deployment von UniFi Geräten ohne manuelle Anpassungen.

Versionsupdate

Da der UniFi Controller jetzt ein Docker Image ist, lässt sich kein Update direkt in der UniFi Web UI durchführen. Stattdessen muss der Container selbst getauscht werden.

Das funktioniert ähnlich wie die Neuinstallation und ist recht einfach:

* aktuelles (neues) Image für UniFi herunterladen

* UniFi Controller Konfiguration über die Web GUI sichern und herunterladen (zur Sicherheit)

* laufenden Container stoppen

* Container auswählen und mit Action → Clear (seit DSM 7: Reset) alle Daten löschen (die Konfiguration bleibt erhalten durch den gemounteten Ordner!)

* Container wieder starten Danach ist die UniFi Version des Containers aktualisiert.

Update 19.07.2021 – Geräteregistrierung

Nachdem einer meiner USW-Flex-Mini Switche den Geist aufgegeben, habe ich ein Austauschgerät bekommen und versucht es in meine Infrastruktur einzubinden. Was bisher mit dem DNS-Eintrag für den Controller geklappt hat, ging mit dem neuen Gerät ums Verrecken nicht. Habe alles ausprobiert, inkl. Firmware-Recovery – ohne Erfolg. Letzten Endes hat nur die Nutzung einer DHCP Adresszuweisung inkl. Option 43 funktioniert.

Dazu habe ich in meinem DHCP Server (meine Fortigate Firewall) folgenden Eintrag für den DHCP-Scope gesetzt:

Code: 43 Typ: HEX Value: 0104C0A80001

Wie setzt sich der Wert für Option 43 zusammen:

01 → Vendor Code (01 für Ubiquiti)
04 → Länge des Payloads (Single IP, daher: 4)
C0A80001 → HEX-Code für die IP UniFi Controller IP (in diesem Beispiel 192.168.0.1)

Update 11.10.2021 – Geräteregistrierung (Teil 2)

Eventuell konnte das Problem der nicht mehr funktionierenden Registrierung der Geräte per DNS gelöst werden. Ich hatte im Vorfeld des Problems den Container umgestellt von host-Network auf ein bridge-Network. Das o.g. Austauschgerät habe ich erst nach dieser Umstellung versucht zu registrieren. Ich konnte das noch nicht verifizieren, habe aber meinen Container wieder auf host-Network umgestellt. Aktuell warte ich (seit 3 Monaten!!!) auf ein anderes Austauschgerät; sobald das da ist, probiere ich aus, ob das jetzt wieder ohne die DHCP Option 43 funktioniert. Falls von euch Lesern jemand die Möglichkeit hat, das Verhalten zu testen, ist Feedback jederzeit willkommen.

Update 28.01.2022 – Geräteregistrierung (Teil 3)

Inzwischen konnte ich durch ein Austauschgerät selbst testen, ob das Problem mit der Geräteregistrierung per DNS an den Netzwerkeinstellungen des Containers liegt und es scheint so zu sein. Nachdem ich ja wieder auf host-Network zurückgestellt habe, konnte das Gerät auch ohne die DHCP-Option wieder den Controller finden und ich konnte es adopten.

Anmerkungen von Gunter

Das das Host Netzwerk genutzt werden muss entspricht den Angaben von UniFi, die geben nämlich vor dass Unifi Controller im selben Level 2 Netzwerk, also IP Bereich sein muss wie die Access Points.
Und das ist bei einem Brige Netzwerk mit Portweiterleitung streng genommen nicht der Fall.

In der Dokumentation zum Docker Image von Jacob Alberty wird darauf hingewiesen dass noch eine weitere Einstellung vorzunehmen ist damit die Geräte den Server finden:

Adopting Access Points and Unifi Devices

Override „Inform Host“ IP

For your Unifi devices to „find“ the Unifi Controller running in Docker, you MUST override the Inform Host IP with the address of the Docker host computer. (By default, the Docker container usually gets the internal address 172.17.x.x while Unifi devices connect to the (external) address of the Docker host.) To do this:

Find Settings → System → Other Configuration → Override Inform Host: in the Unifi Controller web GUI. (It's near the bottom of that page.)

Check the „Enable“ box, and enter the IP address of the Docker host machine.

Save settings in Unifi Controller

Restart UniFi-in-Docker container with docker stop … and docker run … commands.

See Side Projects for other techniques to get Unifi devices to adopt your new Unifi Controller.

—- Quellen:
https://help.ui.com/
https://registry.hub.docker.com/r/jacobalberty/unifi/ ''