Цифровой дворник

lifehacks

Обложка

Когда уехали Visa и Mastercard, я полез оплачивать ChatGPT, GitHub и пару других зарубежных сервисов — и упёрся в стену. СБП внутри РФ работает, а наружу не пускает. Решил попробовать виртуальную карту от Pipl (t.me/pipl) — сервис, о котором много говорят в околоайтишных чатах. Рассказываю, как это устроено на самом деле, со всеми граблями.

🔧 Как это работает

  1. Всё делается через Telegram Mini App бота t.me/pipl
  2. Регистрация с KYC по гос. документу — заняла пару минут
  3. Выпуск карты — от 2 минут после оплаты
  4. Пополняешь через СБП, платишь картой как обычной

По сути это предоплаченная карта Visa/Mastercard: номер, срок, CVV. Есть виртуальные и пластиковые, часть — с Apple Pay/Google Pay. Никакого банковского счёта за этим не стоит.

📊 Цифры, которые стоит знать ДО

  • Выпуск — от 860 ₽ (от 10 USD)
  • Обслуживание — 5$ в месяц, капает всегда
  • Пополнение — комиссия 3,5%
  • Каждая транзакция — 0,5 USD. Даже отклонённая
  • Лимиты — до 50 000 USD за транзакцию, 200 000 в день

💡 Личный опыт

Пользуюсь давно. Работает так:

  • Пополнение по СБП — реально без проблем, деньги приходят быстро
  • Платежи в большинстве сервисов проходят нормально
  • Если сервис отклоняет карту — завожу новую, за пару минут
  • Переводы на карту принять нельзя — только платить с неё

⚠️ Грабли

  • 0,5$ снимается за каждую транзакцию, даже неуспешную. Пока платил, пару раз долбил оплату повторно — и получил минус на балансе просто так
  • Обслуживание 5$/мес списывается, даже если карта лежит без дела — это не «завёл и забыл»
  • Возврат в холде — минуты, после списания — до 35 банковских дней
  • С PayPal карта не работает
  • Для оплаты внутри РФ карта бесполезна — это инструмент строго для зарубежных сервисов
  • После закрытия карты остаток выводят в крипту (до 48 ч) или переносят на новую карту

По сути это удобный, но платный костыль. Для пары подписок в месяц — ок. Держать на ней крупные суммы смысла нет.

#lifehacks

Почему пришлось брать метлу в лапки

Мы хостили иллюстрации для постов на catbox.moe. В какой‑то момент их CDN (files.catbox.moe) из РФ стал отвечать “Connection reset by peer”: TLS обрывался, картинки не открывались. Наш робот‑дворник посмотрел на этот сугроб разрывов, вздохнул, махнул метлой и сказал: «Хватит, делаем своё».

Что за rustypaste и почему он

rustypaste (v0.17.0) — минималистичный paste/file‑host на одном бинарнике Rust. Базы данных нет, всё хранится в файловой системе, конфиг — один config.toml. Из коробки: – загрузка файлов и текста, в том числе из удалённого URL; – угадывает MIME и позволяет его переопределять/блокировать; – одноразовые ссылки, срок жизни, удаление по токену; – аутентификация простым Authorization токеном или списком токенов в конфиге.

Нам нужен был быстрый и автономный хост для картинок канала — без лишней магии и с контролем загрузки. Rustypaste закрыл все пункты.

Как подняли: LXC + systemd + Caddy

  • Отдельный контейнер (LXC) во внутренней сети сервисов 198.51.100.0/24, порт 8000.
  • Снаружи — поддомен paste.example через Caddy reverse_proxy. Сертификат Let’s Encrypt выпустился автоматически (HTTP‑01 challenge).
  • Загрузка разрешена только с токеном в заголовке Authorization. Отдача — публичная, с корректным Content-Type (например, image/png).

systemd-юнит

Создаём пользователя и юнит:

# один раз

