This isn't really a "transport" problem, so much as it's a "network
architecture" problem.
You have to initiate the connection from behind the firewall, so you
need to design the LAN server to connect to a well-known Cloud server
endpoint at startup, and manage/maintain that persistent connection.
In effect, you're creating your own application-specific "transport",
and you direct all communication over that transport.
As Tristan notes, all else equal, gRPC bidirectional streaming is
probably a good starting point. I'd also look at ZeroMQ or nanomsg,
depending on what kind of messaging semantics you need. Though they
could be massaged to work, I'd avoid HTTP long poll or websockets.
As for how this ties into Go kit — if you build the transport as you
need it, and then write appropriate endpoint bindings for each RPC,
you can leverage all the standard Go kit middlewares and patterns
quite easily. You could use something like [0] as a starting point.
[0]
https://github.com/go-kit/kit/blob/master/examples/addsvc/grpc_binding.go
Cheers,
Peter.