So if the reason you wanted NAT traversal was "my (browser|game|filesystem) wants to share data with someone else's", WebRTC is a far easier answer, and is now available to most browsers[1] without extra software installs. It does involve a privacy loss of your connection details to the STUN/TURN server, but the signaling server cannot decrypt your (DTLS) communication.
If the reason you want a global LAN isn't those things, what is it?
[1]: Available outside browsers, too: see e.g. my Node WebRTC chat client -- https://github.com/cjb/serverless-webrtc -- or the native C++ API.
IIRC, Google's Jabber/XMPP library - https://developers.google.com/talk/libjingle/- that was once actively maintained had an ICE implementation that also included access to Google's STUN/TURN relays but sadly this has gone unmaintained.
More considerations at https://tools.ietf.org/html/rfc5766#page-55
I wonder if there are any designs for a signaling server/system that doesn't have this loss of privacy of connection information, or if you just very quickly end up reimplementing Tor when you try..
And since most single-peer to home services never require an exit node bandwidth is never an issue. File transfer, remote mail, even a reverse tunnel to use a home IP as your exit node, all work with little to no bandwidth constraints. I really believe there are services to be built on this ease of use. Things that utilise these features without requiring one understand SSH reverse tunnels and the likes.
Finally, somehow I think the more services built on such a model the better we will understand how to fix some of the major flaws of the internet as a whole. Namely discrimination based on GeoIP comes to mind. If the internet were built in this manner instead of addressing a service I could have it address me through my own .onion reverse I think location discrimination would become a much more complex task. GeoIP is becoming much more fundamental. as the xkeyscorerules100.txt shows GeoIP is no longer just something used by media companies to prevent someone watching TV out of country and is today used to determine citizenship and basic civil liberties.
I hadn't given GeoIP much thought yet, but you make an excellent point. GeoIP determining citizenship and basic civil liberties is indeed crazy scary. Can't get more "the architecture is the truth" and "code is law" than that.
Let's hope someone smarter than me can figure out a good way to make this interface easier to use and more widespread, be it with a virtual network interface or not. It could just be a well-design, dead-simple API for building serverless/p2p apps on top of hidden services without knowing Tor, or a streamlined way to do tunneling as you're doing.
1. Make a torrent tracker that serves out peer onion addresses (OAs?) instead of IPs;
2. Fork Popcorn Time, make it create a hidden service for itself and connect to the OA tracker;
3. Make the Popcorn Time fork also a relay by default. You'll add a lot of load to the network, so you have to give back.
Probably wouldn't be able to _stream_ anything, but otherwise should work.
http://www.sobco.com/papers/tr-06-06.pdf
I was trying to remember who at Harvard had written about this and I think that's probably the report I was thinking of. Maybe I should also suggest his thesis
ftp://ftp.deas.harvard.edu/techreports/tr-12-06.pdf
Do you know if it's still alive or what happened to it? Was it released/adopted at all?
As good as Ricochet and OnionShare are, they still had to go
through the trouble of integrating hidden services themselves.
This is definitely part of the problem. I looked into tightly integrating Tor / Hidden Service connectivity into some apps, but was disappointed there aren't widespread libraries, and that you have to fall back to asking the user to install Tor separately. At least there is a bit of a control-plane API to configure Tor from your App over sockets.One library I was able to find for Tor called Orchid: http://www.subgraph.com/orchid.html if you browser through the code it will give you a real appreciation for the complexity of the protocol. So after seeing that, I didn't feel so bad about the lack of Hidden Service libraries. But the current process of setting up a Hidden Service is definitely not for the average user.
Libjingle is the underlying library of Google Talk and WebRTC implementations.