AudionAudion

Audion Sync Tools — руководство

USER_GUIDE_RU.md

Audion Sync Tools — руководство

English · Журнал изменений

Содержание

Что это

Программа, которая держит на машине копию MAIN VPS и всё, без чего эта копия бесполезна: ключи, клиент туннеля, доступ к домашним машинам. Плюс снимок приватных архивов Build-стека в R2 bucket.

MAIN VPS снимает свой резерв сам — каждую ночь в 01:00, юнитом audion-backup.timer, и кладёт в r2:audion-backup/daily/ГГГГ-ММ-ДД. Забрать этот снимок к себе на диск может только та машина, где лежит папка данных: MAIN VPS к домашнему компьютеру не постучится. Этим и занимается программа.

Программа и данные

Разведены намеренно.

Программа — папка Audion Sync Tools: окно, сценарии, свой rclone, свои ключи к R2 bucket, клиент туннеля, набор для доступа к машинам. Здесь нет ни одного файла, который жалко потерять: всё восстанавливается из репозитория.

Данные — соседняя папка, названная по машине: Audion Backup Laptop, Audion Backup Work, Audion Backup Base. Снимки, зеркала кода MAIN VPS, ключи, токены. Здесь нет ни одного исполняемого файла.

Имя папки — это имя машины, и видно его снаружи. Отдельного профиля внутри нет: папка сама себе профиль. Пока папка данных звалась одинаково у всех, профили приходилось разводить именами внутри — от этого отказались.

Как программа её находит:

  1. Указатель config\profile.json — путь, который однажды выбрал человек.
  2. Единственная соседняя Audion Backup* — на самой машине она одна.
  3. При первом запуске, когда указателя ещё нет, программа спрашивает. Даже

если папка рядом одна: в ней ключи, адреса и пароль роутера, и садиться в неё по догадке нельзя.

Дома папок бывает несколько — там лежат папки данных остальных машин. Тогда выбор показывается списком, а сценарии из консоли берут первую и говорят об этом вслух, называя ключ -Root.

Буква диска нигде не зашита: на машине, где инструменты живут на S:, править нечего.

Независимость — не украшение. Раньше зеркало брало rclone.exe и ключи к R2 bucket у публикатора, и без соседней папки не поднималось вовсе. А подниматься оно должно на пустой машине первым, до всего остального.

С чего начать на новой машине

  1. Скопировать обе папки: программу и данные этой машины. Ключи едут внутри

данных, в Tunnel\SSH (golden copy) и Tunnel\Export (Export Keys с последней машины).

  1. Запустить программу и указать папку данных — она спросит сама, при первом

запуске, и там же скачает инструменты, которых в выпуске нет.

  1. SETUP → IMPORT KEYS — разложит ключи по трём местам, где их ищут

программы: профиль %USERPROFILE%\.ssh, config\rclone папки данных и core.sshCommand в рабочих копиях зеркала. Заодно выставит правам такой вид, какого требует ssh, и починит в ~\.ssh\config пути, ведущие в никуда. Если в Export Keys не хватает серверной пары, возьмёт её из Tunnel\SSH\servers. Уже существующий приватный ключ сохранит и проверит его права; -Check только показывает состояние.

  1. STORAGE → SYNC ALL — первое наполнение зеркала. Дальше зеркало обновляет

та же кнопка или sync-backup.cmd: заданий в Планировщике Windows программа не заводит, а ночной снимок MAIN VPS делает сам, своим таймером.

Если на машине стоит чужой VPN на AmneziaWG — например Red Shield, — своего клиента ставить не нужно: туннели пойдут на нём. Кнопка WIREGUARD это покажет и ставить ничего не станет.

Проверка, что всё встало: Tunnel\check-tunnel-client.cmd покажет клиент туннеля и маршруты, sync-backup.cmd -WhatIf — доступ к R2 bucket.

Окно

Открывается Start.exe. Один раз просит права администратора — они нужны для корректной работы с системными сетевыми соединениями: службой туннеля, состоянием интерфейсов WireGuard и рукопожатиями. Система отдаёт это только администратору, и выпрашивать права по частям, в момент нажатия, вышло бы хуже. Отказать можно: без прав не работают только туннели и SSHD, а в заголовке окна стоит «БЕЗ ПРАВ АДМИНИСТРАТОРА».

Start.exe -Root "папка данных" открывает окно на названной папке — на этот запуск: указатель программы остаётся прежним. Папка, которой нет, догадкой не заменяется: окно откроется без папки данных, и журнал скажет, какую ему назвали.

Устроено так: две файловые панели видны всегда, а лента разделов сверху меняет лишь две вещи — что открыто в панелях и какой ряд кнопок показан. Поэтому кнопка перестаёт быть заклинанием: в разделе SSH KEYS слева стоит golden copy, справа профиль, и после прогона кнопки видно, что там изменилось.

Справа от панелей — журнал, общий для всех разделов. Между панелями — узкая полоса кнопок, внизу — ряд файловых операций с их клавишами.

PowerShell системы окну не нужен: свой PowerShell 7 лежит рядом, в App\AudionPs.exe, и им же идут все сценарии и врапперы.

Первый запуск

Выпуск приходит без инструментов и без указателя на папку данных. Оба вопроса задаются в одном окне, как только открылось главное:

программой; УКАЗАТЬ ДРУГУЮ открывает обзор: папка может лежать где угодно.

Кнопка скачивает недостающее, около 100 МБ.

Инструментов шесть: rclone (без него панели не читают машины и R2 bucket, копирование и зеркала не идут), cloudflared (маршрут через Cloudflare), Windows Terminal (терминал к машинам), PeaZip (упаковка и распаковка), редакторы Microsoft Edit и micro (F4). Окно первого запуска возвращается при каждом старте, пока инструмента не хватает: программа, которая не может прочитать машину, должна сказать почему, а не стоять с пустыми панелями.

Шапка

Слева версия и бейдж DATA — имя папки данных этой машины. Щелчок открывает её в проводнике; другая выбирается в SETTINGS → ПАПКА ДАННЫХ → ВЫБРАТЬ.

В середине — строка пробы: какой маршрут за сколько ответил и каким путём пойдёт окно. О ней — в «Маршрутах к машинам».

Справа:

Медленному каналу легче с меньшим, множеству мелких файлов — с большим.

Audion Code Dark, Audion Light.

Всё это запоминается между запусками.

Разделы

РазделЧто в панеляхЧто в кнопках
SETUP — первая настройкапрофиль, config\rclone, golden copy, Export Keys, папка данных, LOCALшаги обзаведения: адреса, ключи, SSHD, SSH TUN, RESTORE, RCLONE.CONF
SSH KEYS — ключи машиныgolden copy, Export Keys, профиль, config\rcloneСПИСОК, SSH-COPY-ID, ОТОЗВАТЬ, EXPORT KEYS, R2 CREDS
TUNNEL — настройка связимашины, MAIN VPS, LOCALпроба и ДИАГНОСТИКА, CLOUDFLARED, OPENVPN, роутер, DNS, WIREGUARD, WG BASE-ROUTER
REMOTE — терминал и RDPмашины, MAIN VPS, LOCALтерминалы машин и роутеров, RDP, ROUTER WEB, SOCKS, выбор программы терминала
STORAGE — снимки и R2ночные снимки, папка данных, пять R2 bucket, MAIN VPS, SECOND VPS, LOCALSYNC ALL, SYNC SELECTED, DRY RUN, PRIVATE BACKUP
CLOUDS — облачные дискимашины, LOCAL и заведённые облакаподключить облако, войти заново, переименовать, отключить, проверить, ключи облаков
SETTINGSнастройки вместо панелейпапка данных, инструменты и версии, редактор F4, шрифт, прозрачность, размеры

