Link to GitHub

Inspiration

We realized that a major challenge for us in developing remotely (thank you COVID!) was that sharing things on localhost was very difficult and that it wasn't always possible to port forward or host on a remote server. For example, if you are behind an enterprise (or school) network it is most likely not possible to port forward and host something directly behind your public IPv4. This inspired us to create a tool that lets you pretend that you and your friends' computer are connected on one local network! (p.s. works great for locally-hosted Minecraft servers as well)

What it does

Allows a local TCP socket/port to be accessed remotely behind an authentication layer from any computer that has our client software installed. For example, if you have a MySQL database running locally on port 3306, our service lets a computer across the internet access that port.

By leveraging our own WebSocket forwarding proxy and Wireguard, we are able to avoid the common pitfalls of port forwarding which include exposing your internal network to anyone and revealing your IP address. Furthermore, our client software works without elevated privileges and will tunnel through even the most restrictive firewalls (does not require UDP or any ports other than HTTP/HTTPS open)

How we built it

  • Used Wireguard to set up encrypted between the source computer and control plane server and to enable easy packet routing
  • Translated TCP sockets into WebSockets so that the local TCP socket can be accessed remotely from any computer
  • Built a local daemon that automatically creates WebSockets on demand and manages Wireguard configuration
  • Configuration of ports and WebSockets done through web dashboard built in Next.js
  • Management API created using Node.js and Express

Challenges we ran into

  • Working with Wireguard
  • Researching networking
  • Learning Next.js and React for some of our team members

Accomplishments that we're proud of

  • Combining all the moving pieces together (TCP -> WebSockets -> Wireguard -> WebSockets -> TCP)

What we learned

  • A lot about networking
  • Developing software to work on multiple operating systems

What's next for Interlink

  • Being able to forward UDP ports as well
  • Bundling a local version of Wireguard into our application so that it's an all-in-one package, simplifying the process for non-technical users
  • Finishing our custom DNS service so that you don't need to remember the internal addresses and can just use the service name

Built With

+ 1 more
Share this project:

Updates