---
title: Безопасный удаленный доступ к домашней лаборатории
slug: homelab-remote-access
canonical: https://shady2k.ru/posts/homelab-remote-access/
date: 2025-06-05
kind: article
author: human
lang: ru
summary: Доступ к домашней лаборатории без единого открытого порта на OpenZiti,
  с разбором архитектуры и моими конфигами роутеров, сервисов и политик.
tags:
  - homelab
  - security
---

## Что такое Zero Trust Network Access (ZTNA)?

ZTNA — это модель безопасности, основанная на предположении, что никакое устройство или пользователь не являются доверенными по умолчанию, независимо от их местоположения (внутри или вне домашней сети). Каждый запрос на доступ к ресурсам должен пройти строгую аутентификацию и авторизацию. Основная идея заключается в предоставлении доступа с наименьшими привилегиями (least privilege access), позволяя пользователям получать доступ только к тем ресурсам, которые им необходимы для выполнения работы. Этот подход помогает снизить риски утечек данных и повышает общую защищенность инфраструктуры.

Таким образом, каждый запрос проходит проверки:

- Аутентификация → кто ты?
- Авторизация → к чему именно можешь обращаться?
- Шифрование → защита транзитных данных.

## Почему классический VPN не подходит?

1.  **Доверие после подключения.** Получаем доступ ко *всем* IP‑ресурсам.
2.  **ACL‑ы на IP‑уровне.**
3.  **Отсутствие микросегментации** — сервисы внутри LAN «видят» друг друга.

ZTNA решает эти проблемы, закрывая сеть по умолчанию и ограничивая доступ до уровня отдельного *сервиса*.

## Знакомство с OpenZiti

|  | **OpenZiti (ZTNA)** | **Классический VPN** |
| --- | --- | --- |
| Доступ после подключения | Закрыт. Доступ только к разрешённым сервисам | Открыт ко всей подсети |
| Гранулярность | Сервис + Атрибуты | Подсеть / IP + ACL |
| Открытые порты для сервисов | **Нет** (требуется 1 исходящий порт) | Да |
| Встраиваемость | SDK Go/C/JS/iOS/Android | Нет |
| Авторизация | mTLS + атрибутные политики | Сетевые ACL |
| Масштабирование | Роли, шаблоны, авто‑ротация сертификатов | Ручное управление IP‑списками |

OpenZiti — это **инструментарий** (overlay‑network + PKI + SDK) для построения Zero Trust прямо *внутри* приложений или туннелем поверх существующей сети (overlay network).

## Архитектура OpenZiti

![](/images/homelab-remote-access/01.webp)

<table><tbody><tr><td><span>Компонент</span></td><td><span>Функция</span></td><td><span>Порты (по&nbsp;умолчанию)</span></td></tr><tr><td><span><strong>Controller</strong></span></td><td><span>PKI, политики, авторизация</span></td><td><span>6262/TCP (ctrl), 8440/TCP (mgmt‑API)</span></td></tr><tr><td><span><strong>Edge&nbsp;Router</strong></span></td><td><span>Публичная точка входа&nbsp;/ выхода</span></td><td><span>3022/TCP (data)</span></td></tr><tr><td><span><strong>Fabric Router</strong></span></td><td><span>Mesh‑маршрутизация внутри overlay</span></td><td><span>3022/3023 TCP</span></td></tr><tr><td><span><strong>Tunnelers / SDK</strong></span></td><td><span>Клиенты (desktop, mobile, сервисы)</span></td><td><span>Исходящее соединение → Edge&nbsp;Router</span></td></tr></tbody></table>

Оверлейная сеть OpenZiti обеспечивает безопасное соединение поверх существующей сетевой инфраструктуры, такой как Интернет.Основные компоненты сети OpenZiti:

- OpenZiti Controller. Управляет конфигурацией, аутентификацией и сервисами.
- OpenZiti Router. Действует как маршрутизатор в оверлейной сети, направляя трафик и формируя ячеистую сеть.
- OpenZiti Clients / Tunnelers. Позволяют устройствам подключаться к оверлейной сети. Пример: Ziti Desktop Edge, Ziti Mobile Edge и ziti-edge-tunnel для Linux. Они могут создавать туннели для перенаправления трафика между обычной и оверлейной сетями.

