<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="https://wiki.rtzra.ru/lib/exe/css.php?s=feed" type="text/css"?>
<rss version="2.0">
    <channel xmlns:g="http://base.google.com/ns/1.0">
        <title>RTzRa&#039;s hive - software</title>
        <description>Все работает</description>
        <link>https://wiki.rtzra.ru/</link>
        <lastBuildDate>Sun, 19 Jul 2026 18:14:32 +0000</lastBuildDate>
        <generator>FeedCreator 1.8</generator>
        <image>
            <url>https://wiki.rtzra.ru/_media/wiki/logo.png</url>
            <title>RTzRa&#039;s hive</title>
            <link>https://wiki.rtzra.ru/</link>
        </image>
        <item>
            <title>Xray: работаем с ключами и UUID - создано</title>
            <link>https://wiki.rtzra.ru/software/xray/xray-gen-keys</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;xrayrabotaem_s_kljuchami_i_uuid&quot;&gt;Xray: работаем с ключами и UUID&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Создаем пару приватный и публичный ключ:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;xray x25519&lt;/pre&gt;

&lt;p&gt;
Получаем публичный ключ из приватного:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;echo &amp;quot;&amp;lt;PRIVATE_KEY&amp;gt;&amp;quot; | openssl base64 -d | openssl pkey -pubout -outform DER | openssl base64 -A&lt;/pre&gt;

&lt;p&gt;
Проверяем конфигурацию:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;xray -test -c /etc/xray/config.json&lt;/pre&gt;
&lt;div class=&quot;tags&quot;&gt;&lt;span&gt;
	&lt;a href=&quot;https://wiki.rtzra.ru/tag/xray?do=showtag&amp;amp;tag=xray&quot; class=&quot;wikilink1&quot; title=&quot;tag:xray&quot; rel=&quot;tag&quot;&gt;xray&lt;/a&gt;,
	&lt;a href=&quot;https://wiki.rtzra.ru/tag/publickey?do=showtag&amp;amp;tag=publicKey&quot; class=&quot;wikilink1&quot; title=&quot;tag:publickey&quot; rel=&quot;tag&quot;&gt;publicKey&lt;/a&gt;,
	&lt;a href=&quot;https://wiki.rtzra.ru/tag/privatekey?do=showtag&amp;amp;tag=privateKey&quot; class=&quot;wikilink1&quot; title=&quot;tag:privatekey&quot; rel=&quot;tag&quot;&gt;privateKey&lt;/a&gt;
&lt;/span&gt;&lt;/div&gt;

&lt;/div&gt;
</description>
            <author>fireball@undisclosed.example.com (fireball)</author>
            <pubDate>Sun, 19 Apr 2026 09:22:37 +0000</pubDate>
        </item>
        <item>
            <title>Шифруем файлы при помощи age и публичных ключей - ...</title>
            <link>https://wiki.rtzra.ru/software/crypt-files-with-age</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;shifruem_fajly_pri_pomoschi_age_i_publichnyx_kljuchej&quot;&gt;Шифруем файлы при помощи age и публичных ключей&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Если у вас есть публичный ключ получателя в формате id_ed25519 (Ed25519), то для шифрования файлов лучше использовать age — современный, простой и безопасный инструмент. Ed25519 напрямую не поддерживается OpenSSL для шифрования, но age отлично работает с такими ключами.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0428\u0438\u0444\u0440\u0443\u0435\u043c \u0444\u0430\u0439\u043b\u044b \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 age \u0438 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0445 \u043a\u043b\u044e\u0447\u0435\u0439&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;shifruem_fajly_pri_pomoschi_age_i_publichnyx_kljuchej&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-562&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;ustanovka_age&quot;&gt;Установка age&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Ubuntu/Debian
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;sudo apt-get install age&lt;/pre&gt;

&lt;p&gt;
macOS
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;brew install age&lt;/pre&gt;

&lt;p&gt;
Windows (choco)
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;choco install age&lt;/pre&gt;

&lt;p&gt;
Или скачайте бинарный файл с GitHub: &lt;a href=&quot;https://github.com/FiloSottile/age/releases&quot; class=&quot;urlextern&quot; title=&quot;https://github.com/FiloSottile/age/releases&quot; rel=&quot;ugc nofollow&quot;&gt;https://github.com/FiloSottile/age/releases&lt;/a&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 age&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;ustanovka_age&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;563-848&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;shifrovanierasshifrovka_fajla_kljuchom_ed25519&quot;&gt;Шифрование/Расшифровка файла ключом Ed25519&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Зашифровать исходный файл secret.txt
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;age -R id_ed25519.pub -o secret.txt.age secret.txt&lt;/pre&gt;

&lt;p&gt;
Расшифровка файла приватным ключом зашифрованный файл secret.txt.age
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;age -d -i ~/.ssh/id_ed25519 -o decrypted.txt secret.txt.age&lt;/pre&gt;

&lt;p&gt;
Публичный ключ из файла id_ed25519.pub
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;age -r &amp;quot;ssh-ed25519 AAAA...&amp;quot; -o file.txt.age file.txt&lt;/pre&gt;

&lt;p&gt;
Или если ключ в файле
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;age -R ~/.ssh/id_ed25519.pub -o file.txt.age file.txt&lt;/pre&gt;

