Kodi Remote SSH Filesharing

Ich habe einen Raspberry Pi mit Kodi vor Ort und ein entferntes NAS, von dem ich Multimedia Daten auf den Kodi streamen wollte. Jetzt wollte ich keine Löcher in die Firewall des entfernten NAS schießen und auch keinen Wireguard VPN Server darauf installieren. Ich habe aus Sicherheitsgründen lediglich die SSH bzw. SFTP Möglichkeit zur Verfügung, um mit dem NAS zu kommunizieren. Aus Sicherheitsgründen ist aber die Verbindung mit Passwort auf dem NAS nicht erlaubt (stattdessen nur SSH Keys) und damit kann ich mit Kodi nicht über die “Remote Shares” der Kodi GUI auf das NAS zugreifen. Die gehen nämlich nur mit Passwort.

Ich habe versucht über einen Local SSH Tunnel auf das NAS zu kommen, um darüber eine Datenverbindung aufzubauen. Da mein Versuch am Ende erfolgreich war, möchte ich die Lösung hier teilen:

Erst mal muss man sich für die Konfiguration mit root@<hostname> auf dem Kodi im lokalen Netzwerk anmelden. Dann findet man unter /storage/.config/autostart.sh eine Datei, in der man Befehle eintragen kann, die Kodi beim Start ausführt. Also der perfekte Ort um eine SSH Verbindung zum NAS beim Start des Kodi aufzubauen. Das mache ich mit dem Befehl ssh <user>@<adresse> -i <IdentityFile> (anlegen, wenn nicht vorhanden) -p <port> -f (background) -T (kein Terminalemulator) -L 5005:localhost:5005 sleep 14d

sleep 14d hält die Remote Verbindung für 14 Tage offen. Ohne dieses Kommando würde sich die SSH Verbindung sofort wieder schließen.

Mit diesem Befehl baue ich eine Verbindung zum WebDAV Dienst auf dem NAS auf, ohne SSL Verschlüsselung, weil alles lokal.

Um schließlich auf die Daten auf dem NAS mit Kodi zugreifen zu können, muss ich in Kodi noch ein neues Network-Share hinzufügen. Als Dienst gebe ich natürlich WebDAV an und nutze meine normalen Zugangsdaten. Allerdings mit der Adresse localhost bzw. 127.0.0.1 und Port 5005.

Die Daten fließen nun durch den verschlüsselten Tunnel zum Kodi.

PiHole, DHCP, und lokale Namensauflösung

Ich habe auf meiner Synology DiskStation den Pi Hole im Docker Container eingerichtet. Die DHCP Funktion habe ich aber abgestellt, weil ich nicht erkannt habe, dass ich damit meine VLAN DHCP Zuweisung aus dem Edge Router abbilden kann. Darum bin ich darauf angewiesen die DHCP Funktion des Routers weiter zu nutzen.

Wie geht also die Einrichtung, wenn PiHole nur als DNS Server arbeiten soll, danach aber noch, quasi als Fallback, der Router kommt, der die lokale DNS Auflösung übernimmt?

In der Frage steckt schon ein Teil der Antwort. Mein DHCP Server vergibt als DNS Server 1 die lokale Adresse vom PiHole. Er selber löst DNS Adressen nicht über den PiHole auf. Er ist das Gateway und löst die DNS über den externen DNS Dienst auf, den ich normalerweise im PiHole angeben würde. Statt dass ich den externen DNS Server jetzt im PiHole angebe, gebe ich als externen DNS Server den Router an. Der nimmt jetzt alle Anfragen entgegen: die für die lokalen Adressen und die gefilterten externen Adressen. Damit werden die lokalen Adressen richtig aufglöst und die externen werden nach aussen geleitet. Zwar ohne DNSSEC und DoT, etc. aber das ist vielleicht nicht so problematisch, wenn es nur um den Filter geht.

Edge Router Nameserver einstellen
Hier stellt man den Nameserver im Edge ein
PiHole Settings für lokale DNS Server
Hier stellt man den Router als DNS Server ein

Also noch mal: der DHCP Server im Router teilt den Clients mit, dass ihr DNS Server der PiHole ist. Der PiHole ist jetzt der erste DNS Server im Netzwerk. Im PiHole stellt man für die externe DNS Auflösung nicht Quad9, OpenDNS, Cloudflare oder was auch immer ein, sondern gibt die IP des Routers ein (Settings > DNS). Und dem Router sagt man, dass der DNS Anfragen dann über den externen DNS Server seiner Wahl übernimmt. Im Fall des Edge Routers ist das in der Leiste am untersten Bildrand (System > Nameserver