Da ich meinem Vater schon vor einer Weile eines meiner alten Raspberry Pi’s als Gateway für mein VPN zu Hause installiert habe, damit er z.B. meine NAS zu Hause einbinden kann und ich seine, kam mir neulich der Gedanke das ich ihm doch auch seine NAS Dienste über meinen Reverse Proxy zur Verfügung stellen könnte. Der Vorteil wäre das er keine Ports mehr in seinem Router zu Hause öffnen müsste und er meine Domain nutzen könnte, statt dieser verkrüppelten myfritz Domain, die er vorher nutzte.
Der Synology NAS eine weitere IP aufs Interface drücken
Bei meiner alten Synology NAS (DS209j) ging das, indem ich einfach die entsprechenden ip addr add und ip route add Zeilen in die /etc/rc.local schreibe. Synology entschied aber scheinbar irgendwann zwischen DSM 4.2 und 6 diese zu deaktivieren. Im Synology Forum fand ich dann den Hinweis das man nun Scripte unter /usr/local/etc/rc.d/ ablegen kann, welche dann beim booten ausgeführt werden. Schöne Theorie, in der Praxis tat es das jedoch bei mir nicht.
Als ich mir dann mal den Aufgabenmanager des DSM anschaute, sah ich das man hier ja benutzerdefinierte Scripte ausführen kann und das nicht nur zeitgesteuert, sondern auch bei Events wie Boot oder Shutdown. Also habe ich hier eine entsprechende Aufgabe angelegt und mein Script in mein Home verlegt. Nach einem Neustart hatte das Interface jedoch immernoch keine zusätzliche IP bekommen, das Script wurde aber laut Eventlog ausgeführt und zwar ohne Fehler. Mir kam dann der Gedanke, das vielleicht das Script schon ausgeführt wird, bevor das Interface eigentlich Up gesetzt wird. Also schrieb ich einfach mal ein sleep 10 an den Anfang und siehe da, nun funktioniert es.
Reverse Proxy einrichten
Sollte ja erstmal kein Akt sein. Nginx lief schon als Reverse Proxy auf einem meiner Server und ich fügte lediglich eine neue Server Sektion hinzu:
server { listen 443 ssl; listen [::]:443 ssl; server_name nas.de; ssl_certificate /etc/letsencrypt/live/nas.de/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/nas.de/privkey.pem; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass https://1.1.10.20:5001; } }
An dieser Stelle habe ich das erste mal mit letsencrypt Zertifikaten gearbeitet. War sehr angenehm und einfach. Anschließend war die NAS schonmal erreichbar, man konnte sich einloggen und alles lief soweit – bis auf die Photostation.
Diese verwendet ja einen anderen Port, in meinem Fall 5002. Rief ich diese im lokalen Netz aus dem DSM heraus auf, hängt er lediglich /photo an die Domain an, machte ich es jedoch über den Reverse Proxy hängte er noch den Port mit an. In der Photostation ist es möglich den Routerport zu ändern, welchen ich dann in 443 abänderte. Anschließend versuchte ich es erneut, mit dem Ergebnis das er nun keinen Port mehr anhängt, die Adresse jedoch noch immer nicht erreichbar war. Ich fügte dann folgendes, zusätzlich, in die Server Sektion der Nginx Konfiguration ein, damit /photo intern auf Port 5002 weitergeleitet wird:
location /photo { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass https://1.1.10.20:5002/photo; }
Das funktionierte dann auch und nun funktionierten alle Dienste soweit.
Synology DS Apps
Da mein Vater die Apps von Synology ziemlich gut findet und diese auch ausführlich nutzt, müssen diese natürlich auch funktionieren. Ich ging also jede App durch und das Ergebnis war
Die Daten wurden von mir dabei in jeder App gleich eingegeben. Dann ging die Sucherei los, ich guckte auf der Synology Seite nach, ob diese Apps eventuell noch zusätzliche Ports benötigen oder man noch Rechte setzen musste und so weiter. Nachdem ich dabei zu keiner Lösung kam, schaute ich mir dann mal den Traffic mit tcpdump an und stellte fest das alle Apps, bis auf die DS Note, per Default, den Port 5001 nutzen, wenn man keinen anderen in die Domain anhängt. Also per iptables einen Redirect von port 5001 nach 443 auf dem Reverse Proxy eingrichtet und dann lief alles:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 5001 -j REDIRECT --to-port 443 -m comment --comment "syno port fix"
Mir stellt sich da wieder die Frage was das soll. Entweder nutzt man den Standart HTTPS Port, wenn der Haken bei HTTPS gemacht wird oder man setzt einen Hinweis, das bei HTTPS der Port 5001 benutzt wird. Und das macht man dann bitte auch in jeder App einheitlich und nicht mal da so und da anders.
Alles in allem ist mein Vater nun glücklich und es funktioniert alles.
kowalkg
Oh danke! Der Knackpunkt, warum bei mir die Apps (in 2021) nicht mehr funktioniert haben, seit ich die integrierte Reverse Proxy Funktion in DSM 7 nutze, war der „HTTPS“-port. Manuell in den apps :443 dahinter tats fürs erste auch.
Danke
remo
Hey,
ich habe gerade so ziemlich dasselbe Problem!
Intern – also „hinter“ dem Reverse Proxy läuft alles über HTTP. Also DSM Port 5000 usw.
Vom Browser erreiche ich meine PhotoStation, aber mit der App will es einfach nicht gelingen. Hättest du vielleicht noch einen Tipp?
Grüße
Sebastian
Hi,
du wirst die nginx config entsprechend an die Ports anpassen müssen. Und wie ich geschrieben hab verwenden die App’s, abgesehen von der DS Note App, alle den Port 5001. In deinem Fall wird sie dann sicher auf Port 5000 versuchen zu connecten (weil HTTP), also wirst du die iptables Regel entsprechend anpassen müssen, das er Port 5000 nach 443 oder 80 redirected.
Leider hab ich keine Möglichkeit das genau zu testen derzeit…Ich hoffe das hilft dennoch :)
VG
Rene Flemming
Hallo
Ein paar Fragen dazu: welche zusätzlichen ip bekommt die Synology und wie läuft der Traffic? Vom Internet über das von und wieder zurück?
Mfg
Sebastian
Hi,
in meinem Fall bekommt die NAS eine IP aus meinem VPN Netzwerk.
Der Traffic läuft wie folgt:
Browser -> Nginx –[HTTPS over Tinc-VPN]–> Tinc Router[Raspberry] –> NAS
VG