OpenZiti строит оверлейную ячеистую сеть, обеспечивая защиту и изоляцию трафика даже в потенциально скомпрометированных средах. Весь трафик защищен с использованием взаимной аутентификации (mTLS) и сквозного шифрования (ChaCha20-Poly1305), что предотвращает перехват данных на сетевых узлах. Доступ к сети и данным возможен только после обязательной авторизации и аутентификации.

## «Идентичности» и регистрация

В OpenZiti всё строится вокруг **Identities** (cert + key). Есть два способа выпуска:

<table><tbody><tr><td><span>Метод</span></td><td><span>Когда используют</span></td><td><span>Как работает</span></td></tr><tr><td><span><strong>OTT&nbsp;(One‑Time&nbsp;Token)</strong></span></td><td><span>Редкие или ручные регистрации</span></td><td><span>Генерируем </span><code><span>enroll‑token</span></code><span>, передаём по&nbsp;безопасному каналу, клиент запускает </span><code><span>ziti edge enroll &lt;token&gt;</span></code><span> и&nbsp;получает сертификат.</span></td></tr><tr><td><span><strong>CA‑Enrollment</strong></span></td><td><span>Автоматическое масштабное подключение</span></td><td><span>Внешний CA подписывает CSR, Controller проверяет цепочку и&nbsp;выдаёт сертификат без токена.</span></td></tr></tbody></table>

После `enroll` клиент получает **.json**‑файл с PKCS8 ключом и конфигом сети — храните его как пароль!

---

## Практический кейс: моя домашняя лаборатория

### Топология

Моя топология выглядит так. В общем-то можно обойтись и без VPS, если у вас белый статический IP. Но я рекомендую использовать VPS как edge роутер.

![](/images/homelab-remote-access/02.webp)

