lightweight-server/agents/codex/done/2026-10-23-home-de-egress.md
ochenstarik c213a89c13
All checks were successful
Bash syntax / syntax (push) Successful in 23s
Bash syntax / syntax (pull_request) Successful in 19s
docs: record home DE egress, failover and protected switch
2026-10-23 11:24:46 +00:00

11 KiB
Raw Blame History

Домашняя машина → DE:443: проверка и переключение

Дата: 23.10.2026, Asia/Novosibirsk. Задание: актуальная редакция CODEX-home-xray-via-ru.md, основной выход напрямую DE, семья через RU отдельно.

Операционная приёмка: PASS. Рабочий xray-vpn использует de-direct, существующий выход сохранён резервом. Переключение на резерв и возврат на DE проверены настоящей 60-секундной блокировкой транспорта DE. Этот PR содержит только отчёт; его CI и разрешённое независимое ревью нужны отдельно и не заменяются операционной проверкой.

Сохранённая конфигурация

  • Все три исходных inbound сохранены побайтно эквивалентными JSON-значениями: локальные SOCKS 10818, HTTP 10819 и transparent 12345. Исходный DNS не изменён; отдельных правил маршрутизации до работы не было.
  • Добавлены de-direct и балансировщик home-de-primary: leastPing выбирает наблюдаемый DE, fallbackTag указывает на home-reserve-current. Это исходный единственный VLESS outbound с прежними настройками и socket mark 255. Другие несуществующие в исходном конфиге DK/FI профили не создавались.
  • Первый loopback outbound возвращает запрос в routing под отдельным inbound tag; только этот tag направлен в балансировщик. Observatory проверяет DE и резерв через HTTPS generate_204, интервал 5 секунд. Конфиг проверен установленным Xray 26.3.27; бинарник не обновлялся.
  • В активный bypass4 добавлен DE, тот же элемент записан в startup script. Финальная проверка подтвердила, что единственная разница startup script — это добавление DE. Прежние элементы, включая RU, сохранены. Адрес существующего резервного outbound в bypass не входил; его прежний socket mark 255 сохранён, обход перехвата и работоспособность подтверждены испытанием резерва. Других изменений общего firewall или маршрутов не делалось.
  • Приватные адреса, UUID, Reality keys и URI в отчёт не включены. Серверы FI/DK не посещались и не менялись; на DE выполнена только проверка состояния клиента и отсутствия лимитов. Серверная конфигурация этой задачей не изменена.

Устранение нестабильности перед переключением

Прямые TCP-соединения к DE:443 проходили 8/8 через физический интерфейс. При этом временный VLESS-клиент с Chrome fingerprint давал таймауты, особенно при семи одновременных HTTPS-запросах; балансировщик мог уходить на резерв. В сравнительном тесте Firefox fingerprint выполнил те же запросы без таймаутов. Firefox оставлен только в новом локальном outbound. Настройки серверного клиента и исходный файл с URI не переписывались.

Это подтверждённое различие поведения TLS-профилей в текущей сети; конкретное сетевое устройство или механизм, вызвавший таймаут Chrome, не локализован. С Firefox до переключения прошли три полных цикла через временный балансировщик, каждый с внешним выходом DE. Старый системный Xray при этих тестах продолжал работать.

Проверки доступности

Все строки ниже: curl exit 0, обычная проверка TLS включена. Системные проверки выполнялись без переменных proxy и без SSH-туннеля.

Сервис Старый системный путь Временный DE, 3 цикла Новый системный DE Резерв при блокировке После возврата DE
api.anthropic.com/v1/models 401 401 401 401 401
api.openai.com/v1/models 401 401 401 401 401
chatgpt.com 403 403 403 403 403
github.com 200 200 200 200 200
git.ochenstarik.ru 200 200 200 200 200
api.telegram.org 302 302 302 302 302
Yandex Internet IP API 200 200 200 200 200

401 — ожидаемый ответ API без ключа, не проверка авторизованного inference. ChatGPT вернул тот же HTTP 403, что до изменения; признаков country-block в ответе не обнаружено. Успешный вход или работа веб-сессии ChatGPT этим тестом не подтверждаются. Telegram проверен HTTP-запросом, сообщения/OTP не отправлялись.

Внешний IP нового системного пути совпал с DE; сохранённые SOCKS и HTTP также дали DE. Настоящий git ls-remote от владельца к lightweight-server завершился успешно. Оба сервиса active и enabled. Текущая сессия Codex продолжила работу.

Откат и реальный отказ

Перед заменой конфига сохранена root-only копия и включён независимый systemd-run --on-active=3min, восстанавливающий исходный конфиг и перезапускающий Xray, если приёмка не подтверждена. Подтверждение и callback синхронизированы блокировкой; принятый конфиг проверяется по SHA перед отменой таймера.

Первая попытка вернула старый конфиг: проверка синтаксиса собственного nft fault script не прошла. Также выявлено, что обычный restart требуемого Xray вызывает перезапуск зависимого xray-transparent. Это фактическое отклонение первой попытки, а не утверждение о неизменности сервиса на протяжении всей работы. Оба сервиса восстановились. Затем синтаксис nft был проверен до переключения; применён административный restart с --job-mode=ignore-dependencies, без изменения unit-файлов. В финальной попытке timestamp активации transparent остался прежним.

После положительных системных проверок независимый 60-секундный таймер удаления был включён до добавления отдельной nft-таблицы. Правило блокировало только исходящий TCP443 к DE, то есть VPN transport; SSH-порты не блокировались. Внешний выход совпал с сохранённым исходным резервным выходом, вся матрица ответила. Таблица автоматически исчезла, затем внешний выход снова совпал с DE и матрица повторно прошла. Финальная попытка заняла 74,4 секунды. Только после этого отменён трёхминутный откат. Финальный аудит не нашёл ни одной fault-таблицы; собственные таймеры остановлены, новых мониторов не создано.

Права и доказательства

Файл в /etc/xray Владелец Режим после работы
config.json root:root 0600
config.json.bak-fi-20261016 root:root 0600
config.json.pre-transparent root:root 0600

Каталог резервных копий /root/codex-home-de-20261023 имеет 0700, все файлы внутри 0600. Там хранятся исходный конфиг, startup script, nft snapshot и закрытые журналы. Хэш итогового конфига: 251ee155b45b262c5a1daff2186d78278bf23244520bee1faacdd292d89fc316.

Санитизированные доказательства владельца: /home/ochenstarik/.codex/reports/home-de-20261023/. Финальный final-proof.json SHA256: 122499e03f818e48a48d8f49505f480101f26cc44d03611de7c729c19686a750. Включает матрицы, приёмку, откат, резерв, failback, stat и проверки инвариантов. Дополнительные файлы сохраняют неуспешные промежуточные проверки, не подменяя их PASS.

При ближайшей перезагрузке владельцем

Машина этой задачей не перезагружалась.

  1. Проверить active/enabled у xray-vpn и xray-transparent.
  2. Проверить наличие DE и прежнего RU в bypass4; не публиковать значения.
  3. Проверить внешний выход DE системным запросом и через оба прежних proxy-входа.
  4. Проверить Forgejo/git и используемые API; убедиться, что конфиги остались root:root 0600.
  5. При проблеме при владельце и через pkexec восстановить root-only original.json, перезапустить только xray-vpn с ignore-dependencies и проверить старый выход.

Основания схемы: Xray routing, loopback, observatory, systemctl job mode.