In my configuration I have a server with a public IP that manages incoming connections, and my home network connects to that server via a keepalive connection, so it’s actually operating in the same client-server mode you described going through my NAT. This also solves the dynamic IP issues.
When I’m at home, my phone can route directly over my LAN, and when I leave the house it proxies through my public server back to my house (or out to the web depending on what I’m accessing).






Ah, that’s why… I didn’t think multiple arguments to operator[] was valid, but my brain is still catching up to C++20 features.