# Harbor Один компактный VPN-продукт в двух режимах: - **Harbor Gateway** — отдельная Linux-машина принимает трафик устройств как системный Gateway или Gateway HTTP/SOCKS5 Proxy; - **Harbor Connect** — локальный proxy-клиент для macOS. В обоих режимах пользователь добавляет подписку, выбирает сервер и включает VPN на одном экране. ## Gateway ```bash cp .env.example .env docker compose -f docker-compose.gateway.yml up -d --build ``` Интерфейс: `http://:3456`. После подключения экран показывает: - `Gateway` — адрес, который можно назначить устройству как основной шлюз; - `Gateway Proxy` — один адрес на порту `8080`, доступный как `HTTP` и `SOCKS5`. Когда VPN включён, публичный трафик Gateway и Gateway Proxy идёт через выбранный sing-box outbound. Когда VPN выключен, TProxy-перехват снимается и Gateway продолжает работать напрямую через kernel forwarding/NAT без прохода через sing-box. Proxy по умолчанию разрешён только из приватных сетей. Диапазоны задаются через `PROXY_ALLOWED_CIDRS`. ## macOS client ```bash ./scripts/install-macos-client.sh ``` По умолчанию интерфейс доступен на `http://127.0.0.1:3456`, локальный HTTP/SOCKS5 proxy — на `127.0.0.1:8082`. Установщик также добавляет пользовательский LaunchAgent. Он раз в 5 секунд передаёт Connect текущий default gateway macOS. Если этот адрес отвечает как Harbor Gateway и подтверждает ту же подписку, Connect автоматически оставляет локальный proxy на `127.0.0.1`, но переключает его outbound на `direct`: дальнейший трафик обрабатывает системный Harbor Gateway. При смене сети или трёх ошибках проверки Connect возвращается к выбранному локальному VPN. Автоопределение не требует выбора домашней Wi-Fi сети. На Connect и Gateway должна быть настроена ссылка с одним и тем же секретным token длиной не менее 24 символов; token используется только для проверки presence-ответа и не передаётся между устройствами. ## Проверка ```bash npm test npm run build docker compose -f docker-compose.gateway.yml config docker compose -f docker-compose.client.yml config ```