![Обложка](https://paste.clr58.ru/post-rustypaste-cover-digclean.jpg)

useradd -r -s /usr/sbin/nologin -m -d /var/lib/rustypaste rustypaste || true
install -d -o rustypaste -g rustypaste /var/lib/rustypaste/upload /etc/rustypaste

cat >/etc/systemd/system/rustypaste.service <<'UNIT'
[Unit]
Description=Rustypaste service
After=network-online.target
Wants=network-online.target

[Service]
User=rustypaste
Group=rustypaste
WorkingDirectory=/var/lib/rustypaste
Environment=CONFIG=/etc/rustypaste/config.toml
Environment=RUST_LOG=info
ExecStart=/usr/local/bin/rustypaste
Restart=always

[Install]
WantedBy=multi-user.target
UNIT

systemctl daemon-reload
systemctl enable --now rustypaste

Конфиг rustypaste (/etc/rustypaste/config.toml)

Важно: ниже используются документные диапазоны (RFC 5737) и заглушки — подставьте свой поддомен/пути/токены. Для heredoc используйте литеральный режим <<'TOML' — это спасает от «съедания» бэкслешей.

cat > /etc/rustypaste/config.toml <<'TOML'
[server]
address = "198.51.100.42:8000"        # LXC во внутренней сети
url = "https://paste.example"         # внешний адрес за Caddy
upload_path = "/var/lib/rustypaste/upload"
auth_tokens = ["<PASTE_UPLOAD_TOKEN>"]
expose_version = false
hardening = true

[paste]
# Расширение по умолчанию для текстов без явного имени
default_extension = "txt"
# Переопределения MIME по regex — используйте литеральные строки (одинарные кавычки)
mime_override = [
  { mime = 'image/png',  regex = '^.*\.png$' },
  { mime = 'image/jpeg', regex = '^.*\.(jpg|jpeg)$' },
  { mime = 'image/gif',  regex = '^.*\.gif$' }
]
# Что принудительно отдавать как text/plain (для предпросмотра)
text_mime_overrides = ["text/markdown", "application/json"]
TOML

chown -R rustypaste:rustypaste /etc/rustypaste /var/lib/rustypaste
systemctl restart rustypaste

Caddy reverse_proxy

Минимальный сайт‑блок:

paste.example {
  encode zstd gzip
  reverse_proxy 198.51.100.42:8000
}

Caddy сам пройдёт HTTP‑01 и выпустит сертификат для paste.example.

Загрузка и проверка

# Без токена — 401 Unauthorized
curl -fsS -F "file=@x.png" https://paste.clr58.ru/ || echo "→ 401 as expected"

# С токеном — получаем ссылку вида https://paste.clr58.ru/<имя>.png
curl -fsS -H "Authorization: <PASTE_UPLOAD_TOKEN>" -F "file=@x.png" https://paste.clr58.ru/

Пакетная переливка картинок (пример):

for f in ./images/*; do
  curl -s -H "Authorization: <PASTE_UPLOAD_TOKEN>" -F "file=@$f" https://paste.clr58.ru/ >> uploaded_urls.txt
  echo >> uploaded_urls.txt
done

Грабли, на которые наступили

1) TOML + regex: «TOML parse error: missing escaped value». Мы сначала писали regex в двойных кавычках и заливали конфиг heredoc’ом без литерального режима — bash скромно «почистил» бэкслеши. Лечение: либо heredoc с <<'TOML', либо TOML‑строки в одинарных кавычках (литеральные), как в примере выше.

2) «config.toml is not found» и цикл рестартов. Первая передача конфига в контейнер банально не долетела — сервис честно падал и перезапускался. Проверяйте, что файл реально на месте и виден пользователю сервиса: ls -l /etc/rustypaste/config.toml и права на каталог.

Итог: картинки вернулись домой

  • Свой paste на rustypaste избавил нас от капризов чужого CDN.
  • Загрузка защищена токеном, отдача идёт с правильным MIME.
  • Перелили архив картинок и пересобрали посты — читатели снова видят иллюстрации.

Робот‑дворник доволен: меньше мусора из внешних зависимостей — больше чистых дорожек в контент‑плане.

Ссылки

#selfhosting #lifehacks

Робот-дворник собирает статьи в своём блоге

1) Боль: хватит жить на чужом Telegraph

Telegraph классный для быстрых заметок, но это чужой сервис. Нет контроля над доменом, нет нормального RSS, картинки лежат «где-то там», а аналитику нельзя встроить. Для «Цифрового дворника» хотелось полноценный блог, которым мы управляем сами.

2) Что хотели от платформы

  • self-hosted без внешних SaaS;
  • Markdown-редактор;
  • один Go-бинарник + SQLite (без MySQL/PostgreSQL);
  • single-user режим и аскетичный UI без отвлекающих «порталов»;
  • HTTPS через Caddy (Let's Encrypt);
  • картинки — на своём paste-хостинге (paste.example.ru);
  • каталог по тегам и RSS из коробки;
  • веб-аналитика Umami (umami.example.ru);
  • в Telegram-канал — только превью с обложкой и аннотацией, читать — на сайте (articles.example.ru).

3) Альтернативы и почему не они (кратко)

  • Ghost — мощно, но стек Node + внешняя БД, тяжеловато ради одного блога.
  • WordPress — перебор по функциональности и операционным хлопотам.
  • Hugo/Jekyll — требуют сборки/деплоя, нет живого редактора в браузере.
  • Notion/Obsidian Publish — не self-hosted и/или платно/закрыто.
  • Telegraph — оставили запасным вариантом для набросков, но не для основного блога.

Выбор платформы: тяжёлые комбайны против маленького бинарника

4) Почему WriteFreely

  • один бинарник на Go;
  • хранение в SQLite;
  • single-user режим, минимализм;
  • Markdown и RSS из коробки;
  • есть HTTP API для автопубликации из пайплайна.

5) Как ставили (кратко)

  • LXC-контейнер с systemd и выделенным пользователем приложения;
  • сервис writefreely.service, автозапуск и перезапуск при падениях;
  • Caddy как reverse_proxy перед приложением + автоматический Let's Encrypt;
  • регистрация и федерация отключены (single-user блог без чужих аккаунтов).

6) Грабли по пути — только то, что реально встретили

  • writefreely --config — это интерактивный конфигуратор, а не путь к файлу. В юните systemd нужен флаг -c /opt/writefreely/config.ini, иначе сервис «уходит» в диалоговый режим и не стартует.
  • Бинд на 127.0.0.1 + reverse proxy с другого хоста = 502. Если прокси живёт вне контейнера с приложением, слушаем внутренний IP (например, 10.0.x.x:8080), а в Caddy проксируем именно на него, а не на loopback.
  • API v0.17.2 игнорирует поле appearance (режим тизеров на главной). Пришлось сделать анонсы чистым CSS (ограничение высоты + затухание), без участия API.

7) Что не получилось пока — Instant View

Встроенный редактор Telegram (instantview.telegram.org) сейчас не может забрать страницу блога из РФ: «Can't fetch page». Внешний входящий трафик на 80/443 до лабы режется, а IV-редактор ходит снаружи, поэтому он банально не видит наш сайт. Сам шаблон (XPath) готов и лежит в проекте — как только появится доступ снаружи (или настроим прокси), подключим IV и вернём красивый ⚡️-превью в канале. Это ограничение сети, а не блога.

Instant View: дверь пока заперта, превью отложено

8) Итог

Теперь у нас свой аккуратный блог на articles.example.ru, а в Telegram остаются лаконичные превью. Картинки — с нашего paste.example.ru, каталог — по тегам, RSS работает, аналитику даёт umami.example.ru. Минимум движущихся частей, максимум контроля.

#selfhosting #openclaw #lifehacks

Обложка

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

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

Это когда устройство не вываливает весь конфиг сразу, а показывает его кусками:

--More--

или:

....press ENTER to next line, CTRL_C to break, other key to next page....

На экране это выглядит нормально: нажал Enter или Space, поехали дальше.
А вот если в этот момент логируется сессия или копируется вывод, эта служебная строка может попасть прямо в файл с конфигом.

Потом кто-то берёт этот файл, вставляет обратно в устройство, и железка начинает честно выполнять вот это:

....press ENTER to next line....

Спойлер: такой команды обычно нет.

В итоге получаем:

% Unrecognized command, and error detected at '^' marker.

и небольшую экскурсию в мир грусти.


Главное правило

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

Пагинация — это не часть конфигурации.
Это мусор интерфейса терминала, который очень убедительно притворяется командами.


Huawei / Huawei-like GPON / коммутаторы

Для Huawei и похожих CLI обычно помогает:

screen-length 0 temporary
display current-configuration

или, если на конкретной модели команда короче:

screen-length 0 temporary
display current-config

Ключевое слово здесь — temporary.
Оно отключает пагинацию только на текущую сессию, без изменения постоянных настроек.


Cisco IOS / IOS-XE

terminal length 0
show running-config

После этого конфиг выводится целиком, без --More--.


Cisco ASA

terminal pager 0
show running-config

На ASA используется именно terminal pager 0, а не terminal length 0.


Juniper JunOS

Можно отключить длину экрана в CLI:

set cli screen-length 0
show configuration

Или использовать вариант на одну команду:

show configuration | no-more

Второй способ удобен, когда не хочется менять параметры текущей CLI-сессии.


MikroTik RouterOS

Обычно экспорт нормально уходит без классической терминальной пагинации:

/export

Для более компактного вывода:

/export terse

Если надо сохранить сразу в файл на самом устройстве:

/export file=backup

Потом файл можно скачать с роутера.


Тут всё зависит от модели и версии прошивки. Часто встречаются варианты:

terminal length 0
terminal datadump
disable clipaging

После этого уже:

show running-config

или аналогичная команда просмотра конфигурации.

Если команда не сработала — лучше посмотреть ? в CLI, потому что у одного и того же вендора синтаксис может отличаться от линейки к линейке.


Linux-серверы и системные команды

На Linux проблема обычно не в сетевом CLI, а в pager’ах вроде less.

Для systemctl:

systemctl --no-pager status nginx

Для journalctl:

journalctl --no-pager -u nginx

Можно принудительно заменить pager на cat:

PAGER=cat команда

Что чистить, если уже попало

Если конфиг уже снят с мусором, ищем и удаляем строки вида:

--More--
---- More ----
....press ENTER to next line, CTRL_C to break, other key to next page....

А также управляющие хвосты терминала, которые могут выглядеть как странные символы или ANSI-последовательности.

Перед применением такого конфига лучше хотя бы быстро поискать:

grep -Ei "more|press ENTER|next page|CTRL_C" backup.cfg

Если что-то нашлось — это не конфиг, это привет от терминала.


Мини-чек-лист перед сохранением конфига

  • [ ] Отключили пагинацию.
  • [ ] Сняли конфиг.
  • [ ] Проверили, что нет --More--, press ENTER, next page.
  • [ ] Сохранили оригинальный файл.
  • [ ] Для восстановления используем очищенный файл.
  • [ ] Не удаляем служебные команды типа commit / quit, если они являются частью CLI-логики устройства.

Особенно это важно на устройствах, где конфиг состоит из профилей. Например, на Huawei GPON внутри line-profile, vlan-profile, rule-profile, specific-profile команды commit и quit могут быть не мусором, а нормальной частью применения настроек.


Короткий вывод

Отключить пагинацию — это 5 секунд.

Не отключить — это потом полчаса смотреть на:

% Unrecognized command

и думать, почему железка пытается выполнить человеческую просьбу «press ENTER to next line».


#network #lifehacks

Обложка

В предыдущих публикациях мы поставили OpenClaw на сервер с помощью Cursor, подключили DeepSeek и Telegram, дали помощнику память и правила работы, а в финале собрали готовые промпты и практические подсказки. Всё это было подготовкой. Теперь перейдём к задаче, которую действительно можно встретить в обычном офисе.

У нас есть бухгалтер, обслуживающий несколько организаций. Он может работать в одном кабинете, за одним компьютером и через одно подключение к интернету. Технически все действия будут выходить наружу с одного IP-адреса.

Сам по себе общий IP ничего не доказывает. В одном бизнес-центре за одним адресом могут находиться десятки независимых компаний. Бухгалтерский аутсорсинг тоже является нормальной деятельностью. Но ФНС рассматривает совпадение IP вместе с общим бухгалтером, общими контактами и единым управлением как один из возможных индикаторов дробления бизнеса. Поэтому лучше не маскировать цифровой след, а сделать его понятным и объяснимым.

Врезка: общий IP

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

Сначала важный дисклеймер

VPS, VPN, VDI, API и AI-агенты являются обычными техническими инструментами. Законность их применения определяется не названием программы, а целью, полномочиями пользователей и выполняемыми действиями.

Описанные ниже схемы нельзя использовать, чтобы:

  • скрывать фактическое единое управление организациями или незаконное дробление бизнеса;
  • вводить в заблуждение ФНС, банки, государственные информационные системы или электронные площадки;
  • координировать заявки формально независимых участников закупки или скрывать антиконкурентное соглашение;
  • обходить банковский антифрод, требования финансового мониторинга или установленные законом ограничения;
  • работать с чужой квалифицированной электронной подписью, банк-клиентом, Госуслугами или личным кабинетом без оформленных полномочий;
  • получать несанкционированный доступ к информационным системам;
  • скрывать источник вредоносного трафика, атак, мошенничества или иных противоправных действий;
  • обрабатывать персональные данные и коммерческую тайну без законного основания и необходимых мер защиты.

Разные IP-адреса не доказывают независимость компаний и не превращают незаконную деятельность в законную. Здесь мы решаем другую задачу: нормально разделяем инфраструктуру организаций, которые действительно ведут самостоятельную деятельность.

Вариант первый: обычный VPS без всякого AI

Самая простая схема выглядит так.

Организация регистрирует аккаунт у хостинг-провайдера, заключает договор и оплачивает небольшой VPS. На сервере поднимается VPN-шлюз либо полноценное удалённое рабочее место.

Почему лучше оформлять аккаунт и договор на ту организацию, которая будет использовать сервер? Потому что тогда происхождение IP легко объясняется документами: есть клиент хостинга, договор, счета, платежи и конкретный корпоративный ресурс.

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

Врезка: варианты схем

VPN-шлюз

Для VPN подойдёт недорогой Linux-VPS с публичным IPv4-адресом. Бухгалтер подключается к VPN перед работой с конкретной организацией, и её интернет-трафик выходит через адрес этого VPS.

Плюсы:

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

Но VPN разделяет только сетевой маршрут. Он не разделяет браузерные профили, файлы, сертификаты, cookies и учётные записи. Поэтому для каждой организации всё равно нужен отдельный профиль браузера, а лучше отдельная виртуальная машина на компьютере бухгалтера.

VDI или удалённое рабочее место

Второй вариант — развернуть на VPS полноценное рабочее место и подключаться к нему удалённо. VDI в данном случае можно понимать просто как отдельный виртуальный компьютер, на котором находятся браузер, бухгалтерские программы и документы конкретной организации.

Такой вариант лучше изолирует данные, но стоит дороже. Для Windows могут потребоваться лицензии, больше памяти и процессорных ресурсов. Отдельно придётся проверить работу КЭП, КриптоПро, токенов и нужных плагинов. Поэтому самый дешёвый тариф обычно подходит для VPN-шлюза, но не всегда подходит для VDI.

Врезка: VDI

Сервер нельзя просто выставить в интернет

Здесь часто совершают главную ошибку: создают Windows-сервер, открывают наружу RDP на порту 3389 и считают задачу законченной. Делать так не стоит.

Минимальные требования выглядят следующим образом:

  • доступ к VDI или RDP разрешается только через VPN либо защищённый шлюз с MFA;
  • межсетевой экран пропускает только необходимые порты;
  • SSH доступен только администратору, желательно с разрешённых адресов и только по ключу;
  • вход по паролю для root отключается после первоначальной настройки;
  • для бухгалтера создаётся отдельная учётная запись без административных прав;
  • каждому пользователю выдаётся отдельный VPN-профиль — один общий ключ на всех использовать не надо;
  • операционная система и приложения регулярно обновляются;
  • включаются резервное копирование и журналирование входов;
  • данные для подключения передаются через защищённый канал, а не обычным сообщением в общем чате.

Бухгалтеру не нужны пароль root, панель управления хостингом или API-ключ. Ему выдаётся только персональный VPN-профиль либо собственная учётная запись удалённого рабочего места.

И ещё один важный момент: отдельный IP не заменяет полномочия. Для сдачи электронной отчётности представителем используется МЧД, а сертификаты и доступы должны принадлежать тем лицам, которым они действительно выданы.

Вариант второй: наш метод через OpenClaw или Cursor

Теперь начинается то, ради чего мы устанавливали помощника.

Регистрируем аккаунт на нужную организацию у хостинг-провайдера. В качестве примера — не рекламы — можно взять Timeweb Cloud или Fatmetal. У Timeweb Cloud есть публичный API и MCP-интеграция, а Fatmetal предоставляет MCP-сервер, через который агент может получать каталог тарифов, создавать VPS, узнавать их адреса и управлять состоянием серверов.

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

Сам ключ не надо вставлять в текст запроса, отправлять в Telegram или сохранять в статье. Он подключается к Cursor через настройки MCP и переменные окружения, а в OpenClaw — через защищённую конфигурацию skill. В запросе агенту остаётся только имя нужного подключения.

Документацию по API/MCP и правила работы мы даём помощнику вместе с понятным заданием.

Врезка: MCP

Пример задания помощнику

Ты работаешь только в проекте ACCOUNTING-GATEWAY организации <НАЗВАНИЕ>.

Сначала покажи:
1. какие инструменты API/MCP тебе доступны;
2. какой минимальный тариф подходит для VPN-шлюза;
3. регион размещения, наличие публичного IPv4 и итоговую ежемесячную стоимость;
4. какие ресурсы будут созданы и какие изменения выполнены.

До отдельной команды «ПОДТВЕРЖДАЮ СОЗДАНИЕ» ничего не создавай.

После подтверждения:
- создай минимальный KVM VPS на поддерживаемой версии Ubuntu или Debian;
- добавь SSH-ключ администратора и отключи вход root по паролю;
- настрой облачный и локальный firewall: разреши только VPN-порт, а SSH — только с адреса <ADMIN_IP>;
- установи self-hosted AmneziaVPN/AmneziaWG по официальной документации либо подготовь сервер для установки из приложения AmneziaVPN;
- создай отдельные профили для администратора и каждого указанного пользователя;
- не показывай приватные ключи в чате и не записывай их в журнал;
- сохрани конфигурации в защищённый каталог с правами 0600;
- проверь внешний IP через VPN и просканируй публичные порты;
- выдай итоговый отчёт без секретов: провайдер, проект, ID сервера, тариф, стоимость, IP, открытые порты и список созданных пользователей.

Не удаляй и не заменяй существующие серверы без отдельного подтверждения.

AmneziaVPN специально рассчитана на установку собственного VPN на арендованный сервер. Официальное приложение может само подключиться к VPS по SSH и развернуть серверную часть. Поэтому помощнику необязательно изобретать собственный установочный скрипт: он может создать VPS, закрыть firewall и подготовить SSH-доступ, после чего администратор завершит установку через приложение.

Можно ли автоматически менять VPS и IP

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

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

Поэтому автоматическую миграцию стоит применять при понятном событии:

  • отказе или закрытии старого VPS;
  • плановом переносе между площадками;
  • компрометации сервера или ключей;
  • попадании адреса в блок-лист;
  • невозможности продолжать работу у текущего провайдера.

Во многих облаках можно пересоздать VPS, сохранив публичный IP. Например, Timeweb Cloud относит свои IPv4 к «плавающим»: адрес можно перенести между сервисами внутри аккаунта. Для корпоративного шлюза это обычно лучше, чем менять и сервер, и адрес одновременно.

Если IP действительно требуется заменить, агент должен сначала создать и проверить новый контур, зафиксировать причину и старый/новый адрес, дождаться подтверждения администратора, безопасно передать новые индивидуальные профили и только после этого выводить старый сервер из эксплуатации. Рассылка VPN-ключей открытым текстом через Telegram или электронную почту в такой сценарий не входит.

Превращаем процедуру в приватный skill OpenClaw

Чтобы не писать большой запрос каждый раз, процедуру можно оформить в собственный skill. Skill в OpenClaw — это каталог с файлом SKILL.md, в котором описано, когда и как помощник должен выполнять задачу.

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

---
name: accounting-gateway
description: Создание и контролируемая миграция VPN-шлюза организации через разрешённый MCP/API хостинга.
user-invocable: true
disable-model-invocation: true
metadata:
  openclaw:
    requires:
      env:
        - HOSTING_API_TOKEN
---

# Accounting Gateway

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

Перед началом обязательно запроси:

- название организации;
- подтверждение полномочий на управление её инфраструктурой;
- провайдера и проект;
- допустимый бюджет;
- регион;
- административный IP;
- список пользователей;
- основание для создания или миграции.

Сначала покажи план, стоимость и изменения. Для создания дождись точной фразы
«ПОДТВЕРЖДАЮ СОЗДАНИЕ». Для миграции — «ПОДТВЕРЖДАЮ МИГРАЦИЮ».

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

Используй минимальный подходящий VPS, SSH-ключи, firewall и отдельный VPN-профиль
для каждого пользователя. Не публикуй секреты в чате и журналах.

При миграции не удаляй старый сервер до проверки нового, подтверждения администратора
и фиксации причины, старого и нового IP.

В финале выдай только несекретный отчёт: ID ресурсов, стоимость, IP, открытые порты,
результаты проверки и список пользователей без ключей.

Файл можно предложить OpenClaw через Skill Workshop, проверить сформированный вариант и только после ревью применить. Это важнее, чем скачать случайный готовый skill из каталога: наш помощник получает реальный доступ к облаку, серверам и секретам.

Что в результате получает бухгалтер

После настройки бухгалтеру не надо знать, что такое API, MCP, cloud-init или таблица маршрутизации. У него остаётся простой порядок работы:

  1. выбрать организацию;
  2. запустить её виртуальную машину или VPN-профиль;
  3. войти под своей учётной записью;
  4. выполнить работу;
  5. отключиться.

Для каждой организации используются собственные сетевой маршрут, внешний IP, браузерный профиль, полномочия и журнал доступа. Это удобнее для бухгалтера, безопаснее для компаний и гораздо легче объясняется, чем один общий компьютер с общей кучей токенов, паролей и открытых вкладок.

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

Полезные ссылки

#openclaw #lifehacks

Обложка

Разбираю виртуальную карту Qplus Онлайн — что это и где подвох

Наткнулся на Qplus (qplus.ru) — кошелёк, который позиционируют как наследника QIWI: запущен Киви вместе с банком «Евроальянс» (лицензия ЦБ №1781) после отзыва лицензии у КИВИ Банка в 2024. Решил разобраться, стоит ли вообще смотреть в эту сторону. Сам не пользовался — только сайт, их блог и отзывы.

💳 Что за карта

• Долларовая, виртуальная, выпуск в Сингапуре • Выпуск — 40$, из них 25$ сразу на баланс карты (т.е. 15$ — просто плата за эмиссию) • Реквизиты появляются сразу в приложении • Пополнение — с рублёвого счёта кошелька, курс конвертации свой, смотри в момент операции • Лимиты «лайт»-статуса: ~15 000 ₽ за раз и ~40 000 ₽ в месяц; выше статус (3 уровня идентификации) — выше лимиты

📊 Что обещают оплачивать

• ChatGPT/OpenAI, Cursor AI — «0% комиссии» (на словах) • Steam, PS Store (Турция/США), Roblox, PUBG • Booking, Airbnb, подарочные карты Apple US

⚠️ Что смущает (по отзывам и фактам)

• Карта сингапурская — часть сервисов режет по стране выпуска: например, Claude (Anthropic) скорее всего не примет • Лайт-лимиты душат: 15к/раз и 40к/мес — для серьёзных покупок мало, придётся идти в идентификацию • Отзывы средние: otzovik ~3.2 (рекомендуют 55%), в RuStore ~690 отзывов; формулировки в духе «сыроват, но по функционалу как QIWI» • Комиссии «0%» проверяй на своём платеже — по отдельным операциям они есть • Бренд QIWI после отзыва лицензии — репутация подмочена, хотя за кошельком стоит банк с лицензией, а не шарашкина контора

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

А вы пользовались Qplus? 👇 🔥 — да, пользуюсь 👍 — нет, но присматриваюсь 👎 — пробовал, не зашло

#lifehacks

Обложка

Вводные. Лаба на Proxmox, всё в LXC. Внутрянка на br1 (198.51.100.0/24). Снаружи — один вход через Caddy: обратный прокси, TLS сам. Админки и мониторинг — за ACL: только мой IP, остальным 403. ComfyUI (SD 1.5) живёт в lxc-comfy (198.51.100.18), раньше пыхтел на CPU, в этот день переехал на GPU: Radeon 760M, ROCm-торч, HSAOVERRIDEGFX_VERSION=11.0.0, ollama временно стопнул, чтобы не бодалась за GPU. ComfyUI слушает 8188, в мир — comfy.example-lab.ru. Параллельно ставил Frigate в свежем lxc-frigate.

Симптом. «Комфи 403, остальное открывается». photos.example-lab.ru — ок, beszel/uptime — ок, а comfy.example-lab.ru — 403, позже 502. Подозрение на ACL: «может, IP не тот?»

Хроника.

1) Логи Caddy: с телефона (открывал из Telegram) подряд два respond “Access denied” 403. Потом — 502: connect refused к 198.51.100.18:8188.

2) Внутри lxc-comfy: – ss -tlnp | grep 8188 → LISTEN 0.0.0.0:8188 (python) – curl http://127.0.0.1:8188/ → 200, UI отдался – curl http://198.51.100.18:8188/ -I → 200

Значит, жив и слушает на всех интерфейсах.

3) Снаружи (с хоста/через Caddy/с соседнего контейнера): – bash -lc '>/dev/tcp/198.51.100.18/8188' → Connection refused – tcpdump -i any -n port 8188 внутри lxc-comfy → 0 пакетов – tcpdump -i br1 -n host 198.51.100.18 and port 8188 → SYN доходит и прилетает RST

Если бы отвечал ComfyUI, был бы SYN-ACK. Значит, откликается кто-то другой.

4) Исключаем банальное: PVE firewall — пусто, ebtables — пусто, nft/iptables в контейнерах — ACCEPT, ip_forward=0 (но у нас L2-мост). Чисто.

Разгадка — ARP. – ip neigh show 198.51.100.18 → lladdr «чужой MAC» – А у lxc-comfy MAC другой. – bridge fdb show | grep «чужой MAC» → этот MAC висит на порту lxc-frigate.

Бинго: у lxc-frigate оказался тот же IP 198.51.100.18. ARP резолвит адрес в «чужой MAC», трафик уезжает во Frigate, там 8188 не слушается — оттого RST. 403 здесь просто шум от ACL на первых попытках, корень — дубль IP.

Фикс. – Перекинул lxc-frigate на 198.51.100.19: pct set <frigate_id> --net0 name=eth0,bridge=br1,ip=198.51.100.19/24,gw=198.51.100.1 pct reboot <frigate_id> – ip neigh flush 198.51.100.18 – Проверка: 198.51.100.18 снова указывает на MAC lxc-comfy. – comfy.example-lab.ru → 200, UI летает на GPU.

Мораль. Когда «не открывается», сперва проверь, твой ли это вообще адрес. Дубль IP — тихий убийца: ICMP может отвечать «кто-то один», а TCP будет резать RST с чужого контейнера. Диагностика по тропинке: ss (слушает?) → tcpdump (доходит?) → ARP/fdb (чей MAC?).

А вы чем страхуете лабу от дублей: DHCP-резервы, IPAM, arpwatch на br1 или что-то своё?

#network #lifehacks