Compare commits
1 commit
main
...
codex/home
| Author | SHA1 | Date | |
|---|---|---|---|
| c213a89c13 |
1 changed files with 130 additions and 0 deletions
130
agents/codex/done/2026-10-23-home-de-egress.md
Normal file
130
agents/codex/done/2026-10-23-home-de-egress.md
Normal file
|
|
@ -0,0 +1,130 @@
|
||||||
|
# Домашняя машина → 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](https://xtls.github.io/en/config/routing.html),
|
||||||
|
[loopback](https://xtls.github.io/en/config/outbounds/loopback.html),
|
||||||
|
[observatory](https://xtls.github.io/en/config/observatory.html),
|
||||||
|
[systemctl job mode](https://www.freedesktop.org/software/systemd/man/latest/systemctl.html).
|
||||||
Loading…
Reference in a new issue