Ortungsdienst selbst gehostet

Wer Geräte (wie Handys etc…) selbst tracken möchte, muss nicht zwangsläufig einen der großen Anbieter nutzen.

Meine Anforderungen waren recht simpel, ich möchte nur den aktuellen Standort mehrerer Handys ermitteln können. Im Grunde sollten die Handys nur alle X Sekunden ihren Standort an einen Server senden. Dort sollte man auf einer Karte die Standorte sehen. Ich habe keinerlei weiteren Anforderungen, wie z. B. Geofencing, Alarme, Flottenmanagement etc…

Nach einer Recherche haben sich drei Server als erfolgversprechend herausgestellt:

Ich habe mich schlussendlich für Traccar entschieden, da es auf mich den besten und gleichzeitig simpelsten Eindruck machte. Wie erwähnt, habe ich nur sehr geringe Anforderungen und der Einfachheit wegen wählte ich die Docker-Version.

Traccar installieren

Den ursprünglichen Plan, Traccar mittels Docker zu installieren, habe ich schlussendlich aufgegeben. Da Traccar in der Standardeinstellung mit einer H2-Datenbank arbeitet, von der aber selbst der Entwickler abrät und zu einer eigenständigen Datenbank rät:

By default Traccar uses embedded H2 database system. It’s used to simplify initial set up and configuration of the server software, but for any production environment it’s strongly recommended to use a fully-featured database engine. One of the best results in terms of performance are observed with MySQL database. Traccar also supports other popular database systems (Microsoft SQL Server, PostgreSQL and others). Quelle

 

Auch nach mehreren Tagen des Experimentierens, war es mir nicht möglich, eine mySQL-Datenbank über Docker an Traccar anzubinden. Es wurde immer die interne H2-Datenbank genutzt. Dieses Problem wurde auch von anderen Nutzern beschrieben, aber nie (für mich passend) gelöst. Weswegen ab hier die Installation auf einer eigenen VM beschrieben wird.

 


 

Es folgen die Befehle (als VM wird Ubuntu Server, 22.04 LTS, genutzt).
Bitte prüfen Sie vor dem Download, ob es eine neuere Version gibt: https://www.traccar.org/download/

sudo curl -L -o traccar-linux-64-5.10.zip https://github.com/traccar/traccar/releases/download/v5.10/traccar-linux-64-5.10.zip
sudo unzip traccar-linux-64-5.10.zip

MySQL-Server installieren:

sudo apt-get install mysql-server

Datenbank anlegen und einrichten:

sudo mysql -u root -p
meinRootPasswort
create database traccarDB character set utf8 collate utf8_bin;
create user traccar@localhost identified by 'geheimesPasswort';
grant all privileges on traccarDB.* to traccar@localhost;
flush privileges;
quit;

Nun die Installation von Traccar starten:

sudo ./traccar.run
sudo systemctl start traccar

Die Datenbank konnektieren:

sudo nano /opt/traccar/conf/traccar.xml

Darin den ganzen H2-Block löschen und folgendes einfügen:

<entry key='database.driver'>com.mysql.cj.jdbc.Driver</entry>
<entry key='database.url'>jdbc:mysql://127.0.0.1/traccarDB?zeroDateTimeBehavior=round&amp;serverTimezone=UTC&amp;allowPublicKeyRetrieval=true&amp;useSSL=false&amp;allowMultiQueries=true&amp;autoReconnect=true&amp;useUnicode=yes&amp;characterEncoding=UTF-8&amp;sessionVariables=sql_mode=''</entry>
<entry key='database.user'>traccar</entry>
<entry key='database.password'>geheimesPasswort</entry>

Den Dienst neustarten:

sudo systemctl restart traccar.service

Nun sollte Traccar über die IP des Servers auf Port 8082 erreichbar sein (http).

 

Optional:

Datenbank verifizieren:

Legen Sie nun den ersten Benutzer über das Webinterface an.
Ist das erfolgt, kann man verifizieren ob wirklich die mySQL-Datenbank genutzt wird:

mysql -u traccar -p
geheimesPasswort
USE traccarDB;
SHOW TABLES;
SELECT * FROM tc_users;

Hier sollte nun der gerade angelegte Benutzer sichtbar sein.

 

Web-GUI auf Port 80 legen:

sudo nano default.xml

Darin 8082 auf 80 ändern:

<entry key='web.port'>80</entry>

Danach wieder den Dienst neustarten:

sudo systemctl restart traccar.service

 

Anbindung an das Internet

