# Используемое ПО и инструкции по его установке

Одна из самых объемных книг в bookstack в ней подробно описаны процессы по установке используемого и не используемого ПО в инфраструктуре papercastle

# Инструкции по установке и первичной настройке ПО на серверах

Актуальные инструкции по установке и первичной настройке ПО на серверах

# Подключение к ноде, контейнеру или виртуальной машине proxmox через ssh

#### **Подключение через UI proxmox**

##### **Подключение к ноде**

В интерфейсе proxmox в левом меню необходимо выбрать ноду(pve) далее перейти во вкладку **Shell**

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/e8fimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/e8fimage.png)

##### **Подключение к LXC контейнеру**

В интерфейсе proxmox в левом меню необходимо выбрать ноду(pve) далее выбрать необходимый LXC контейнер, и перейти во вкладку **Console**

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/v6ximage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/v6ximage.png)

##### **Подключение к виртуальной машине**

В интерфейсе proxmox в левом меню необходимо выбрать ноду(pve) далее выбрать необходимую виртуальную машину, и перейти во вкладку **Console**

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/YWGimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/YWGimage.png)

#### **Подключение через ssh клиент**

В proxmox, lxc контейнерах и виртуальных машинах уже предустановлен пакет openssh-server но для подключения с root правами нам необходимо отредактировать файл **sshd\_config**

##### **Редактирование файла sshd\_config**

Для редактирования файла необходимо подключиться с помощью одного из способов выше

```bash
nano /etc/ssh/sshd_config
```

В редакторе необходимо добавить или раскомментировать строки

```bash
PermitRootLogin yes
PasswordAuthentication yes
```

Сохранить файл CTRL+X далее Y далее ENTER

Чтобы применить изменения без разрыва текущих SSH‑сессий, используй reload.

```
systemctl reload sshd
```

Теперь у нас есть возможность подключаться через ssh к консоли нашего сервера под пользователем root.

##### **Подключение через клиент putty**

В поле Host Name (or IP address) вводим ip сервера, в поле Port вводим 22, нажимаем Open

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/bRQimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/bRQimage.png)

**login as:** вводим **root** нажимаем **ENTER** далее вводим пароль, при вводе символы не отображаются, после ввода пароля нажимаем **ENTER**

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/rvPimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/rvPimage.png)

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/yZQimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/yZQimage.png)

##### **Подключение с помощью cmd windows**

В консоли **CMD** нужно ввести команду **ssh root@&lt;ip сервера&gt;** и нажать **ENTER**

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/SvPimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/SvPimage.png)

Консоль запросит **Are you sure you want to continue connecting (yes/no/\[fingerprint\])?** вводим **yes** и нажимаем **ENTER,** вводим пароль нажимаем **ENTER**

# Создание LXC контейнера proxmox

**LXC (Linux Containers)** — это технология контейнеризации на уровне операционной системы **Linux**, позволяющая запускать несколько изолированных экземпляров ОС на одном хосте без эмуляции аппаратного обеспечения.

**Основные характеристики**  
Использует пространства имён (namespaces) для изоляции процессов, сети, файловых систем и пользователей, а также cgroups для контроля ресурсов (CPU, память, I/O). Поддерживает полноценные системные контейнеры с init-системой, SSH и сервисами, похожие на лёгкие VM.

**Преимущества в homelab**  
В Proxmox **LXC** экономит ресурсы по сравнению с VM, позволяет динамически менять CPU/RAM/диск без перезагрузки и подходит для VPN/сетевых сервисов.  
​

#### Процесс скачивания Templates

Для создания **lxc** контейнера так же как и для создания виртуальной машины, необходим образ системы, в proxmox этот образ называется **Templates**, для его скачивания реализован весь необходимый функционал в самом гипервизоре.

Для того что бы скачать **Templates** выберите необходимую **ноду**, перейдите в раздел **local (&lt;название ноды&gt;)** и перейдите во вкладку **CT Templates**

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/UkAimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/UkAimage.png)

Нажмите на кнопку **Templates**, в открывшемся меню выберите необходимый образ и нажмите на кнопку **Download**

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/n3Qimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/n3Qimage.png)


#### Создание LXC контейнера

После того как вы скачали необходимый **Templates** можете приступать к созданию **LXC** контейнера

Справа сверху в интерфейсе proxmox нажмите на **Create CT**


##### General

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/KGvimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/KGvimage.png)

**Node:** Выбор ноды (сервера) в кластере Proxmox, на котором разместится контейнер.<span aria-label="Глава 31. Создание и настройка контейнера LXC" class="inline-flex" data-state="closed">​</span>

**CT ID:** Уникальный числовой идентификатор контейнера (100-999), используется для ссылок и команд.<span class="inline-flex" data-state="closed">​</span>

**Hostname:** Имя хоста контейнера, отображаемое в системе и сети (алфавитно-цифровое).<span aria-label="Глава 31. Создание и настройка контейнера LXC" class="inline-flex" data-state="closed">​</span>

**Unprivileged container:** Включение делает контейнер непривилегированным — процессы маппятся на непривилегированные UID/GID хоста для повышенной безопасности.<span aria-label="Глава 31. Создание и настройка контейнера LXC" class="inline-flex" data-state="closed">​</span>

**Nesting:** Разрешает запуск вложенных контейнеров (LXC/Docker внутри LXC), полезно для сложных setup'ов.<span aria-label="Глава 31. Создание и настройка контейнера LXC" class="inline-flex" data-state="closed">​</span>

**Add to HA:** Включение добавляет контейнер в High Availability кластер для автоматического перезапуска на другом узле при сбое.<span aria-label="Глава 38. Создание и настройка контейнера LXC" class="inline-flex" data-state="closed">​</span>

**Resource Pool:** Привязка к пулу ресурсов — логической группе контейнеров/VM для удобного управления (требует предварительного создания).<span aria-label="Глава 31. Создание и настройка контейнера LXC" class="inline-flex" data-state="closed">​</span>

**Password / Confirm password:** Установка root-пароля для консольного доступа к контейнеру.<span aria-label="Глава 31. Создание и настройка контейнера LXC" class="inline-flex" data-state="closed">​</span>

**SSH public key(s):** Добавление публичных SSH-ключей для безпарольного входа под root или другими пользователями.


##### Template

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/HBtimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/HBtimage.png)

**Storage:** Выбор диска на котором находятся Template

**Template:** Образ который будет использоваться при установке контейнера


##### Disks

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/Y4Bimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/Y4Bimage.png)

**Storage:** Дисковое пространство на котором будет храниться контейнер

**Disk size (GiB):** Объем выделяемый под контейнер

##### CPU

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/Rlcimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/Rlcimage.png)

**CPU:** Количество выделяемых виртуальных ядер процессора

##### Memory

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/BFTimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/BFTimage.png)

**Memory (MiB):** Объем выделяемой оперативной памяти

**Swap (MiB):** Объем выделяемой памяти на случай если **Memory** не хватит

##### Network

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/CyQimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/CyQimage.png)

**Name:** название сетевого интерфейса которое будет отображаться в lxc

**MAC address:** MAC адрес сетевого интерфейса

**Bridge:** Виртуальный интерфейс в самом proxmox

**VLAN Tag:** VLAN к которому будет привязан интерфейс

**Firewall:** внутренний межсетевой экран proxmox

**IPv4:** при выборе static необходимо указать статический ip и шлюз (как правило ip роутера), при выборе dhcp ip выдаст dhcp сервер

**IPv6:** не используется

##### DNS

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/Xfoimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/Xfoimage.png)

**DNS domain:** dns сервер

**DNS servers:** dns сервер

##### Confirm

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/Hgzimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/Hgzimage.png)

В этом разделе можно сверить все выбранные раннее настройки

**Start after created:** Запуск сразу после создания

После заполнения форм нужно нажать кнопку **Finish**

# Установка и настройка wireguard и WGDashboard в lxc контейнере

Для удаленного подключения и свободного доступа к сервисам в локальной сети, необходим стабильный **vpn тунель**, одним из предпочтительных вариантов в **homelab** является использование протокола **wireguard** отличительной особенностью которого является его легковестность и скорость настройки, что позволит нам использовать его в **lxc контейнере**.  
Для удобства управления подключениями и последующей настройки подключения мы так же установим **WGDashboard**.

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2026-01/scaled-1680-/pAVimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2026-01/pAVimage.png)

#### Установка wireguard+WGDashboard

Для установки нам потребуется скрипт с сайта [https://community-scripts.github.io/ProxmoxVE/scripts?id=wireguard](https://community-scripts.github.io/ProxmoxVE/scripts?id=wireguard)

В консоли ноды необходимо ввести

```
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/wireguard.sh)"
```

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2026-01/scaled-1680-/wFWimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2026-01/wFWimage.png)

Выбираем **default install**

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2026-01/scaled-1680-/sVuimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2026-01/sVuimage.png)

При запросе **Would you like to add WGDashboard? &lt;y/N&gt;** отвечаем **y**

Установка **WGDashboard** занимает довольно много времени

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2026-01/scaled-1680-/yuAimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2026-01/yuAimage.png)

После успешной установки появится адрес по которому доступен web-интерфейс **http://&lt;ip контейнера&gt;:10006**

#### Настройка WGDashboard

При первом входе необходимо выполнить первичную настройку дашборда

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2026-01/scaled-1680-/IvVimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2026-01/IvVimage.png)

**Логин**: admin

**Пароль**: admin

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2026-01/scaled-1680-/NzUimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2026-01/NzUimage.png)

Необходимо создать новую УЗ

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2026-01/scaled-1680-/uNqimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2026-01/uNqimage.png)

Сервис предлагает настроить двуфакторную аутентификацию это опционально поэтому для того что бы пропустить этот шаг необходимо нажать на **I dont need MFA**

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2026-01/scaled-1680-/9NDimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2026-01/9NDimage.png)

После создания УЗ мы попадаем на главную страницу **web-интерфейса**, в настройках можно указать Русский язык, но для первичной настройки нам нужно создать клиента для подключения и выполнить первичную настройку.

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2026-01/scaled-1680-/3lnimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2026-01/3lnimage.png)

Слева необходимо перейти во вкладку **settings** далее **Peers Settings**

(Опционально) В **dns** указать **ip локального dns сервера**, актуально при использовании **ubound dns/split dns/adguard/pihole**

В **Peer Remote** **Endpoint** указать внешний ip адрес (узнать можно на сайте 2ip.ru)

Далее необходимо вернуться на вкладку **home,** ТК скрипт установил **wireguard** в конфигурации уже указан **wg0**, нажимаем на него.

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2026-01/scaled-1680-/IRjimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2026-01/IRjimage.png)

