The client will send a request to the Proxy Master, which will decide where to direct it to.
The proxy master will send it to one of the proxies which in turn will send it to the target site.
And the response will bubble back.
The issue is, that the proxies, can't open a public port for incoming requests.
So they need to hole-punch or keep an open connection with the proxy master.
I have never tried this so I can only speculate. hyper::client::conn::http1::handshake() and hyper::server::conn::http1::Builder::serve_connection() both take a stream, so it shouldn't matter if the stream is created from TcpStream::connect() or TcpListener::accept().
However, one obvious problem I can think of is that since you are building proxies, you need to use HTTP CONNECT. With HTTP/1.1, you can only use one TCP stream to connect to one domain, then your LAN proxies would have to continuously make new connections to your master proxy server so that your master proxy has spare streams to use for new proxy requests.
I imagine HTTP/2 would be better suited for your scenario, but I don't remember that Hyper supports server push, and I have no idea how to use an HTTP/2 stream for HTTP CONNECT in the reverse direction.