[APP][Pro] Reverse Proxy and DDNS

Reverse Proxy and DDNS

Create a Reverse Proxy through DDNS and automatic SSL certificate.

Use this app to show local network sites on your Homey Dashboards, even from remote.
It uses a free DDNS service for remote access and automaticly generates SSL certificates.

And it even zooms and scrolls on Android devices!

See the device settings for how-to.

App Settings Widget

You can add any App Settings as a Widget.
And again, for Android it solves the Scrolling issue, scrolling works perfectly!


And… more coming :wink:

It’s in test now:

Looking for testers…

Please report issues or feature requests at Issues · Qluster-IT/nl.qluster-it.ReverseProxy · GitHub.


Apps:

Donations or Sponsorship

[Reserved]

[Reserved2]

[Reserverd3]

[Reserved4]

[Reserved5]

What is the difference from Web Proxy?

Or does your app use port forwarding instead of Athom server connection?

Well, first of, it works (or at least once i publish it to the live store) :sweat_smile: and it really acts as a Reverse Proxy.
Plus it has DDNS build in.

But to be honest: the nicest widget is still coming, and i needed a real Reverse Proxy server to make that widget work.

Yes indeed, it uses DDNS, SSL and Port forwarding to connect remotely.

Plus, when you select Android + scrolling or zooming, the app will show you a link which you can place in a Homey Web Widget, so you can scroll and zoom.
Quite important to me personally, because i use android devices, and Widgets dont scroll or zoom (correctly) on Android devices.

Ah okay, my app uses Athom’s API and Realtime channels as a proxy, the page gets reconstructed and all the resources like stylesheets, scripts, images and fonts get injected by the client scripts. Then the script on the client side intercepts fetch calls and WS connections/messages. My Web proxy app is not a real reverse proxy

Do you mean that the Web Proxy app didn’t work? What issues did you have with it?

I know, i tried your app. And i love the idea of not having to open up a Port. A few years ago i also started a project/app just like yours. But there is to much exceptions you just cant account for and you cannot handle headers and cookies that way. Which means a lott of (network)sites aren’t gonna work.

Plus, for my next widget (its in development) a real Reverse Proxy is needed.

Well, yeah also, but what i ment is that i just put it in test, lets see if it also works good for other users :face_with_hand_over_mouth:. I dont wanna say it works and then hear test users say it doesnt :joy:

And yeah, i tried your app, but i couldn’t connect with my Synology NAS, my Router and APs, and most of my devices that need OAuth to connect to.

Still, im sure many users will love your app, since you dont need to open a port or configure a DDNS (although, its really just a few clicks and for free).

And i thought hard about the name, because the purpose of this app is the Widget im building.
But it’s a “small” widget while this app is more build around the DDNS and Reverse Proxy, and the other Widget can’t work without it, so building a singular separate app for that widget and include a Reverse Proxy and DDNS service felt weird.

So, i hope it doesn’t feel like im stepping on your toes, if so, my apologisch. :folded_hands:
But while part of your and this app does the same, it works in completly different manner and has a different purpose.

Personally I prefer to use Tailscale free mesh VPN… I have a router node on my Pi5 that’s running my NTP server (as just using for GPS time sync with NTP is a waste of resources ha ha). That way I can securely access all apps and local web pages away from home just like I’m on my home network… no faffing about with reverse proxies, DDNS, SSLs or poking holes through my firewall. Plus if I install any more apps on my Homey Pro it’s gonna go on strike, permanently :rofl::rofl::rofl:

:joy:

Yeah, i also use VPN, but i have had situations where i couldnt use that. Personally i have a ddns (from synology) already and i have a fixed IP adres and company hostname, so a Reverse Proxy seemed more handy for myself personally.

Ofc, i could have held the app private, but who knows, for some users it might be handy to have a Reverse Proxy and/or DDNS (for instance, if you wanna use a VPN but dont have a fixed IP address).

But just like the VPN app, i dont expect this app to have that many users.

Well… not until i finish my widget at least :face_with_hand_over_mouth::grin:

With the Tailscale mesh VPN you don’t need a fixed IP, or to open up any inbound ports. The router node connects outbound, and your other nodes connect to that and get a secure connection no static IP or port forwarding… and it is extremely easy to setup.

I do have DDNS with my QNAP NAS, and it does have a web proxy I could install and configure… but why bother when I have a VPN that gives me access to my LAN as if I was at home with very little setup or resources required, just a router node at home. I also have my own domain name for email… I just don’t have any good enough reason to setup any form of website… my Omada SDN networking has a nice app, my QNAP NAS has useful apps, Homey and Home Assistant have useful apps… and using Music Assistant over my VPN I can stream any and all my 17,000 songs music library anywhere, including my car stereo :rofl:

I think I’d be lost without my Tailscale VPN ha ha :rofl:

Yes that’s true.
My Web Proxy app runs the webpage in an iframe, which is basically a container where the initial HTML gets loaded into. Then the app checks all the JS and CSS files that the HTML page links to, downloads them via the Homey API channel and then injects them into the page. Then, some scripts get injected into the page as well, after which the page gets shown. The injected scripts intercept fetch and WS connections, after which it routes them via Homey’s API. It also intercepts redirects, to make sure that redirects don’t redirect the iframe itself, but instead it loads that page via the proxy.

However, these methods are not compatible with all webpages and frameworks, some use advanced or specific methods that my app can’t intercept. At the moment, I know that Socket.IO connections don’t work. However, Pi-Hole and AdGuard Home load fine inside the Web Proxy (though it does take a few minutes to load).

My web proxy app (appearantly) also doesn’t work for iOS devices. I only have a Samsung phone so I can’t be sure, but multiple users reported the exact same issue on iOS. Probably because Safari’s browser engine works differently or blocks some methods this app uses.

I’m fairly sure that Web Proxy can handle most basic webpages by now though.

Cookies and headers actually also work. Cookies are stored in memory on Homey itself. I might make those persistent too, may be a good feature.
Edit: although after testing again, the cookies no longer appear to work. Strange, I’ll look into it.

Indeed, and for such pages its an ideal app without needing port forward or external hostnames or DDNS.

Yeah i saw that you (try to) handle them in your app when i read your sourcecode, but when testing it, i could see that certain cookies were not given to the host.

Well i only tested it with Android, and (ofc) scroll didnt work (which is a homey bug and not your app).
Thats why i included a work around for that: When, in the widget settings, you select zoom or scroll, and you have android, the widget will show a link you can use in an Homey Web Widget.
And that actually works perfect!

I can now log into and control my whole Synology NAS :partying_face:

Only “downside” was/is, i needed to do it without using the widget API, since that wont work through a external Web Widget.
But for my other widget (and this web widget solution) i already needed a full server-side (homey) solution, so its a nice outcome i can fully scroll and zoom in the widget :face_with_hand_over_mouth:

App Settings Widget

You can add any App Settings as a Widget.
And again, for Android it solves the Scrolling issue, scrolling works perfectly!


It’s in test now:

The sourcecode and tickets for this app have been moved from BitBucket to GitHub:

GitHub · Qluster-IT/nl.qluster-it.ReverseProxy

Issues · Qluster-IT/nl.qluster-it.ReverseProxy