Google Summer of Code Ideas - 2022

This page lists the all project ideas for Google Summer of Code 2022.

We require all applicants to complete a task.

Join our Slack channel and talk to your potential mentors!

Task

The goal of the task is to get familiar with the system by setting up a self-hosted version of Netbird.

  1. Carefully review projects' documentation.
  2. Deploy a self-hosted version of NetBird.
  3. Register at least 2 peers in the system (can be a laptop, server or even Raspberry PI).
  1. Ping machines and make sure that they are reachable.
  2. We might ask you to provide a generated setup key so that we could test your setup.

Please reach out to us with any questions. We believe you will have some! :)

In case this task seems to be difficult, no worries! You could skip #1 and #2 starting with #3 using managed version of NetBird (https://app.netbird.io).

Project Ideas

There are a few categories that our ideas fall into:

  • UI - mostly around our Management service Dashboard (Github repo)
  • Client - our client application (Github Repo)
  • Server - our Management and Signal server applications (Management Github Repo and Signal Github Repo)
  • Portability - ability to run client and server applications on different platforms (e.g. OpenWRT)
  • Infrastructure - deployment, CI/CD, scaling, infrastructure as code improvements, etc.
  • Integrations - integration between the project and different platforms, like CI/CD, Kubernetes or specific cloud providers.

Idea: Make NetBird run on routers

NetBird runs on different platforms and can also be compiled to run on routers. For that, we are thinking to work on this support for the popular wireless router OpenWRT.

We are already building, but we lack packaging and repository for distribution and this is the main goal of this task.

Category: Portability/Infrastructure

Goal: Create OpenWRT package (ipk) for one of the popular routers. Setup CI/CD ipk build flow with Github Actions.

Skills: Golang, Linux, bash, OpenWRT, cmake

Project Size: 175 hours

Rating: easy

Possible mentor: Maycon Santos

Reference: https://medium.com/@theshemul/make-golang-program-for-router-39bf18529b18

Reference: https://openwrt.org/docs/guide-developer/packages

Idea: Software Firewall with eBPF

When running on machines NetBird client application tries to be as efficient as possible. On Linux machines NetBird can use kernel modules like Wireguard and features like eBPF to be the most efficient.

Besides connectivity, NetBird can control access. Right now it is achieved on a connection level - if a peer is in the allowed list, it can connect. If not, the connection is rejected.

It is more advantageous to work on a finer level - defining what packets to allow/block and on which ports.

For that eBPF can be integrated into the client application. The flow could be the following: client receives rules from the Management service and creates ePBF.

Category: Client/Server

Goal: MVP of a eBPF port filtering on client applications (Linux)

Skills: Golang, Linux

Project Size: 350 hours

Rating: hard

Possible mentor: Mikhail Bragin

Reference: https://ebpf.io/

Idea: NetBird client running in the browser

NetBird requires a client application installed to connect machines to each other. In some environments it might not be possible or forbidden to install applications. But there always might be an option to run a browser!

The idea of this project is to make NetBird run in the browser using WASM and WebRTC. A user would log in to the Management Dashboard and open a virtual terminal (e.g. https://xtermjs.org/). Browser will then establish a connection to the network and user would be able to access remote servers.

Category: UI/Client/Server

Goal: Interactive console running in the browser establishing connection to the NetBird network.

Skills: Golang, Linux, Javascript

Project Size: 350 hours

Rating: hard

Possible mentor: Mikhail Bragin / Maycon Santos

Reference: https://webassembly.org/

Reference: https://webrtc.org/

Reference: https://xtermjs.org/

Idea: Integrate NetBird with Kubernetes

Having a private Kubernetes cluster is a best practices that come with some connectivity challenges, especially to operators and developers that need to access resources running within the cluster like services, pods and the Kubernetes API.

The idea of this project is to integrate NetBird with Kubernetes by creating a controller that would add an agent per cluster node and would handle the login process of the agent and store the states in form of Kubernetes secrets. As Kubernetes is a cloud-native platform, you can imagine that are some caveats that we will have to deal with, like nodes being removed and added all the time, different network controllers, and different cloud environments.

Category: Client/Infrastructure/Integrations

Goal: Integrate NetBird with Kubernetes for automatic provision of agents.

Skills: Golang, Linux, Kubernetes API

Project Size: 350 hours

Rating: hard

Possible mentor: Maycon Santos, Sang Woo Bae

Reference: https://kubernetes.io/

Reference: https://kubernetes.io/docs/concepts/architecture/controller/

Reference: https://kubernetes.io/blog/2021/06/21/writing-a-controller-for-pod-labels/

Idea: NetBird Github Action

We love Github Actions, because of its primary concept, Actions. They allow us to automate complex workflows and provide a simple interface to be configured and executed before building or testing our code.

The idea of this project is to create a NetBird agent action, that would download and run an ephemeral agent on Github Actions workflows. The benefits of this could be great as it would allow many users that rely on the public runners to access private resources, in a secure and dynamic way.

Category: Server/Client/Integrations

Goal: Create a NetBird Github Action.

Skills: Golang, Bash, Javascript

Project Size: 175 hours

Rating: easy

Possible mentor: Maycon Santos

Reference: https://docs.github.com/en/actions

Reference: https://docs.netbird.io/getting-started/quickstart

Reference: https://docs.github.com/en/actions/creating-actions/about-custom-actions

Idea: Mobile Client APPs

Nowadays people are always connected with mobile phones and very often they need to access remote resources with them.

The idea of this project is to create a NetBird mobile app for either Android or iOS that would follow one of the principles of our product, simplicity. Initially we think to export our Go APIs using GoMobile that would help with a good chuck of the heavy lifting.

Category: UI/Client/Portability

Goal: Create a NetBird Mobile Client App.

Skills: Golang, Java/Kotlin, XCode, Flutter+Dart

Project Size: 350 hours

Rating: hard

Possible mentor: Mikhail Bragin

Reference: https://github.com/golang/mobile

Reference: https://medium.com/stack-me-up/meet-the-coolest-tech-marriage-flutter-go-369cf11367c9