Справа сверху необходимо начать на кнопку включения, для того что бы конфигурация стала активной, далее необходимо нажать на кнопку **peer** для того что бы добавить клиента

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2026-01/scaled-1680-/Z5fimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2026-01/Z5fimage.png)

В настройках клиента необходимо указать только **name** и после этого нажать на **add**

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2026-01/scaled-1680-/koLimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2026-01/koLimage.png)

Внизу страницы появится клиент при нажатии на . . . появятся варианты для подключения

#### Открыть порт 51820 в OPNsense

После установки и настройки wireguard и настройки клиента на необходимом устройстве, необходимо открыть порт 51820 в opnsense

Для начала необходимо настроить **NAT**, перенаправление **внешнего порта** к **ip адресу** внутри локальной сети, для этого необходимо перейти во вкладку **firewall** далее **NAT** далее **port forward** и нажать на **+**

**[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2026-01/scaled-1680-/YFXimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2026-01/YFXimage.png)**

Далее необходимо выполнить такие настройки

**Interface**: WAN

**Protocol**: UDP

**Destination**: WAN address

**Destination port range**: from 51820 to 51820

**Redirect target IP**: Single host or Network &lt;ip lxc контейнера&gt;

**Redirect target port**: 51820

**Description**: wireguard (опционально)

Далее нажать **Save** и **Apply settings**

Далее необходимо перейти во вкладку **rules** и перейти к интерфейсу **wan** в открывшемся окне нажать **+**

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2026-01/scaled-1680-/Aquimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2026-01/Aquimage.png)

Далее необходимо выполнить такие настройки

**Interface**: WAN

**Direction**: in

**Protocol**: UDP

**Source**: any

**Destination**: Single host or Network &lt;ip lxc контейнера&gt;

**Destination port range**: from 51820 to 51820

**Description**: wireguard (опционально)

Далее нажать **Save** и **Apply settings**

# Установка и первичная настройка BookStack в LXC на Proxmox

**BookStack** — простая open-source платформа для создания структурированной документации и вики.<span class="inline-flex" data-state="closed">​</span>

Организует знания по принципу **полки** **→** **книги → главы → страницы** с WYSIWYG-редактором и поддержкой Markdown. Идеальна для командной работы, технической документации, инструкций и баз знаний.

**Ключевые возможности:**

- Иерархическая структура контента
- Поиск по всем уровням
- Роли и права доступа
- Экспорт в PDF/HTML
- Версионность изменений
- Вложения и изображения