- **Edge Router** + **Controller** подняты на недорогом VPS, 1 Гб RAM вполне достаточно.
- Дома — **homelab‑router** на Raspberry Pi.
- Смартфоны/ноутбуки — клиенты **Ziti Desktop Edge**/**Ziti Mobile Edge**.

---

## Конфиги и политики

Ниже — выдержки из моей сети с комментами.

### 6.1 Роутеры

```
{
  "name": "edge-router",
  "roleAttributes": ["edge-router"],
  "isTunnelerEnabled": false,
  "enrollment": { "ott": true }
}
```

*Публичный Edge Router на VPS, не туннелирует трафик, только маршрутизирует.*

```
{
  "name": "homelab-router",
  "roleAttributes": ["homelab-router"],
  "isTunnelerEnabled": true,
  "enrollment": { "ott": true }
}
```

*Домашний туннелер. Он «привязывает» локальные сервисы к оверлею.*

### 6.2 Идентичности

```
{
  "name": "shady-phone",
  "roleAttributes": ["homelab-service"],
  "type": "Default"
}
```

*Смартфон получит доступ к сервисам с ролью `homelab-service`.*

### 6.3 Intercept и Host‑Config

```
{
  "name": "homelab-intercept-config",
  "configTypeId": "g7cIWbcGg",
  "data": {
    "addresses": [
      "192.168.10.0/24",
      "*.inside.shady2k.ru"
    ],
    "portRanges": [{ "low": 1, "high": 65535 }],
    "protocols": ["tcp", "udp"]
  }
}
```

*На клиенте перехватываю любые обращения к LAN‑IP (192.168.10.x) или к домашним DNS‑именам.*

```
{
  "name": "homelab-host-config",
  "configTypeId": "NH5p4FpGR",
  "data": {
    "forwardProtocol": true,
    "forwardAddress": true,
    "forwardPort": true
  }
}
```

*На туннелере разрешаю проброс «как есть»: исходный IP⁄порт → сервису.*

### 6.4 Сервис и Политики

```
{
  "name": "homelab-service",
  "configs": ["@homelab-intercept-config", "@homelab-host-config"],
  "roleAttributes": ["homelab-service"]
}
```

```
{
  "name": "homelab-dial-policy",
  "serviceRoles": ["@homelab-service"],
  "identityRoles": ["#vpn-service"],
  "type": "Dial"
}
```

*Телефоны «звонят» сервису.*

```
{
  "name": "homelab-bind-policy",
  "serviceRoles": ["@homelab-service"],
  "identityRoles": ["@homelab-router"],
  "type": "Bind"
}
```

*Туннелер «вяжет» сервис из LAN к оверлею.*

```
{
  "name": "service-router-policy",
  "edgeRouterRoles": ["#edge-router", "#homelab-router"],
  "serviceRoles": ["@homelab-service"],
  "semantic": "AnyOf"
}
```

*Пакет может идти через любой из двух роутеров.*

## Расширенные сценарии использования

<table><tbody><tr><td><span>Сценарий</span></td><td><span>Что защищаем</span></td><td><span>Как выглядит</span></td><td><span>Польза</span></td></tr><tr><td><span><strong>Серверы клиентов без открытия портов</strong></span></td><td><span>1&nbsp;EdgeRouter в&nbsp;ЦОД, 1&nbsp;Tunnel на&nbsp;сервере заказчика</span></td><td><span>MSP подключается к&nbsp;RDP/SSH конкретного хоста</span></td><td><span><em>Ноль</em></span><span> входящих правил на фаерволе клиента</span></td></tr><tr><td><span><strong>Домашняя сеть</strong></span></td><td><span>Home&nbsp;Assistant, IP‑камеры</span></td><td><span>Tunnel&nbsp;(RPi) ←→ EdgeRouter&nbsp;(VPS)</span></td><td><span>Безопаснее «сквозных» HTTPS‑портов</span></td></tr><tr><td><span><strong>Замена site‑to‑site&nbsp;VPN</strong></span></td><td><span>Две локации с&nbsp;Ziti&nbsp;Routers</span></td><td><span>Роли и&nbsp;сервисы вместо IP&nbsp;субсети</span></td><td><span>Микросегментация inter‑site</span></td></tr><tr><td><span><strong>Промышленный IoT</strong></span></td><td><span>PLC, SCADA</span></td><td><span>Tunnel в&nbsp;шкафу + Edge в&nbsp;облаке</span></td><td><span>PKI‑основанное соединение, без NAT&nbsp;punching</span></td></tr></tbody></table>

## Плюсы и минусы в домашней лаборатории

### Плюсы

- **Нулевая поверхность атаки** — сервисы не «светятся» в Интернете.
- **Идентичности** — удобнее запоминать роли, а не IP.
- **SDK** — можно встроить Ziti прямо в микросервисы.
- **Ячеистая сеть** — автоматический «обход» падений одного узла.
- **Открытый исходный код** — все компоненты сети вы устанавливаете и контролируете сами.

### Минусы

- Кривая обучения круче, чем у прочих решений.
- Большинство GUI‑функций ещё в работе (CLI — мастер).
- Документация местами не очень четкая и требует длительного осмысления.
- Все нужно делать самому.

## Заключение

**OpenZiti** переносит Zero Trust туда, где раньше правили L2/L3‑VPN. Немного усилий на понимание архитектуры — и взамен:

- Видимая снаружи инфраструктура сведена к одному порту, который открыт только на edge роутере, в домашней лаборатории порты открывать не нужно.
- Детальный контроль доступа.
- Резервирование каналов за счет дублирования роутеров.
- Простота настройки конечных устройств.

В результате моя домашняя лаборатория стала не только безопаснее, но и удобнее: больше не думаю о адресах, пробросах портов и роутинге — **OpenZiti всё сделал за меня**.

Если вы хотите попробовать, то можно воспользоваться сервисом Twingate, там настройки минимальные, основные функции те же, бесплатного плана вполне достаточно для того, чтобы разобраться в концепции.

## Источники

[OpenZiti - Secure Connectivity Anywhere](https://openziti.io/)

[Twingate: It’s time to ditch your VPN](https://www.twingate.com/)
