Wer den VRS (Virtual-Radar-Server) unter Linux betreibt, stellt fest, dass keine Thumbnails mehr angezeigt werden. Dieses Phänomen trat irgendwann ab Sommer 2021 auf.
Vermutlich wurde die API (über die die Thumbnails bezogen werden) damals auf „https“ umgestellt und eine permanente Umleitung (http-Stauts 301) eingerichtet.
Sollzustand (so war es auch unter Linux bis Sommer 2021):
Ist-Zustand:
Dieses Problem wurde auch im dortigen Forum beschrieben:
https://forum.virtualradarserver.com/viewtopic.php?p=9351&sid=8d2dabefb83059719cb85a2cb6b2d5ed#p9351
Analyse
Meine Vermutung war, dass die API von „airport-data.com“ nicht mit dem User-Agent „Mono-HTTPAPI/1.0“ zurechtkommt.
Nicht funktionierende Installation (aus Client-Sicht):
Funktionierende Installation (aus Client-Sicht):
Allerdings bestätigte sich das nicht, egal welcher User-Agent genutzt wird, es kommt immer ein Stauts 301 zurück.
Darin wird mitgeteilt, dass der Aufruf über https zu erfolgen hat. VRS/Mono ruft die API mittels http auf:
Der Aufruf des VRS erfolgt exakt an die IP/Port (Destination-IP: 192.99.41.36 / Destination-Port 80):
Die Namensauflösung von „www.airport-data.com“:
Lösung
Wird die URL (wie im Status 301 beschrieben) abgeändert, werden die Daten korrekt bezogen:
Es scheint so, dass es hier ein Problem mit Mono gibt, welches den Status „Permanently Moved“ nicht richtig verarbeitet oder nicht richtig VRS übergibt.
Es müsste aus meiner Sicht entweder Mono dahingehend gefixt werden, dass Redirects korrekt verarbeitet werden. Oder VRS müsste die API gleich über https aufrufen.
Alternativen:
- Eine Windows-Installation von VRS nutzen
- Einen Proxy dazwischenschalten, der die http-Requests abfängt, korrekt als https an die API sendet und auf dem Rückweg die Antwort wieder an den ursprünglichen Linux-VRS (als http-Antwort) übergibt
Proxy-Server
Ich beschreibe hier die Lösung mittels eines Proxy-Servers, der auf einem Debian-Linux installiert wird:
Als erstes einen NGINX (eigentlich ein Reverse-Proxy, der für sowas aber auch als Forward-Proxy dienen kann) installieren:
sudo apt-get update && sudo apt-get upgrade sudo apt install nginx nginx-extras
Default-Konfiguration deaktivieren:
sudo unlink /etc/nginx/sites-enabled/default
Eine neue Konfigurationsdatei anlegen
cd /etc/nginx/sites-available sudo nano forward-proxy.conf
Darin folgendes eingeben:
server { listen 8081; location / { resolver 10.89.1.1; proxy_pass https://$http_host$uri$is_args$args; } }
ERKLÄRUNG:
- listen = Server hört auf Port 8081
- resolver = ein DNS-Dienst der von diesem Proxy aus erreichbar ist (hier ist 10.89.1.1 ein DNS-Resolver – muss angepasst werden)
- proxy_pass = hier ist es wichtig „https“ einzugeben!!
Die Variable $http_host enthält den Zielhost der original Anfrage. $uri enthält den Pfad hinter der Domain/IP.
$is_args und $args sind für weitere Argumente die dem Original-Pfad ggf. angefügt waren.
Die neue Konfiguration verlinken/aktivieren:
sudo ln -s /etc/nginx/sites-available/forward-proxy.conf /etc/nginx/sites-enabled/forward-proxy.conf
Danach den Proxyserver neustarten, damit alles übernommen wird:
sudo systemctl restart nginx.service
Sollte hier ein Fehler auftreten, ist möglicherweise der gewünschte Port bereits belegt. Dies kann mittels
sudo netstat -tulpn | grep LISTEN
geprüft werden. Ggf. einen freien Port wählen.
Nun müssen die http-Anfragen des Virtual-Radar-Servers auf diesen Proxy-Server umgeleitet werden.
Dazu am Router eine DNAT-Regel erstellen (Beispiel für Mikrotik):
/ip firewall nat add action=dst-nat chain=dstnat comment="redirect VR-SRV1 to Proxy-SRV1 (for http-API-calls)" dst-address-list=AL-airport-data dst-port=80 protocol=tcp src-address=10.89.1.6 to-addresses=10.89.1.2 to-ports=8081
ERKLÄRUNG:
- SRC-Address = Quelladresse des Virtual-Radar-Servers im LAN (hier 10.89.1.6 – muss angepasst werden)
- DST-Address-Lsit = Address-Liste die „www.airport-data.com“ in eine IP auflöst, so muss nichts geändert werden, falls sich die IP dahinter einmal ändert
- -> ALTERNATIVE wenn keine Adress-Liste genutz wird: DST-Address = 192.99.41.136 – die „airport-data.com“-API-IP
- Protocol = tcp
- DST-Port = 80
- To-Address = die IP des Proxy-Servers (hier 10.89.1.2 – muss angepasst werden)
- To-Port = der Port auf den der Proxy hört (in der Konfiguration unter „listen 8081;“ angegeben)
Falls die Firewall einen direkten Aufruf des Proxy-Servers vom Virtual-Radar-Server aus verbietet, muss noch eine Firewall/Filter-Regel erstellt werden, die das erlaubt.
Beispiel:
/ip firewall filter add action=accept chain=forward comment="accept DNATed VR-SRV1 to Proxy-SRV1 (for http-API-calls)" dst-address=10.89.1.2 dst-port=8081 protocol=tcp src-address=10.89.1.6
Danach tauchen die Thumbnails auch mit Linux/Mono wieder auf!
System- und Netzwerkadministrator
Informationstechnik – Netzwerktechnik – Consulting
MCSA+M | MCSE | MTCNA