[https://www.bookstackapp.com/](https://www.bookstackapp.com/)

##### **Установка BookStack**

BookStack предполагает использование в рамках docker контейнера, но так как у меня установлен гипервизор proxmox я имею возможность создания lxc контейнеров и запуска на них docker приложений c помощью node.js  
Для установки нам необходимо попасть в консоль необходимой ноды [с помощью ssh](https://bookstack.redpunk.net/books/ispolzuemoe-po-i-instrukcii-po-ego-ustanovke/page/podkliucenie-k-node-konteineru-ili-virtualnoi-masine-proxmox-cerez-ssh "Подключение к ноде, контейнеру или виртуальной машине proxmox через ssh")

Комьюнити proxmox довольно большое поэтому энтузиастами был сформирован довольно большой список скриптов для установки ПО, мне повезло и скрипт для BookStack был на сайте   
[https://community-scripts.github.io/ProxmoxVE/scripts?id=bookstack](https://community-scripts.github.io/ProxmoxVE/scripts?id=bookstack)

После подключения к ноде необходимо ввести

```
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/bookstack.sh)"
```

В диалоговом окне выбираем **Default Install** нажимаем **ENTER**

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/GY1image.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/GY1image.png)

После завершения установки появится ip адрес для подключения по http в локальной сети для теста вводим в браузере

http://&lt;ip из консоли&gt;

Предустановленный пользователь:

<div class="text-sm" id="bkmrk-username%3A%C2%A0admin%40admi">Username: <button class="inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-secondary text-secondary-foreground hover:bg-secondary/80 py-1 px-3 rouded-xs">admin@admin.com</button></div><div class="text-sm" id="bkmrk-password%3A%C2%A0password">Password: <button class="inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-secondary text-secondary-foreground hover:bg-secondary/80 py-1 px-3 rouded-xs">password</button></div><div class="text-sm" id="bkmrk--1"></div>##### **Первичная настройка BookStack**

После установки нам необходимо подключиться к lxc контейнеру [через ssh](https://bookstack.redpunk.net/books/ispolzuemoe-po-i-instrukcii-po-ego-ustanovke/page/podkliucenie-k-node-konteineru-ili-virtualnoi-masine-proxmox-cerez-ssh "Подключение к ноде, контейнеру или виртуальной машине proxmox через ssh") в консоли необходимо ввести

```
nano /opt/bookstack/.env
```

В открывшемся файле необходимо отредактировать или добавить строки

```bash
# Русский язык
APP_LANG=ru

# Отключаем автодетект языка для гостей (опционально)
APP_AUTO_LANG_PUBLIC=false

# Указываем URL приложения если сделали его в npm (опционально)
APP_URL=https://<твой домен>
```

После сохранения файла и перезагрузки контейнера, можно переходить на http://&lt;ip контейнера&gt; или https://&lt;твой домен&gt;

# Установка и настройка TorrServer в lxc контейнере и просмотр кино и сериалов через lampa

TorrServer - сервис для онлайн просмотра торрент файлов, в отличии от Jellyfin, для просмотра, контент не нужно скачивать, а трансляция идет напрямую из torrent сети.

#### Установка TorrServer

Для установки необходимо создать [lxc контейнер](https://bookstack.redpunk.net/books/ispolzuemoe-po-i-instrukcii-po-ego-ustanovke/page/sozdanie-lxc-konteinera-proxmox "Создание LXC контейнера proxmox") с настройками

- OS: Debian 12
- CPU: 2 cores
- RAM: 2048 MiB
- Disk: 16-32 ГБ
- Swap: 512 MiB

После подключения к lxc контейнеру через ssh необходимо перейти в [GitHub разработчика TorrServer](https://github.com/YouROK/TorrServer/releases/) и уточнить ссылку на актуальную версию приложения, после этого в консоли lxc контейнера ввести:

```bash
cd /opt
wget https://github.com/YouROK/TorrServer/releases/download/MatriX.137/TorrServer-linux-amd64
chmod +x TorrServer-linux-amd64
mv TorrServer-linux-amd64 torrserver  # опционально, для удобства
./torrserver -port 8090 &
```

Проверьте http://&lt;ip lxc контейнера&gt;:8090 есть веб-интерфейс доступен в консоли lxc контейнера создаем автозагрузку:

```
cat > /etc/systemd/system/torrserver.service << EOF
[Unit]
Description=TorrServer
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/opt
ExecStart=/opt/torrserver -port 8090
Restart=always

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable --now torrserver
```

#### Установка и настройка TorrServer в lampa

##### Добавление парсера

Установите публичные парсеры для поиска фильмов/сериалов.

- Настройки → Расширения → Добавить: [<span class="text-box-trim-both">https://lampame.github.io/main/pubtorr.js</span>](https://lampame.github.io/main/pubtorr.js)<span aria-label="Просмотр и Загрузка торрентов в приложении Lampa" class="inline-flex" data-state="closed">​</span>
- Настройки → Парсеры → Выберите "Каталог парсеров" (Jacred.xyz или аналог — зелёный статус).

##### Настройка TorrServer в lampa

Настройки → TorrServer → укажите &lt;ip lxc контейнера&gt;:8090

# Вывод температуры cpu и hdd в Summary Proxmox

Для контроля температур, в стандартном пакете proxmox нет необходимых утилит, ниже описан гайд для их установки.

В консоли ноды proxmox

```
apt update
apt install lm-sensors
sensors-detect
```

Во время установки скрипт будет задавать вопросы, ниже указаны ответы.

- **Display temperatures for all cores**: A
- **Display temperatures in Celsius**: C
- **Enable UPS information**: N
- **Enable system information**: N

```
wget https://raw.githubusercontent.com/Meliox/PVE-mods/main/pve-mod-gui-sensors.sh
bash pve-mod-gui-sensors.sh install  
systemctl restart pveproxy pveproxy-ssl
```

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2026-01/scaled-1680-/image.png)](https://bookstack.redpunk.net/uploads/images/gallery/2026-01/image.png)

# Установка и настройка vaultwarden в lxc контейнере

**Vaultwarden** — это легковесная реализация сервера Bitwarden, написанная на Rust.

**Ключевые особенности**:  
Совместим с официальными клиентами Bitwarden (браузер, мобильные apps, desktop)

**Self-hosted** — ставится на **свой сервер/LXC/Proxmox**

**Маленький** — ~10MB RAM против 1GB+ у официального Bitwarden

**Открытый код** (unofficial Bitwarden server)

**Зачем нужен**:  
Вместо облачного **Bitwarden ($10/мес)** ставишь свой менеджер паролей на домашний сервер, используешь те же приложения и расширения браузера.

#### Установка

Для установки **vaultwarden** понадобится скрипт с сайта [https://community-scripts.github.io/ProxmoxVE/scripts?id=vaultwarden](https://community-scripts.github.io/ProxmoxVE/scripts?id=vaultwarden)

А так же настроенный **VPN** на роутере, для того что бы включить **VPN** соединение на всей сети, это необходимо так как некоторые пакеты в скрипте **не доступны из России**

В консоли ноды необходимо ввести

```bash
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/vaultwarden.sh)"
```

Во время установки могут возникнуть ошибки по конфигурации **ipv4**, скрипт не пройдет проверки, сообщение о ошибках можем игнорировать, на все вопросы отвечает **Y**

<p class="callout info">Установка может занять довольно много времени</p>

После установки в ноде появится контейнер, к нему необходимо подключиться.

#### Настройка

Далее необходимо сгенерировать **admin token**, он понадобится при настройке файла конфигурации, сделать это можно в тестовом или текущем контейнере командой

```
openssl rand -base64 48
```

**<span class="token token">Вывод необходимо записать</span>**

Далее необходимо отредактировать файл конфигурации

```
/opt/vaultwarden/.env
```

Файл конфигурации необходимо привести к виду

```
ADMIN_TOKEN='<admin token который мы сгенерировали>'
ROCKET_ADDRESS=0.0.0.0
DATA_FOLDER=/opt/vaultwarden/data
DATABASE_MAX_CONNS=10
WEB_VAULT_FOLDER=/opt/vaultwarden/web-vault
WEB_VAULT_ENABLED=true
```

После чего перезагрузить **lxc контейнер**.

Панель **vaultwarden** доступна только через **https** c **ssl сертификатом**, поэтому нам необходимо выдать для **&lt;ip lxc контейнера&gt;:8000** домен через любой обратный прокси.

# Установка и настройка MCSManager для minecraft сервера в lxc контейнере+создание srv записи на reg.ru

#### Создание LXC контейнера

[Инструкция по созданию lxc контейнера](https://bookstack.redpunk.net/books/ispolzuemoe-po-i-instrukcii-po-ego-ustanovke/page/sozdanie-lxc-konteinera-proxmox "Создание LXC контейнера proxmox")

**OC**: debian 12  
**CPU**: 2-4 cores  
**RAM**: 4096MB+  
**Root Disk**: 20GB

#### Установка Java 21

```bash
apt update && apt install wget curl -y
cd /opt
wget https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21.0.6+7/OpenJDK21U-jre_x64_linux_hotspot_21.0.6_7.tar.gz
tar -xzf OpenJDK21U-jre_x64_linux_hotspot_21.0.6_7.tar.gz
mv jdk-21.0.6+7-jre java-21

# Глобальная настройка
echo 'export JAVA_HOME=/opt/java-21' >> /etc/profile
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile
source /etc/profile
update-alternatives --install /usr/bin/java java /opt/java-21/bin/java 1
java --version  # OpenJDK 21.0.6
 
```

<div class="w-full md:max-w-[90vw]" id="bkmrk-"><div class="codeWrapper text-light selection:text-super selection:bg-super/10 my-md relative flex flex-col rounded-lg font-mono text-sm font-normal bg-subtler"><div class="-mt-xl"><div></div></div></div></div>#### Установка MCSManager WebUI

```
apt install curl -y
cd /opt
curl -s https://api.github.com/repos/MCSManager/MCSManager/releases/latest | grep browser_download_url | grep linux_release | cut -d '"' -f 4 | wget -i -
tar -xzf mcsmanager_linux_release.tar.gz
cd mcsmanager

# Node.js для Web
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
apt install nodejs -y

# Запуск
nohup ./start-web.sh > web.log 2>&1 &
nohup ./start-daemon.sh > daemon.log 2>&1 &
```

Создание systemctl для web-интерфейса

```
cat > /etc/systemd/system/mcsm-web.service << 'EOF'
[Unit]
Description=MCSManager Web
After=network.target

[Service]
Type=simple
WorkingDirectory=/opt/mcsmanager/web
ExecStart=/usr/bin/node app.js
Restart=always
User=root
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

[Install]
WantedBy=multi-user.target
EOF
```

Создание systemctl для daemon

```
cat > /etc/systemd/system/mcsm-daemon.service << 'EOF'
[Unit]
Description=MCSManager Daemon
After=network.target

[Service]
Type=simple
WorkingDirectory=/opt/mcsmanager/daemon
ExecStart=/usr/bin/node app.js
Restart=always
User=root
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

[Install]
WantedBy=multi-user.target
EOF
```

Запуск и активация

```
systemctl daemon-reload
systemctl enable mcsm-web.service mcsm-daemon.service
systemctl start mcsm-web.service mcsm-daemon.service
```

**Доступ**: http://&lt;ip lxc контейнера&gt;:23333

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2026-01/scaled-1680-/xyIimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2026-01/xyIimage.png)

После перехода в web-интерфейс необходимо выбрать язык и нажать кнопку **Далее** и пройти процедуру создания УЗ

#### Открытие порта для доступа к серверу в opnsense

Для того что бы у клиентов была возможность подключаться к нашему серверу необходимо открыть порт для безопасности мы будем открывать не стандартный порт **25565**, а другой **24848**(Можно выбрать любой), локально порт останется тем же.

В **OPNsense**: **Firewall** → **NAT** → **Port Forward** → **Add**

**Interface**: WAN  
**Protocol**: TCP/UDP  
**Destination**: WAN address  
**Destination port range**: 24848 (From/To)  
**Redirect target IP**: &lt;IP lxc контейнера&gt;  
**Redirect target port**: 25565  
**Description**: Minecraft 24848  
**Save** → **Apply Changes**

**Rules** в **Firewall** создастся автоматически

#### Cоздание srv записи на reg.ru

Для комфортного подключения к игровому серверу, мы можем использовать домен, для этого необходимо создать srv запись у dns регистратора, в моем случае это **reg.ru**

Для этого необходимо на сайте **reg,ru** перейти в настойки далее **домены**, выбрать **ваш домен** и перейти в **DNS-серверы и управление зоной,** далее добавить новую **ресурсную запись**, тип **А**

В **subdomain** указать то что будет указано перед вашим основным доменом **&lt;subdomain&gt;.&lt;ваш домен&gt;** будет использоваться для подключения к серверу.

После заполнения формы необходимо нажать кнопку **Готово**

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2026-01/scaled-1680-/qaDimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2026-01/qaDimage.png)

Далее нам необходимо создать новую ресурсную запись на этот раз необходимо выбрать тип **SRV**

В форме необходимо заполнить следующие поля

**Service**: &lt;\_название сервиса&gt;.&lt;\_tcp&gt;.&lt;созданный раннее subdomain&gt;

**Priority**: 0

**Weight**: 0

**Port**: &lt;Порт открытый в opnsense&gt;

**Target**: &lt;Созданный раннее subdomain записанный целиком&gt;.

После заполнения формы необходимо нажать кнопку **Готово**

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2026-01/scaled-1680-/yXzimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2026-01/yXzimage.png)

Через 15-30 минут DNS записи обновятся и появится возможность подключится к серверу через домен

# Установка и настройка homepage в lxc контейнер

#### Установка

Для установки homepage в lxc контейнер, нам понадобится скрипт с сайта [https://community-scripts.github.io/ProxmoxVE/scripts?id=homepage](https://community-scripts.github.io/ProxmoxVE/scripts?id=homepage)

В консоли ноды необходимо ввести команду

```
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/homepage.sh)"
```

Если все в порядке, после установки у вас появится доступ к панели по адресу **http://&lt;ip lxc контейнера с portain&gt;:3000**

#### Настройка

Рекомендую настроить подключение [через ssh](https://bookstack.redpunk.net/books/ispolzuemoe-po-i-instrukcii-po-ego-ustanovke/page/podkliucenie-k-node-konteineru-ili-virtualnoi-masine-proxmox-cerez-ssh "Подключение к ноде, контейнеру или виртуальной машине proxmox через ssh") так как для настройки понадобится редактировать большое количество файлов и загружать материалы через **sftp**

После подключения необходимо отредактировать файл конфигурации

В консоли lxc контейнера

```
nano /opt/homepage/.env
```

Файл необходимо привести к виду

```
HOMEPAGE_ALLOWED_HOSTS=localhost:3000,<ip lxc контейнера>:3000,<поддомен если используете обратный прокси>
```

Отличительной особенностью от версии с докером является то что все медиа файлы располагаются в каталоге

```
/opt/homepage/public/
```

Дальнейшую настройку homepage рекомендую выполнять через [официальную документацию документацию homepage dashoboard](https://gethomepage.dev/configs/)

# nekobox с управлением через gui как vpn клиент в lxc контейнере

## LXC‑клиент с GUI, noVNC и Nekobox

### 1. Создание контейнера в Proxmox

**Параметры:**

- **Template:** Debian 12 или Ubuntu Server 22.04
- **Privileged:** рекомендуется Yes
- **CPU/RAM:** 1–2 vCPU, 1–2 ГБ RAM
- **Disk:** 8–16 ГБ
- **Network:**
    - Bridge: vmbr0
    - IPv4: статический, например 192.168.51.41/24
    - Gateway: IP OPNsense

**В Options включи:**

Nesting = 1

После создания запусти контейнер и войди в него (через консоль Proxmox или SSH).

### 2. Базовая настройка системы

```bash
apt update && apt upgrade -y
apt install -y sudo mc curl wget ca-certificates
```

### 3. Установка GUI и VNC

```bash
apt install -y xfce4 xfce4-goodies x11vnc xvfb fluxbox git websockify
```

Fluxbox — лёгкий оконный менеджер, подходит для этого сценария.

### 4. Установка noVNC

```bash
git clone https://github.com/novnc/noVNC.git /opt/novnc
cd /opt/novnc
mv vnc.html index.html
```

### 5. Установка Nekobox (GUI‑клиент)

Создай каталог для Nekobox и скачай актуальный релиз (AppImage или бинарь для Linux amd64) с GitHub репозитория Nekobox. В примере используется файл Nekobox.AppImage, подмени имя на реальное из релиза.

```bash
mkdir -p /opt/nekobox
cd /opt/nekobox
wget https://example.com/path/to/NekoBox.AppImage -O nekobox
chmod +x nekobox
```

Проверь ручной запуск (после старта Xvfb):

```bash
export DISPLAY=:1
cd /opt/nekobox
./nekobox &
```

### 6. Скрипт автозапуска GUI + VNC + noVNC + Nekobox

Создай файл /root/start.sh (или отредактируй, если уже существует):

```bash
nano /root/start.sh
```

Вставь содержимое:

```bash
#!/bin/bash
# Виртуальный X-сервер
Xvfb :1 -screen 0 1920x1080x24 &
sleep 2
export DISPLAY=:1
# Оконный менеджер
fluxbox &
# VNC сервер
x11vnc -display :1 -nopw -forever -bg -shared
sleep 2
# noVNC на 80 порту
websockify -D --web /opt/novnc 80 localhost:5900
# Автозапуск Nekobox
cd /opt/nekobox
./nekobox &
# Поддержание процесса активным
while true; do
    sleep 3600
done
wait
```

Сделай файл исполняемым:

```bash
chmod +x /root/start.sh
```

Добавь автозапуск через cron:

```bash
crontab -e
```

Добавь строку:

```bash
@reboot /root/start.sh
```

Перезапусти контейнер:

```bash
reboot
```

### 7. Доступ через браузер и работа с Nekobox

После перезапуска открой в браузере:

```text
http://IP_LXC/
```

Подключись к noVNC, увидишь рабочий стол XFCE/Fluxbox, на котором автоматически запустится Nekobox. Через Nekobox настрой подписку, прокси и маршрутизацию по своему сценарию.

# Установка и настройка Nginx proxy manager в docker, настройка split dns, настройка wildcard-сертификата

**Nginx Proxy Manager (NPM)** — это удобный инструмент с веб-интерфейсом для управления обратным прокси на базе Nginx, который упрощает маршрутизацию трафика к сервисам в Docker, LXC или VM без редактирования конфигов вручную.

**Основные функции**  
Поддерживает проксирование по доменам/поддоменам, автоматическое получение SSL-сертификатов Let's Encrypt, HTTP-аутентификацию, списки доступа (ACL) и блокировку IP. Позволяет настраивать перенаправления, кастомные страницы ошибок и потоки TCP/UDP через Streams.  
​

После покупки домена и регистрации его у dns провайдеров у нас появляется возможность реализовать обратный прокси трафика по доменному имени, это позволит нам убрать отображение ip адресов из нашей homelab и реализовать доступ из интернета к веб панелям необходимых нам сервисов.

#### Установка Nginx Proxy Manager

##### Создание lxc контейнера

Для установки NPM в docker, нам понадобится [создать lxc контейнер](https://bookstack.redpunk.net/books/ispolzuemoe-po-i-instrukcii-po-ego-ustanovke/page/sozdanie-lxc-konteinera-proxmox "Создание LXC контейнера proxmox")

2 vCPU, 2 ГБ RAM, 20+ ГБ диска.

ОС: Debian 12/13 или Ubuntu 22.04 LTS.

##### Установка Docker и compose

Подключаемся к созданному контейнеру через [ssh](https://bookstack.redpunk.net/books/ispolzuemoe-po-i-instrukcii-po-ego-ustanovke/page/podkliucenie-k-node-konteineru-ili-virtualnoi-masine-proxmox-cerez-ssh "Подключение к ноде, контейнеру или виртуальной машине proxmox через ssh")

Ставим зависимости

```bash
apt update
apt install -y ca-certificates curl gnupg lsb-release
```

Добавляем официальный репозиторий Docker

```bash
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg \
  -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
  https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") \
  $(. /etc/os-release; echo "$VERSION_CODENAME") stable" \
  > /etc/apt/sources.list.d/docker.list

apt update
```

Устанавливаем Docker + compose‑plugin

```
apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
systemctl enable --now docker
```

Проверка

```
docker version
docker compose version
```

##### Готовим каталог и docker‑compose.yml

Создаём каталог под NPM

```
mkdir -p /opt/npm/data
mkdir -p /opt/npm/letsencrypt
```

Создаём docker‑compose.yml

```
cat > /opt/npm/docker-compose.yml << 'EOF'
version: "3.8"

services:
  app:
    image: docker.io/jc21/nginx-proxy-manager:latest
    container_name: nginxproxymanager
    restart: unless-stopped
    ports:
      - "80:80"
      - "81:81"
      - "443:443"
    volumes:
      - /opt/npm/data:/data
      - /opt/npm/letsencrypt:/etc/letsencrypt
    environment:
      TZ: "Asia/Novosibirsk"
EOF
```

restart: unless-stopped гарантирует авто‑подъём после любого ребута, пока жив Docker.

Все данные (конфиги, база, серты) лежат в /opt/npm, независимы от жизни контейнера.

##### Старт NPM

  
Запуск

```
cd /opt/npm
docker compose up -d
```

  
Проверка:

```
docker ps
```

  
Должен быть контейнер nginxproxymanager со статусом Up.

##### Первый вход

  
В браузере: **http://&lt;ip lxc контейнера&gt;:81**

Стандартный логин:

**Email**: admin@example.com

**Password**: changeme

Если все в порядке, после установки у вас появится доступ к панели по адресу **http://&lt;ip lxc контейнера с portain&gt;:81**

#### Настройка Nginx Proxy Manager

После установки нам необходимо выполнить несколько обязательных вещей

##### Проброс портов к npm  


В OPNsense нам необходимо перейти в раздел **Firewall**, далее **NAT** и перейти в **Port Forward**, в открывшемся окне нажать справа сверху на **+**(add)

В открывшемся окне нужно заполнить поля

**Interface**: WAN

**TCP/IP Version**: IPv4

**Protocol**: TCP

**Destination**: WAN adress

**Destination port range**: from: HTTP; to: HTTP

**Redirect target IP**: Single host of Network, ниже ip используемого lxc контейнера

**Redirect target port**: HTTP

**Description**: NPM HTTP for Let's Encrypt

Нажать кнопку **Save**

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/fc0image.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/fc0image.png)

После этого нажимаем кнопку **Apply changes** и создаем следующее правило кнопкой **+**(add)

**Interface**: WAN

**TCP/IP Version**: IPv4

**Protocol**: TCP

**Destination**: WAN adress

**Destination port range**: from: HTTPS; to: HTTPS

**Redirect target IP**: Single host of Network, ниже ip используемого lxc контейнера

**Redirect target port**: HTTPS

**Description**: NPM HTTPS for Let's Encrypt

Нажать кнопку **Save**

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/z64image.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/z64image.png)

После этого нажимаем кнопку **Apply changes**

##### Покупка домена reg.ru

Для настройки доменных имен в npm доменное имя необходимо купить по этому поводу уже написана [подробная статья](https://habr.com/ru/articles/716002/)

После покупки доменного имени и указания его у ДНС провайдера потребуется время что бы запись появилась у ДНС резолверов, проверить это проще всего командой на любом клиенте сети с установленным линукс, я для этих целей создал отдельный тестовый [lxc контейнер](https://bookstack.redpunk.net/books/ispolzuemoe-po-i-instrukcii-po-ego-ustanovke/page/sozdanie-lxc-konteinera-proxmox "Создание LXC контейнера proxmox")

<div id="bkmrk-dig-%3C%D0%B2%D0%B0%D1%88-%D0%B4%D0%BE%D0%BC%D0%B5%D0%BD%3E"><div class="cm-editor ͼ1 ͼ2 ͼ4 ͼ1r"><div class="cm-scroller" tabindex="-1"><div aria-hidden="true" class="cm-gutters cm-gutters-before"><div class="cm-gutter cm-lineNumbers"><div class="cm-gutterElement"><span style="font-family: 'Lucida Console', 'DejaVu Sans Mono', 'Ubuntu Mono', Monaco, monospace;">dig &lt;ваш домен&gt;</span></div></div></div></div></div></div>В выводе команды должен отобразится внешний ip адрес, запись проводится в течении 1-24 часов.

##### Настройка сертификата

Так как мы планируем использовать большое количество поддоменов нам не подходит вариант с обычным запросом сертификата через **certbot, reg.ru** позволяет запрашивать **wildcard** сертификат на домен и все поддомены, поэтому мы будем настраивать сразу его.

На сайте **reg.ru** заходишь в личный кабинет, далее Настройки API, запрашиваешь ключ API, его необходимо записать.

В **NPM** нужно создать **wildcard-сертификат**, во вкладке **Certificates** нужно нажать на кнопку **Let's Encrypt via DNS**

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/oqIimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/oqIimage.png)

В открывшемся окне необходимо заполнить поля  
**Domain Names**: тут указываешь &lt;твоедоменноеимя.ru&gt; и &lt;\*.твоедоменноеимя.ru&gt;

**DNS Provider**: reg.ru

**Credentials File Content**:  
dns\_username=&lt;твоя почта на reg.ru&gt;  
dns\_password=&lt;api колюч&gt;

**Propagation Seconds:** Лучше указать 600 так как сервера reg.ru могут работать не стабильно

После этого необходимо нажать кнопку **Save** и подождать 1-5 минут.

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/rn1image.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/rn1image.png)

##### Настройка split dns

Так как мы не хотим что бы все наши домены были доступны из сети, и для оптимизации подключения к доменам, нам необходимо настроить **split dns** на нашем **opnsense.** Технически можно реализовать эту технологию на любом локальном **dns** сервере, но в opnsense уже установлен **unbound dns**, в котором есть необходимый нам функционал (ubound dns должен быть включен и настроен), для этого нам необходимо перейти во вкладку **Services**, далее **Unbound DNS**, далее **Overrides**, в открывшемся окне в разделе **Hosts** нажать на **+**

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/Fs8image.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/Fs8image.png)

В открывшемся окне необходимо заполнить поля

**Enabled**: Галочка

**Host**: \*

**Domain**: &lt;твой домен&gt;

**Type**: A (IPv4 address)

**IP address**: &lt;ip адрес lxc контейнера&gt;

**Description**: NPM

Далее нажать кнопку **Save** и **Apply**

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/WG9image.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/WG9image.png)

Следующим шагом нужно указать Query forwarding для нашего сертификата, что бы избежать проблем с сертификатами в локальной сети при переходе по нашим доменам.

Для этого необходимо перейти во вкладку **Query forwarding** нажать на **+** и в открывшемся окне заполнить поля

**Enabled**: Галочка

**Domain**: ocsp.int-x3.letsencrypt.org

**Server IP**: 1.1.1.1

Далее нажать **Save** и **Apply**

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/W7Uimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/W7Uimage.png)

Теперь необходимо перейти в панель **npm** и настроить там группу доступа которую мы будем указывать при создании доменов.

Для этого необходимо перейти во вкладку **Acces list** нажать на кнопку **Add Acces list** и в открывшемся окне заполнить форму

Во вкладке **Details** необходимо указать имя нашей группы  
Во вкладке **Rules** необходимо добавить подсети из которых у нас будет доступ к нашим доменам

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/HUZimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/HUZimage.png)

#### Создание и настройка поддомена

Для создания поддомена нам необходимо перейти во вкладку Proxy Hosts и нажать на кнопку Add Proxy Host, в открывшемся окне необходимо заполнить поля

**Domain Names**: Вводим необходимы домен или поддомен

**Scheme**: В зависимости от панели к которой хотим открыть доступ выбираем http или https

**Forward Hostname / IP**: ip нашего сервиса,

**Forward Port**: Порт нашего сервиса

**Access List**: в зависимости от того хотим ли что бы сервис работал только локально или был публичным выбираем созданную нами группу доступа или Publicly Accessible

**Cache Assets**: (Опционально) Включает кэширование статических ресурсов (CSS, JS, изображения) на прокси-сервере для ускорения загрузки страниц, снижая нагрузку на backend-сервер.   
​

**Block Common Exploits**: (Опционально) Активирует встроенные правила Nginx для защиты от распространённых веб-атак (XSS, SQL-инъекции, кликджекинг) через заголовки безопасности вроде X-Frame-Options и Content-Security-Policy.  
​

**Websockets Support**: (Опционально) Включает поддержку WebSocket-протокола (ws://, wss://), необходимую для real-time приложений вроде чатов, дашбордов или игр (например, Grafana, Homarr в homelab).

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/qo2image.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/qo2image.png)

Переходим во вкладку **SSL** в открывшемся окне необходимо заполнить поля

**SSL Certificate**: Указываем созданный нами раннее сертификат

**Force SSL**: (Опционально) Принудительно перенаправляет весь HTTP-трафик (порт 80) на HTTPS (порт 443) с помощью 301-редиректа, обеспечивая обязательное шифрование.  
​

**HSTS Enabled**: (Опционально) Включает HTTP Strict Transport Security — браузеры запоминают домен как HTTPS-only на заданный период (max-age), предотвращая MITM-атаки и downgrade до HTTP.  
​

**HTTP/2 Support**: (Опционально) Активирует протокол HTTP/2 для мультиплексирования запросов, сжатия заголовков и ускорения загрузки (требует SSL).  
​

**HSTS Sub-domains**: (Опционально) Расширяет HSTS-политику на все поддомены (includeSubDomains), заставляя браузеры применять HTTPS ко всем \*.domain.com.  
​

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/O8Qimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/O8Qimage.png)

После нажатия кнопки **Save** домен появится в списке и ресурс станет доступен по заданному домену

# Установка и настройка mDNS repeater в OPNsense для подключения умной лампочки matter к HomeAssistant

**mDNS repeater** — это сервис-посредник, который пересылает **multicast**-запросы **mDNS** (UDP порт 5353, адрес 224.0.0.251) между разными подсетями/VLAN. Matter (и HomeKit/AirPlay/ESPHOME) используют mDNS для обнаружения устройств (.local имена, типа lamp.local), но multicast не проходит через роутер — repeater "отражает" пакеты

Для нас он нужен для того что бы подключить лампочку работающую на matter от Яндекса, сложность заключается в том что как правило HomeAssistant и локальные устройства подключенные через wifi имеют разные подсети, и в случае с ipv4 проблема решается банальным правилом в межсетевом экране, но протокол matter использует ipv6, как раз для подобных случаев, был создан **mDNS repeater**.

##### Установка в OPNsense

**System &gt; Firmware &gt; Plugins &gt; os-mdns-repeater &gt; Install**.

**Services &gt; mDNS Repeater**: Enable, Interfaces: &lt;Подсеть с HA&gt;,&lt;LAN&gt;.

##### Итог

После проведенных действий в OPNsense, при условии что у вас включен ipv4 в этих подсетях, интеграция matter должна заработать корректно.

# Подключение zabbix agent 2 в lxc контейнер

#### Установка

Для debian 12

```
apt-get update && apt-get install -y zabbix-agent2
```

Для debian 13

```
grep -rl 'mirror.mariadb.org' /etc/apt/ | xargs -I {} mv {} {}.bak
apt-get update && apt-get install -y zabbix-agent2
```

#### Настройка

```
nano /etc/zabbix/zabbix_agent2.conf
```

Изменить

server=

закоментировать

serverActive=

изменить

hostname=

```
systemctl restart zabbix-agent2
systemctl enable zabbix-agent2
```

Проверить статус

```
systemctl status zabbix-agent2
```

# В разработке

В разработке

# Установка и первичная настройка Proxmox

 ✓ Disabled 'pve-enterprise' repository  
 ✓ Disabled 'ceph enterprise' repository  
 ✓ Added 'pve-no-subscription' repository  
 ✓ 'ceph' package repository (no-subscription) already exists (skipped)  
 ✗ Selected no to Adding 'pvetest' repository  
 ✓ Disabled subscription nag (Delete browser cache)  
 ✗ Selected no to Disabling high availability  
 ✓ Updated Proxmox VE  
 ✓ Completed Post Install Routines  
root@pve2:~#

# Установка и первичная настройка OPNsense в виртуальной машине proxmox



# установка и настройка sig-box в lxc контейнере+настройка socs5+установка и настройка tun2socks в opnsense+настройка маршрутизации трафика в opnsense по спискам ip



# Создание недокластера из 2 нод proxmox



# Установка Truenas



# Установка nextcloud в docker Truenas



# Настройка бэкапов lxc контейнеров и ВМ proxmox, в zfs truenas



# Миграция homeassistant из virtualbox debian на proxmox

# Не актуально

Не актуальные инструкции, тк более не используются в моей инфраструктуре.

# Установка docker и Portainer в lxc контейнере proxmox

Использование Proxmox и lxc контейнеров в нем, позволяет оптимизировать использование ресурсов и повышает отказоустойчивость инфраструктуры, по сути lxc контейнер является сильно "облегченной" операционной системой, на которую можно установить только те пакеты которые необходимы. Но сама по себе идея работы lxc контейнера, не является новой, одним из самых популярных аналогов lxc контейнеров является docker. Так как я не ограничен никакими рамками в использовании ПО отказываться от docker и docker-compose я не вижу никакого смысла.  
Proxmox и его lxc контейнеры никак не ограниченны в установке ПО поэтому мне ничего не мешает выделить ресурсы ноды под использование другой контейнерной структуры.

Portainer — это открытый веб-интерфейс для управления контейнерами Docker, который упрощает работу частично освобождая от использования командной строки.

В гайде описан процесс установки в lxc контейнер docker и portainer

#### Создание LXC контейнера

Процесс создания lxc контейнера описан [тут](https://bookstack.redpunk.net/books/ispolzuemoe-po-i-instrukcii-po-ego-ustanovke/page/sozdanie-lxc-konteinera-proxmox "Создание LXC контейнера proxmox")

Нам необходимо создать контейнер с такими настройками:

- **General**: Hostname=portainer-docker
- **Template**: Ubuntu 22.04 или Debian 12
- **Disks**: 8GB
- **CPU**: 2 cores
- **Memory**: 2048 MB

Далее необходимо подключиться к нему через [ssh](https://bookstack.redpunk.net/books/ispolzuemoe-po-i-instrukcii-po-ego-ustanovke/page/podkliucenie-k-node-konteineru-ili-virtualnoi-masine-proxmox-cerez-ssh "Подключение к ноде, контейнеру или виртуальной машине proxmox через ssh")

#### Установка docker

```bash
apt update && apt install curl -y
curl -fsSL https://get.docker.com | sh
systemctl enable --now docker
```

#### Установка portainer

```
docker volume create portainer_data
docker run -d -p 9000:9000 --name portainer --restart always \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v portainer_data:/data \
  portainer/portainer-ce:latest
```

Доступ http://&lt;ip lxc контейнера&gt;:9000

# Установка и настройка Nginx proxy manager в docker portainer, настройка split dns, настройка wildcard-сертификата

После установки [docker portainer](https://bookstack.redpunk.net/books/ispolzuemoe-po-i-instrukcii-po-ego-ustanovke/page/ustanovka-docker-i-portainer-v-lxc-konteinere-proxmox "docker и Portainer в lxc контейнере proxmox")

**Nginx Proxy Manager (NPM)** — это удобный инструмент с веб-интерфейсом для управления обратным прокси на базе Nginx, который упрощает маршрутизацию трафика к сервисам в Docker, LXC или VM без редактирования конфигов вручную.

**Основные функции**  
Поддерживает проксирование по доменам/поддоменам, автоматическое получение SSL-сертификатов Let's Encrypt, HTTP-аутентификацию, списки доступа (ACL) и блокировку IP. Позволяет настраивать перенаправления, кастомные страницы ошибок и потоки TCP/UDP через Streams.  
​

После покупки домена и регистрации его у dns провайдеров у нас появляется возможность реализовать обратный прокси трафика по доменному имени, это позволит нам убрать отображение ip адресов из нашей homelab и реализовать доступ из интернета к веб панелям необходимых нам сервисов.

#### Установка Nginx Proxy Manager

Для установки **Nginx Proxy Manager (npm)** в docker через portainer, нам необходимо перейти в веб-интерфейс portainer

```
http://<ip lxc контейнера>:9000
```

В веб интерфейсе необходимо перейти в **docker**

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/pApimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/pApimage.png)

Слева или в центре экрана выбрать **Stacks**

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/R8Eimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/R8Eimage.png)

Слева сверху выбрать **+Add stack**

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/1dfimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/1dfimage.png)

В **name** указать название нашего контейнера **npm**

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/KM2image.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/KM2image.png)

Ниже в поле для ввода кода **Web editor**, вводим код нашего **docker-compose** файла

```yaml
version: '3.8'
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '80:80'    # HTTP
      - '443:443'  # HTTPS
      - '81:81'    # Админка NPM
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
    environment:
      DISABLE_IPV6: 'true'

```

После ввода необходимо нажать кнопку **Deploy the stack**

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/5Vyimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/5Vyimage.png)

