Общая Частная Сеть (SPN)
Концепция
Общая частная сеть (ОЧС/SPN) — это защищённая инфраструктура для организации единого пространства взаимодействия между серверами, сервисами и разработчиками. Она реализуется на основе VPN-технологий, что обеспечивает безопасный и удобный обмен данными, а также централизованное управление доступом.
Основные принципы
- Безопасность: вся передача данных происходит в зашифрованном канале.
- Простота подключения: сотрудники и сервисы подключаются через единый доступ с учётом политик компании.
- Гибкость управления: поддержка смены шлюзов, подсетей и DNS.
- Интеграция: возможность связывать управление сотрудниками и нодами с существующими внутренними системами.
Преимущества
Общая карта сети, включающая ноды, шлюзы и подсети. Позволяет видеть текущее состояние инфраструктуры и управлять параметрами подключения.
Визуализированная карта сети с указанием активных соединений, статуса узлов и маршрутов. Удобна для мониторинга работы и быстрого поиска проблем.
Модуль управления сетью через
SPN API, который позволяет интегрироваться с внутренними системами управления персоналом и инфраструктурой.Переключить ноду-шлюз (например, для балансировки или отказоустойчивости), перенастраивать подсеть.
DNS
Система внутренних DNS-записей, доступных только сотрудникам при подключении к частной сети. Используется для:
- удобного доступа к сервисам и нодам по именам
- настройки единых правил маршрутизации и разрешения имён для сотрудников (разработчиков)
Клиент SPN
Клиент SPN (github.com/cloudnetip/netip-spn) — это инструмент на базе WireGuard для подключения к Общей Частной Сети. Предоставляет CLI для macOS и Linux, а также нативное GUI-приложение для macOS.
Установка
macOS
Установка через Homebrew (рекомендуется):
# Добавить tap
brew tap cloudnetip/tap
# Установить только CLI
brew install cloudnetip-spn
# Установить GUI + CLI (рекомендуется)
brew install --cask cloudnetip-spnCask устанавливает Cloudnetip SPN.app в /Applications, а CLI netip-spn устанавливается через Homebrew Formula.
GUI для macOS содержит собственный зафиксированный WireGuard runtime (wg + wireguard-go). При первом подключении через GUI или после изменения WireGuard runtime в новой версии macOS запросит пароль администратора и установит защищённую root-owned копию в /Library/PrivilegedHelperTools/cloudnetip-spn/. После этого обычные Connect/Disconnect не требуют пароль до следующего изменения встроенного WireGuard runtime.
CLI работает независимо от GUI runtime и использует wg-quick из wireguard-tools. При установке CLI через Homebrew эта зависимость устанавливается автоматически.
Для обновления откройте About Cloudnetip SPN. Приложение в фоне проверит версию в Homebrew и покажет кнопку Update to new version X.Y.Z, если версия GUI или CLI отличается от опубликованной в Homebrew. Обновление выполняется через Homebrew, после чего GUI перезапускается автоматически.
Также можно обновиться вручную:
brew update
brew reinstall --formula cloudnetip/tap/cloudnetip-spn
brew reinstall --cask --force cloudnetip/tap/cloudnetip-spnLinux
Сборка из исходников:
# Установить зависимости
sudo apt install wireguard-tools zenity # Debian/Ubuntu
# или эквивалент для вашего дистрибутива
# Клонировать и собрать
git clone https://github.com/cloudnetip/netip-spn.git
cd netip-spn
make build && sudo make installGUI доступен только для macOS. В Linux используйте CLI напрямую или создайте .desktop launcher.
Другие системы
Для Windows, Android, iOS и других платформ используйте официальный клиент WireGuard.
Скачайте ваш конфигурационный файл SPN с cloudnetip.com/app/shared и импортируйте его в приложение WireGuard:
- Установите WireGuard для вашей платформы
- Скачайте файл
.confс портала SPN - Импортируйте конфигурацию:
- Windows: Нажмите "Import tunnel(s) from file"
- Android/iOS: Отсканируйте QR-код или импортируйте файл
- Другие: Следуйте инструкциям для вашей платформы
Использование CLI
Вход через браузер
Самый быстрый способ настроить клиент — авторизация в браузере. Используется OAuth 2.0 authorization-code flow с PKCE через loopback-редирект (RFC 7636 + RFC 8252):
# Открыть браузер, выбрать SPN, конфиг сохранится автоматически
netip-spn auth loginЧто происходит:
- CLI открывает браузер по адресу cloudnetip.com/app/shared/authorize.
- В веб-интерфейсе вы выбираете, к какому SPN подключиться.
- WireGuard-конфиг сохраняется:
- macOS:
/Library/Application Support/Cloudnetip SPN/spn.conf(root:wheel, режим600). При установке или замене защищённого конфига macOS запросит пароль администратора. - Linux:
~/.cloudnetip/spn.conf(режим600).
- macOS:
Постоянного токена авторизации нет: сам WireGuard-конфиг является учётными данными. Запустите auth login повторно, чтобы ротировать ключи или переключиться на другой SPN.
# Удалить сохранённый конфиг
netip-spn auth logoutНа macOS для удаления защищённого конфига потребуется пароль администратора.
Первоначальная настройка (ручной конфиг)
Если хочется обойтись без браузера, скачайте конфигурационный файл с cloudnetip.com/app/shared и установите его вручную:
# Установить конфиг через file picker
netip-spn config
# Или указать путь напрямую
netip-spn config ~/Downloads/spn.confКонфиг проверяется и сохраняется по указанному выше пути для текущей платформы. На macOS установленная копия принадлежит root и не может быть заменена обычным пользовательским процессом.
Подключение к SPN
# Поднять туннель (требуется sudo)
netip-spn connectCLI использует wg-quick и запрашивает пароль sudo для настройки интерфейса WireGuard. На macOS используется wireguard-tools из Homebrew; CLI не использует встроенный WireGuard runtime GUI.
Проверка статуса подключения
# Проверить состояние туннеля (sudo не требуется)
netip-spn statusОтключение
# Опустить туннель
netip-spn disconnectИспользование GUI (только macOS)
Приложение в menubar использует собственный встроенный WireGuard runtime и минимальный root-owned helper. Для GUI подключений Homebrew wg-quick не используется.
Возможности
- Иконка в Menubar: Показывает статус подключения.
- Скорость в Menubar: Опциональный двухстрочный вывод upload/download через Show stats in bar.
- Sign In / Sign Out: Авторизация через браузер и удаление сохранённого SPN-конфига.
- Управление конфигом: Импорт существующего WireGuard-конфига через нативный file picker.
- Connect / Disconnect: Работают через защищённый встроенный WireGuard runtime.
- Защищённый конфиг: На macOS активный SPN-конфиг принадлежит root и не может быть заменён обычным пользователем.
- Connect/Disconnect без пароля: Пароль администратора нужен только для установки/обновления privileged WireGuard runtime, а не при каждом подключении.
- Show Logs: Открывает лог WireGuard для GUI.
- Встроенная проверка обновлений: About Cloudnetip SPN асинхронно проверяет Homebrew и может обновить GUI и CLI.
Первоначальная настройка
- Запустите
Cloudnetip SPN.appиз Applications. - Кликните на иконку в menubar.
- Выберите Sign In или Choose config. macOS запросит пароль администратора, чтобы установить конфиг в
/Library/Application Support/Cloudnetip SPN/spn.conf. - Нажмите Connect. При первом подключении macOS один раз запросит пароль администратора для установки встроенного WireGuard runtime и минимального passwordless helper.
- Последующие Connect и Disconnect не запрашивают пароль, пока встроенный WireGuard runtime не изменится.
Конфигурационные файлы
macOS
| Путь | Назначение |
|---|---|
/Library/Application Support/Cloudnetip SPN/spn.conf | Активный WireGuard-конфиг SPN (root:wheel, режим 600) |
/Library/PrivilegedHelperTools/cloudnetip-spn/ | Root-owned helper GUI, wg, wireguard-go и runtime.version |
/etc/sudoers.d/netip-spn | Узкие правила NOPASSWD только для GUI-команд check, up и down |
~/Library/Logs/Cloudnetip SPN/wireguard.log | Лог подключений GUI |
~/Library/Logs/Cloudnetip SPN/update.log | Лог обновления через Homebrew |
/var/run/netip-spn/ | Временное root-owned состояние активного туннеля |
/var/run/wireguard/wg-netip.name | Маркер текущего WireGuard-интерфейса utun |
Linux
| Путь | Назначение |
|---|---|
~/.cloudnetip/spn.conf | Сохранённый WireGuard-конфиг (режим 600) |
/var/run/netip-spn/wg-netip.conf | Временный очищенный конфиг, передаваемый wg-quick во время подключения |
/var/run/wireguard/wg-netip.name | Маркер текущего WireGuard-интерфейса |
Клиент использует стандартный формат конфигурации WireGuard. Пример:
[Interface]
PrivateKey = ваш-приватный-ключ
Address = 10.11.0.2/24
DNS = 10.11.0.1
[Peer]
PublicKey = публичный-ключ-сервера
Endpoint = internal.example.ltd:51820
AllowedIPs = 10.11.0.0/16
PersistentKeepalive = 25На macOS для замены защищённого конфига используйте Sign In, Choose config, netip-spn auth login или netip-spn config. На Linux сохранённый ~/.cloudnetip/spn.conf также можно редактировать напрямую при отключённом туннеле.
Удаление
macOS
Для полного удаления сначала отключите туннель и закройте приложение в menubar. Затем, пока netip-spn ещё установлен, выполните:
# Удалить защищённый конфиг SPN
netip-spn auth logout
# Удалить passwordless sudo-правило и root-owned WireGuard runtime/helper
netip-spn sudoers remove
# Удалить GUI и CLI
brew uninstall --zap --cask cloudnetip-spn
brew uninstall cloudnetip-spn
# Удалить пользовательские логи
rm -rf "$HOME/Library/Logs/Cloudnetip SPN"
# Удалить пустую защищённую директорию конфига, если она осталась
sudo rmdir "/Library/Application Support/Cloudnetip SPN" 2>/dev/null || truenetip-spn sudoers remove при необходимости останавливает туннель GUI и удаляет /Library/PrivilegedHelperTools/cloudnetip-spn/ вместе с /etc/sudoers.d/netip-spn.
Если tap Cloudnetip больше не используется другими пакетами, его также можно удалить:
brew untap cloudnetip/tapLinux
Если CLI устанавливался через sudo make install:
netip-spn disconnect
netip-spn auth logout
sudo rm -f /usr/local/bin/netip-spn
rm -rf "$HOME/.cloudnetip"Удаляйте wireguard-tools отдельно только если он больше не нужен другим WireGuard-подключениям.
Устранение неполадок
Проблемы с подключением
Для туннеля, поднятого GUI на macOS:
# Проверить WireGuard через встроенный root-owned wg
sudo "/Library/PrivilegedHelperTools/cloudnetip-spn/wg" show
# Посмотреть защищённый конфиг
sudo cat "/Library/Application Support/Cloudnetip SPN/spn.conf"
# Смотреть лог GUI в реальном времени
tail -f "$HOME/Library/Logs/Cloudnetip SPN/wireguard.log"Для подключений через CLI используйте системные/Homebrew WireGuard tools:
sudo wg show
netip-spn statusПроблемы с правами доступа
GUI на macOS запрашивает пароль администратора, когда требуется установить/обновить privileged WireGuard runtime или установить/удалить защищённый конфиг. После настройки обычные Connect/Disconnect работают без пароля.
Проверить состояние GUI helper:
netip-spn sudoers checkCLI по-прежнему требует wg-quick и sudo:
# CLI на macOS
brew install wireguard-tools
# CLI на Debian/Ubuntu
sudo apt install wireguard-toolsКонфиг не найден
Проверьте путь конфига для вашей платформы:
# macOS
sudo ls -l "/Library/Application Support/Cloudnetip SPN/spn.conf"
# Linux
ls -l ~/.cloudnetip/spn.confПересохранить конфиг:
netip-spn config ~/путь/к/вашему/spn.confАварийная остановка подключения
Используйте этот раздел только как аварийный способ восстановления.
Для подключения через GUI на macOS сначала попросите установленный privileged helper выполнить штатную очистку. Он удалит маршруты GUI, DNS-запись, runtime state и остановит интерфейс WireGuard:
sudo "/Library/PrivilegedHelperTools/cloudnetip-spn/helper" _privileged downЕсли GUI/helper аварийно завершился и DNS Cloudnetip остался зарегистрирован в системе, его можно удалить вручную:
printf 'remove State:/Network/Service/cloudnetip-spn/DNS\nquit\n' \
| sudo /usr/sbin/scutil
sudo /usr/bin/dscacheutil -flushcache
sudo /usr/bin/killall -HUP mDNSResponderВ самом крайнем случае, если завис именно встроенный процесс wireguard-go, завершите только экземпляр Cloudnetip:
sudo pkill -f '/Library/PrivilegedHelperTools/cloudnetip-spn/wireguard-go utun'Если helper не смог штатно выполнить очистку и пришлось завершать wireguard-go вручную, перезагрузите macOS перед повторным подключением. Жёсткое завершение процесса не может надёжно восстановить маршруты при повреждённом runtime state.
Для подключения через CLI сначала попробуйте опустить туннель напрямую по временному конфигу:
sudo wg-quick down /var/run/netip-spn/wg-netip.confПосле очистки можно снова выполнить netip-spn connect.