Вопрос или проблема
У меня есть домашняя сеть с собственной инфраструктурой, а также несколько серверов в дата-центрах для VPN, резервного копирования и других нужд. Я ищу способ создать защищённую сеть между ними, которая позволит мне получать доступ к любому из серверов из любого интернет-соединения. Я также хочу подключить свои личные устройства (такие как ноутбук и мобильный телефон) в качестве одноранговых узлов и использовать некоторые из серверов в качестве выходных узлов.
Я пробовал такие сервисы, как Tailscale, Netbird и Twingate, но некоторые из моих серверов находятся в регионах с гео-ограниченными сетями, что мешает им установить первоначальное соединение с этими сервисами для входа.
Я ищу либо способ решить эту проблему с данными сервисами, либо альтернативные решения, которые не имеют проблем с гео-ограничениями.
Конкретно для Tailscale существует саморазворачиваемая версия его контроллера: headscale
. Если у вас есть хотя бы один сервер, который доступен со всех других серверов, вы можете использовать его в качестве контроллера Tailscale.
Для внутреннего доступа можно вручную создать такую сеть:
- Создайте множество GRE или L2TP или WireGuard туннелей между вашими серверами, например, каждый сервер имеет одну связь с ближайшим сервером и одну резервную связь с чем-то другим.
- Включите IP-маршрутизацию на всех серверах (между туннельными интерфейсами).
- Запустите OSPF или Babel по этим туннелям и позвольте протоколу определить пути к каждому узлу.
Если каждый сервер может достичь хотя бы одного другого сервера, протокол маршрутизации автоматически обеспечит, чтобы остальные узлы сети могли его также достичь. Любой из этих серверов может действовать как точка входа в остальную часть сети (используя любой клиентский VPN протокол, который вы хотите).
(Для OSPF через WireGuard вам понадобятся индивидуальные интерфейсы 0.0.0.0/0, по одному для каждого однорангового узла; не просто один многопользовательский интерфейс. Для GRE или L2TP вы захотите использовать IPsec в транспортном режиме для обеспечения шифрования. Туннели на основе маршрутизации IPsec также могут подойти.)
Это позволяет вам SSH подключаться к любой машине, которая является частью сети (и, конечно, использовать эту машину в качестве прокси с помощью ssh -D
); однако это не совсем упрощает использование данного сервера как “выходного узла” для общего IP трафика. Для этого лучше подойдёт “сетевая” Mesh VPN, такая как Tinc (в ‘switch’ режиме). Возможно, ZeroTier также подойдет, но я не думаю, что он поддерживает полное маршрутизирование сети, полагаясь вместо этого на специализированные ретрансляторы.
Сеть не обязательно должна быть однородной; вы можете смешивать WireGuard, OpenVPN, стандартные соединения и т. д., пока она может передавать пакеты протокола маршрутизации OSPF (или Babel), и вы наверняка можете также добавить Headscale в смесь с статическими маршрутами к/от.
Ответ или решение
Создание безопасной и приватной сети для доступа к серверам из разных регионов Интернета может быть непростой задачей, особенно если у вас есть ограничения по геолокации. Ниже представлены несколько методов, которые помогут вам организовать такую сеть и решить проблему с доступом.
Использование Headscale с Tailscale
-
Сервер для Headscale: Если вы используете Tailscale, вы можете развернуть самостоятеленную версию его контроллера, называемую Headscale, на одном из доступных серверов. Убедитесь, что этот сервер доступен из любых регионов, чтобы его могли использовать другие устройства для подключения.
-
Туннелирование: Разверните Headscale, создайте необходимые конфигурации и обеспечьте доступ ваших устройств через этот контроллер. Это позволит обойти проблемы с географическими ограничениями, так как вы сможете подключаться к серверу, а он будет действовать как промежуточное звено для доступа к вашему оборудованию.
Альтернативные решения
Если вы столкнулись с проблемами при использовании Tailscale, вот несколько альтернативных подходов:
-
Создание туннелей через GRE или WireGuard:
- Создайте туннели между серверами (напр., GRE или WireGuard), чтобы ваша инфраструктура могла обмениваться данными. Убедитесь, что у каждого сервера есть связь с хотя бы одним другим сервером.
- Настройте маршрутизацию IP на всех серверах для обеспечения взаимодействия через туннели.
-
Использование маршрутизации OSPF:
- Запустите протокол маршрутизации, такой как OSPF или Babel, поверх туннелей. Это даст возможность автоматически определять пути к каждому узлу в вашей сети, улучшая устойчивость и способность обработки изменений.
-
Использование Tinc или ZeroTier:
- Рассмотрите возможность использования Tinc в "режиме свитча" или ZeroTier. Эти системы обеспечивают полное МESH-маршрутизирование, что позволяет вам легко управлять входными и выходными узлами, создавая более гибкую сеть.
Использование SSH для выхода в интернет
- SSH-прокси: Как только вы сможете подключиться к любой машине в вашей сети, настройте SSH для использования её как прокси:
- Используйте команду
ssh -D
для создания локального SOCKS-прокси, что позволит вам направлять весь трафик через эту машину.
- Используйте команду
Заключение
При создании безопасной и приватной сети для доступа к вашим серверам важно учитывать множество аспектов, включая технологии туннелирования, маршрутизации и удобство управления. Использование Headscale с Tailscale, а также альтернативные решения, такие как Tinc или ZeroTier, помогут вам обойти геоограничения и создать надежную сеть. Применяя данные методы, вы сможете обеспечить доступ к своим серверам из любого региона, сохраняя при этом высокую безопасность и защиту ваших данных.