Если все в порядке, после установки у вас появится доступ к панели по адресу http://&lt;ip lxc контейнера с portain&gt;:81

#### Настройка Nginx Proxy Manager

После установки нам необходимо выполнить несколько обязательных вещей

##### Проброс портов к npm  


В OPNsense нам необходимо перейти в раздел **Firewall**, далее **NAT** и перейти в **Port Forward**, в открывшемся окне нажать справа сверху на **+**(add)

В открывшемся окне нужно заполнить поля

**Interface**: WAN

**TCP/IP Version**: IPv4

**Protocol**: TCP

**Destination**: WAN adress

**Destination port range**: from: HTTP; to: HTTP

**Redirect target IP**: Single host of Network, ниже ip используемого lxc контейнера

**Redirect target port**: HTTP

**Description**: NPM HTTP for Let's Encrypt

Нажать кнопку **Save**

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/fc0image.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/fc0image.png)

После этого нажимаем кнопку **Apply changes** и создаем следующее правило кнопкой **+**(add)

**Interface**: WAN

**TCP/IP Version**: IPv4

**Protocol**: TCP

**Destination**: WAN adress

**Destination port range**: from: HTTPS; to: HTTPS

**Redirect target IP**: Single host of Network, ниже ip используемого lxc контейнера

**Redirect target port**: HTTPS