Кнопка с булавкой в полосе между панелями закрепляет раздел: при следующем запуске окно откроется на нём. Что не влезло в ряд по ширине, уходит второй строкой.

Мастера спрашивают в самом окне — формой, таблицей или выбором из нескольких действий, — а работу делает сценарий из Engine\Scripts: тот же, что зовётся из консоли. В отдельной консоли открывается только то, что само ведёт разговор: SSHD, RESTORE, установка WireGuard, подъём туннеля, разговор с роутером, OpenVPN, пробросы и вход в облако.

Индикаторы

У кнопок, которые что-то заводят, слева индикатор. Значений три, и красного среди них нет:

что по нему пускают;

Подтверждение — прочитанная панель. Прочиталась машина — зелёными становятся ключи и RCLONE.CONF; прочитался R2 bucket — пара R2. У служб зелёный означает, что служба работает, у SSH TUN — что собственный ssh держит канал. У кнопок машин в разделе REMOTE значений четыре — о них в «Машинах».

Состояние читается при открытии окна, когда кончается очередь заданий, когда закрывается консоль мастера и по кнопке СОСТОЯНИЕ. Сеть при этом не трогается: машины пробует кнопка PORT 22 TCP PING и один раз само окно при старте.

Обзаведение — разделы SETUP и SSH KEYS

Кнопки обзаведения отвечают на вопрос «что ещё не сделано на этой машине». Отвечают они по папке данных, а не по памяти окна: какой ключ здешний, программа узнаёт сама — его публичная половина лежит в CLIENTS, закрытая — в профиле.

Раздел → группаКнопкаИндикатор горит, когдаЗелёный — после
SETUP → ШАГИАДРЕСАв targets.json заполнены BASE и LAPTOPмашина ответила на пробу
SSH-KEYGENв профиле лежит ключ этой машиныпрочиталась панель машины или VPS
IMPORT KEYSв профиле лежит пара машины из CLIENTSпрочиталась панель машины или VPS
SSH-KEYSCANсписок ключей хостов созданпрочиталась удалённая панель
SSHDслужба sshd заведенаслужба работает
SSH TUNREVERSE SSH TUN заведёнсобственный ssh держит канал
SETUP → ПРОЧЕЕRCLONE.CONFв rclone.conf не осталось незаполненных метокпрочиталась удалённая панель
ROUTER PASSпароль роутера сохранёнсразу
RELEASEпапка выбрана и внутри приватные архивысразу
REMOVE TASKосталось ежедневное задание прежних версий — кнопка видна только тогда и удаляет его—
SSH KEYS → EXTERNALR2 CREDSфайл r2.credentials на местеR2 bucket прочитался в панели
SSH KEYS → ПАПКАДАННЫЕесть golden copy Tunnel\SSH или Export Keys Tunnel\Exportсразу
TUNNEL → LOCALWIREGUARDна машине есть клиент туннелейсразу
WG BASE-ROUTERв данных лежит конфиг туннеляслужба туннеля установлена

Без индикатора в SETUP стоят три кнопки. УСТАНОВИТЬ кладёт cloudflared.exe в Tunnel\Bin и переписывает свой блок в ~\.ssh\config — нужна только там, где конфига нет вовсе. RESTORE восстанавливает машину из выбранной папки данных после переустановки Windows: порядок — в RESTORE_RU.md. OVPN PATH выбирает клиент и профиль OpenVPN.

В разделе SSH KEYS, кроме названного:

приватный и на каких машинах он прописан. Ниже — рабочие файлы этой машины.

каждой машины через уже живой доступ.

Последний ключ на машине не снимает: иначе на неё будет не войти.

показывает раскладку и не трогает ни одного файла.

АДРЕСА открывает таблицу машин. Строка SECOND VPS — адрес и порт в строке, а под таблицей три поля для его имён — хост в ~\.ssh\config, он же поверх cloudflared и имя ключа. У прежних установок эти имена свои; окно само переносит их из ~\.ssh\config при запуске, а поля позволяют их поправить. После записи окно сверяется с ~\.ssh\config и говорит, если имя туда ещё предстоит вписать кнопкой УСТАНОВИТЬ.

R2 CREDS спрашивает пару «идентификатор и секрет» — их выдаёт панель Cloudflare в разделе R2 - Manage API tokens — и кладёт файлом туда, где их ищет rclone. Сразу после записи окно спрашивает у R2 список бакетов: ключ без проверки — это обещание, а не доступ. Значения в журнал не попадают ни при удаче, ни при ошибке.

SSH-KEYSCAN собирает ключи хостов в config\rclone\known_hosts папки данных — список, по которому панели узнают машину. Проверки идут параллельно в отдельном процессе, окно остаётся доступным. Прямой обход ждёт до пяти секунд; для молчащих адресов настроенные SSH-маршруты проверяются ещё до пяти секунд. СТОП завершает проверку вместе с дочерними процессами. Недоступные хосты сохраняют прежние ключи. При смене ключа прежняя запись также остаётся: после сверки отпечатка повторите с Ctrl или Runs\ssh-keyscan.cmd -Force. Файл ~\.ssh\known_hosts не трогается: им пользуются ssh, Windows Terminal и Tabby. В обход входит и SECOND VPS с его SSH-портом из таблицы АДРЕСА. Этот список для панелей не заменяет подтверждение первого входа через обычный SSH.

Цвет полос

Слева у каждой группы кнопок — тонкая цветная полоска. Она подсказывает, какого рода вещь вы сейчас меняете, ещё до чтения подписей.

Отдельно: кнопки danger (ОТОЗВАТЬ, ОТКЛЮЧИТЬ) окрашены в Burn Orange — они удаляют или отзывают.

Цвета и темы

Кнопка с солнцем в ленте открывает выбор темы: Audion Vault Dark, Audion Dark, Audion Code Dark и Audion Light. Выбор запоминается.

Имена файлов красит App\config\colors\themes.json — в нём цвета и порядок правил; что считать видео, документом или архивом, говорит соседний App\config\mask-groups.json, те же семьи, что в окне масок. Правила идут сверху вниз, побеждает первое подошедшее: свежий архив красится как свежий, а не как архив. Возраст считается календарными сутками, поэтому вчерашний файл — «не старше дня», даже если ему тридцать часов.

Цвета самого окна — рамки, кнопки, фон списка — живут отдельно, в темах окна, и на цвета строк не влияют.

Панели

