Kilka dni temu pisaliśmy na naszym blogu o Firezone, które jest doskonałym narzędziem do tworzenia serwerów VPN bazujących na protokole WireGuard.
A teraz, przy tej okazji, porozmawiamy o bardzo podobnym narzędziu o nazwie „Headscale”, które jest projektem opracowanym jako implementacja open-source komponentu serwera Tailscale VPN , umożliwiająca tworzenie sieci VPN podobnych do Tailscale we własnych lokalizacjach, bez konieczności korzystania z usług stron trzecich.
Tailscale umożliwia łączenie dowolnej liczby rozproszonych geograficznie hostów w sieć zbudowaną na wzór sieci mesh, w której każdy węzeł komunikuje się z innymi węzłami bezpośrednio (P2P) lub za pośrednictwem sąsiednich węzłów, bez przesyłania ruchu przez scentralizowane zewnętrzne serwery dostawcy VPN.
Oprócz obsługi kontroli tras i dostępu opartej na listach kontroli dostępu (ACL) oraz możliwości ustanawiania kanałów komunikacyjnych w warunkach translacji adresów sieciowych (NAT), system obsługuje mechanizmy STUN, ICE i DERP (analogiczne do TURN, ale oparte na protokole HTTPS). Jeśli kanał komunikacyjny między niektórymi węzłami zostanie zablokowany, sieć może przekierować ruch przez inne węzły.
Tailscale różni się od projektu Nebula , który również został zaprojektowany w celu tworzenia rozproszonych sieci VPN z routingiem kratowym, wykorzystującym protokół Wireguard do organizacji transferu danych między węzłami. Nebula z kolei korzysta z rozwiązań opracowanych w ramach projektu Tinc, który wykorzystuje algorytm AES-256 do szyfrowania pakietów GSM (Wireguard korzysta z szyfrowania ChaCha20, które w testach wykazuje wyższą wydajność i responsywność).
Inny podobny projekt, Innernet, jest rozwijany oddzielnie, w którym protokół Wireguard jest również wykorzystywany do wymiany danych między węzłami. W przeciwieństwie do Tailscale i Nebula, Innernet wykorzystuje inny system separacji dostępu oparty na listach kontroli dostępu (ACL); etykiety nie są powiązane z poszczególnymi węzłami i podsieciami w celu rozdzielenia i odizolowania różnych zakresów adresów IP, jak w konwencjonalnych sieciach internetowych.
Ponadto Innernet używa Rust zamiast Go i warto wspomnieć, że Innernet 1.5 z ulepszoną obsługą przechodzenia przez NAT został wydany kilka dni temu. Istnieje również projekt Netmaker, który pozwala łączyć sieci o różnych topologiach za pomocą Wireguard, ale jego kod jest dostarczany na licencji SSPL (Server-Side Public License), która nie jest otwarta ze względu na obecność dyskryminujących wymagań.
Tailscale jest dystrybuowany w modelu freemium, oferując darmowy dostęp dla użytkowników indywidualnych oraz płatny dostęp dla firm i zespołów. Komponenty klienckie Tailscale, z wyjątkiem aplikacji graficznych dla systemów Windows i macOS, są rozwijane jako projekty open source na licencji BSD.
Zewnętrzne oprogramowanie serwerowe Tailscale, które uwierzytelnia nowych klientów , koordynuje zarządzanie kluczami i organizuje komunikację między węzłami, jest zastrzeżone. Projekt Headscale rozwiązuje ten problem i zapewnia implementację open source niezależną od komponentów serwera Tailscale.
Headscale przejmuje funkcje wymiany kluczy publicznych pomiędzy węzłami , a także wykonuje operacje przydzielania adresów IP i dystrybucji tabeli routingu pomiędzy węzłami.
W obecnej formie Headscale implementuje wszystkie podstawowe funkcje serwera zarządzającego, z wyjątkiem obsługi MagicDNS i Smart DNS. W szczególności obsługuje rejestrowanie węzłów (również przez sieć), adaptację sieci w celu dodawania lub usuwania węzłów, podział na podsieci z wykorzystaniem przestrzeni nazw (umożliwiając utworzenie sieci VPN dla wielu użytkowników), organizację współdzielonego dostępu węzłów do podsieci w różnych przestrzeniach nazw, kontrolę routingu (w tym przypisywanie węzłom wychodzącym dostępu do świata zewnętrznego), współdzielony dostęp za pośrednictwem list kontroli dostępu (ACL) oraz wykonywanie DNS.
Kod Headscale jest napisany w Go i jest rozpowszechniany na licencji BSD. Projekt rozwija Juan Font z Europejskiej Agencji Kosmicznej.
Jeśli chcesz dowiedzieć się więcej, szczegóły znajdziesz pod poniższym linkiem.