**Description**: NPM HTTPS for Let's Encrypt

Нажать кнопку **Save**

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/z64image.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/z64image.png)

После этого нажимаем кнопку **Apply changes**

##### Покупка домена reg.ru

Для настройки доменных имен в npm доменное имя необходимо купить по этому поводу уже написана [подробная статья](https://habr.com/ru/articles/716002/)

После покупки доменного имени и указания его у ДНС провайдера потребуется время что бы запись появилась у ДНС резолверов, проверить это проще всего командой на любом клиенте сети с установленным линукс, я для этих целей создал отдельный тестовый [lxc контейнер](https://bookstack.redpunk.net/books/ispolzuemoe-po-i-instrukcii-po-ego-ustanovke/page/sozdanie-lxc-konteinera-proxmox "Создание LXC контейнера proxmox")

```
dig <ваш домен>
```

В выводе команды должен отобразится внешний ip адрес, запись проводится в течении 1-24 часов.

##### Настройка сертификата

Так как мы планируем использовать большое количество поддоменов нам не подходит вариант с обычным запросом сертификата через **certbot, reg.ru** позволяет запрашивать **wildcard** сертификат на домен и все поддомены, поэтому мы будем настраивать сразу его.

На сайте **reg.ru** заходишь в личный кабинет, далее Настройки API, запрашиваешь ключ API, его необходимо записать.

В **NPM** нужно создать **wildcard-сертификат**, во вкладке **Certificates** нужно нажать на кнопку **Let's Encrypt via DNS**

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/oqIimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/oqIimage.png)

В открывшемся окне необходимо заполнить поля  
**Domain Names**: тут указываешь &lt;твоедоменноеимя.ru&gt; и &lt;\*.твоедоменноеимя.ru&gt;

**DNS Provider**: reg.ru

**Credentials File Content**:   
dns\_username=&lt;твоя почта на reg.ru&gt;  
dns\_password=&lt;api колюч&gt;

После этого необходимо нажать кнопку **Save** и подождать 1-5 минут.

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/rn1image.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/rn1image.png)

##### Настройка split dns

Так как мы не хотим что бы все наши домены были доступны из сети, и для оптимизации подключения к доменам, нам необходимо настроить **split dns** на нашем **opnsense.** Технически можно реализовать эту технологию на любом локальном **dns** сервере, но в opnsense уже установлен **unbound dns**, в котором есть необходимый нам функционал (ubound dns должен быть включен и настроен), для этого нам необходимо перейти во вкладку **Services**, далее **Unbound DNS**, далее **Overrides**, в открывшемся окне в разделе **Hosts** нажать на **+**

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/Fs8image.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/Fs8image.png)

В открывшемся окне необходимо заполнить поля

**Enabled**: Галочка

**Host**: \*

**Domain**: &lt;твой домен&gt;

**Type**: A (IPv4 address)

**IP address**: &lt;ip адрес lxc контейнера&gt;

**Description**: NPM

Далее нажать кнопку **Save** и **Apply**

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/WG9image.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/WG9image.png)

Следующим шагом нужно указать Query forwarding для нашего сертификата, что бы избежать проблем с сертификатами в локальной сети при переходе по нашим доменам.

Для этого необходимо перейти во вкладку **Query forwarding** нажать на **+** и в открывшемся окне заполнить поля

**Enabled**: Галочка

**Domain**: ocsp.int-x3.letsencrypt.org

**Server IP**: 1.1.1.1

Далее нажать **Save** и **Apply**

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/W7Uimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/W7Uimage.png)

Теперь необходимо перейти в панель **npm** и настроить там группу доступа которую мы будем указывать при создании доменов.

Для этого необходимо перейти во вкладку **Acces list** нажать на кнопку **Add Acces list** и в открывшемся окне заполнить форму

Во вкладке **Details** необходимо указать имя нашей группы  
Во вкладке **Rules** необходимо добавить подсети из которых у нас будет доступ к нашим доменам

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/HUZimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/HUZimage.png)

#### Создание и настройка поддомена

Для создания поддомена нам необходимо перейти во вкладку Proxy Hosts и нажать на кнопку Add Proxy Host, в открывшемся окне необходимо заполнить поля

**Domain Names**: Вводим необходимы домен или поддомен

**Scheme**: В зависимости от панели к которой хотим открыть доступ выбираем http или https

**Forward Hostname / IP**: ip нашего сервиса,

**Forward Port**: Порт нашего сервиса

**Access List**: в зависимости от того хотим ли что бы сервис работал только локально или был публичным выбираем созданную нами группу доступа или Publicly Accessible

**Cache Assets**: (Опционально) Включает кэширование статических ресурсов (CSS, JS, изображения) на прокси-сервере для ускорения загрузки страниц, снижая нагрузку на backend-сервер.   
​

**Block Common Exploits**: (Опционально) Активирует встроенные правила Nginx для защиты от распространённых веб-атак (XSS, SQL-инъекции, кликджекинг) через заголовки безопасности вроде X-Frame-Options и Content-Security-Policy.  
​

**Websockets Support**: (Опционально) Включает поддержку WebSocket-протокола (ws://, wss://), необходимую для real-time приложений вроде чатов, дашбордов или игр (например, Grafana, Homarr в homelab).

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/qo2image.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/qo2image.png)

Переходим во вкладку **SSL** в открывшемся окне необходимо заполнить поля

**SSL Certificate**: Указываем созданный нами раннее сертификат

**Force SSL**: (Опционально) Принудительно перенаправляет весь HTTP-трафик (порт 80) на HTTPS (порт 443) с помощью 301-редиректа, обеспечивая обязательное шифрование.  
​

**HSTS Enabled**: (Опционально) Включает HTTP Strict Transport Security — браузеры запоминают домен как HTTPS-only на заданный период (max-age), предотвращая MITM-атаки и downgrade до HTTP.  
​

**HTTP/2 Support**: (Опционально) Активирует протокол HTTP/2 для мультиплексирования запросов, сжатия заголовков и ускорения загрузки (требует SSL).  
​

**HSTS Sub-domains**: (Опционально) Расширяет HSTS-политику на все поддомены (includeSubDomains), заставляя браузеры применять HTTPS ко всем \*.domain.com.  
​

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/O8Qimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/O8Qimage.png)

После нажатия кнопки **Save** домен появится в списке и ресурс станет доступен по заданному домену

# Установка и настройка homepage в portainer

#### Установка homepage

Для установки **homepage** в [docker через portainer](https://bookstack.redpunk.net/books/ispolzuemoe-po-i-instrukcii-po-ego-ustanovke/page/ustanovka-docker-i-portainer-v-lxc-konteinere-proxmox "Установка docker и Portainer в lxc контейнере proxmox"), нам необходимо перейти в веб-интерфейс portainer

```
http://<ip lxc контейнера>:9000
```

В веб интерфейсе необходимо перейти в **docker**

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/pApimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/pApimage.png)

Слева или в центре экрана выбрать **Stacks**

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/R8Eimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/R8Eimage.png)

Слева сверху выбрать **+Add stack**

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/1dfimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/1dfimage.png)

В **name** указать название нашего контейнера **homepage**

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/KM2image.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/KM2image.png)

Ниже в поле для ввода кода **Web editor**, вводим код нашего **docker-compose** файла

```yaml
version: "3.8"
services:
  homepage:
    image: ghcr.io/gethomepage/homepage:latest
    container_name: homepage
    ports:
      - "3000:3000"
    volumes:
      - /opt/homepage/config:/app/config          # Конфиги (services.yaml, settings.yaml)
      - /opt/homepage/images:/app/public/images   # Фоны и кастомные картинки
      - /opt/homepage/icons:/app/public/icons     # Иконки сервисов
      - /opt/homepage/custom:/app/custom          # Кастом CSS/JS
      - /var/run/docker.sock:/var/run/docker.sock:ro  # Docker виджеты
      - /etc/localtime:/etc/localtime:ro          # Часовой пояс
    environment:

      - HOMEPAGE_ALLOWED_HOSTS=<ip контейнера portainer>:3000,<домен созданный в NPM>,localhost:3000 #ВНИМАТЕЛЬНО!!!
    restart: unless-stopped

```

После ввода необходимо нажать кнопку **Deploy the stack**

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/5Vyimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/5Vyimage.png)

Если все в порядке, после установки у вас появится доступ к панели по адресу http://&lt;ip lxc контейнера с portain&gt;:3000

Настройку homepage рекомендую выполнять через [официальную документацию документацию homepage dashoboard](https://gethomepage.dev/configs/)

# Установка Nginx Proxy Manager в lxc контейнер

**Nginx Proxy Manager (NPM)** — это удобный инструмент с веб-интерфейсом для управления обратным прокси на базе Nginx, который упрощает маршрутизацию трафика к сервисам в Docker, LXC или VM без редактирования конфигов вручную.

**Основные функции**  
Поддерживает проксирование по доменам/поддоменам, автоматическое получение SSL-сертификатов Let's Encrypt, HTTP-аутентификацию, списки доступа (ACL) и блокировку IP. Позволяет настраивать перенаправления, кастомные страницы ошибок и потоки TCP/UDP через Streams.  
​

После покупки домена и регистрации его у dns провайдеров у нас появляется возможность реализовать обратный прокси трафика по доменному имени, это позволит нам убрать отображение ip адресов из нашей homelab и реализовать доступ из интернета к веб панелям необходимых нам сервисов.

#### Установка Nginx Proxy Manager

Для установки NPM в lxc контейнер, нам понадобиться скрипт с сайта [https://community-scripts.github.io/ProxmoxVE/scripts?id=nginxproxymanager](https://community-scripts.github.io/ProxmoxVE/scripts?id=nginxproxymanager)

А так же **VPN** подключение на роутере, для того что бы весь трафик в сети шел через **VPN**, некоторые пакеты в скрипте не доступны из России

В консоли ноды необходимо ввести

```
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/nginxproxymanager.sh)"
```

Сообщения о ошибках можно игнорировать, на все вопросы отвечаем **Y**

Если все в порядке, после установки у вас появится доступ к панели по адресу **http://&lt;ip lxc контейнера с portain&gt;:81**

#### Настройка Nginx Proxy Manager

После установки нам необходимо выполнить несколько обязательных вещей

##### Проброс портов к npm  


В OPNsense нам необходимо перейти в раздел **Firewall**, далее **NAT** и перейти в **Port Forward**, в открывшемся окне нажать справа сверху на **+**(add)

В открывшемся окне нужно заполнить поля

**Interface**: WAN

**TCP/IP Version**: IPv4

**Protocol**: TCP

**Destination**: WAN adress

**Destination port range**: from: HTTP; to: HTTP

**Redirect target IP**: Single host of Network, ниже ip используемого lxc контейнера

**Redirect target port**: HTTP

**Description**: NPM HTTP for Let's Encrypt

Нажать кнопку **Save**

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/fc0image.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/fc0image.png)

После этого нажимаем кнопку **Apply changes** и создаем следующее правило кнопкой **+**(add)

**Interface**: WAN

**TCP/IP Version**: IPv4

**Protocol**: TCP

**Destination**: WAN adress

**Destination port range**: from: HTTPS; to: HTTPS

**Redirect target IP**: Single host of Network, ниже ip используемого lxc контейнера

**Redirect target port**: HTTPS

**Description**: NPM HTTPS for Let's Encrypt

Нажать кнопку **Save**

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/z64image.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/z64image.png)

После этого нажимаем кнопку **Apply changes**

##### Покупка домена reg.ru

