---
title: Развёртывание туннелей MCP с помощью Docker Compose
url: https://platform.claude.com/docs/ru/agents-and-tools/mcp-tunnels/deploy-compose
description: Установите стек туннеля MCP на виртуальную машину с помощью Docker Compose.
---

<Note>
  «MCP tunnels» (туннели MCP) находятся на этапе «research preview» (исследовательская предварительная версия). [Запросите доступ](https://claude.com/form/mcp-tunnels), чтобы опробовать их.
</Note>

В этом руководстве [стек туннеля](https://platform.claude.com/docs/ru/agents-and-tools/mcp-tunnels/concepts#components) развёртывается в виде защищённых контейнеров на одном хосте. Ту же конфигурацию можно реплицировать на несколько хостов для обеспечения доступности.

## Прежде чем начать

Вам потребуется:

* **Туннель.** При программном доступе [компонент настройки](https://platform.claude.com/docs/ru/agents-and-tools/mcp-tunnels/concepts#components) (setup component) создаёт его за вас, если вы не указываете идентификатор туннеля; чтобы вместо этого подключиться к существующему туннелю, [создайте его в Console](https://platform.claude.com/docs/ru/agents-and-tools/mcp-tunnels/console#create-a-tunnel) и запишите идентификатор туннеля (`tnl_...`). Ручная подготовка всегда начинается с туннеля, созданного в Console.

* **Способ аутентификации хоста в Tunnels API.**

  * **Программный доступ (рекомендуется).** Включите **Set up programmatic access** при создании туннеля, чтобы компонент настройки мог проходить аутентификацию через Workload Identity Federation. Если вы позволяете компоненту настройки создать туннель, вместо этого создайте правило федерации непосредственно на странице [Workload identity](https://platform.claude.com/settings/workload-identity-federation) (`platform.claude.com/settings/workload-identity-federation`) в Claude Console. Запишите идентификатор правила федерации (`fdrl_...`) и идентификатор вашей организации.
  * **Вручную.** Пропустите программный доступ. Вы [получите токен туннеля из Console](https://platform.claude.com/docs/ru/agents-and-tools/mcp-tunnels/console#get-the-connection-details), самостоятельно сгенерируете CA и серверный сертификат и [зарегистрируете CA в Console](https://platform.claude.com/docs/ru/agents-and-tools/mcp-tunnels/console#add-a-ca-certificate).

* **Хост с установленными Docker и Docker Compose**. Для ручного процесса также требуется `openssl` (версии 1.1.1 или новее).

* **Исходящее сетевое подключение** от хоста к `api.anthropic.com` (443 TCP) и к [границе туннеля](https://platform.claude.com/docs/ru/agents-and-tools/mcp-tunnels/concepts#components) (tunnel edge) (7844 TCP и UDP). См. полные [сетевые требования](https://platform.claude.com/docs/ru/agents-and-tools/mcp-tunnels/overview#network-requirements).

* **Один или несколько серверов MCP**, запущенных и доступных с хоста по адресам, которые вы настроите в `routes`. Если у вас его ещё нет, [используйте пример сервера](https://platform.claude.com/docs/ru/agents-and-tools/mcp-tunnels/deploy-compose#optional-use-a-sample-mcp-server).

## Необязательно: используйте пример сервера MCP

Если у вас нет сервера MCP для тестирования, используйте этот минимальный вариант:

```bash
mkdir -p mcp-tunnel
cat > mcp-tunnel/hello_server.py <<'EOF'
from mcp.server.fastmcp import FastMCP

mcp = FastMCP("hello-server", host="0.0.0.0", port=9000)


@mcp.tool()
def hello(name: str = "world") -> str:
    """Say hello to someone."""
    return f"Hello, {name}!"


if __name__ == "__main__":
    mcp.run(transport="streamable-http")
EOF
```

Следующие шаги установки выполняют `cd` в `mcp-tunnel/` и указывают, где добавить соответствующий сервис и маршрут.

## Установка

В этом руководстве приведён один эталонный подход с использованием Docker Compose. Вы несёте ответственность за его адаптацию в соответствии с требованиями безопасности вашей организации.

<Tabs>
  <Tab title="С программным доступом">
    Этот путь требует, чтобы у хоста был поставщик удостоверений OIDC (например, сервер метаданных облачной виртуальной машины или SPIFFE). Если его нет, используйте вместо этого вкладку **Без программного доступа**.

    Компонент настройки использует Workload Identity Federation, чтобы получить токен туннеля, сгенерировать CA и серверный сертификат и зарегистрировать CA в Anthropic.

    <Steps>
      <Step title="Подготовьте каталог развёртывания">
        ```bash
        mkdir -p mcp-tunnel/{config,data}
        cd mcp-tunnel
        sudo chown 65532:65532 data
        ```

        Контейнеры запускаются от имени непривилегированного UID `65532` и нуждаются в доступе на запись к `data/`.
      </Step>

      <Step title="Напишите docker-compose.yaml">
        Файл compose закрепляет образы по дайджесту SHA-256, запускает каждый контейнер от имени непривилегированного пользователя с файловой системой только для чтения, отбрасывает все возможности (capabilities) Linux и отключает повышение привилегий.

        ```bash
        cat > docker-compose.yaml <<'EOF'
        services:
          setup:
            image: us-docker.pkg.dev/anthropic-public-registry/images/mcp-proxy@sha256:efb27b299d627e4134815663cb8896641eeaee025d734c0f695582b4df38f013
            entrypoint: ["/setup"]
            command:
              - init
              - --api-url=https://api.anthropic.com
              - --output=dir:/data
              - --token-version=1
            environment:
              - TUNNEL_ID
              - ANTHROPIC_FEDERATION_RULE_ID
              - ANTHROPIC_ORGANIZATION_ID
              - ANTHROPIC_WORKSPACE_ID
              - ANTHROPIC_IDENTITY_TOKEN
            volumes:
              - ./data:/data
            user: "65532:65532"
            read_only: true
            security_opt:
              - no-new-privileges:true
            cap_drop:
              - ALL
            profiles: ["setup"]

          cloudflared:
            image: cloudflare/cloudflared@sha256:6b599ca3e974349ead3286d178da61d291961182ec3fe9c505e1dd02c8ac31b0
            command: tunnel --no-autoupdate run --url http://localhost:8080
            environment:
              - TUNNEL_TOKEN
            # Используем netns прокси, чтобы localhost:8080 был доступен.
            network_mode: "service:mcp-proxy"
            restart: unless-stopped
            user: "65532:65532"
            read_only: true
            security_opt:
              - no-new-privileges:true
            cap_drop:
              - ALL
            stop_grace_period: 30s
            logging:
              options:
                max-size: "10m"
                max-file: "3"

          mcp-proxy:
            image: us-docker.pkg.dev/anthropic-public-registry/images/mcp-proxy@sha256:efb27b299d627e4134815663cb8896641eeaee025d734c0f695582b4df38f013
            volumes:
              - ./config/mcp-proxy.yaml:/etc/mcp-gateway/config.yaml:ro
              - ./data:/data:ro
            restart: unless-stopped
            user: "65532:65532"
            read_only: true
            security_opt:
              - no-new-privileges:true
            cap_drop:
              - ALL
            stop_grace_period: 30s
            logging:
              options:
                max-size: "10m"
                max-file: "3"
        EOF
        ```

        Если вы используете [пример сервера MCP](https://platform.claude.com/docs/ru/agents-and-tools/mcp-tunnels/deploy-compose#optional-use-a-sample-mcp-server), добавьте его как сервис:

        ```bash
        cat >> docker-compose.yaml <<'EOF'

          hello-mcp:
            image: python:3.13-slim
            working_dir: /app
            volumes:
              - ./hello_server.py:/app/hello_server.py:ro
            command: sh -c "pip install --quiet mcp && python hello_server.py"
            restart: unless-stopped
        EOF
        ```
      </Step>

      <Step title="Подготовьте туннель">
        Задайте идентификаторы. Оставьте `TUNNEL_ID` незаданным, чтобы компонент настройки создал туннель; задайте его, чтобы подключиться к существующему туннелю из [Console](https://platform.claude.com/docs/ru/agents-and-tools/mcp-tunnels/console#create-a-tunnel):

        ```bash
        # export TUNNEL_ID=tnl_...   # задайте, чтобы подключиться к существующему туннелю
        export ANTHROPIC_FEDERATION_RULE_ID=fdrl_...
        export ANTHROPIC_ORGANIZATION_ID=00000000-0000-0000-0000-000000000000
        ```

        Если ваше правило федерации ограничено рабочим пространством, отличным от рабочего пространства вашей организации по умолчанию, также задайте `ANTHROPIC_WORKSPACE_ID=wrkspc_...`; в противном случае компонент настройки использует рабочее пространство по умолчанию. Автоматически создаваемый туннель создаётся в этом рабочем пространстве.

        Задайте `ANTHROPIC_IDENTITY_TOKEN` равным OIDC JWT от поставщика удостоверений этого хоста. Следуйте [руководству по WIF для вашего поставщика](https://platform.claude.com/docs/ru/manage-claude/workload-identity-federation#identity-providers), чтобы зарегистрировать издателя, задать субъект правила и выпустить токен; аудитория правила должна совпадать с аудиторией, которую вы запрашиваете при выпуске.

        Запустите компонент настройки:

        ```bash
        docker compose run --rm setup
        ```

        `setup init` идемпотентен относительно `data/`: при повторном запуске он повторно использует уже сохранённые там идентификатор туннеля и CA и никогда не создаёт второй туннель. Новый CA генерируется и регистрируется только тогда, когда `data/` пуст или `TUNNEL_ID` изменился; в этом случае действует ограничение в два активных сертификата, поэтому сначала отзовите один в Console, если оба слота заняты.

        См. раздел [Сбои аутентификации компонента настройки](https://platform.claude.com/docs/ru/agents-and-tools/mcp-tunnels/troubleshooting#setup-component-authentication-failures), если возникает ошибка.

        Получите домен вашего туннеля и экспортируйте его для последующих шагов:

        ```bash
        export TUNNEL_DOMAIN=$(sudo cat data/tunnel-domain)
        echo "$TUNNEL_DOMAIN"
        ```

        <Note>
          Токены Workload Identity Federation являются краткосрочными (по умолчанию 1 час) и истекают автоматически; после завершения настройки отзывать нечего.
        </Note>
      </Step>

      <Step title="Напишите конфигурацию прокси">
        `tunnel_domain` является **обязательным**: [прокси](https://platform.claude.com/docs/ru/agents-and-tools/mcp-tunnels/concepts#components) использует его, чтобы удалить суффикс домена из входящих имён хостов перед поиском поддомена в `routes`. `routes` — это плоское отображение поддомена на URL вышестоящего сервера, а не список.

        ```bash
        cat > config/mcp-proxy.yaml <<EOF
        listen_addr: ":8080"
        log_level: info
        shutdown_timeout: 30s
        tunnel_domain: ${TUNNEL_DOMAIN}
        tls:
          cert_file: /data/tls.crt
          key_file: /data/tls.key
        routes:
          echo: http://hello-mcp:9000
        EOF
        ```

        Маршрут `echo:` указывает на [пример сервера MCP](https://platform.claude.com/docs/ru/agents-and-tools/mcp-tunnels/deploy-compose#optional-use-a-sample-mcp-server); замените его своими маршрутами (или добавьте их). См. справочник по [конфигурации прокси](https://platform.claude.com/docs/ru/agents-and-tools/mcp-tunnels/reference#proxy-configuration) со всеми доступными полями.
      </Step>

      <Step title="Запустите развёртывание">
        ```bash
        export TUNNEL_TOKEN=$(sudo cat data/tunnel-token)
        docker compose up -d
        ```
      </Step>
    </Steps>
  </Tab>

  <Tab title="Без программного доступа">
    Используйте этот процесс, если вы не включили **Set up programmatic access**, или для локальной разработки и тестирования. Сервис `setup` отсутствует.

    <Steps>
      <Step title="Получите токен и домен туннеля из Console">
        На странице сведений о туннеле скопируйте **Domain** (он имеет вид `abcd1234.tunnel.anthropic.com`), затем нажмите значок глаза рядом с **Token**, чтобы получить токен туннеля, и используйте значок копирования, чтобы скопировать его.

        Задайте оба значения как переменные оболочки для оставшейся части руководства:

        ```bash
        export TUNNEL_DOMAIN=YOUR_TUNNEL_DOMAIN_HERE
        export TUNNEL_TOKEN='eyJ...'
        ```
      </Step>

      <Step title="Создайте структуру и сгенерируйте сертификаты">
        ```bash
        mkdir -p mcp-tunnel/{data,config}
        cd mcp-tunnel
        ```

        Прокси прослушивает `:8080` по обычному WebSocket; рукопожатие [внутреннего TLS](https://platform.claude.com/docs/ru/agents-and-tools/mcp-tunnels/concepts#components) (inner TLS) происходит **внутри** этого потока WebSocket с использованием этих сертификатов. Anthropic проверяет внутреннее рукопожатие по CA, который вы регистрируете в Console. Subject Alternative Name (SAN) серверного сертификата должен включать `*.<tunnel-domain>` согласно [требованиям к сертификатам](https://platform.claude.com/docs/ru/agents-and-tools/mcp-tunnels/reference#certificate-requirements).

        ```bash
        # Самоподписанный CA. Явные расширения, чтобы он удовлетворял требованиям
        # к сертификату независимо от значений по умолчанию openssl.cnf дистрибутива.
        openssl req -x509 -newkey rsa:2048 -nodes \
          -keyout data/ca.key -out data/ca.crt \
          -days 3650 -subj "/CN=mcp-tunnel-ca" \
          -addext "basicConstraints=critical,CA:TRUE" \
          -addext "keyUsage=critical,keyCertSign,cRLSign" \
          -addext "subjectKeyIdentifier=hash"

        # Файл расширений для серверного сертификата. Использование -extfile (вместо
        # -copy_extensions, доступного только в OpenSSL 3.0+) сохраняет работоспособность на
        # OpenSSL 1.1.x.
        cat > data/tls.ext <<EOF
        subjectAltName = DNS:${TUNNEL_DOMAIN},DNS:*.${TUNNEL_DOMAIN}
        authorityKeyIdentifier = keyid,issuer
        extendedKeyUsage = serverAuth
        EOF

        # Серверный сертификат, подписанный CA
        openssl req -newkey rsa:2048 -nodes \
          -keyout data/tls.key -out /tmp/server.csr \
          -subj "/CN=${TUNNEL_DOMAIN}"
        openssl x509 -req -in /tmp/server.csr \
          -CA data/ca.crt -CAkey data/ca.key -CAcreateserial \
          -out data/tls.crt -days 90 \
          -extfile data/tls.ext

        # Разрешить контейнеру прокси без root (UID 65532) читать ключ из
        # bind mount. Без бита чтения для всех контейнер не сможет открыть
        # файл, принадлежащий хосту.
        chmod 644 data/tls.key
        ```
      </Step>

      <Step title="Зарегистрируйте сертификат CA в Console">
        На странице сведений о туннеле прокрутите до раздела **Certificates** и нажмите **Add certificate**. Загрузите `data/ca.crt` напрямую с помощью **Choose file** (модальное окно принимает `.pem`, `.crt` и `.cer`) или вставьте его содержимое:

        ```bash
        cat data/ca.crt
        ```

        Значок **Needs certificate** рядом с именем туннеля исчезает после регистрации сертификата. См. раздел [Добавление сертификата CA](https://platform.claude.com/docs/ru/agents-and-tools/mcp-tunnels/console#add-a-ca-certificate).
      </Step>

      <Step title="Напишите конфигурацию прокси">
        `tunnel_domain` является **обязательным**: прокси использует его, чтобы удалить суффикс домена из входящих имён хостов перед поиском поддомена в `routes`. `routes` — это плоское отображение поддомена на URL вышестоящего сервера, а не список.

        ```bash
        cat > config/mcp-proxy.yaml <<EOF
        listen_addr: ":8080"
        log_level: info
        tunnel_domain: ${TUNNEL_DOMAIN}
        tls:
          cert_file: /data/tls.crt
          key_file: /data/tls.key
        routes:
          echo: http://hello-mcp:9000
        EOF
        ```

        Маршрут `echo:` указывает на [пример сервера MCP](https://platform.claude.com/docs/ru/agents-and-tools/mcp-tunnels/deploy-compose#optional-use-a-sample-mcp-server); замените его своими маршрутами (или добавьте их). См. справочник по [конфигурации прокси](https://platform.claude.com/docs/ru/agents-and-tools/mcp-tunnels/reference#proxy-configuration) со всеми доступными полями.
      </Step>

      <Step title="Напишите docker-compose.yaml">
        Параметр `network_mode: "service:mcp-proxy"` помещает [cloudflared](https://platform.claude.com/docs/ru/agents-and-tools/mcp-tunnels/concepts#components) в сетевое пространство имён прокси, так что `localhost:8080` внутри контейнера cloudflared достигает прокси. Флаг `--url http://localhost:8080` задаёт cloudflared цель пересылки; без этого флага у cloudflared нет маршрута для входящих запросов, и он возвращает 503.

        ```bash
        cat > docker-compose.yaml <<'EOF'
        services:
          cloudflared:
            image: cloudflare/cloudflared@sha256:6b599ca3e974349ead3286d178da61d291961182ec3fe9c505e1dd02c8ac31b0
            # --url обязателен: в ручном сценарии правила ingress не передаются,
            # поэтому без него cloudflared отвечает 503 на каждый запрос.
            command: tunnel --no-autoupdate run --url http://localhost:8080
            environment:
              - TUNNEL_TOKEN
            # Используем netns прокси, чтобы localhost:8080 достигал его.
            network_mode: "service:mcp-proxy"
            restart: unless-stopped
            user: "65532:65532"
            read_only: true
            security_opt:
              - no-new-privileges:true
            cap_drop:
              - ALL
            stop_grace_period: 30s
            logging:
              options:
                max-size: "10m"
                max-file: "3"

          mcp-proxy:
            image: us-docker.pkg.dev/anthropic-public-registry/images/mcp-proxy@sha256:efb27b299d627e4134815663cb8896641eeaee025d734c0f695582b4df38f013
            volumes:
              - ./config/mcp-proxy.yaml:/etc/mcp-gateway/config.yaml:ro
              - ./data:/data:ro
            restart: unless-stopped
            user: "65532:65532"
            read_only: true
            security_opt:
              - no-new-privileges:true
            cap_drop:
              - ALL
            stop_grace_period: 30s
            logging:
              options:
                max-size: "10m"
                max-file: "3"
        EOF
        ```

        Если вы используете [пример сервера MCP](https://platform.claude.com/docs/ru/agents-and-tools/mcp-tunnels/deploy-compose#optional-use-a-sample-mcp-server), добавьте его как сервис:

        ```bash
        cat >> docker-compose.yaml <<'EOF'

          hello-mcp:
            image: python:3.13-slim
            working_dir: /app
            volumes:
              - ./hello_server.py:/app/hello_server.py:ro
            command: sh -c "pip install --quiet mcp && python hello_server.py"
            restart: unless-stopped
        EOF
        ```
      </Step>

      <Step title="Запустите развёртывание">
        ```bash
        docker compose up -d
        ```
      </Step>
    </Steps>
  </Tab>
</Tabs>

Файл compose считывает `TUNNEL_TOKEN` из окружения хоста без значения по умолчанию, поэтому экспорт необходимо повторять в каждой новой оболочке и после перезагрузки.

Для развёртывания на нескольких виртуальных машинах скопируйте каталог `mcp-tunnel/` на каждый хост, задайте `TUNNEL_TOKEN` и выполните `docker compose up -d`. В программном процессе `TUNNEL_TOKEN` равен `$(sudo cat data/tunnel-token)`; в ручном процессе это значение, которое вы скопировали из Console. Один и тот же токен туннеля и сертификаты работают на всех репликах.

## Проверка развёртывания

Выполните сквозную проверку, вызвав [вышестоящий сервер MCP](https://platform.claude.com/docs/ru/agents-and-tools/mcp-tunnels/concepts#components) (upstream MCP server) со стороны Anthropic: см. раздел [Использование туннелированных серверов MCP](https://platform.claude.com/docs/ru/agents-and-tools/mcp-tunnels/overview#use-the-tunneled-mcp-servers). С [примером сервера MCP](https://platform.claude.com/docs/ru/agents-and-tools/mcp-tunnels/deploy-compose#optional-use-a-sample-mcp-server) маршрутизируемый URL — `https://echo.<your-tunnel-domain>/mcp`. Если проверка не удалась, см. раздел [Устранение неполадок](https://platform.claude.com/docs/ru/agents-and-tools/mcp-tunnels/troubleshooting).

## Обновления

Выполняйте команды из этого раздела внутри каталога развёртывания `mcp-tunnel/`.

### Ротация токена туннеля

При программном доступе увеличьте `--token-version` в команде сервиса `setup`, задайте идентификаторы Workload Identity Federation, выпустите новый OIDC JWT и повторно запустите компонент настройки:

```bash
# Отредактируйте docker-compose.yaml: увеличьте целое число в аргументе
# --token-version сервиса setup (например, с --token-version=1 на
# --token-version=2). Бинарный файл setup отказывается выполнять ротацию,
# если значение не изменилось.

# export TUNNEL_ID=tnl_...   # задайте, только если задавали при установке
export ANTHROPIC_FEDERATION_RULE_ID=fdrl_...
export ANTHROPIC_ORGANIZATION_ID=00000000-0000-0000-0000-000000000000
# export ANTHROPIC_WORKSPACE_ID=wrkspc_...   # если правило привязано к рабочему пространству
# Заново выпустите ANTHROPIC_IDENTITY_TOKEN по руководству провайдера WIF для вашей
# среды (с момента установки срок его действия истёк).
export ANTHROPIC_IDENTITY_TOKEN=...

docker compose run --rm setup

export TUNNEL_TOKEN=$(sudo cat data/tunnel-token)
docker compose up -d cloudflared
```

Аргумент `--token-version` редактируется в `docker-compose.yaml`, а не передаётся в командной строке, чтобы новое значение сохранялось для будущих запусков компонента настройки. Компонент настройки аутентифицируется с помощью Workload Identity Federation; токена API для отзыва нет.

Без программного доступа нажмите **Rotate token** на странице сведений о туннеле в Console, затем обновите переменную окружения `TUNNEL_TOKEN` на каждом хосте и перезапустите cloudflared (`docker compose up -d cloudflared`).

<Warning>
  Нажатие **Rotate token** немедленно делает текущий токен недействительным. В промежутке между этим моментом и обновлением `TUNNEL_TOKEN` на каждом хосте с перезапуском cloudflared любой хост, на котором cloudflared перезапустится (сбой, перезагрузка хоста), не сможет переподключиться. Обновляйте каждый хост сразу после ротации.
</Warning>

### Обновление сертификата

Вы несёте ответственность за отслеживание срока действия и обновление серверного сертификата до его истечения.

При программном доступе:

```bash
docker compose run --rm setup renew-cert --output=dir:/data
```

Аргументы CLI заменяют `command` сервиса `setup` (аргументы `init`), но сохраняют его `entrypoint`, поэтому выполняется `/setup renew-cert --output=dir:/data`.

<Tip>
  Передайте `--renew-before=720h`, чтобы команда ничего не делала, когда остаётся более 30 дней срока действия. Это делает её безопасной для запуска по фиксированному расписанию.
</Tip>

Без программного доступа подпишите новый серверный сертификат вашим существующим CA (CA, зарегистрированный в Console, не меняется) и замените `data/tls.crt`. Сначала задайте `TUNNEL_DOMAIN`, если вы выполняете это из новой оболочки.

```bash
export TUNNEL_DOMAIN=YOUR_TUNNEL_DOMAIN_HERE
openssl req -new -key data/tls.key -out /tmp/server.csr \
  -subj "/CN=${TUNNEL_DOMAIN}"
openssl x509 -req -in /tmp/server.csr \
  -CA data/ca.crt -CAkey data/ca.key -CAcreateserial \
  -out data/tls.crt -days 90 \
  -extfile data/tls.ext
```

В любом из процессов прокси опрашивает `tls.cert_file` и перезагружает его автоматически, поэтому перезапуск не требуется.

## Следующие шаги

<CardGroup cols={2}>
  <Card title="Использование туннелированных серверов MCP" icon="link" href="https://platform.claude.com/docs/ru/agents-and-tools/mcp-tunnels/overview#use-the-tunneled-mcp-servers">
    Подключите вышестоящий сервер MCP к Managed Agent или Messages API.
  </Card>

  <Card title="Безопасность" icon="lock" href="https://platform.claude.com/docs/ru/agents-and-tools/mcp-tunnels/security">
    Рекомендации по усилению защиты, ротация учётных данных и реагирование на взлом.
  </Card>

  <Card title="Устранение неполадок" icon="wrench" href="https://platform.claude.com/docs/ru/agents-and-tools/mcp-tunnels/troubleshooting">
    Диагностика проблем с подключением, TLS и маршрутизацией.
  </Card>
</CardGroup>