Над каждой панелью — кнопки источников: что она показывает. Локальный диск, машина по ssh, R2 bucket и облако для программы одинаковы: их читает один и тот же rclone, и копировать можно между любыми двумя сторонами. У машины в подписи стоит маршрут, которым сейчас идёт обращение: BASE · SSH SECOND VPS. Список источников открывают и клавиши: Alt+F1 — у левой панели, Alt+F2 — у правой.

Под кнопками — дорожка пути: щелчок по сегменту возвращает на его уровень. Внизу панели — строка состояния: сколько объектов, а у диска — сколько на нём свободно.

Щелчок по заголовку колонки меняет порядок строк, повторный переворачивает его; стрелка показывает, по чему разложено. Папки всегда остаются сверху.

Рамка активной панели подсвечена. Активная — источник для копирования и синхронизации, вторая приёмник; панель становится активной от любого касания, Tab переводит курсор в соседнюю.

Отметки. Отмеченная строка получает оранжевую точку в узкой первой колонке. Пробел или Insert отмечает строку и переводит курсор ниже, Ctrl+A отмечает всё, а при всём отмеченном снимает, * на цифровой клавиатуре обращает отметки. По маскам отмечает окно масок. Файловые операции берут отмеченное, а без отметок — строку под курсором.

Быстрый фильтр. Клавиша F открывает строку над списком: набранное сужает список по имени. Esc убирает фильтр.

Размеры. Колонка показывает КБ, МБ и ГБ либо точные байты — переключатель в SETTINGS. Shift+Пробел считает точный размер строки под курсором, папки тоже: на этой машине по диску, на дальней стороне через rclone size. Ответ встаёт в строку состояния панели.

Строки раскрашены по свежести и по типу файла — правила в App\config\colors\themes.json.

Полоса между панелями

Сверху вниз:

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

полные адреса, как их понимает rclone (Ctrl+Shift+P), — по одному на строку.

Клавиши

КлавишаЧто делает
Tabперейти в соседнюю панель
Enterвойти в папку
Backspaceна уровень выше
Alt+← и Alt+→назад и вперёд по истории панели
Home, Endв начало и в конец списка
Пробел, Insertотметить строку и перевести курсор ниже
Ctrl+Aотметить всё; при всём отмеченном — снять
* на цифровой клавиатуреобратить отметки
Shift+Пробелточный размер строки под курсором
Fбыстрый фильтр по имени
Ctrl+Rперечитать панель
Ctrl+Uпоменять панели местами
Alt+F1, Alt+F2список источников левой и правой панели
Ctrl+F, Alt+F7поиск
Ctrl+Enterтерминал там, где стоит панель: папка этой машины или машина по ssh
F2переименовать; на занятое имя — отказ, и при нажатии, и перед самым запуском задания
F3публичные ссылки на отмеченное в R2 bucket — в буфер
F4открыть файл в редакторе
Shift+F4новый файл — и сразу в редактор
F5копировать в соседнюю панель
F6перенести
F7создать папку
F8, Deleteудалить (с подтверждением); на диске этой машины — в Корзину Windows
Shift+F8, Shift+Deleteудалить мимо Корзины, насовсем
F11долить новое в соседнюю панель
F12точная копия в соседнюю панель (с подтверждением)
Alt+F5упаковать в архив
Alt+F9распаковать архивы
Ctrl+Shift+Nимена отмеченного — в буфер
Ctrl+Shift+Pполные адреса отмеченного — в буфер
Escостановить идущую операцию; в поле ввода — закрыть поле, операция идёт дальше; иначе — убрать фильтр, найденное или закрыть SETTINGS

Три кнопки понимают Ctrl: OPENVPN с ним проверяет пути без подключения, SSH-KEYSCAN заменяет изменившийся ключ хоста, кнопка питания поднимает туннель вопреки пересечению сетей.

Маски

Кнопка со звёздочкой открывает окно МАСКА ОТМЕТКИ: оно отмечает строки активной панели.

часть имени, .png — расширение.

становится кнопкой в этом окне; УБРАТЬ НАБОР снимает кнопку. Наборы лежат в папке данных, в config\mask-sets.json, и чистку программы переживают.

что у цветов свежести.

каждая в цвете своих строк. ВКЛЮЧИТЬ добавляет отмеченные группы к полю, ИСКЛЮЧИТЬ вычитает их из набранного: «все документы, кроме PDF».

ОТМЕТИТЬ снимает прежние отметки и ставит новые, ДОБАВИТЬ прежних не снимает, СНЯТЬ ВСЁ убирает все отметки панели, ОЧИСТИТЬ опустошает поле, группы и время.

Поиск

Ctrl+F, Alt+F7 или лупа в полосе между панелями. Ищет от папки активной панели вглубь — на диске, на машине по ssh, в R2 bucket и в облаке одинаково.

2026-* — маска, /выражение/ — регулярное. Пусто — все файлы.

ПОИСК запускает, СТОП или Esc останавливает — найденное остаётся в таблице. Показываются первые 50 000 найденных; если их больше, запрос стоит уточнить.

С найденным можно два дела. ПЕРЕЙТИ К ФАЙЛУ открывает в активной панели папку файла и ставит на него курсор. В ПАНЕЛЬ показывает всё найденное в активной панели плоским списком: оттуда F5 и F6 уносят в соседнюю панель, F8 удаляет, а Esc возвращает саму папку.

Ссылки — F3

F3 кладёт в буфер публичные ссылки на отмеченное, по одной на строку, и повторяет их в журнале. Работает в панели, которая стоит в R2 bucket со своим сайтом: audion-share, audion-media, audion-releases, audion-vault. Ничего не загружается и не меняется: ссылка строится из места объекта.

Где сайт отдаёт только открытые пути, ссылка на закрытый путь помечается «(путь закрыт)»: она построена, но заработает, когда путь откроют. Ссылки на audion-vault стоят за Access и открываются только владельцу.

Редактор — F4

F4 открывает файл под курсором в редакторе, Shift+F4 спрашивает имя, создаёт пустой файл и открывает его. Редактор выбирается в SETTINGS: Microsoft Edit и micro ездят с программой и открываются в её терминале, Блокнот есть в Windows всегда, СВОЙ… — любая программа. Редактор работает с файлами на дисках этой машины: файл с дальней стороны сначала копируют к себе.

Архивы

Alt+F5 упаковывает отмеченное (или строку под курсором) в соседнюю панель, Alt+F9 распаковывает отмеченные архивы — в соседнюю панель или на месте, всё вместе или каждый в свою папку. Работает PeaZip, который программа возит с собой, и только на дисках этой машины.

Форматы: ZIP, 7Z, самораспаковывающийся SFX, TAR, TAR.GZ, TAR.ZSTD, TAR.LZ4. В диалоге упаковки — сжатие, шифрование паролем, один архив на всё или по архиву на объект, приставка и окончание имени, проверка архива после упаковки. Пароль на диск не пишется.

Синхронизация папок

Три кнопки правее файловых операций работают не с именами папок, а с тем, что открыто в панелях: сравниваются два каталога из дорожек пути, со всем вложенным на любую глубину. Направление задаёт активная панель — источником считается та, где стоит курсор, и стрелка на кнопке читается «из активной в соседнюю».

КнопкаЧто делаетУдаляет
F11 COPY →доливает недостающее, обновляет устаревшеенет
F12 SYNC →приёмник становится точной копией источникада, с подтверждением и предохранителем на 200 файлов
BISYNC ⇄изменения в обе стороныпо обстоятельствам, предохранитель на 50

Пустые папки переносятся: для rclone существуют только файлы, и без особой просьбы каталог без единого файла остался бы на месте. Скрытые и системные файлы тоже переносятся, но атрибуты не сохраняются — в приёмнике файл становится обычным.

Времена файлов — создан, изменён, открыт — переносятся между дисками этой машины. На машины по ssh доезжает только время изменения: метаданных бэкенд sftp у rclone не поддерживает, и обойти это ключами нельзя.

Область задают отметки. Ничего не отмечено — равняется открытая папка целиком. Отмечено — только отмеченные папки и файлы, сколько бы их ни было: имена уходят в фильтры rclone, а фильтры действуют и на удаление, поэтому соседние папки приёмника не трогаются. Пример: слева открыто S:\Audion, справа E:\Backup, слева отмечены Docs и Engine — зеркало приведёт E:\Backup\Docs и E:\Backup\Engine к виду источника, а всё прочее в E:\Backup останется как было.

Подсветка строки областью не считается — только отметка. F5 берёт подсвеченное, потому что копирование ничего не портит; зеркало удаляет, и выбор должен быть намеренным.

BISYNC — единственная из трёх, кто отметки не принимает: он помнит состояние пары папок, и смена области потребовала бы нового разбора с нуля. При первом запуске пары он спрашивает, чья сторона считается верной, и запоминает пару в папке данных: в config\bisync\pairs.json, а рядом, в config\bisync\state, лежит то, с чем rclone сверяет стороны. Пропало это состояние — пара спрашивается заново. Маршрут к машине на пару не влияет: заведённая дома, издалека она остаётся той же парой и заново не спрашивается.

Папка внутри папки. F5, F6 и все три синхронизации отказывают до вопроса, когда приёмник лежит внутри источника, а F12 SYNC и BISYNC — ещё и когда источник лежит внутри приёмника: такое зеркало удалило бы собственный источник как лишнее. Сверяется настоящее место папок — и через junction, и когда одна машина открыта дважды: своим диском и по ssh, каким бы маршрутом к ней ни шли. При дальнем маршруте окно спрашивает саму машину, не эта ли она, — и только когда пути на обоих концах совпадают; не ответила — операция не начинается.

Все три встают в ту же очередь, что F5 и F6.

Очередь

F5 и F6 не запускают операцию сразу, а кладут отмеченное в очередь. Приёмник запоминается в момент добавления — можно набрать файлы в одной папке, перейти в другую, сменить источник и добавить оттуда: всё уедет туда, куда указывала противоположная панель, когда вы нажимали.

То же у остальных операций с вопросом — F2, F7, F8, F3: они идут туда, что назвал вопрос, даже если панель, пока вы отвечали, перешла в другое место — из окна поиска или после подключения OPENVPN.

Задачи идут по одной: параллельные передачи поделили бы один канал и перемешали вывод. В заголовке видно место в очереди — [3 из 10]; если добавить ещё, пока идёт, счётчик вырастет вместе с ней.

СТОП прерывает всю пачку: снимает текущую передачу, чистит остаток очереди и убивает процессы rclone, оставшиеся от прошлых запусков. То же делает Esc, пока операция идёт, — кроме Esc в поле ввода: там он закрывает поле.

Передача окно не переживает. Закрыть его во время работы — значит прервать её, и окно об этом спрашивает: «Закрыть окно и прервать передачу?». ПРЕРВАТЬ снимает задание вместе с его процессами и остатком очереди; отказ оставляет и окно, и передачу.

Что видно во время работы

Полоса выполнения внизу, состояние в заголовке окна (видно в панели задач, не разворачивая его) и строка состояния: операция, скорость, проценты, оставшееся время. В журнал раз в пять секунд падает строка rclone — столько-то из стольких-то, скорость, ETA.

Панели перечитываются после каждой операции. Вручную — Ctrl+R или круговая стрелка в полосе между панелями; СОСТОЯНИЕ перечитывает обе.

Куда идёт трафик

Через ту машину, где открыто окно: rclone читает с источника и пишет в приёмник. Копирование с этого компьютера на BASE идёт по домашней сети через роутер — ни SECOND VPS, ни туннель не участвуют. Скорость на 2,5-гигабитной сети получается около 180 МБ/с в одну сторону и 200 в другую: примерно две трети от того, что даёт SMB, зато с докачкой, повтором при обрыве и сверкой.

Из чужой сети трафик идёт длиннее: до MAIN VPS или SECOND VPS и оттуда домой по его туннелю. Замер с мобильного канала — 1,65 МБ/с, и это упор в сам канал, а не в программу: оба дальних маршрута дали одинаковую цифру.

Маршруты к машинам

К домашним машинам ведут четыре пути, и окно берёт первый доступный.

Кнопка МАРШРУТКуда идёт
LANнапрямую по адресу машины в её сети — из дома или при поднятом пути домой
SSH MAIN VPSчерез jump host MAIN VPS по его прямому имени
SSH MAIN VPS CFчерез тот же MAIN VPS поверх cloudflared
SSH SECOND VPSчерез jump host SECOND VPS

АВТО слушает пробу; остальные держат выбранное, даже если проба против — человек знает про сеть больше, чем стук в порт. Маршрут стоит в подписи источника над панелью: BASE · SSH MAIN VPS CF.

Дом всегда быстрее прочего. Из дальних быстрее SECOND VPS — он не пересекает границу, — но стоит последним намеренно: через него не ходят чувствительные данные, а сети с фильтрацией рвут к нему ssh. Два маршрута до MAIN VPS равны по скорости и различаются живучестью: по имени сессия встаёт быстрее, а cloudflared проходит там, где не проходит ничто, потому что у MAIN VPS нет открытого порта.

Выбор делает проба — при запуске и по кнопке PORT 22 TCP PING (TUNNEL → NET). Рядом с ней ДИАГНОСТИКА: она проходит все пути до BASE и пишет, какие живут, за сколько отвечают и сколько папок читают; отчёт ложится в logs. В незнакомой сети с неё и стоит начинать: она отвечает на вопрос «а через что сейчас работать».

Маршруты по машинам. Общий выбор подходит не всегда: до BASE может доходить домашняя сеть, а до машины в другой сети — нет. Кнопка со схемой сети в полосе между панелями задаёт маршрут каждой машине отдельно.

Строка в середине шапки говорит, что доступно и куда пойдёт окно:

проба 18:03 · BASE 1 мс · MAIN VPS 90 мс · MAIN VPS CF 57 мс · SECOND VPS 45 мс · путь: LAN (по пробе)

Слово нет вместо времени означает, что маршрут молчит. В скобках — кто выбрал путь: по пробе, выбрано — кнопкой МАРШРУТ, по машинам — у каждой свой.

Ответ означает, что порт открыт, — не то же самое, что «протокол пройдёт». Сети с фильтрацией обрывают ssh уже после установления соединения, и проба такого не видит. Для таких случаев и нужен ручной выбор.

MAIN VPS в панелях

MAIN VPS стоит в панелях наравне с машинами и R2 bucket: слева R2 bucket, справа MAIN VPS — и файл едет между ними напрямую, без scp и без консоли. Ходим родным sftp самого rclone по ключу от MAIN VPS; запасной маршрут, поверх cloudflared, включается, только если прямой замолчит.

У MAIN VPS нет домашнего адреса, поэтому в targets.json у него поле sshHost — имя готового хоста из ~\.ssh\config. Кнопка MAIN VPS в ряду машин открывает на нём консоль тем же именем.

Журнал

Правая треть окна. Сюда пишут и окно, и сценарии — строка в строку, с подсветкой: заголовки шагов, удачи, предупреждения. Красным остаётся только то, что действительно сломалось. Каждая строка со своим временем ложится и в файл дня logs\gui-ГГГГММДД.log в папке программы: далёкую машину разбирают по нему.

КОПИРОВАТЬ кладёт в буфер то, что в панели, — последние три тысячи строк; ОЧИСТИТЬ чистит панель. Файл дня хранит всё.

Ошибка, которую не поймал обработчик кнопки, окно не закрывает: она целиком ложится в logs\gui-crash-<время>.log, а в журнале остаётся одна строка с именем этого файла. Если ошибки идут подряд — двадцать за минуту, — программа закрывается, и последний файл говорит почему.

Под журналом две кнопки. СТОП или Esc прерывает идущую операцию и чистит очередь. СОСТОЯНИЕ перечитывает обе панели и индикаторы, пробует сеть и пишет сводку — она же появляется через несколько секунд после открытия окна:

===== СОСТОЯНИЕ ===== снимок: 05.10 04:00, 76 МБ, возраст 11 ч ключи R2: свои, на месте cloudflared: 2026.9.3 sshd: работает · WG BASE-ROUTER: установлен: router-base-wg

===== ТУННЕЛИ ===== клиенты: WG, RS AWG · ставим на RS AWG router-base-wg поднят, 34 с назад, 172.16.6.1 отвечает за 12 мс redlinkabcdefgh поднят, чужой

В «ТУННЕЛЯХ» стоит каждая служба туннеля на машине, чужого VPN тоже: драйвер у них общий, и занявший его первым решает за остальных. Свой туннель — тот, чей конфиг лежит в Tunnel\WG папки данных; у него показаны последнее рукопожатие и ответ дальнего конца. «Клиент пропал» значит, что программу, которой служба запускается, удалили или переложили: туннель переустанавливают мастером. Строка «расписание» появляется только там, где осталось задание прежних версий.

Те же факты из консоли отдаёт Engine\Scripts\Get-StateSummary.ps1.

SETTINGS

Раздел настроек встаёт на место панелей; журнал остаётся рядом. Выйти — Esc или крестик.

С другой папкой окно меняется разом: облака прежней уходят вместе с её конфигом, панели открываются заново, подключаются облака новой. Пока идёт операция, её подсчёт или вопрос, папка не меняется: журнал скажет «идёт операция: папку данных меняют после неё». Папка, в которой ещё нет адресов машин, получает их пустой каркас из образца программы — дальше кнопка АДРЕСА.

ничего не качает, только спрашивает; ОБНОВИТЬ обновляет все шесть инструментов и ставит недостающие. Настройки, ключи и конфиги остаются.

другой для панелей и журнала.

три плотности фона. Если эффекты в системе выключены, окно остаётся сплошным.

между двумя папками показывают другую версию.

Настройки окна живут в config\gui-settings.json программы и в папку данных не уходят. Наборы масок и пары BISYNC — не настройки окна, а то, что в нём нажито: они лежат в папке данных.

Облака

Раздел CLOUDS. Заведённые облака стоят источниками над панелями рядом с машинами, и всё, что умеет окно, умеет и с ними: копирование, перенос, удаление, переименование, отметки по маске, поиск, зеркало и синхронизация.

Кнопки раздела: ПОДКЛЮЧИТЬ заводит облако — вход идёт в браузере на стороне самого облака, программа не видит ни логина, ни пароля; ВОЙТИ ЗАНОВО меняет только токен, настройки остаются; ПЕРЕИМЕНОВАТЬ даёт облаку другое имя; ОТКЛЮЧИТЬ убирает его из списка — аккаунт и файлы не трогаются; ЧЕРЕЗ MAIN VPS перегоняет из левой панели в правую силами MAIN VPS, а не этой машины. Перед стартом окно считает, сколько поедет, и спрашивает: работа идёт на MAIN VPS сама, СТОП её не остановит — за ходом смотрит clouds-send.cmd -Watch. Перегон идёт один: пока он не кончился, второй не начнётся.

Сводка по тому, что проверено в самом rclone:

ОблакоКлюч rcloneКак входятСвой ключ приложенияЧто учесть
Google DrivedriveOAuth в браузередабез своего ключа квота общая на всех пользователей rclone
DropboxdropboxOAuth в браузередато же
OneDriveonedriveOAuth в браузередапароль в настройках относится к публичным ссылкам, а не ко входу
Яндекс.ДискyandexOAuth в браузередаприложение заводится в кабинете Яндекса
pCloudpcloudOAuth в браузереда—
BoxboxOAuth в браузереда—
MEGAmegaлогин и парольнетпароль ложится в зашифрованный конфиг
Proton Driveprotondriveлогин и парольнетпри двухфакторном спросит код, а при двухпарольном режиме — второй пароль

Список неполный намеренно: rclone умеет вчетверо больше, и мастер пропустит любой другой ключ — просто впишите его вместо предложенного.

Свой ключ приложения нужен не всем и не всегда. Общий ключ rclone делят между собой все его пользователи: в час пик это отказы и просевшая скорость. Свой заводится в консоли самого облака за несколько минут; мастер спросит про него и пропустит вопрос, если нажать Enter.

Где лежат ключи доступа. Не в общем rclone.conf — тот файл открыт и ездит между машинами. Облака живут в config\rclone\clouds.conf, зашифрованном самим rclone, а пароль от него — в clouds.key, запечатанном средствами Windows на этого пользователя и эту машину: копия файла на другой машине не откроется. Показать пути и состояние — clouds-keys.cmd или кнопка ГДЕ ЛЕЖАТ; значений не печатает ни то, ни другое.

Golden copy конфига облаков лежит на MAIN VPS (кнопка НА MAIN VPS), а пароль к ней — в папке данных, Tunnel\clouds.key, открытым текстом; права на файл — только владелец, администраторы и система. С этим файлом кнопка С MAIN VPS забирает облака на новую машину без повторного входа. EXPORT KEYS и IMPORT KEYS его не переносят: на новую машину файл кладут руками.

Сколько осталось места говорит clouds-check.cmd и кнопка ПРОВЕРИТЬ: по каждому облаку и одной строкой по всем сразу. Где у облака квоты нет как понятия, место не показывается.

Машины

В разделе REMOTE, в группах ТЕРМИНАЛ и РОУТЕРЫ, стоят кнопки машин: BASE, LAPTOP, MAIN VPS, HOME, WORK, ROUTER-BASE, ROUTER-HOME, ROUTER-WORK. Они открывают на машине консоль. Путь выбирается сам по последней пробе: домашний адрес отвечает — идём прямо, молчит — через jump host MAIN VPS, а если и он замолчал, поверх cloudflared или через SECOND VPS.

Набор кнопок задан не разметкой, а targets.json: что заведено в файле, то и стоит в ряду, а ключ с приставкой router- попадает в группу роутеров. Машина, чей адрес ещё не вписан, стоит с серым индикатором, и нажатие говорит об этом словами. Адрес вписывает кнопка АДРЕСА в SETUP; кода это не требует — и кнопка, и проба, и терминал берут адрес из одного файла.

Кнопка ТЕРМИНАЛ выбирает программу и показывает выбранное прямо в подписи. Без выбора берётся Windows Terminal из Tools\terminal — он ездит вместе с программой; нет и его — зовётся системный ssh. Кнопка TABBY находит Tabby сама: он понимает ссылку ssh://пользователь@адрес и открывает вкладку сразу на хосте. Ctrl+Enter в панели открывает терминал там, где она стоит.

У индикатора машины четыре значения: зелёный — отвечает напрямую; оранжевый — напрямую молчит, идём обходным маршрутом; Burn Orange — молчит, и обхода нет; серый — адрес не вписан. Подсказка у индикатора называет адрес и время ответа. Сеть пробуется кнопкой PORT 22 TCP PING и один раз при открытии окна.

SSHD, SSH TUN, WIREGUARD и WG BASE-ROUTER настраивают эту машину. Что нужно спросить, они спрашивают в окне, а сама работа идёт в своей консоли: она интерактивна. Прав администратора просят все, кроме SSH TUN: его канал держит обычный процесс, без службы. SSHD кладёт публичные ключи машин из CLIENTS в C:\ProgramData\ssh\administrators_authorized_keys: у учётной записи из группы администраторов sshd на Windows читает ключи только оттуда, а .ssh\authorized_keys для неё не смотрит. Строку машины из CLIENTS с другим ключом SSHD заменяет ключом из CLIENTS, недостающие дописывает. Строки машин, которых в CLIENTS нет, остаются и называются по подписи: CLIENTS у каждой машины свой, и их приносит SSH-COPY-ID с соседних машин.

SSH TUN в SETUP — это REVERSE SSH TUN: вход на эту машину издалека обратным SSH-туннелем. Машина сама держит одно исходящее соединение, а MAIN VPS или SECOND VPS открывает у себя порт на localhost: кто вошёл туда, через этот порт попадает сюда. Ни адаптера, ни службы, ни маршрутов. У мастера четыре действия, и у каждого свой враппер:

него маршрут короче и идёт без VPN; не ответит он — канал пойдёт через MAIN VPS;

для того, что нельзя показывать;

процесс и слушает ли порт сейчас;

с MAIN VPS и SECOND VPS — отовсюду, где прописывался, — и остаётся в данных.

При первом входе на VPS установка предлагает подтвердить его SSH-отпечаток в отдельном окне OpenSSH. Сверьте показанный SHA256 с выводом ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub в консоли сервера у провайдера и подтвердите только совпавший отпечаток. После этого установка повторяет вход без диалога и продолжает настройку. Изменившийся отпечаток не заменяется; ОСМОТР и УДАЛЕНИЕ новые хосты не принимают. При перенаправленном вводе подтверждение недоступно — запустите установку в отдельном окне.

Ход установки и ошибки каждого маршрута сохраняются в папке logs программы, в файле ssh-beacon-setup-<дата>-<время>-<pid>.log. Ошибка запасного маршрута больше не скрывает причину отказа выбранного VPS. Если отсутствует файл IdentityFile, сообщение указывает именно на путь к приватному ключу.

Первое нажатие SSH TUN предлагает настройку постоянного канала. Повторное выключает канал и его автозапуск при входе в Windows; следующее включает с сохранённым ключом, портом и сервером. Ctrl открывает мастер для смены VPS, осмотра и полного удаления. Постоянный процесс (Persistent=true) работает независимо от окна и запускается ярлыком в shell:startup. Обрыв SSH вызывает повторное подключение. Закрытие GUI и STOP файловых операций его не выключают. До входа пользователя в Windows, при сне или выключении машины канал не работает. LAPTOP допускает такую явную настройку; старые остатки автоматически не включаются. CLI: reverse-ssh-toggle.cmd, Setup-SshBeacon.ps1 -Resume -Persistent, -Stop — с явным -Root.

Ошибки запуска сохраняются в logs\ssh-beacon-<имя>-worker-*.err.log, ход соединения OpenSSH — в logs\ssh-beacon-<имя>-ssh.log. Зелёный индикатор появляется после подтверждения сервером обратного проброса; это ещё не проверка локальной SSHD на машине. Для новых запусков возраст процесса не считается подтверждением соединения.

Ключ туннеля живёт на MAIN VPS и SECOND VPS в отдельной учётной записи tunnel: без оболочки, с заблокированным паролем, и в её доме нет ничего, кроме файла ключей. Ключ этой машины хранится на ней самой — в чужой сети, в поездке, за чужим фаерволом, — и украденный упрётся в пустую учётную запись, а не в рабочую. Заводят её на сервере один раз, руками; что ей разрешено, лежит образцом в Tunnel\RemoteDesktop\config\sshd-tunnel.sample.conf. Пока учётной записи нет, ПОДНЯТЬ ничего не меняет и говорит об этом словами.

REVERSE SSH TUN нужен машине, до которой снаружи не дойти. Машине, которая ходит сама, он не нужен: лишний канал — это лишний ключ на MAIN VPS или SECOND VPS и лишний порт. Индикатор у кнопки зелёный, пока канал держит собственный ssh туннеля — запущенный его процессом, с его ключом и портом; жёлтый — туннель заведён, но канала нет или он ещё поднимается; серый — не заведён. В подписи кнопки — VPS, через который канал держится сейчас. Слушает ли порт на MAIN VPS или SECOND VPS, скажет ОСМОТРЕТЬ.

NDMS API разговаривает с домашним роутером по его API: показывает модель, прошивку и пиров WG-сервера с рукопожатиями. Только читает. ROUTER WG PEER выписывает этой машине конфиг WireGuard — заводит пира в роутере и собирает файл; ключевая пара рождается здесь, роутеру уходит только публичный ключ. Пароль роутера вносится кнопкой ROUTER PASS. NDMS — так называется прошивка роутера, по API которой с ним и разговаривают: поле скрывает набранное, значение ложится переносимо в набор по имени роутера, а сразу после сохранения программа пробует войти и говорит, получилось ли. Файл переживает переустановку и переезжает с набором, но сам по себе бесполезен - без доступа к роутеру им ничего не сделать; в переписку и в репозиторий значение не попадает.