Для настройки доменных имен в npm доменное имя необходимо купить по этому поводу уже написана [подробная статья](https://habr.com/ru/articles/716002/)

После покупки доменного имени и указания его у ДНС провайдера потребуется время что бы запись появилась у ДНС резолверов, проверить это проще всего командой на любом клиенте сети с установленным линукс, я для этих целей создал отдельный тестовый [lxc контейнер](https://bookstack.redpunk.net/books/ispolzuemoe-po-i-instrukcii-po-ego-ustanovke/page/sozdanie-lxc-konteinera-proxmox "Создание LXC контейнера proxmox")

<div id="bkmrk-dig-%3C%D0%B2%D0%B0%D1%88-%D0%B4%D0%BE%D0%BC%D0%B5%D0%BD%3E"><div class="cm-editor ͼ1 ͼ2 ͼ4 ͼ1r"><div class="cm-scroller" tabindex="-1"><div aria-hidden="true" class="cm-gutters cm-gutters-before"><div class="cm-gutter cm-lineNumbers"><div class="cm-gutterElement"><span style="font-family: 'Lucida Console', 'DejaVu Sans Mono', 'Ubuntu Mono', Monaco, monospace;">dig &lt;ваш домен&gt;</span></div></div></div></div></div></div>В выводе команды должен отобразится внешний ip адрес, запись проводится в течении 1-24 часов.

##### Настройка сертификата

Так как мы планируем использовать большое количество поддоменов нам не подходит вариант с обычным запросом сертификата через **certbot, reg.ru** позволяет запрашивать **wildcard** сертификат на домен и все поддомены, поэтому мы будем настраивать сразу его.

На сайте **reg.ru** заходишь в личный кабинет, далее Настройки API, запрашиваешь ключ API, его необходимо записать.

В **NPM** нужно создать **wildcard-сертификат**, во вкладке **Certificates** нужно нажать на кнопку **Let's Encrypt via DNS**

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/oqIimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/oqIimage.png)

В открывшемся окне необходимо заполнить поля  
**Domain Names**: тут указываешь &lt;твоедоменноеимя.ru&gt; и &lt;\*.твоедоменноеимя.ru&gt;

**DNS Provider**: reg.ru

**Credentials File Content**:  
dns\_username=&lt;твоя почта на reg.ru&gt;  
dns\_password=&lt;api колюч&gt;

**Propagation Seconds:** Лучше указать 600 так как сервера reg.ru могут работать не стабильно

После этого необходимо нажать кнопку **Save** и подождать 1-5 минут.

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/rn1image.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/rn1image.png)

##### Настройка split dns

Так как мы не хотим что бы все наши домены были доступны из сети, и для оптимизации подключения к доменам, нам необходимо настроить **split dns** на нашем **opnsense.** Технически можно реализовать эту технологию на любом локальном **dns** сервере, но в opnsense уже установлен **unbound dns**, в котором есть необходимый нам функционал (ubound dns должен быть включен и настроен), для этого нам необходимо перейти во вкладку **Services**, далее **Unbound DNS**, далее **Overrides**, в открывшемся окне в разделе **Hosts** нажать на **+**

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/Fs8image.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/Fs8image.png)

В открывшемся окне необходимо заполнить поля

**Enabled**: Галочка

**Host**: \*

**Domain**: &lt;твой домен&gt;

**Type**: A (IPv4 address)

**IP address**: &lt;ip адрес lxc контейнера&gt;

**Description**: NPM

Далее нажать кнопку **Save** и **Apply**

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/WG9image.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/WG9image.png)

Следующим шагом нужно указать Query forwarding для нашего сертификата, что бы избежать проблем с сертификатами в локальной сети при переходе по нашим доменам.

Для этого необходимо перейти во вкладку **Query forwarding** нажать на **+** и в открывшемся окне заполнить поля

**Enabled**: Галочка

**Domain**: ocsp.int-x3.letsencrypt.org

**Server IP**: 1.1.1.1

Далее нажать **Save** и **Apply**

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/W7Uimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/W7Uimage.png)

Теперь необходимо перейти в панель **npm** и настроить там группу доступа которую мы будем указывать при создании доменов.

Для этого необходимо перейти во вкладку **Acces list** нажать на кнопку **Add Acces list** и в открывшемся окне заполнить форму

Во вкладке **Details** необходимо указать имя нашей группы  
Во вкладке **Rules** необходимо добавить подсети из которых у нас будет доступ к нашим доменам

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/HUZimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/HUZimage.png)

#### Создание и настройка поддомена

Для создания поддомена нам необходимо перейти во вкладку Proxy Hosts и нажать на кнопку Add Proxy Host, в открывшемся окне необходимо заполнить поля

**Domain Names**: Вводим необходимы домен или поддомен

**Scheme**: В зависимости от панели к которой хотим открыть доступ выбираем http или https

**Forward Hostname / IP**: ip нашего сервиса,

**Forward Port**: Порт нашего сервиса

**Access List**: в зависимости от того хотим ли что бы сервис работал только локально или был публичным выбираем созданную нами группу доступа или Publicly Accessible

**Cache Assets**: (Опционально) Включает кэширование статических ресурсов (CSS, JS, изображения) на прокси-сервере для ускорения загрузки страниц, снижая нагрузку на backend-сервер.   
​

**Block Common Exploits**: (Опционально) Активирует встроенные правила Nginx для защиты от распространённых веб-атак (XSS, SQL-инъекции, кликджекинг) через заголовки безопасности вроде X-Frame-Options и Content-Security-Policy.  
​

**Websockets Support**: (Опционально) Включает поддержку WebSocket-протокола (ws://, wss://), необходимую для real-time приложений вроде чатов, дашбордов или игр (например, Grafana, Homarr в homelab).

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/qo2image.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/qo2image.png)

Переходим во вкладку **SSL** в открывшемся окне необходимо заполнить поля

**SSL Certificate**: Указываем созданный нами раннее сертификат

**Force SSL**: (Опционально) Принудительно перенаправляет весь HTTP-трафик (порт 80) на HTTPS (порт 443) с помощью 301-редиректа, обеспечивая обязательное шифрование.  
​

**HSTS Enabled**: (Опционально) Включает HTTP Strict Transport Security — браузеры запоминают домен как HTTPS-only на заданный период (max-age), предотвращая MITM-атаки и downgrade до HTTP.  
​

**HTTP/2 Support**: (Опционально) Активирует протокол HTTP/2 для мультиплексирования запросов, сжатия заголовков и ускорения загрузки (требует SSL).  
​

**HSTS Sub-domains**: (Опционально) Расширяет HSTS-политику на все поддомены (includeSubDomains), заставляя браузеры применять HTTPS ко всем \*.domain.com.  
​

