PDA

Просмотр полной версии : Проект Headscale развивает открытый сервер для распределённой VPN-сети Tailscale


Suicide
20.09.2021, 19:58
Проект Headscale (https://github.com/juanfont/headscale) развивает открытую реализацию серверного компонента VPN-сети Tailscale (https://tailscale.com/), позволяющего создавать похожие на Tailscale VPN-сети на своих мощностях, не привязываясь к сторонним сервисам. Код Headscale написан на языке Go и распространяется (https://github.com/juanfont/headscale) под лицензией BSD. Проект развивает Хуан Фонт Алонсо (Juan Font) из Европейского космического агентства.

Tailscale позволяет объединить произвольное число территориально разнесённых хостов в одну сеть, построенную (https://tailscale.com/blog/how-tailscale-works/) по образу mesh-сети, в которой каждый узел взаимодействует с другими узлами напрямую (P2P) или через соседние узлы, без передачи трафика через централизованные внешние серверы VPN-провайдера. Поддерживается управление доступом и маршрутами на основе ACL. Для установки каналов связи в условиях применения трансляторов адресов (NAT) предоставляется поддержка (https://tailscale.com/blog/how-nat-traversal-works/) механизмов STUN (https://tools.ietf.org/html/rfc5389), ICE (https://tools.ietf.org/html/rfc8445) и DERP (аналог TURN (https://tools.ietf.org/html/rfc5766), но на базе HTTPS). В случае блокировки канала связи между определёнными узлами сеть может перестраивать маршрутизацию для направления трафика через другие узлы.

https://www.opennet.ru/opennews/pics_base/0_1632133308.png

От проекта Nebula (https://github.com/slackhq/nebula), также предназначенного для создания распределённых VPN-сетей c mesh-маршрутизацией, Tailscale отличается (https://tailscale.com/kb/1148/tailscale-vs-nebula/) использованием протокола Wireguard (https://www.opennet.ru/opennews/art.shtml?num=52636) для организации передачи данных между узлами, в то время как в Nebula используются наработки проекта Tinc (https://tinc-vpn.org/), в котором для шифрования пакетов используется (https://tinc-vpn.org/documentation-1.1/Encryption-of-network-packets.html) алгоритм AES-256-GSM (в Wireguard применяется шифр ChaCha20, который в тестах демонстрирует более высокую пропускную способность и отзывчивость).

Отдельно развивается ещё один похожий проект - Innernet (https://github.com/tonarino/innernet), в котором для обмена данными между узлами также применяется протокол Wireguard. В отличие (https://blog.tonari.no/introducing-innernet#tailscale) от Tailscale и Nebula в Innernet применяется иная система разделения доступа, основанная не на ACL с привязкой тегов к отдельным узлам, а на разделении подсетей и выделении разных диапазонов IP-адресов, как в обычных интернет-сетях. Кроме того, вместо языка Go в Innernet применяется язык Rust. Три дня назад опубликовано (https://github.com/tonarino/innernet/releases/tag/v1.5.0) обновление Innernet 1.5 с улучшенной поддержкой обхода NAT. Существует также проект Netmaker (https://github.com/gravitl/netmaker), позволяющий объединять сети с разной топологией при помощи Wireguard, но его код поставляется под лицензией SSPL (Server Side Public License), которая не является открытой из-за наличия дискриминирующих требований.

Tailscale распространяется с использованием модели Freemium, подразумевающей возможность бесплатного использования для индивидуальных лиц и платный доступ для предприятий и команд. Клиентские компоненты Tailscale, за исключением графических приложений для Windows и macOS, развиваются в форме открытых проектов (https://github.com/tailscale/tailscale) под лицензией BSD. Работающее на стороне компании Tailscale серверное ПО, обеспечивающее аутентификацию при подключении новых клиентов, координирующее управление ключами и организующее взаимодействие между узлами, является проприетарным. Проект Headscale устраняет этот недостаток и предлагает независимую открытую реализацию серверных компонентов Tailscale.

https://www.opennet.ru/opennews/pics_base/0_1632133454.png (https://www.opennet.ru/opennews/pics_base/0_1632133447.png)

Headscale берёт на себя функции обмена открытыми ключами узлов, а также выполняет операции назначения IP-адресов и распространения таблиц маршрутизации между узлами. В текущем виде в Headscale реализованы все основные возможности управляющего сервера, за исключением поддержки MagicDNS и Smart DNS. В частности, поддерживаются функции регистрации узлов (в том числе через web), адаптации сети к добавлению или удалению узлов, разделения подсетей при помощи пространств имён (одна VPN-сеть может быть создана для нескольких пользователей), организации общего доступа узлов к подсетям в разных пространствах имён, управления маршрутизацией (в том числе назначение выходных узлов для обращения к внешнему миру), разделения доступа через ACL (https://tailscale.com/kb/1018/acls/) и работы службы DNS.

20.09.2021

https://www.opennet.ru/opennews/art.shtml?num=55834​