Etwas komplexer ist die Anbindung an das Internet, da von unterwegs aus die Positionsdaten in den Server geschrieben werden müssen. Und zwar so, dass sinnvollerweise nicht immer eine VPN-Verbindung bestehen muss, sondern die normalen mobilen Daten genutzt werden können.

Im Weitern wird hier beispielhaft Cloudflare als WAF bzw. Reverse-Proxy genutzt. Wenn Sie eine andere WAF/Reverse-Proxy nutzen, entnehmen Sie bitte die Konfiguration der Beschreibung Ihrer Software.

Nach einigem Testen, habe ich herausgefunden, dass https mit Port 8443 zusammen mit dem Cloudflare-Proxy funktioniert! Das ist einer der „Ports supported by Cloudflare, but with caching disabled“. Vermutlich klappen alle Ports dieser Kategorie, was ich aber nicht getestet habe.

Das heißt, mit Port 8443 kann eine Subdomain angelegt werden und auch der Cloudflare-Proxy genutzt werden! Nebeneffekt ist, dass so ein Hairpinning vermieden wird, wenn sich das Handy z. B. in einem internen Netz befindet oder per VPN verbunden ist.

Port 80 oder 443 funktionieren nicht in Verbindung mit Traccar und dem Cloudflare-Proxy. Andere Ports, wie 5055, sind generell mit Cloudflare nicht kompatibel. Ohne Proxy sollte es aber klappen, in dem Fall fungiert Cloudflare nur als normaler DNS-Server, allerdings ist dann ggf. ein Hairpinning nötig.

So gelangen die Ortungsdaten schon einmal bis zum Edge-Router. Von dort erfolgt entweder eine Weiterleitung (DNAT) an einen internen Reverse-Proxy oder direkt zum Traccar-Server. Da der Server aus dem WAN erreichbar ist, sollte er in jedem Fall in ein isoliertes DMZ-VLAN gesetzt werden! Natürlich sollte WAN-seitig nur der genutzte Datenport geöffnet werden (hier 8443).

Der Traccar-Server hört (u. a.) auf Port 5055, aber nicht auf Port 8443. Dies könnte zwar geändert werden (in der default.xml), allerdings kann man das auch gleich über das notwendige DNAT, bzw. wenn man einen internen Reverse-Proxy verwendet, über diesen machen. Am Server muss Port 5055 ankommen, nicht 8443.

 

Traccar-Sende-Client

Auf den Handys muss jetzt die Client-Software installiert werden, damit die Positionsdaten überhaupt gesendet werden.

Dazu gibt es von Traccar eine Client-App im Playstore bzw. Appstore. Diese App ist recht simpel gehalten und erfordert nur die Eingabe der URL hinter der der Traccar-Server ist. Im Beispiel ist es die Subdomain die bei Cloudflare angelegt wurde. Als Standard-Port wird in der App 5055 vorgeschlagen, dies muss auf 8443 geändert werden, da 5055 kein von Cloudflare unterstützter Port ist! Als Protokoll kann je nach eigener Infrastruktur auch https genutzt werden!

Natürlich müssen der App die entsprechenden Rechte gegeben werden und z. B. das Versetzen in einen Standby verhindert werden.

 

Abschließend

Ist das erledigt, muss man noch in Traccar (Web-GUI) die Geräte anlegen. Dazu gibt es eine Kennung, diese schlägt die Handy-App vor. Da jedes Endgerät mit dieser Kennung Positionsdaten (ohne weitere Authentifizierung) übermitteln kann, sollte die Kennung nicht zu einfach gewählt werden.

 

Ist das Gerät eingetragen und die Handy-App gestartet, taucht innerhalb von wenigen Sekunden das Handy in der Web-GUI auf:

Zudem wird noch der Akkustand übermittelt.
Die Genauigkeit kann in der App eingestellt werden, ich nutze die voreingestellte mittlere Stufe

 

Optional: Traccar-Empfangs-Client

Man kann die Web-GUI grundsätzlich auch problemlos auf einem Mobilgerät öffnen und so die Standorte ersehen. Allerdings gibt es auch eine eigene App dafür, die sogenannte Traccar Manager App, im Playstore bzw. Appstore. Diese App verbindet sich über http (Port 80) oder https (Port 443) direkt mit dem Server und kann zur Administration oder auch nur zum Betrachten genutzt werden (je nachdem mit welchem Konto man sich anmeldet und welche Rechte dieses Konto hat).

Da es sich dabei um normalen http/s-Traffic handelt, wäre es denkbar das Ganze über den normalen Cloudflare-Proxy zu routen und ins WAN freizugeben. Wer mehr Wert auf Sicherheit legt, kann natürlich auch via VPN und über die interne IP von unterwegs darauf zugreifen.

 

Referenzen:

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert