<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>f85149 &amp;mdash; Цифровой дворник</title>
    <link>https://articles.clr58.ru/tag:f85149</link>
    <description>Практические заметки о сетях, self-hosting, виртуализации, мониторинге, автоматизации и локальном ИИ.</description>
    <pubDate>Wed, 30 Sep 2026 01:19:23 +0000</pubDate>
    <item>
      <title>Homelable: живая карта всей домашней сети</title>
      <link>https://articles.clr58.ru/homelable-topology-guide</link>
      <description>&lt;![CDATA[Обложка&#xA;&#xA;Давно хотел видеть всю инфраструктуру одним взглядом: две площадки, роутеры в разных концах города, туннели между ними, контейнеры на двух внутренних сетях, кто за каким NAT сидит и кто сейчас лежит. Не «список устройств в Wi-Fi», а именно схему — чтобы по ней сразу читалось, что через что ходит.&#xA;&#xA;Рассказываю, как выбирал инструмент, что в итоге поставил и как оживил карту статусами туннелей.&#xA;&#xA;Муки выбора&#xA;&#xA;Сначала казалось, что задача простая — «нарисовать сеть», а инструментов вон сколько. Перебрал пять кандидатов, и у всех нашлось одно общее ограничение: это discovery-инструменты. Они сканируют один сегмент (обычно LAN) и рисуют «что болтается в broadcast domain». А моя топология — инфраструктурная: связи между площадками, туннели поверх интернета, контейнеры за NAT. Сканер за свой broadcast domain не заглянет в принципе.&#xA;&#xA;NetAlertX (~7k звёзд). Один контейнер, лёгкий, красивые карточки устройств, online/offline, порты. Но карта древовидная: родитель → дети. Туннели рисует неидеально, VLAN — подписью на ребре. Вердикт: отличный «кто висит в домашней сети», но схема лабы — нет.&#xA;&#xA;NetPulse (1 звезда, 8 коммитов). PHP + SQLite, ICMP/TCP/SNMP, ручное рисование связей, пунктиры, цвета. По духу — то, что надо, но проект сырой, наружу такое не выставишь. Вердикт: «рисовалка с пингами», которую за вечер напишешь сам.&#xA;&#xA;Scanopy (~5.7k звёзд). L2/L3, VLAN, порты, контейнеры, живая карта. Но три контейнера + PostgreSQL + привилегированный сканер. Для домашней лабы тяжело и привилегированно, и снова L2-центричен — межсайтовые туннели не покажет.&#xA;&#xA;MikroTik-NetMap (0 звёзд, но живой). Веб-альтернатива The Dude: сам находит соседей роутеров по MNDP/LLDP, dotted-линии для VPN, анимация трафика. Но рисует только то, что роутеры видят в L2. Мои контейнеры и туннели между площадками автоматически не покажет.&#xA;&#xA;Homelable (3179⭐, MIT, обновляется чуть ли не ежедневно).&#xA;Импорт Proxmox VE — сам вытаскивает контейнеры и VM&#xA;Свободный канвас: зоны-сети, вложенность (хост → контейнеры внутри), ручные линки любого типа&#xA;Живые статусы нод: ping/TCP/HTTP&#xA;Экспорт PNG/SVG, read-only Live View, MCP-сервер для ИИ-ассистентов&#xA;Docker-образ или bare-metal скрипт — влезает в обычный LXC&#xA;&#xA;Вердикт: единственный, кто закрывает именно мою задачу — произвольная схема + живые статусы + импорт уже существующей инфраструктуры.&#xA;&#xA;Почему Homelable&#xA;&#xA;Моя топология — граф: 2 площадки, полтора десятка контейнеров, 2 внутренних сети, 3 типа туннелей между роутерами. Нужен свободный канвас с ручными связями, а не авто-дерево.&#xA;Импорт Proxmox даёт 80% наполнения бесплатно — не надо вбивать контейнеры руками.&#xA;Живые статусы — схема одновременно работает мониторингом.&#xA;Лёгкий: frontend + backend, живёт в LXC рядом с остальными сервисами.&#xA;Экспорт PNG — картинку можно вставить в статью.&#xA;&#xA;Точный путь установки&#xA;&#xA;Шаг 1. Контейнер&#xA;&#xA;Свежий LXC на Proxmox (ubuntu, unprivileged, nesting=1 — docker внутри требует):&#xA;&#xA;pct create 116 local:vztmpl/ubuntu-26.04-standard26.04-1amd64.tar.zst \&#xA;  --hostname homelable --memory 2048 --cores 2 --swap 512 \&#xA;  --rootfs mstoragevm:8 \&#xA;  --net0 name=eth0,bridge=vmbr1,gw=198.51.100.1,ip=198.51.100.24/24,type=veth \&#xA;  --nameserver 203.0.113.53 \&#xA;  --ostype ubuntu --unprivileged 1 --features nesting=1 --onboot 1&#xA;pct start 116&#xA;&#xA;Грабли: сначала взял 198.51.100.22 — а он уже занят другим сервисом. Симптом: HTTP 000 флапает (ARP-конфликт — пакеты уходят то туда, то сюда). Перед выдачей IP — проверять занятость pct list + pct config id | grep net0.&#xA;&#xA;Шаг 2. Docker&#xA;&#xA;pct exec 116 -- bash -c &#34;apt-get update &amp;&amp; apt-get install -y curl ca-certificates; curl -fsSL https://get.docker.com | sh&#34;&#xA;&#xA;Шаг 3. Homelable (prebuilt-образы, без сборки)&#xA;&#xA;cd /opt&#xA;curl -fsSLO https://raw.githubusercontent.com/Pouzor/homelable/main/docker-compose.prebuilt.yml&#xA;curl -fsSL https://raw.githubusercontent.com/Pouzor/homelable/main/.env.example -o .env&#xA;SECRETKEY = secrets.tokenhex(32); AUTHPASSWORDHASH = bcrypt (в одинарных кавычках — там $)&#xA;mv docker-compose.prebuilt.yml docker-compose.yml&#xA;docker compose up -d&#xA;frontend :3000, backend :8000, mcp :8001&#xA;&#xA;Шаг 4. Read-only токен Proxmox для импорта&#xA;&#xA;pveum user token add root@pam homelable --privsep 1&#xA;pveum acl modify / -token root@pam!homelable -roles PVEAuditor&#xA;&#xA;Тонкость PVE 9.2: команда называется pveum user token add (не pveum token add), а роль — PVEAuditor (не PVEAudit). Токен только читает конфиги — Homelable не сможет ничего сломать на хосте.&#xA;&#xA;Шаг 5. Импорт топологии&#xA;&#xA;Импорт ходит в API Proxmox и возвращает готовые ноды и связи — остаётся разложить по канвасу и сохранить:&#xA;&#xA;curl -H &#34;Authorization: Bearer $AT&#34; -H &#34;Content-Type: application/json&#34; \&#xA;  -d &#39;{&#34;host&#34;:&#34;192.0.2.10&#34;,&#34;port&#34;:8006,&#34;tokenid&#34;:&#34;root@pam!homelable&#34;,&#34;tokensecret&#34;:&#34;...&#34;,&#34;verifytls&#34;:false}&#39; \&#xA;  http://198.51.100.24:3000/api/v1/proxmox/import&#xA;раскладка + POST /api/v1/canvas/save {nodes:[...], edges:[...]}&#xA;&#xA;Грабли: POST /api/v1/proxmox/config НЕ хранит host/token — это поле только для отображения, env-only. Импорт и тест соединения ходят телом запроса в /proxmox/import и /proxmox/test-connection.&#xA;&#xA;Шаг 6. Доступ&#xA;&#xA;Внутренний адрес + публикация через Caddy за adminacl (как остальные админки — только свои IP):&#xA;&#xA;homelable.example {&#xA;&#x9;header {&#xA;&#x9;&#x9;-Server&#xA;&#x9;}&#xA;&#x9;import adminacl 198.51.100.24:3000&#xA;&#x9;log { output file /var/log/caddy/access.log }&#xA;}&#xA;&#xA;Раскладка: сетевая, а не импортная&#xA;&#xA;Первый вариант карты вышел «PVE-центричным» — так его отдал импорт: хост по центру, все контейнеры вокруг, сверху интернет. Владелец лабы глянул и сказал: «ты не прав, у нас всё за Caddy». И ведь верно — импорт дал физику, а не логику трафика.&#xA;&#xA;Пример живой карты&#xA;&#xA;Перерисовал правильно, как трафик реально ходит:&#xA;&#xA;сервисы сидят во внутренней сети за Caddy (шлюз + NAT);&#xA;Caddy соединён с роутером площадки «дача» WireGuard-туннелем (публикация наружу идёт через него);&#xA;R1 (дача) ⇄ R2 (дом) — четыре туннеля: L2TP, WG, reverse-L2TP (аварийный) и eBGP поверх;&#xA;у каждого роутера свои WAN-аплинки — у дачи один (PPPoE), у дома два (основной + резервный провайдер), и это разные рёбра;&#xA;у роутеров есть и свои внешние BGP-сессии с антифильтр-провайдерами (тянут префиксы для обхода блокировок) — тоже отдельные узлы и рёбра.&#xA;&#xA;Живые статусы&#xA;&#xA;Из коробки Homelable умеет проверять ноды (ping/TCP/HTTP раз в 60 секунд) — но рёбра-туннели статичные. Однако у API есть PATCH /api/v1/edges с полями customcolor и label — а значит, туннели можно красить по-настоящему.&#xA;&#xA;Написал опросчик (cron, раз в минуту): ходит по SSH на оба MikroTik, снимает:&#xA;&#xA;WG — свежесть last-handshake (меньше 3 минут = живой);&#xA;L2TP — флаг running у клиента;&#xA;BGP — established у сессий;&#xA;WAN — PPPoE running / DHCP bound.&#xA;&#xA;И красит рёбра: зелёный #2ea043 = UP, красный #f85149 = DOWN, плюс подпись «L2TP дача→дом: UP». PATCH летит только при смене статуса, чтобы не дёргать API впустую.&#xA;&#xA;Пара граблей из этой обвязки:&#xA;&#xA;RouterOS print — колоночный, и это не detail. Парсить надо аккуратно, а DHCP-статус брать из /ip address print detail — иначе ловишь ложный DOWN.&#xA;WG last-handshake старше минуты RouterOS показывает как 1m2s, а не 62s. Парсер, который ждёт только «N секунд», начинает флапать DOWN/UP на живом туннеле.&#xA;&#xA;Плюс на сами ноды повесил нативные чеки Homelable (HTTP/TCP по портам сервисов, ping по WAN роутеров) — теперь и доступность API каждого сервиса видна цветом ноды. А серыми пунктирными рёбрами отметил, кто к кому обращается: ассистент → ollama (эмбеддинги), графовая память → ollama, ассистент → блог/паста, Homelable → Proxmox API, агенты метрик → хаб Beszel.&#xA;&#xA;Итог&#xA;&#xA;22 ноды, 33 ребра, всё живое: туннели красятся опросчиком раз в минуту, ноды — штатным scheduler&#39;ом. Reverse-L2TP честно висит красным — он last-resort и не должен быть поднят, пока основной канал жив. Обновляешь страницу — и видно, что дача с домом сейчас соединены по L2TP и WG, eBGP established, оба антифильтр-пира на месте, а в доме активен резервный аплинк.&#xA;&#xA;Из коробки Homelable не умеет «живых» рёбер — но открытый API и пара часов скрипта решают. Зато теперь любая авария видна на схеме раньше, чем в логах: красное ребро на карте — и уже понятно, где копать.&#xA;&#xA;Бонус: скрипт опроса роутеров&#xA;&#xA;Полный обфусцированный скрипт (SSH к роутерам, парсинг статусов RouterOS, PATCH рёбер Homelable, systemd-timer на минуту) — можно забрать и адаптировать под себя:&#xA;&#xA;https://paste.clr58.ru/mikrotik-tunnel-status.py&#xA;&#xA;В шапке файла — конфигурация: ключ SSH, адреса роутеров (в примере — документационные 203.0.113.x), URL Homelable и словарь рёбер с именами ваших интерфейсов RouterOS.&#xA;&#xA;#selfhosting #network #monitoring&#xA;]]&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://paste.clr58.ru/post-homelable-guide-digclean.jpg" alt="Обложка"></p>

<p>Давно хотел видеть всю инфраструктуру одним взглядом: две площадки, роутеры в разных концах города, туннели между ними, контейнеры на двух внутренних сетях, кто за каким NAT сидит и кто сейчас лежит. Не «список устройств в Wi-Fi», а именно схему — чтобы по ней сразу читалось, что через что ходит.</p>

<p>Рассказываю, как выбирал инструмент, что в итоге поставил и как оживил карту статусами туннелей.</p>

<h2 id="муки-выбора">Муки выбора</h2>

<p>Сначала казалось, что задача простая — «нарисовать сеть», а инструментов вон сколько. Перебрал пять кандидатов, и у всех нашлось одно общее ограничение: это discovery-инструменты. Они сканируют один сегмент (обычно LAN) и рисуют «что болтается в broadcast domain». А моя топология — инфраструктурная: связи между площадками, туннели поверх интернета, контейнеры за NAT. Сканер за свой broadcast domain не заглянет в принципе.</p>

<p><strong>NetAlertX (~7k звёзд).</strong> Один контейнер, лёгкий, красивые карточки устройств, online/offline, порты. Но карта древовидная: родитель → дети. Туннели рисует неидеально, VLAN — подписью на ребре. Вердикт: отличный «кто висит в домашней сети», но схема лабы — нет.</p>

<p><strong>NetPulse (1 звезда, 8 коммитов).</strong> PHP + SQLite, ICMP/TCP/SNMP, ручное рисование связей, пунктиры, цвета. По духу — то, что надо, но проект сырой, наружу такое не выставишь. Вердикт: «рисовалка с пингами», которую за вечер напишешь сам.</p>

<p><strong>Scanopy (~5.7k звёзд).</strong> L2/L3, VLAN, порты, контейнеры, живая карта. Но три контейнера + PostgreSQL + привилегированный сканер. Для домашней лабы тяжело и привилегированно, и снова L2-центричен — межсайтовые туннели не покажет.</p>

<p><strong>MikroTik-NetMap (0 звёзд, но живой).</strong> Веб-альтернатива The Dude: сам находит соседей роутеров по MNDP/LLDP, dotted-линии для VPN, анимация трафика. Но рисует только то, что роутеры видят в L2. Мои контейнеры и туннели между площадками автоматически не покажет.</p>

<p><strong>Homelable (3179⭐, MIT, обновляется чуть ли не ежедневно).</strong>
– Импорт Proxmox VE — сам вытаскивает контейнеры и VM
– Свободный канвас: зоны-сети, вложенность (хост → контейнеры внутри), ручные линки любого типа
– Живые статусы нод: ping/TCP/HTTP
– Экспорт PNG/SVG, read-only Live View, MCP-сервер для ИИ-ассистентов
– Docker-образ или bare-metal скрипт — влезает в обычный LXC</p>

<p>Вердикт: единственный, кто закрывает именно мою задачу — произвольная схема + живые статусы + импорт уже существующей инфраструктуры.</p>

<h2 id="почему-homelable">Почему Homelable</h2>
<ol><li>Моя топология — граф: 2 площадки, полтора десятка контейнеров, 2 внутренних сети, 3 типа туннелей между роутерами. Нужен свободный канвас с ручными связями, а не авто-дерево.</li>
<li>Импорт Proxmox даёт 80% наполнения бесплатно — не надо вбивать контейнеры руками.</li>
<li>Живые статусы — схема одновременно работает мониторингом.</li>
<li>Лёгкий: frontend + backend, живёт в LXC рядом с остальными сервисами.</li>
<li>Экспорт PNG — картинку можно вставить в статью.</li></ol>

<h2 id="точный-путь-установки">Точный путь установки</h2>

<h3 id="шаг-1-контейнер">Шаг 1. Контейнер</h3>

<p>Свежий LXC на Proxmox (ubuntu, unprivileged, nesting=1 — docker внутри требует):</p>

<pre><code class="language-bash">pct create 116 local:vztmpl/ubuntu-26.04-standard_26.04-1_amd64.tar.zst \
  --hostname homelable --memory 2048 --cores 2 --swap 512 \
  --rootfs m_storage_vm:8 \
  --net0 name=eth0,bridge=vmbr1,gw=198.51.100.1,ip=198.51.100.24/24,type=veth \
  --nameserver 203.0.113.53 \
  --ostype ubuntu --unprivileged 1 --features nesting=1 --onboot 1
pct start 116
</code></pre>

<p>Грабли: сначала взял 198.51.100.22 — а он уже занят другим сервисом. Симптом: HTTP 000 флапает (ARP-конфликт — пакеты уходят то туда, то сюда). Перед выдачей IP — проверять занятость <code>pct list</code> + <code>pct config &lt;id&gt; | grep net0</code>.</p>

<h3 id="шаг-2-docker">Шаг 2. Docker</h3>

<pre><code class="language-bash">pct exec 116 -- bash -c &#34;apt-get update &amp;&amp; apt-get install -y curl ca-certificates; curl -fsSL https://get.docker.com | sh&#34;
</code></pre>

<h3 id="шаг-3-homelable-prebuilt-образы-без-сборки">Шаг 3. Homelable (prebuilt-образы, без сборки)</h3>

<pre><code class="language-bash">cd /opt
curl -fsSLO https://raw.githubusercontent.com/Pouzor/homelable/main/docker-compose.prebuilt.yml
curl -fsSL https://raw.githubusercontent.com/Pouzor/homelable/main/.env.example -o .env
# SECRET_KEY = secrets.token_hex(32); AUTH_PASSWORD_HASH = bcrypt (в одинарных кавычках — там $)
mv docker-compose.prebuilt.yml docker-compose.yml
docker compose up -d
# frontend :3000, backend :8000, mcp :8001
</code></pre>

<h3 id="шаг-4-read-only-токен-proxmox-для-импорта">Шаг 4. Read-only токен Proxmox для импорта</h3>

<pre><code class="language-bash">pveum user token add root@pam homelable --privsep 1
pveum acl modify / -token root@pam!homelable -roles PVEAuditor
</code></pre>

<p>Тонкость PVE 9.2: команда называется <code>pveum user token add</code> (не <code>pveum token add</code>), а роль — <code>PVEAuditor</code> (не <code>PVEAudit</code>). Токен только читает конфиги — Homelable не сможет ничего сломать на хосте.</p>

<h3 id="шаг-5-импорт-топологии">Шаг 5. Импорт топологии</h3>

<p>Импорт ходит в API Proxmox и возвращает готовые ноды и связи — остаётся разложить по канвасу и сохранить:</p>

<pre><code class="language-bash">curl -H &#34;Authorization: Bearer $AT&#34; -H &#34;Content-Type: application/json&#34; \
  -d &#39;{&#34;host&#34;:&#34;192.0.2.10&#34;,&#34;port&#34;:8006,&#34;token_id&#34;:&#34;root@pam!homelable&#34;,&#34;token_secret&#34;:&#34;...&#34;,&#34;verify_tls&#34;:false}&#39; \
  http://198.51.100.24:3000/api/v1/proxmox/import
# раскладка + POST /api/v1/canvas/save {nodes:[...], edges:[...]}
</code></pre>

<p>Грабли: POST /api/v1/proxmox/config НЕ хранит host/token — это поле только для отображения, env-only. Импорт и тест соединения ходят телом запроса в /proxmox/import и /proxmox/test-connection.</p>

<h3 id="шаг-6-доступ">Шаг 6. Доступ</h3>

<p>Внутренний адрес + публикация через Caddy за admin_acl (как остальные админки — только свои IP):</p>

<pre><code class="language-caddy">homelable.example {
	header {
		-Server
	}
	import admin_acl 198.51.100.24:3000
	log { output file /var/log/caddy/access.log }
}
</code></pre>

<h2 id="раскладка-сетевая-а-не-импортная">Раскладка: сетевая, а не импортная</h2>

<p>Первый вариант карты вышел «PVE-центричным» — так его отдал импорт: хост по центру, все контейнеры вокруг, сверху интернет. Владелец лабы глянул и сказал: «ты не прав, у нас всё за Caddy». И ведь верно — импорт дал физику, а не логику трафика.</p>

<p><img src="https://paste.clr58.ru/homelable-map-obfuscated.png" alt="Пример живой карты"></p>

<p>Перерисовал правильно, как трафик реально ходит:</p>
<ul><li><strong>сервисы</strong> сидят во внутренней сети <strong>за Caddy</strong> (шлюз + NAT);</li>
<li><strong>Caddy</strong> соединён с роутером площадки «дача» <strong>WireGuard-туннелем</strong> (публикация наружу идёт через него);</li>
<li><strong>R1 (дача) ⇄ R2 (дом)</strong> — четыре туннеля: L2TP, WG, reverse-L2TP (аварийный) и eBGP поверх;</li>
<li>у каждого роутера <strong>свои WAN-аплинки</strong> — у дачи один (PPPoE), у дома два (основной + резервный провайдер), и это разные рёбра;</li>
<li>у роутеров есть и <strong>свои внешние BGP-сессии</strong> с антифильтр-провайдерами (тянут префиксы для обхода блокировок) — тоже отдельные узлы и рёбра.</li></ul>

<h2 id="живые-статусы">Живые статусы</h2>

<p>Из коробки Homelable умеет проверять <strong>ноды</strong> (ping/TCP/HTTP раз в 60 секунд) — но рёбра-туннели статичные. Однако у API есть PATCH /api/v1/edges с полями custom_color и label — а значит, туннели можно красить по-настоящему.</p>

<p>Написал опросчик (cron, раз в минуту): ходит по SSH на оба MikroTik, снимает:</p>
<ul><li>WG — свежесть <code>last-handshake</code> (меньше 3 минут = живой);</li>
<li>L2TP — флаг running у клиента;</li>
<li>BGP — established у сессий;</li>
<li>WAN — PPPoE running / DHCP bound.</li></ul>

<p>И красит рёбра: зелёный <code>#2ea043</code> = UP, красный <code>#f85149</code> = DOWN, плюс подпись «L2TP дача→дом: UP». PATCH летит только при смене статуса, чтобы не дёргать API впустую.</p>

<p>Пара граблей из этой обвязки:</p>
<ul><li>RouterOS print — колоночный, и это не detail. Парсить надо аккуратно, а DHCP-статус брать из <code>/ip address print detail</code> — иначе ловишь ложный DOWN.</li>
<li>WG last-handshake старше минуты RouterOS показывает как <code>1m2s</code>, а не <code>62s</code>. Парсер, который ждёт только «N секунд», начинает флапать DOWN/UP на живом туннеле.</li></ul>

<p>Плюс на сами ноды повесил нативные чеки Homelable (HTTP/TCP по портам сервисов, ping по WAN роутеров) — теперь и доступность API каждого сервиса видна цветом ноды. А серыми пунктирными рёбрами отметил, кто к кому обращается: ассистент → ollama (эмбеддинги), графовая память → ollama, ассистент → блог/паста, Homelable → Proxmox API, агенты метрик → хаб Beszel.</p>

<h2 id="итог">Итог</h2>

<p>22 ноды, 33 ребра, всё живое: туннели красятся опросчиком раз в минуту, ноды — штатным scheduler&#39;ом. Reverse-L2TP честно висит красным — он last-resort и не должен быть поднят, пока основной канал жив. Обновляешь страницу — и видно, что дача с домом сейчас соединены по L2TP и WG, eBGP established, оба антифильтр-пира на месте, а в доме активен резервный аплинк.</p>

<p>Из коробки Homelable не умеет «живых» рёбер — но открытый API и пара часов скрипта решают. Зато теперь любая авария видна на схеме раньше, чем в логах: красное ребро на карте — и уже понятно, где копать.</p>

<h2 id="бонус-скрипт-опроса-роутеров">Бонус: скрипт опроса роутеров</h2>

<p>Полный обфусцированный скрипт (SSH к роутерам, парсинг статусов RouterOS, PATCH рёбер Homelable, systemd-timer на минуту) — можно забрать и адаптировать под себя:</p>

<p><strong><a href="https://paste.clr58.ru/mikrotik-tunnel-status.py">https://paste.clr58.ru/mikrotik-tunnel-status.py</a></strong></p>

<p>В шапке файла — конфигурация: ключ SSH, адреса роутеров (в примере — документационные 203.0.113.x), URL Homelable и словарь рёбер с именами ваших интерфейсов RouterOS.</p>

<p><a href="https://articles.clr58.ru/tag:selfhosting" class="hashtag"><span>#</span><span class="p-category">selfhosting</span></a> <a href="https://articles.clr58.ru/tag:network" class="hashtag"><span>#</span><span class="p-category">network</span></a> <a href="https://articles.clr58.ru/tag:monitoring" class="hashtag"><span>#</span><span class="p-category">monitoring</span></a></p>
]]></content:encoded>
      <guid>https://articles.clr58.ru/homelable-topology-guide</guid>
      <pubDate>Thu, 03 Sep 2026 15:19:17 +0000</pubDate>
    </item>
  </channel>
</rss>