WIREGUARD ставит саму программу — с неё начинают на новой машине. Индикатор зелёный, когда она уже на месте; тогда кнопка ничего не делает и говорит об этом. Портативной версии не существует: туннель поднимается службой Windows, а его сетевой адаптер — драйвер, поэтому нужен установщик и права.

Конфиг клиента можно не выписывать руками: new-router-peer.cmd заводит пира в самом роутере и собирает файл. Ключи рождаются на машине — роутер получает только публичный ключ. Сначала стоит посмотреть показом:

new-router-peer.cmd -WhatIf что будет сделано new-router-peer.cmd -Name ИМЯ выписать для другой машины new-router-peer.cmd -Name ИМЯ -Remove снять пира

Пароль роутера спрашивается один раз; с ключом -Remember он сохраняется в папке данных, по имени роутера, и больше не спрашивается. check-router.cmd показывает, что роутер отвечает, и перечисляет пиров.

WG BASE-ROUTER поднимает путь домой из конфига, который выписывает роутер: в его настройках WG-сервера добавляется клиент, роутер показывает QR-код и файл. Скрипт подхватывает свежий .conf из «Загрузок» сам, либо путь задаётся ключом -From. Golden copy конфига хранится в данных, рядом с ключами: Tunnel\WG\router-base-wg.conf. Какие сети пойдут в туннель, мастер спрашивает в окне: по умолчанию одна домашняя, всё остальное идёт мимо туннеля. Список сетей лежит рядом, в Tunnel\WG\routes.txt.

Клиент туннелей

Туннели держит служба Windows, и заводит её клиент — обычный WireGuard либо AmneziaWG. Драйвер в системе один на всех, и занявший первым решает за остальных: версия Amnezia умеет и обфускацию, и обычный WireGuard, обычная — только обычный.

Отсюда правило: программа ставит туннель на том клиенте, который на машине уже есть. Если стоит чужой VPN на AmneziaWG — Red Shield, например, — туннель пойдёт на нём. Не потому, что он лучше, а чтобы не отбирать у человека его VPN: поставленный рядом второй клиент отобрал бы драйвер, и чужой VPN перестал бы соединяться.

Своего клиента программа не ставит и чужой не трогает. Кнопка WIREGUARD сперва смотрит, что есть, и ставит только если нет ни одного.

Служба зовётся по тому, кто её завёл: WireGuardTunnel$имя или AmneziaWGTunnel$имя. Программа ищет под обоими именами — иначе на машине с AmneziaWG свой же туннель выглядел бы незаведённым.

Подъём и автозапуск. У мастера туннеля до роутера два действия подъёма:

ждёт кнопки. Так правильно для машины, которая ходит по чужим сетям: включил компьютер на работе — туннель не мешает тамошнему VPN, пока не понадобится.

машины, до которой рукой не дотянуться: перезагрузилась — и снова на связи.

Режим переключается тем же нажатием, снимать туннель не нужно.

Кнопка питания в полосе между панелями включает и выключает уже поставленный туннель. Индикатор у WG BASE-ROUTER говорит, установлен ли он; кнопка питания — поднят ли сейчас. Это разные вопросы: служба может идти при выключенном адаптере.

Проброс порта: рабочий стол и всё остальное

Файлы возит окно, команды выполняет терминал. Остаётся третье - рабочий стол, веб-морда роутера, сетевая папка, камера. Всё это переносится по уже поднятому ssh, без туннеля.

Работает так: ssh доносит чужой порт до вашего компьютера. Адрес, который вы называете, разрешается на той стороне, а не здесь. Поэтому через одну машину видно всё, что видит она:

Tunnel\RemoteDesktop\desktop-base.cmd     рабочий стол BASE
Tunnel\RemoteDesktop\web-router.cmd       веб-морда домашнего роутера
Tunnel\RemoteDesktop\socks-base.cmd       прокси на всю домашнюю сеть

В окне это кнопки RDP, ROUTER WEB и SOCKS в разделе REMOTE.

Что при этом происходит с системой: ничего. Не появляется ни адаптера, ни маршрутов, ни своего DNS; чужому VPN спорить не с чем. Закрыли окно рабочего стола - проброс снят, следов не осталось.

Произвольный порт задаётся ключами:

Open-Forward.ps1 base port -RemoteHost 192.168.1.15 -RemotePort 445
Open-Forward.ps1 base web  -RemoteHost 192.168.1.50
Open-Forward.ps1 base-cf desktop

Первый параметр - имя хоста из ~\.ssh\config: base идёт домашней сетью, base-direct через ProxyJump MAIN VPS, base-cf тем же MAIN VPS поверх cloudflared. Дальний маршрут стоит называть явно, когда прямого нет.

Прокси устроен иначе: он не несёт один порт, а открывает браузеру всю сеть той стороны. Сценарий назовёт адрес и порт - их вписывают в настройки браузера как SOCKS5.

Когда всё-таки нужен туннель: если домашняя сеть нужна целиком и сразу - не одно устройство, а всё вместе, включая то, чего вы заранее не назвали. Для одного порта проброс дешевле во всех смыслах.

Всё это работает потому, что ключи разложены и отпечатки узлов проверены: без доверия с обеих сторон каждый такой проброс был бы дырой, а не маршрутом.

Из консоли

Кнопки не делают работу сами — каждая зовёт тот же сценарий, что и человек из консоли. Поэтому окно и врапперы не расходятся: правится один сценарий.

ВрапперЧто делает
sync-backup.cmdзеркало MAIN VPS; -WhatIf, -Only 'Папка','Папка'
import-keys.cmdразложить ключи; -Check, -Force, -Source Store
export-keys.cmdсобрать Export Keys в Tunnel\Export; -Check, -Force
ssh-keyscan.cmdобновить ключи хостов в данных; -Root, -Force, -TimeoutSeconds
backup.cmdснимок Build-стека; -ArchiveRoot, -Publish, -ProjectName
Tunnel\check-tunnel-client.cmdсостояние клиента туннеля
Tunnel\install-tunnel-client.cmdпоставить клиент и прописать маршруты
Tunnel\update-cloudflared.cmdобновить cloudflared
Tunnel\RemoteDesktop\check-routes.cmdполная диагностика связи; -Speed
Tunnel\RemoteDesktop\check-router.cmdразговор с роутером; -Remember, -Schema
Tunnel\RemoteDesktop\new-router-peer.cmdвыписать конфиг; -WhatIf, -Name, -Remove
Tunnel\RemoteDesktop\install-wireguard.cmdпоставить WireGuard
Tunnel\RemoteDesktop\setup-base-vpn.cmdпуть домой; -Check, -Remove, -From, -Name

Каждый принимает -Root — путь к папке данных, если она не соседняя.

Сценарии из Engine\Scripts идут своим PowerShell программы: App\AudionPs.exe -NoProfile -File Engine\Scripts\<сценарий>.ps1 -Root "папка данных".

Что где лежит

В программе:

Start.exe запуск окна Runs\ врапперы: зеркало, ключи, снимок, обновления App\AudionSyncTools.exe окно App\AudionPs.exe свой PowerShell 7: им идут сценарии и врапперы Engine\BackupEngine.psm1 движок: цели, ключи, туннели, указатель данных Engine\BackupRclone.psm1 свой rclone: поиск, конфиг, вызовы Engine\DataRoot.ps1 где папка данных - один ответ на всех Engine\Scripts\ сценарии под врапперами Engine\Launcher\ Start.cs, сборка exe и значка Tunnel\ клиент туннеля и Bin\cloudflared.exe Tunnel\RemoteDesktop\ доступ к машинам Tools\rclone\rclone.exe свой бинарник Tools\terminal\ Windows Terminal: терминал к машинам и для редакторов Tools\PeaZip\ архиватор Tools\edit\, Tools\micro\ редакторы для F4 App\config\ ряды кнопок, словарь, цвета строк, группы масок logs\ журнал окна по дням и журналы мастеров Assets\SyncTools.ico, .png, .svg значок config\version.json версия config\profile.json указатель: где папка данных этой машины config\rclone.sample.conf заготовка rclone.conf, без значений config\gui-settings.json что запомнило окно

В данных:

Snapshots\ последний снимок MAIN VPS целиком MAIN VPS Backup\ юниты, скрипты и документы MAIN VPS Forgejo Mirror\ голые копии репозиториев Audion Portal\ портал Audion Vault Portal\ воркер хранилища заметок Planning Signals\ сбор сигналов Audion Share\ воркер витрины Tunnel\SSH\clients\ CLIENTS: ключи машин парка Tunnel\SSH\servers\ пары к MAIN VPS и SECOND VPS, golden copy Tunnel\SSH\beacon\ ключ REVERSE SSH TUN этой машины Tunnel\Export\SSH\ Export Keys: слепок ключей с этой машины Tunnel\WG\ конфиг туннеля до роутера BASE Tunnel\clouds.key пароль к конфигу облаков Tunnel\Tokens\ токены GitHub, Cloudflare, Telegram Tunnel\ACCESS.md реестр доступов config\rclone\ rclone.conf, ключи R2, отпечатки хостов, облака config\mirror.json план зеркала config\mask-sets.json свои наборы масок config\bisync\ пары BISYNC и состояние каждой Tunnel\RemoteDesktop\config\targets.json адреса машин и SECOND VPS

Там же лежит и профиль машины — то, чем она отличается от такой же программы у другого человека:

config\rclone\ rclone.conf и ключи к R2 bucket config\mirror.json план зеркала: папки, MAIN VPS и SECOND VPS Tunnel\RemoteDesktop\config\ адреса машин и пароль роутера

Настройки окна — config\gui-settings.json — сюда не входят: это часть самой программы, и живут они вместе с её папкой.

Раскладка ключей держится на одном правиле: приватный ключ машины остаётся на ней. Он лежит в профиле %USERPROFILE%\.ssh, где его ищет ssh, в CLIENTS рядом со своим .pub и в Tunnel\Export\SSH, откуда вернётся после переустановки системы. На другие машины уходит только публичный ключ.

Грабли

Ключ с общими правами. ssh и ssh-keygen отказываются читать приватный ключ, если к файлу имеет доступ кто-то кроме владельца — включая учётные записи, которых на машине уже нет. Лечится импортом: он сводит права и у копий, и у файлов в источнике.

Переезд папки. Пути к ключу и к cloudflared записаны в двух местах: в ~\.ssh\config и в .git\config каждого зеркала. После переноса git молча перестаёт тянуть — «Identity file not accessible». Импорт чинит и то, и другое, но только те пути, которые никуда не ведут: рабочие строки он не трогает.

Golden copy и Export Keys. Tunnel\SSH — golden copy на случай кривого набора при экспорте: EXPORT KEYS в неё не пишет никогда. Лежащая там копия маршрутов ssh_config.copy руками не обновляется — когда в ~\.ssh\config появляется новый хост, копию надо обновить. IMPORT KEYS предпочитает Export Keys и дополняет отсутствующие серверные пары из Tunnel\SSH\servers, сохраняя содержимое golden copy. Права приватных файлов могут быть исправлены: так OpenSSH принимает их после переноса на другую Windows. Если REVERSE SSH TUN при установке получает bad permissions, он исправляет права выбранного ключа в данных или профиле и повторяет вход. Достаточно повторить установку после обновления программы.

Снимок один. Snapshots держит последний и убирает прежние: история версий и так лежит в R2 bucket, а два снимка на диске — это сто десять мегабайт и вопрос «какой из них свежий».

Папка данных не пустая. Удалять Audion Backup нельзя: там ключи, токены и единственная локальная копия MAIN VPS. Программа умеет её наполнять, но данных в себе не держит.

OpenVPN из данных машины

В TUNNEL → NET кнопка OPENVPN предлагает подключить VPN и открыть WORK в активной панели либо отключить выбранный профиль. Повторное подключение уже работающего профиля не требует дополнительного SSH-проброса. Клиент можно хранить в Папка данных\OpenVPN Portable, профиль — в его data\config\*.ovpn, а файл .rdp — рядом с openvpn-portable.exe. Это личные данные и клиент владельца; в программу и её выпуск они не входят.

Если системный OpenVPN GUI установлен, он находится автоматически. Иначе используется Portable в выбранной папке данных. SETUP → ПРОЧЕЕ → OVPN PATH сохраняет явный выбор клиента и профиля; такой выбор имеет приоритет. Если профиль один, имя выбирать не нужно. Пути Portable внутри данных сохраняются относительно их корня, поэтому набор можно перенести на другой диск.

Перед первым соединением на новой Windows должен быть установлен подходящий драйвер OpenVPN. Sync Tools его не устанавливает. Ctrl+OPENVPN проверяет пути и совместимость уже открытого GUI без подключения. Работающий клиент с другой папкой конфигов не переключается автоматически: завершите его сами, когда допустимо отключить прежнее соединение, затем нажмите OPENVPN.

После запуска клиентом (Windows может запросить UAC) программа до 90 секунд ждёт настоящего чтения списка дисков WORK через rclone. Затем открывает WORK в активной панели. Если за время ожидания вы сменили папку данных, раздел или источник панели, автоматическое открытие отменяется. VPN даёт маршрут, а rclone сам входит по SSH-ключу и работает по SFTP; отдельный ssh.exe не требуется. На новой машине сначала настройте IMPORT KEYS и RCLONE.CONF; у [work] должен быть доверенный known_hosts_file. Ключи серверов автоматически не принимаются. Если диски не прочитались, программа показывает ошибку и оставляет VPN работающим. Состояние самого VPN и его ошибки видны в трее; журналы лежат в data\log. Отключение через OPENVPN касается только выбранного профиля, остальные соединения не завершаются. СТОП остаётся кнопкой файловых операций. RDP запускается отдельно. Копии одного VPN-сертификата на разных машинах могут вытеснять друг друга; для одновременной работы нужны профили, разрешённые администратором VPN-сервера.

В консоли те же действия: Tunnel\RemoteDesktop\openvpn.cmd -Root "папка данных" и openvpn-path.cmd -Root "папка данных"; проверка — openvpn.cmd -Check -NoPause. Явные действия: openvpn.cmd -Connect и openvpn.cmd -Disconnect, с тем же -Root.

Все проекты