[![image.png](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/scaled-1680-/O8Qimage.png)](https://bookstack.redpunk.net/uploads/images/gallery/2025-12/O8Qimage.png)

После нажатия кнопки **Save** домен появится в списке и ресурс станет доступен по заданному домену

# Установка и настройка MTProto прокси для telegram на vps сервере через docker

##### Установка docker на сервер

```bash
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
```

##### Создание каталога для конфигурационных файлов

```bash
mkdir -p proxy-config
```

##### Запуск docker контейнера

```bash
docker run -d --name mtproto-proxy \
  -p 8889:443 \
  --restart=always \
  -v proxy-config:/data \
  telegrammessenger/proxy:latest
```

Вместо 8889 можно указать любой не занятый порт

##### Формирование ссылки для подключения

```bash
docker logs mtproto-proxy
```

В логах будет указана ссылка на подключение к MTProto формата

tg://proxy?server=&lt;ip vps сервера&gt;&amp;port=443&amp;secret=&lt;секретный код&gt;

При отправке ссылки в telegram нужно заменить порт на тот что вы указали при запуске контейнера в моем случае это 8889

# Pangolin

**Pangolin** — это селф-хост платформа для организации безопасного удаленного доступа к внутренним сервисам (по веб-протоколам, SSH, RDP и VNC) прямо через браузер. Она использует систему обратных туннелей, что позволяет публиковать локальные ресурсы в интернет без необходимости пробрасывать порты (Port Forwarding) на домашнем роутере.

Если по простому то **Pangolin** это ПО которое используется для доступа к ресурсам не напрямую, а через отдельную машину, в нашем случае VPS. Кратко, он работает как VPN то есть при обращении к нашему ресурсу, пользователь обращается сначала к VPS на которой установлен **Pangolin**, а далее уже через wireguard туннель обращается к ресурсу который мы хостим дома.  
  
Для чего это нужно?  
  
Первый вопрос который решает **Pangolin,** это вопрос безопасности, в крайнем случае злоумышленники получат доступ к VPS, а не к машине дома, даже если что то нахулиганят, мы просто восстановим **Pangolin** из бэкапа.

Второй вопрос, это возможность использования multi-WAN, динамический ip, статический, какой провайдер или оператор, нас больше не будет интересовать, благодаря **Pangolin** мы имеем возможность подключить балансировку к своему домашнему интернету и варианты подключения не ограничены.

##### Установка  


Довольно подробно установка и первичная настройка описывается в ролике ProHomeLab [ссылка](https://www.youtube.com/watch?v=EfiLQ6cWDMY) для нас важно понимать, что если раннее мы использовали какой либо обратный прокси сервис, то отказываться от его использования не нужно, он все еще нужен для локального доступа к ресурсам, единственное изменение в логике заключается лишь в том что теперь публичные домены и сервисы будут работать через **Pangolin**

# Инструкции по установке и первичной настройке ПО на других устройствах

Инструкции по установке и первичной настройке ПО на других устройствах

# Установка приложений на телевизор hisense с vidaa 5,6,7,8

<div class="BlockRenderer-scss--module_markup_Tk8dH Post-scss--module_markup_6oN-u BlockRenderer-scss--module_markupBlock_zzCfT BlockRenderer-scss--module_withPadding_T7wLl" id="bkmrk-%D0%AD%D0%BD%D1%82%D1%83%D0%B7%D0%B8%D0%B0%D1%81%D1%82%D1%8B-%D1%83%D1%81%D1%82%D0%B0%D0%BB%D0%B8-%D0%BE%D1%82"><div class="BlockRenderer-scss--module_markup_Tk8dH Post-scss--module_markup_6oN-u BlockRenderer-scss--module_markupBlock_zzCfT BlockRenderer-scss--module_withPadding_T7wLl">Энтузиасты устали от встроенного магазина приложений в телевизорах hisense и реализовали свой, ниже описана инструкция по установке приложений из этого магазина</div></div><div class="BlockRenderer-scss--module_markup_Tk8dH Post-scss--module_markup_6oN-u BlockRenderer-scss--module_markupBlock_zzCfT BlockRenderer-scss--module_withPadding_T7wLl" id="bkmrk-"></div>#### **Доступ к магазину**

<div class="BlockRenderer-scss--module_markup_Tk8dH Post-scss--module_markup_6oN-u BlockRenderer-scss--module_markupBlock_zzCfT BlockRenderer-scss--module_withPadding_T7wLl" id="bkmrk-1.-%D0%A1%D0%BC%D0%B5%D0%BD%D0%B8%D1%82%D1%8C-dns-%D1%81%D0%B5%D1%80%D0%B2%D0%B5"><div class="BlockRenderer-scss--module_markup_Tk8dH Post-scss--module_markup_6oN-u BlockRenderer-scss--module_markupBlock_zzCfT BlockRenderer-scss--module_withPadding_T7wLl"></div><div class="BlockRenderer-scss--module_markup_Tk8dH Post-scss--module_markup_6oN-u BlockRenderer-scss--module_markupBlock_zzCfT BlockRenderer-scss--module_withPadding_T7wLl">**1.** Сменить DNS-сервер_1 на 195.58.50.236</div><div class="BlockRenderer-scss--module_markup_Tk8dH Post-scss--module_markup_6oN-u BlockRenderer-scss--module_markupBlock_zzCfT BlockRenderer-scss--module_withPadding_T7wLl">Последовательно нажать: кнопку меню на пульту -&gt; настройки -&gt; сеть -&gt; конфигурация сети -&gt; настройки IP -&gt; Вручную -&gt; в поле DNS-сервер 1 прописать 195.58.50.236 , в поле DNS-сервер 2 оставить 0.0.0.0 -&gt; Сохранить</div><div class="BlockRenderer-scss--module_markup_Tk8dH Post-scss--module_markup_6oN-u BlockRenderer-scss--module_markupBlock_zzCfT BlockRenderer-scss--module_withPadding_T7wLl">  
</div><div class="BlockRenderer-scss--module_markup_Tk8dH Post-scss--module_markup_6oN-u BlockRenderer-scss--module_markupBlock_zzCfT BlockRenderer-scss--module_withPadding_T7wLl">**2.** Открыть на ТВ браузер и вбить в адресную строку **vidaahub.com**</div><div class="BlockRenderer-scss--module_markup_Tk8dH Post-scss--module_markup_6oN-u BlockRenderer-scss--module_markupBlock_zzCfT BlockRenderer-scss--module_withPadding_T7wLl">При загрузке в браузере появится окно соглашения, нажимаем continue</div><div class="BlockRenderer-scss--module_markup_Tk8dH Post-scss--module_markup_6oN-u BlockRenderer-scss--module_markupBlock_zzCfT BlockRenderer-scss--module_withPadding_T7wLl">Если при открытии ссылки будет ошибка **202** как на фото ниже, нажмите ссылку на странице</div></div><div class="BlockRenderer-scss--module_markup_Tk8dH Post-scss--module_markup_6oN-u BlockRenderer-scss--module_markupBlock_zzCfT BlockRenderer-scss--module_withPadding_T7wLl" id="bkmrk--1"></div><div class="BlockRenderer-scss--module_markup_Tk8dH Post-scss--module_markup_6oN-u BlockRenderer-scss--module_markupBlock_zzCfT BlockRenderer-scss--module_withPadding_T7wLl" id="bkmrk-3.%C2%A0%D0%92-%D0%BE%D1%82%D0%BA%D1%80%D1%8B%D0%B2%D1%88%D0%B5%D0%BC%D1%81%D1%8F-%D0%BC%D0%B0%D0%B3">**3.** В открывшемся магазине приложений переместите курсор на приложение **Moovies (** в правом нижнем углу появятся цифры **5/60** )</div><div class="BlockRenderer-scss--module_markup_Tk8dH Post-scss--module_markup_6oN-u BlockRenderer-scss--module_markupBlock_zzCfT BlockRenderer-scss--module_withPadding_T7wLl" id="bkmrk--2"></div><div class="BlockRenderer-scss--module_markup_Tk8dH Post-scss--module_markup_6oN-u BlockRenderer-scss--module_markupBlock_zzCfT BlockRenderer-scss--module_withPadding_T7wLl" id="bkmrk-4.%C2%A0%D0%9F%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE-%D0%BD">**4.** Последовательно нажмите кнопки пульта дистанционного управления: **4124** Это разблокирует все доступные для установки приложения. В левом нижнем углу экрана появится сообщение об успешной разблокировке и Master Key из 6 цифр.</div><div class="BlockRenderer-scss--module_markup_Tk8dH Post-scss--module_markup_6oN-u BlockRenderer-scss--module_markupBlock_zzCfT BlockRenderer-scss--module_withPadding_T7wLl" id="bkmrk-%D0%97%D0%B0%D0%BF%D0%B8%D1%88%D0%B8%D1%82%D0%B5%C2%A0-%D0%B8%D0%BB%D0%B8-%D1%81%D1%84%D0%BE%D1%82%D0%BE%D0%B3">**Запишите или сфотографируйте этот Master Key на смартфон.**</div>Он позволит вам получить доступ к альтернативному магазину приложений, даже если телевизор был перепрошит или сброшен до заводских настроек. Достаточно будет просто набрать Master Key после загрузки [vidaahub.com](http://vidaahub.com) в браузере. Получить Master Key в любое время можно по зеленой кнопке на пульте ТВ или Get Log на странице.

Теперь ВСЕГДА, когда вы зайдете на [vidaahub.com](http://vidaahub.com), откроется полноценный магазин приложений и можно добавить страницу в закладки браузера ТВ.

<div class="BlockRenderer-scss--module_markup_Tk8dH Post-scss--module_markup_6oN-u BlockRenderer-scss--module_markupBlock_zzCfT BlockRenderer-scss--module_withPadding_T7wLl" id="bkmrk--3"></div><div class="BlockRenderer-scss--module_markup_Tk8dH Post-scss--module_markup_6oN-u BlockRenderer-scss--module_markupBlock_zzCfT BlockRenderer-scss--module_withPadding_T7wLl" id="bkmrk-5.-%D0%92%D1%8B%D0%B1%D0%B8%D1%80%D0%B0%D0%B5%D0%BC-%D0%BD%D1%83%D0%B6%D0%BD%D0%BE%D0%B5-%D0%BF"><div class="BlockRenderer-scss--module_markup_Tk8dH Post-scss--module_markup_6oN-u BlockRenderer-scss--module_markupBlock_zzCfT BlockRenderer-scss--module_withPadding_T7wLl">**5.** Выбираем нужное приложение, жмем ОК для установки.</div><div class="BlockRenderer-scss--module_markup_Tk8dH Post-scss--module_markup_6oN-u BlockRenderer-scss--module_markupBlock_zzCfT BlockRenderer-scss--module_withPadding_T7wLl">  
</div><div class="BlockRenderer-scss--module_markup_Tk8dH Post-scss--module_markup_6oN-u BlockRenderer-scss--module_markupBlock_zzCfT BlockRenderer-scss--module_withPadding_T7wLl">**6.** Перезагружаем ТВ (выкл и снова вкл), НО ЛУЧШЕ отключить ТВ из розетки на несколько секунд</div></div>**Обратите внимание!** Чтобы приложения появились на вашем ТВ, необходимо выполнить его перезагрузку ! После в лаунчере нажать на иконку "More Apps " и смотреть под чертой "больше приложений" в самом начале(для vidaa 6) или конце списка приложений(на vidaa 5).

**7.** После установки всего необходимого обязательно верните DNS включив в настройках сети DHCP (меню -&gt; настройки -&gt; сеть -&gt; конфигурация сети -&gt; настройки IP -&gt; DHCP -&gt; сохранить)

# Установка WireGuard, Entware и KVAS на роутер Keenetic Giga

**Entware** - Терминал linux на роутере, нужен для запуска **KVAS**

**KVAS** - Штука которая решает проблему со **статической маршрутизацией** на роутере, по сути имба, сам по себе **Keenetic** умеет отправлять часть трафика через **VPN**, но главная проблема кроется в том КАК это настраивается, из коробки можно настраивать **статическую маршрутизацию**, но для этого необходимо узнать ВСЕ **ip** адреса **доменов** к которым ты хочешь подключаться и каждый **ip** загрузить отдельно через шакальное меню роутера. Пакет **KVAS** делает всю работу за тебя, в него можно загрузить список **ДОМЕНОВ** и при работе он сам будет крутить вертеть **ip** этих **доменов**, при этом тебе ничего делать не нужно будет, он сам обновляет списки маршрутизации и ситуации где у тебя что-то отвалилось и тебе нужно куда-то лезть в роутере, просто не будет.

---

Статья с гайдом для установки **WireGuard клиента** на роутер

[WireGuard VPN](https://help.keenetic.com/hc/ru/articles/360010592379-WireGuard-VPN)

---

Статья с гайдом по настройке **WireGuard клиента** на роутере

[Настройка WireGuard VPN между двумя роутерами Keenetic](https://help.keenetic.com/hc/ru/articles/360012075879-%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0-WireGuard-VPN-%D0%BC%D0%B5%D0%B6%D0%B4%D1%83-%D0%B4%D0%B2%D1%83%D0%BC%D1%8F-%D1%80%D0%BE%D1%83%D1%82%D0%B5%D1%80%D0%B0%D0%BC%D0%B8-Keenetic)

---

Для работы **KVAS** необходимо установить **Entware** на роутер, это можно сделать на внутреннюю память и внешнюю, проблема в том что память может отвалиться, плюс в роутере ее довольно мало, поэтому рекомендуют использовать внешний накопитель, ниже статья с гайдом по настройке. Так же желательно установить **ssh сервер** в магазине **keenetic**, позволяет подключатся с помощью порта 222 сразу к **Entware**

[Установка системы пакетов репозитория Entware на USB-накопитель](https://help.keenetic.com/hc/ru/articles/360021214160-%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0-%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B-%D0%BF%D0%B0%D0%BA%D0%B5%D1%82%D0%BE%D0%B2-%D1%80%D0%B5%D0%BF%D0%BE%D0%B7%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D1%8F-Entware-%D0%BD%D0%B0-USB-%D0%BD%D0%B0%D0%BA%D0%BE%D0%BF%D0%B8%D1%82%D0%B5%D0%BB%D1%8C)

---

Установка самого **KVAS**, github довольно подробный, разработал его русский чел, поэтому гайды и в целом вся документация довольно понятная.

[Установка пакета](https://github.com/qzeleza/kvas/wiki/%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0-%D0%BF%D0%B0%D0%BA%D0%B5%D1%82%D0%B0)

---

Из этой статьи интересует **ИСПОЛЬЗОВАНИЕ** другой чел активно использует **KVAS** и ведет свой github, туда довольно часто подгружает списки актуальных заблокированных доменов.

Одной командой, после установки **KVAS** можно загрузить большой список доменов.

Он же снял довольно понятный ролик по маршрутизации и установке **KVAS** на роутер.