mirror of
https://github.com/netbirdio/docs.git
synced 2026-04-15 23:16:36 +00:00
Added a LICENSE and documentation on how to contribute Updated CI/CD to use the root level code
223 lines
8.9 KiB
Markdown
223 lines
8.9 KiB
Markdown
---
|
|
sidebar_position: 1
|
|
---
|
|
|
|
# Google Summer of Code Ideas - 2022
|
|
|
|
This page lists the all project ideas for [Google Summer of Code 2022](https://summerofcode.withgoogle.com/).
|
|
|
|
We require all applicants to complete a [task](#task).
|
|
|
|
Join our [Slack channel](https://join.slack.com/t/wiretrustee/shared_invite/zt-vrahf41g-ik1v7fV8du6t0RwxSrJ96A) 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 Netbrid.
|
|
|
|
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).
|
|
:::tip multiple peers on a single machine
|
|
It is possible to set up multiple peers on the same machine. Find out how!
|
|
:::
|
|
4. Ping machines and make sure that they are reachable.
|
|
5. We might ask you to provide a generated [setup key](/overview/setup-keys) 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](https://github.com/netbirdio/dashboard))
|
|
* **Client** - our client application ([Github Repo](https://github.com/netbirdio/netbird/tree/main/client))
|
|
* **Server** - our Management and Signal server applications ([Management Github Repo](https://github.com/netbirdio/netbird/tree/main/management) and [Signal Github Repo](https://github.com/netbirdio/netbird/tree/main/signal))
|
|
* **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
|
|
:::note
|
|
OpenWrt is an open-source project for embedded operating systems based on Linux, primarily used on embedded devices to route network traffic.
|
|
|
|
https://openwrt.org/
|
|
:::
|
|
|
|
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](https://github.com/mlsmaycon)
|
|
>
|
|
> **Reference:** https://medium.com/@theshemul/make-golang-program-for-router-39bf18529b18
|
|
>
|
|
> **Reference:** https://openwrt.org/docs/guide-developer/packages
|
|
|
|
### Idea: Software Firewall with eBPF
|
|
:::note
|
|
eBPF is a revolutionary technology with origins in the Linux kernel that can run sandboxed programs in an operating system kernel.
|
|
|
|
https://ebpf.io/
|
|
:::
|
|
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](https://github.com/braginini)
|
|
>
|
|
> **Reference:** https://ebpf.io/
|
|
|
|
### Idea: NetBird client running in the browser
|
|
|
|
:::note
|
|
WebAssembly (abbreviated Wasm) is a binary instruction format for a stack-based virtual machine.
|
|
Wasm is designed as a portable compilation target for programming languages, enabling deployment on the web for client
|
|
and server applications.
|
|
:::
|
|
|
|
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](https://github.com/braginini) / [Maycon Santos](https://github.com/mlsmaycon)
|
|
>
|
|
> **Reference:** https://webassembly.org/
|
|
>
|
|
> **Reference:** https://webrtc.org/
|
|
>
|
|
> **Reference:** https://xtermjs.org/
|
|
|
|
### Idea: Integrate NetBird with Kubernetes
|
|
|
|
:::note
|
|
Kubernetes, also known as K8s, is an open-source system for automating deployment, scaling, and management of containerized applications.
|
|
:::
|
|
|
|
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](https://github.com/mlsmaycon), [Sang Woo Bae](https://github.com/shatoboar)
|
|
>
|
|
> **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
|
|
|
|
:::note
|
|
GitHub Actions makes it easy to automate all your software workflows, now with world-class CI/CD. Build, test, and deploy your code right from GitHub.
|
|
Make code reviews, branch management, and issue triaging work the way you want.
|
|
:::
|
|
|
|
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](https://github.com/mlsmaycon)
|
|
>
|
|
> **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](https://github.com/braginini)
|
|
>
|
|
>
|
|
> **Reference:** https://github.com/golang/mobile
|
|
>
|
|
> **Reference:** https://medium.com/stack-me-up/meet-the-coolest-tech-marriage-flutter-go-369cf11367c9
|
|
|