&lt;p&gt;
Извлечь публичный ключ в нужном формате (если нужно)
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;ssh-keygen -y -f ~/.ssh/id_ed25519 &amp;gt; id_ed25519.pub&lt;/pre&gt;
&lt;div class=&quot;tags&quot;&gt;&lt;span&gt;
	&lt;a href=&quot;https://wiki.rtzra.ru/tag/shifrovanie_fajlov?do=showtag&amp;amp;tag=%D1%88%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2&quot; class=&quot;wikilink1&quot; title=&quot;tag:shifrovanie_fajlov&quot; rel=&quot;tag&quot;&gt;шифрование файлов&lt;/a&gt;,
	&lt;a href=&quot;https://wiki.rtzra.ru/tag/encrypt_files?do=showtag&amp;amp;tag=encrypt_files&quot; class=&quot;wikilink1&quot; title=&quot;tag:encrypt_files&quot; rel=&quot;tag&quot;&gt;encrypt files&lt;/a&gt;,
	&lt;a href=&quot;https://wiki.rtzra.ru/tag/age?do=showtag&amp;amp;tag=age&quot; class=&quot;wikilink1&quot; title=&quot;tag:age&quot; rel=&quot;tag&quot;&gt;age&lt;/a&gt;,
	&lt;a href=&quot;https://wiki.rtzra.ru/tag/id_ed25519?do=showtag&amp;amp;tag=id_ed25519&quot; class=&quot;wikilink1&quot; title=&quot;tag:id_ed25519&quot; rel=&quot;tag&quot;&gt;id ed25519&lt;/a&gt;
&lt;/span&gt;&lt;/div&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0428\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435\/\u0420\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u0444\u0430\u0439\u043b\u0430 \u043a\u043b\u044e\u0447\u043e\u043c Ed25519&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;shifrovanierasshifrovka_fajla_kljuchom_ed25519&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;849-&amp;quot;} --&gt;</description>
            <author>fireball@undisclosed.example.com (fireball)</author>
            <pubDate>Mon, 02 Feb 2026 18:26:58 +0000</pubDate>
        </item>
        <item>
            <title>Подключение Storage на PBS в другом VLAN - создано</title>
            <link>https://wiki.rtzra.ru/software/proxmox/proxmox-add-pbs-storage</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;podkljuchenie_storage_na_pbs_v_drugom_vlan&quot;&gt;Подключение Storage на PBS в другом VLAN&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Если PBS находится где-то далеко от PVE (например в интернете или другом VLAN) и порт 8087 заблокирован на FireWall&amp;#039;ах то можно добавить через командную строку.
&lt;/p&gt;

&lt;p&gt;
На любом PVE из кластера выполняем:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;pvesm add pbs PBS_NAME --server 10.xx.xx.xx --port 443 --username adm_backup@pbs --datastore backup \
--fingerprint 8e:b3:22:8f:96:3b:00:b8:3d:51:96:fa:9f:1c:69:16:01:ac:79:47:a2:07:46:86:91:82:0f:1d:4d:9b:61:27 \
--password&lt;/pre&gt;

&lt;p&gt;
И вводим пароль пользователя adm_backup@pbs (он должен существовать на PBS)
&lt;/p&gt;

&lt;p&gt;
Поля:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; PBS_NAME - имя Storage&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 10.xx.xx.xx - IP нашего PBS&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; –port 443 - указываем порт на котором слушает Nginx или иной Reverse Proxy&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; fingerprint - нужен отпечаток для проверки подлинности&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Если выполнение падает с ошибкой «create storage failed: PBS_NAME: error fetching datastores - fingerprint &amp;#039;F7:7C:61:70:0C:BF:E4:9F:1B:85:17:F9:93:DE:FF:40:5F:6D:22:33:D8:44:B3:83:AE:DF:BC:1D:E9:FF:F0:C7&amp;#039; not verified, abort!» - значит указываем этот правильный fingerprint, так же его можно посмотреть руками:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;# Способ 1: через openssl (рекомендуется)
openssl s_client -connect 10.xx.xx.xx:443 -servername 10.xx.xx.xx &amp;lt; /dev/null 2&amp;gt;/dev/null | \
openssl x509 -fingerprint -sha256 -noout | sed &amp;#039;s/://g&amp;#039; | sed &amp;#039;s/FINGERPRINT=//g&amp;#039; | \
sed &amp;#039;s/../&amp;amp;:/g;s/:$//&amp;#039;

# Или короткая версия:
echo -n | openssl s_client -connect 10.xx.xx.xx:443 2&amp;gt;/dev/null | \
openssl x509 -fingerprint -sha256 -noout | cut -d&amp;#039;=&amp;#039; -f2 | sed &amp;#039;s/://g&amp;#039; | \
fold -w2 | paste -sd: -&lt;/pre&gt;
&lt;div class=&quot;tags&quot;&gt;&lt;span&gt;
	&lt;a href=&quot;https://wiki.rtzra.ru/tag/pve?do=showtag&amp;amp;tag=pve&quot; class=&quot;wikilink1&quot; title=&quot;tag:pve&quot; rel=&quot;tag&quot;&gt;pve&lt;/a&gt;,
	&lt;a href=&quot;https://wiki.rtzra.ru/tag/pbs?do=showtag&amp;amp;tag=pbs&quot; class=&quot;wikilink1&quot; title=&quot;tag:pbs&quot; rel=&quot;tag&quot;&gt;pbs&lt;/a&gt;,
	&lt;a href=&quot;https://wiki.rtzra.ru/tag/storage?do=showtag&amp;amp;tag=storage&quot; class=&quot;wikilink1&quot; title=&quot;tag:storage&quot; rel=&quot;tag&quot;&gt;storage&lt;/a&gt;,
	&lt;a href=&quot;https://wiki.rtzra.ru/tag/add_storage?do=showtag&amp;amp;tag=add_storage&quot; class=&quot;wikilink1&quot; title=&quot;tag:add_storage&quot; rel=&quot;tag&quot;&gt;add storage&lt;/a&gt;,
	&lt;a href=&quot;https://wiki.rtzra.ru/tag/dobavit_xranilische?do=showtag&amp;amp;tag=%D0%B4%D0%BE%D0%B1%D0%B0%D0%B2%D0%B8%D1%82%D1%8C_%D1%85%D1%80%D0%B0%D0%BD%D0%B8%D0%BB%D0%B8%D1%89%D0%B5&quot; class=&quot;wikilink1&quot; title=&quot;tag:dobavit_xranilische&quot; rel=&quot;tag&quot;&gt;добавить хранилище&lt;/a&gt;
&lt;/span&gt;&lt;/div&gt;

&lt;/div&gt;
</description>
            <author>fireball@undisclosed.example.com (fireball)</author>
            <pubDate>Wed, 28 Jan 2026 08:29:22 +0000</pubDate>
        </item>
        <item>
            <title>Windows: Отключаем автоматическую перезагрузку</title>
            <link>https://wiki.rtzra.ru/software/windows/windows-no-automatic-reboot</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;windowsotkljuchaem_avtomaticheskuju_perezagruzku&quot;&gt;Windows: Отключаем автоматическую перезагрузку&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Источник: &lt;a href=&quot;https://winitpro.ru/index.php/2010/10/08/kak-otklyuchit-avtomaticheskuyu-perezagruzku-posle-ustanovki-obnovlenij-v-windows/&quot; class=&quot;urlextern&quot; title=&quot;https://winitpro.ru/index.php/2010/10/08/kak-otklyuchit-avtomaticheskuyu-perezagruzku-posle-ustanovki-obnovlenij-v-windows/&quot; rel=&quot;ugc nofollow&quot;&gt;https://winitpro.ru/index.php/2010/10/08/kak-otklyuchit-avtomaticheskuyu-perezagruzku-posle-ustanovki-obnovlenij-v-windows/&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Для того, чтобы запретить автоматическую перезагрузку Windows после установки обновлений:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Нажмите на кнопку «Пуск» и введите gpedit.msc, (как включить gpedit.msc в Windows 7 Home) нажмите Enter&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; В редакторе локальной групповой политики перейдите в раздел Computer Configuration → Administrative Templates → Windows Components → Windows Update&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Дважды щелкните на «No auto-restart with logged on users for scheduled automatic updates installations»&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Выберите значение Enabled и нажмите кнопку ОК&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Закройте редактор локальной групповой политики.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Пользователи Windows 7, Vista и XP Home Edition, у которых не установлен редактор групповой политики, могут внести аналогичные настройки непосредственно через реестр.
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Запустите редактор реестра (Regedit)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Перейдите в следующий раздел реестра: HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\WindowsUpdate\AU Примечание: Если такого пути не существует, создайте его&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Измените значение ключа типа DWORD с именем NoAutoRebootWithLoggedOnUsers на 1, это запретит авто-перезагрузку. По умолчанию, значение этого ключа 0, что разрешает системе перезагружаться автоматически. Примечание: Если этот параметр не существует, создайте его – тип DWORD (32 бита)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Закройте редактор реестра.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Теперь компьютер не будет перезагружаться сам, т.е. после установки обновлений Windows, пользователь должен вручную перезагрузить свою рабочую станцию.
&lt;/p&gt;
&lt;div class=&quot;tags&quot;&gt;&lt;span&gt;
	&lt;a href=&quot;https://wiki.rtzra.ru/tag/windows?do=showtag&amp;amp;tag=windows&quot; class=&quot;wikilink1&quot; title=&quot;tag:windows&quot; rel=&quot;tag&quot;&gt;windows&lt;/a&gt;,
	&lt;a href=&quot;https://wiki.rtzra.ru/tag/disable?do=showtag&amp;amp;tag=disable&quot; class=&quot;wikilink1&quot; title=&quot;tag:disable&quot; rel=&quot;tag&quot;&gt;disable&lt;/a&gt;,
	&lt;a href=&quot;https://wiki.rtzra.ru/tag/autoreboot?do=showtag&amp;amp;tag=autoreboot&quot; class=&quot;wikilink1&quot; title=&quot;tag:autoreboot&quot; rel=&quot;tag&quot;&gt;autoreboot&lt;/a&gt;,
	&lt;a href=&quot;https://wiki.rtzra.ru/tag/otkljuchit?do=showtag&amp;amp;tag=%D0%BE%D1%82%D0%BA%D0%BB%D1%8E%D1%87%D0%B8%D1%82%D1%8C&quot; class=&quot;wikilink1&quot; title=&quot;tag:otkljuchit&quot; rel=&quot;tag&quot;&gt;отключить&lt;/a&gt;,
	&lt;a href=&quot;https://wiki.rtzra.ru/tag/avtomaticheskuju?do=showtag&amp;amp;tag=%D0%B0%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D1%83%D1%8E&quot; class=&quot;wikilink1&quot; title=&quot;tag:avtomaticheskuju&quot; rel=&quot;tag&quot;&gt;автоматическую&lt;/a&gt;,
	&lt;a href=&quot;https://wiki.rtzra.ru/tag/perezagruzku?do=showtag&amp;amp;tag=%D0%BF%D0%B5%D1%80%D0%B5%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D1%83&quot; class=&quot;wikilink1&quot; title=&quot;tag:perezagruzku&quot; rel=&quot;tag&quot;&gt;перезагрузку&lt;/a&gt;,
	&lt;a href=&quot;https://wiki.rtzra.ru/tag/posle?do=showtag&amp;amp;tag=%D0%BF%D0%BE%D1%81%D0%BB%D0%B5&quot; class=&quot;wikilink1&quot; title=&quot;tag:posle&quot; rel=&quot;tag&quot;&gt;после&lt;/a&gt;,
	&lt;a href=&quot;https://wiki.rtzra.ru/tag/ustanovki?do=showtag&amp;amp;tag=%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B8&quot; class=&quot;wikilink1&quot; title=&quot;tag:ustanovki&quot; rel=&quot;tag&quot;&gt;установки&lt;/a&gt;,
	&lt;a href=&quot;https://wiki.rtzra.ru/tag/obnovlenij?do=showtag&amp;amp;tag=%D0%BE%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B9&quot; class=&quot;wikilink1&quot; title=&quot;tag:obnovlenij&quot; rel=&quot;tag&quot;&gt;обновлений&lt;/a&gt;
&lt;/span&gt;&lt;/div&gt;

&lt;/div&gt;
</description>
            <author>fireball@undisclosed.example.com (fireball)</author>
            <pubDate>Wed, 28 Jan 2026 05:26:26 +0000</pubDate>
        </item>
        <item>
            <title> - создано</title>
            <link>https://wiki.rtzra.ru/software/proxmox/proxmox-backup-server-in-cloud</link>
            <description>
&lt;p&gt;
Proxmox: Ставим PBS на любой хост
&lt;/p&gt;

&lt;p&gt;
Взято тут: &lt;a href=&quot;https://ketanvijayvargiya.com/476-proxmox-backup-server-in-the-cloud/&quot; class=&quot;urlextern&quot; title=&quot;https://ketanvijayvargiya.com/476-proxmox-backup-server-in-the-cloud/&quot; rel=&quot;ugc nofollow&quot;&gt;https://ketanvijayvargiya.com/476-proxmox-backup-server-in-the-cloud/&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Зачем: если ставим proxmox-backup то приедет куча зависимостей. А здесь только шкура для управления.
&lt;/p&gt;

&lt;p&gt;
Добавляем в /etc/apt/sources.list
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;deb http://download.proxmox.com/debian/pbs bookworm pbs-no-subscription&lt;/pre&gt;

&lt;p&gt;
И ставим: 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;apt update &amp;amp;&amp;amp; apt install proxmox-backup-server -y&lt;/pre&gt;
&lt;div class=&quot;tags&quot;&gt;&lt;span&gt;
	&lt;a href=&quot;https://wiki.rtzra.ru/tag/proxmox_backup_server?do=showtag&amp;amp;tag=proxmox_backup_server&quot; class=&quot;wikilink1&quot; title=&quot;tag:proxmox_backup_server&quot; rel=&quot;tag&quot;&gt;proxmox backup server&lt;/a&gt;,
	&lt;a href=&quot;https://wiki.rtzra.ru/tag/pbs?do=showtag&amp;amp;tag=PBS&quot; class=&quot;wikilink1&quot; title=&quot;tag:pbs&quot; rel=&quot;tag&quot;&gt;PBS&lt;/a&gt;
&lt;/span&gt;&lt;/div&gt;
</description>
            <author>fireball@undisclosed.example.com (fireball)</author>
            <pubDate>Thu, 01 Jan 2026 17:22:22 +0000</pubDate>
        </item>
        <item>
            <title>Proxmox: clone ZFS bootroot to mirror - создано</title>
            <link>https://wiki.rtzra.ru/software/proxmox/proxmox-clone-zfs-bootroor-to-mirror</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;proxmoxclone_zfs_bootroot_to_mirror&quot;&gt;Proxmox: clone ZFS bootroot to mirror&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Взято здесь: &lt;a href=&quot;https://github.com/kneutron/ansitest/blob/master/proxmox/proxmox-clone-zfs-bootroot-to-mirror.sh&quot; class=&quot;urlextern&quot; title=&quot;https://github.com/kneutron/ansitest/blob/master/proxmox/proxmox-clone-zfs-bootroot-to-mirror.sh&quot; rel=&quot;ugc nofollow&quot;&gt;https://github.com/kneutron/ansitest/blob/master/proxmox/proxmox-clone-zfs-bootroot-to-mirror.sh&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
И там еще много полезного: &lt;a href=&quot;https://github.com/kneutron/ansitest/tree/master/proxmox&quot; class=&quot;urlextern&quot; title=&quot;https://github.com/kneutron/ansitest/tree/master/proxmox&quot; rel=&quot;ugc nofollow&quot;&gt;https://github.com/kneutron/ansitest/tree/master/proxmox&lt;/a&gt;
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;#!/bin/bash

# Add 2nd or 3rd mirror drive to proxmox zfs boot/root and fix boot 
# This is for when you want to make a full backup of your proxmox zfs boot/root 
#   so you can test boot it on other hardware or use it as a DR drive
# 2024.May kneutron

# NOTE I TAKE NO RESPONSIBILITY FOR DATA LOSS, EDIT THIS SCRIPT BEFORE RUNNING 
# AND MAKE SURE YOU DESIGNATE THE RIGHT DISKS!

# NOTE it is HIGHLY RECOMMENDED to try this in a vm first!!!!

# REF: https://hosting-tutorials.co.uk/tutorials/linux/replacing-a-zfs-rpool-disk-with-proxmox-7-x
# REF: https://www.reddit.com/r/Proxmox/comments/1cr6wn7/tutorial_howto_migrate_a_pve_zfs_bootroot_mirror/

# Depends:
# sgdisk wipefs 

set -u # abort on undefined var
set -e # abort on error

[ $(which sgdisk |wc -l) -eq 0 ] &amp;amp;&amp;amp; apt-get install -y gdisk
[ $(which wipefs |wc -l) -eq 0 ] &amp;amp;&amp;amp; apt-get install -y util-linux
[ $(which parted |wc -l) -eq 0 ] &amp;amp;&amp;amp; apt-get install -y parted # included in case partition end needs to be manually moved + makes new gptlabel
# REF: https://sirlagz.net/2023/07/03/updated-live-resize-lvm-on-linux/

# failexit.mrg
function failexit () {
  echo &amp;#039;! Something failed! Code: &amp;#039;&amp;quot;$1 $2&amp;quot; # code # (and optional description)
  exit $1
}


# TODO EDITME and make sure to put the correct shortnames in!
oldisk1=vda
#oldisk2=vdb

newdisk1=vdc
#newdisk2=vdd

echo &amp;quot;WARNING: About to destructively apply a new GPT label to disk $newdisk1 - ^C to backout or Enter to proceed&amp;quot;
read

#zpool set autoexpand=on rpool

for disk in $newdisk1; do
 echo $disk

# need to do this if run &amp;gt;1
 parted -s /dev/$disk mklabel gpt
  
sgdisk -g \
-n 1:0:+1M \
-n 2:0:+1G \
-n 3:0:0 \
-t 1:8300 \
-t 2:EF00 \
-t 3:BF01 \
-p /dev/$disk

 gdisk -l /dev/$disk
done

echo &amp;quot;$(date) - Prep new mirror disk, blank any filesystem / zfs data&amp;quot;
set +e # OK if we fail here, not fatal
zpool labelclear /dev/${newdisk1}3
#zpool labelclear /dev/${newdisk2}3
wipefs -a /dev/${newdisk1}3
#wipefs -a /dev/${newdisk2}3
set -e

zpool status rpool -v |awk &amp;#039;NF&amp;gt;1&amp;#039;
#sizeb4=$(zpool list rpool)
echo &amp;quot;About to attach new mirror disk $newdisk1 to zfs boot disk(s) - ^C to backout / Enter = proceed&amp;quot;
read

function waitresilver () {
# wait for resilver
# do forever
while :; do
  clear
  echo &amp;quot;Pool: rpool - NOW: $(date) -- Watchresilver started: $sdate&amp;quot;

  zpool status rpool |grep -A 2 &amp;#039;in progress&amp;#039; || break 2
  zpool iostat -v rpool #2 3 &amp;amp;

  sleep 5
  date
done
ndate=$(date)
}

sdate=$(date)
set -x
#zpool add -f rpool mirror /dev/${newdisk1}3 /dev/${newdisk2}3
#zpool detach rpool /dev/${oldisk1}3
#time zpool remove rpool /dev/${oldisk2}3
time zpool attach rpool ${oldisk1}3 ${newdisk1}3 \
  || failexit 100 &amp;quot;Zpool replace $oldisk1 $newdisk1 failed&amp;quot;
set +x

waitresilver;

#set -x
#time zpool replace rpool ${oldisk2}3 ${newdisk2}3 \
#  || failexit 100 &amp;quot;Zpool replace $oldisk2 $newdisk2 failed&amp;quot;
#set +x
#waitresilver; 

zpool status -v rpool |awk &amp;#039;NF&amp;gt;0&amp;#039; # skip blank lines
echo &amp;quot;o Resilver watch rpool start: $sdate // Completed: $ndate&amp;quot;

proxmox-boot-tool status # Note if grub is being used or not here
addgrub=&amp;quot;&amp;quot;
[ $(proxmox-boot-tool status |grep -c grub) -gt 0 ] &amp;amp;&amp;amp; addgrub=&amp;quot;grub&amp;quot;

echo &amp;quot;$(date) - Fixing boot on new mirror drive&amp;quot;
set -x
proxmox-boot-tool format /dev/${newdisk1}2 --force # &amp;lt;new disk&amp;#039;s ESP partn&amp;gt;
#proxmox-boot-tool format /dev/${newdisk2}2 --force # &amp;lt;new disk&amp;#039;s ESP partn&amp;gt;
time sync; sleep 2

proxmox-boot-tool init /dev/${newdisk1}2 $addgrub # &amp;lt;new disk&amp;#039;s ESP partn&amp;gt;
#proxmox-boot-tool init /dev/${newdisk2}2 $addgrub # &amp;lt;new disk&amp;#039;s ESP partn&amp;gt;

set +e # grub error is ok here
proxmox-boot-tool refresh
set +x

zpool status rpool -v

echo &amp;#039;=====&amp;#039;
echo &amp;quot;You should be able to boot with any disk now! After shutdown + remove extra mirror disk, run:&amp;quot;
echo &amp;quot; proxmox-boot-tool clean&amp;quot;
echo &amp;quot;and:&amp;quot;
echo &amp;quot; zpool detach rpool ${newdisk1}3&amp;quot;
echo &amp;quot;or whatever the missing device GUID is in zpool status -v&amp;quot;
echo &amp;quot;Then:&amp;quot;
echo &amp;quot; zpool clear rpool&amp;quot;
echo &amp;quot;If you are running this in VM, assign 3rd mirror disk to another VM before powering this instance back on&amp;quot; 
echo &amp;quot; you will need to give the other instance a new IP address, or just do not run the same boot image simultaneously&amp;quot;

#echo &amp;quot;Size before:&amp;quot;
#echo &amp;quot;$sizeb4&amp;quot;
#echo &amp;quot;Size after:&amp;quot;
#zpool list rpool

exit;&lt;/pre&gt;

&lt;p&gt;
Таблицы разделов:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;Device             Start       End   Sectors  Size Type
/dev/nvme0n1p1        34      2047      2014 1007K BIOS boot
/dev/nvme0n1p2      2048   2099199   2097152    1G EFI System
/dev/nvme0n1p3   2099200 167772160 165672961  119G ZFS&lt;/pre&gt;

&lt;p&gt;
Полезные ссылки:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://forum.proxmox.com/threads/replace-512gb-ssds-with-500gb-ssds.143077/&quot; class=&quot;urlextern&quot; title=&quot;https://forum.proxmox.com/threads/replace-512gb-ssds-with-500gb-ssds.143077/&quot; rel=&quot;ugc nofollow&quot;&gt;https://forum.proxmox.com/threads/replace-512gb-ssds-with-500gb-ssds.143077/&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://pve.proxmox.com/wiki/ZFS_on_Linux#sysadmin_zfs_change_failed_dev&quot; class=&quot;urlextern&quot; title=&quot;https://pve.proxmox.com/wiki/ZFS_on_Linux#sysadmin_zfs_change_failed_dev&quot; rel=&quot;ugc nofollow&quot;&gt;https://pve.proxmox.com/wiki/ZFS_on_Linux#sysadmin_zfs_change_failed_dev&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://pve.proxmox.com/wiki/Host_Bootloader#sysboot_proxmox_boot_tool&quot; class=&quot;urlextern&quot; title=&quot;https://pve.proxmox.com/wiki/Host_Bootloader#sysboot_proxmox_boot_tool&quot; rel=&quot;ugc nofollow&quot;&gt;https://pve.proxmox.com/wiki/Host_Bootloader#sysboot_proxmox_boot_tool&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://forum.proxmox.com/threads/fixing-uefi-boot.87719/&quot; class=&quot;urlextern&quot; title=&quot;https://forum.proxmox.com/threads/fixing-uefi-boot.87719/&quot; rel=&quot;ugc nofollow&quot;&gt;https://forum.proxmox.com/threads/fixing-uefi-boot.87719/&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
</description>
            <author>fireball@undisclosed.example.com (fireball)</author>
            <pubDate>Mon, 29 Dec 2025 10:10:53 +0000</pubDate>
        </item>
        <item>
            <title>OpenVPN и маршруты в клиентские сети - создано</title>
            <link>https://wiki.rtzra.ru/software/openvpn/openvpn-routes-to-client-network</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;openvpn_i_marshruty_v_klientskie_seti&quot;&gt;OpenVPN и маршруты в клиентские сети&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Иногда при использовании OpenVPN бывает необходимо попадать с сервера в клиентские сети. Например, к серверу OpenVPN подключается два клиента с подсетями 192.168.100.0/24 и 192.168.101.0/24 и с сервера необходимо добавить маршруты в подсети этих клиентов. Стандартными настройками это не делается, нужно прикручивать скрипты.
&lt;/p&gt;

&lt;p&gt;
Устанавливаем утилиту ipcalc:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;sudo apt install ipcalc&lt;/pre&gt;

&lt;p&gt;
Создаем скрипты /etc/openvpn/client-connect.sh и /etc/openvpn/client-disconnect.sh
&lt;/p&gt;

&lt;p&gt;
/etc/openvpn/client-connect.sh
&lt;/p&gt;
&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;co0&quot;&gt;#!/bin/bash&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# Скрипт выполняется при подключении каждого клиента&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# Логируем запуск&lt;/span&gt;
logger &lt;span class=&quot;re5&quot;&gt;-t&lt;/span&gt; openvpn &lt;span class=&quot;st0&quot;&gt;&amp;quot;Client &lt;span class=&quot;es2&quot;&gt;$common_name&lt;/span&gt; connected with IP &lt;span class=&quot;es2&quot;&gt;$ifconfig_pool_remote_ip&lt;/span&gt;&amp;quot;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# Проверяем CCD файл клиента&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-f&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;/etc/openvpn/ccd/&lt;span class=&quot;es2&quot;&gt;$common_name&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
    &lt;span class=&quot;co0&quot;&gt;# Ищем iroute директивы&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;re2&quot;&gt;IFS&lt;/span&gt;= &lt;span class=&quot;kw3&quot;&gt;read&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-r&lt;/span&gt; line; &lt;span class=&quot;kw1&quot;&gt;do&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es2&quot;&gt;$line&lt;/span&gt;&amp;quot;&lt;/span&gt; =~ ^iroute&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;:space:&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;+&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;-&lt;span class=&quot;nu0&quot;&gt;9&lt;/span&gt;\.&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;+&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;:space:&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;+&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;-&lt;span class=&quot;nu0&quot;&gt;9&lt;/span&gt;\.&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;+&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
            &lt;span class=&quot;re2&quot;&gt;network&lt;/span&gt;=&lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es3&quot;&gt;${BASH_REMATCH[1]}&lt;/span&gt;&amp;quot;&lt;/span&gt;
            &lt;span class=&quot;re2&quot;&gt;netmask&lt;/span&gt;=&lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es3&quot;&gt;${BASH_REMATCH[2]}&lt;/span&gt;&amp;quot;&lt;/span&gt;
&amp;nbsp;
            &lt;span class=&quot;co0&quot;&gt;# Конвертируем в CIDR&lt;/span&gt;
            &lt;span class=&quot;re2&quot;&gt;cidr&lt;/span&gt;=$&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;ipcalc &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es2&quot;&gt;$network&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es2&quot;&gt;$netmask&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;grep&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;Netmask&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;awk&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;print $4&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
            &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-n&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es2&quot;&gt;$cidr&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
                &lt;span class=&quot;co0&quot;&gt;# Добавляем маршрут на сервере&lt;/span&gt;
                &lt;span class=&quot;kw2&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;ip route&lt;/span&gt; add &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es2&quot;&gt;$network&lt;/span&gt;/&lt;span class=&quot;es2&quot;&gt;$cidr&lt;/span&gt;&amp;quot;&lt;/span&gt; via &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es2&quot;&gt;$ifconfig_pool_remote_ip&lt;/span&gt;&amp;quot;&lt;/span&gt; dev &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es2&quot;&gt;$dev&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;gt;/&lt;/span&gt;dev&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;null
&amp;nbsp;
                &lt;span class=&quot;co0&quot;&gt;# Логируем действие&lt;/span&gt;
                logger &lt;span class=&quot;re5&quot;&gt;-t&lt;/span&gt; openvpn &lt;span class=&quot;st0&quot;&gt;&amp;quot;Added route &lt;span class=&quot;es2&quot;&gt;$network&lt;/span&gt;/&lt;span class=&quot;es2&quot;&gt;$cidr&lt;/span&gt; via &lt;span class=&quot;es2&quot;&gt;$ifconfig_pool_remote_ip&lt;/span&gt; (client: &lt;span class=&quot;es2&quot;&gt;$common_name&lt;/span&gt;)&amp;quot;&lt;/span&gt;
&amp;nbsp;
                &lt;span class=&quot;co0&quot;&gt;# Выводим в лог OpenVPN&lt;/span&gt;
                &lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es4&quot;&gt;$(date)&lt;/span&gt;: Added route &lt;span class=&quot;es2&quot;&gt;$network&lt;/span&gt;/&lt;span class=&quot;es2&quot;&gt;$cidr&lt;/span&gt; via &lt;span class=&quot;es2&quot;&gt;$ifconfig_pool_remote_ip&lt;/span&gt; for client &lt;span class=&quot;es2&quot;&gt;$common_name&lt;/span&gt;&amp;quot;&lt;/span&gt;
            &lt;span class=&quot;kw1&quot;&gt;fi&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;fi&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;done&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;/etc/openvpn/ccd/&lt;span class=&quot;es2&quot;&gt;$common_name&lt;/span&gt;&amp;quot;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;fi&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw3&quot;&gt;exit&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
/etc/openvpn/client-disconnect.sh
&lt;/p&gt;
&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;co0&quot;&gt;#!/bin/bash&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# Скрипт выполняется при отключении клиента&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# Проверяем CCD файл клиента&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-f&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;/etc/openvpn/ccd/&lt;span class=&quot;es2&quot;&gt;$common_name&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;re2&quot;&gt;IFS&lt;/span&gt;= &lt;span class=&quot;kw3&quot;&gt;read&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-r&lt;/span&gt; line; &lt;span class=&quot;kw1&quot;&gt;do&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es2&quot;&gt;$line&lt;/span&gt;&amp;quot;&lt;/span&gt; =~ ^iroute&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;:space:&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;+&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;-&lt;span class=&quot;nu0&quot;&gt;9&lt;/span&gt;\.&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;+&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;:space:&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;+&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;-&lt;span class=&quot;nu0&quot;&gt;9&lt;/span&gt;\.&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;+&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
            &lt;span class=&quot;re2&quot;&gt;network&lt;/span&gt;=&lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es3&quot;&gt;${BASH_REMATCH[1]}&lt;/span&gt;&amp;quot;&lt;/span&gt;
            &lt;span class=&quot;re2&quot;&gt;netmask&lt;/span&gt;=&lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es3&quot;&gt;${BASH_REMATCH[2]}&lt;/span&gt;&amp;quot;&lt;/span&gt;
&amp;nbsp;
            &lt;span class=&quot;re2&quot;&gt;cidr&lt;/span&gt;=$&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;ipcalc &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es2&quot;&gt;$network&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es2&quot;&gt;$netmask&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;grep&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;Netmask&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;awk&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;print $4&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
            &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-n&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es2&quot;&gt;$cidr&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
                &lt;span class=&quot;co0&quot;&gt;# Удаляем маршрут&lt;/span&gt;
                &lt;span class=&quot;kw2&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;ip route&lt;/span&gt; del &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es2&quot;&gt;$network&lt;/span&gt;/&lt;span class=&quot;es2&quot;&gt;$cidr&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;gt;/&lt;/span&gt;dev&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;null
&amp;nbsp;
                &lt;span class=&quot;co0&quot;&gt;# Логируем&lt;/span&gt;
                logger &lt;span class=&quot;re5&quot;&gt;-t&lt;/span&gt; openvpn &lt;span class=&quot;st0&quot;&gt;&amp;quot;Removed route &lt;span class=&quot;es2&quot;&gt;$network&lt;/span&gt;/&lt;span class=&quot;es2&quot;&gt;$cidr&lt;/span&gt; (client: &lt;span class=&quot;es2&quot;&gt;$common_name&lt;/span&gt; disconnected)&amp;quot;&lt;/span&gt;
            &lt;span class=&quot;kw1&quot;&gt;fi&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;fi&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;done&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;/etc/openvpn/ccd/&lt;span class=&quot;es2&quot;&gt;$common_name&lt;/span&gt;&amp;quot;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;fi&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw3&quot;&gt;exit&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Так же необходимо добавить в конфиг OpenVPN несколько строк, которые добавят вызов скриптов при подключении/отключении клиента.
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;script-security 3  # или 2, если 3 не работает
client-connect /etc/openvpn/client-connect.sh
client-disconnect /etc/openvpn/client-disconnect.sh&lt;/pre&gt;

&lt;p&gt;
Добавляем в конфигурационный файл клиента:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;ifconfig-push 172.16.1.10 255.255.255.0
iroute 192.168.100.0 255.255.255.0&lt;/pre&gt;

&lt;p&gt;
172.16.1.10 - IP который будет назначен клиенту при подключении
&lt;/p&gt;

&lt;p&gt;
iroute 192.168.100.0 255.255.255.0 - добавляет адрес подсети клиента, который и будет добавляется в маршруты
&lt;/p&gt;

&lt;/div&gt;
</description>
            <author>fireball@undisclosed.example.com (fireball)</author>
            <pubDate>Fri, 26 Dec 2025 14:11:00 +0000</pubDate>
        </item>
        <item>
            <title>remotedesktopmanager_onfeuvtuue.png - создано</title>
            <link>https://wiki.rtzra.ru/?image=software%3A1c%3Aremotedesktopmanager_onfeuvtuue.png&amp;ns=software%3A1c&amp;do=media</link>
            <description>&lt;img src=&quot;https://wiki.rtzra.ru/_media/software/1c/remotedesktopmanager_onfeuvtuue.png?w=500&amp;amp;h=500&amp;amp;tok=6e80b7&quot; alt=&quot;remotedesktopmanager_onfeuvtuue.png&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;500&quot; /&gt;</description>
            <author>fireball@undisclosed.example.com (fireball)</author>
            <pubDate>Tue, 01 Apr 2025 09:23:48 +0000</pubDate>
        </item>
        <item>
            <title>remotedesktopmanager_kftgz6oedl.png - создано</title>
            <link>https://wiki.rtzra.ru/?image=software%3A1c%3Aremotedesktopmanager_kftgz6oedl.png&amp;ns=software%3A1c&amp;do=media</link>
            <description>&lt;img src=&quot;https://wiki.rtzra.ru/_media/software/1c/remotedesktopmanager_kftgz6oedl.png?w=500&amp;amp;h=500&amp;amp;tok=42b89b&quot; alt=&quot;remotedesktopmanager_kftgz6oedl.png&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;500&quot; /&gt;</description>
            <author>fireball@undisclosed.example.com (fireball)</author>
            <pubDate>Tue, 01 Apr 2025 09:19:04 +0000</pubDate>
        </item>
    </channel>
</rss>
