Repository navigation
Conversation
Inbound VLESS+Reality и отдельный режим реле (dokodemo-door), переливающий TCP на дальний хост по мешу: клиент стучится на ближний хост, рукопожатие Reality терминируется на дальнем. Версия и sha256 архива пинятся, конфиг собирается словарём и проверяется `xray run -test` до рестарта, порт inbound'а сверяется с firewall хоста — на default-drop закрытый порт снаружи неотличим от блокировки у провайдера. Значений в git нет: uuid клиентов и ключи Reality живут в гитигнорных host_vars и в vault, в примере — только имена переменных. Чтобы так и осталось, добавлен pre-commit хук no-key-material: gitleaks ловит секреты по форме токенов известных сервисов, а uuid клиента и base64-ключ кривой на них не похожи, хотя uuid и есть пароль к inbound. Разбор добавленных строк индекса вынесен из check-staged-ips в общий staged_diff. 100.64.0.0/10 внесён в allowed-public-ips: он стоит в xray_blocked_cidrs, а ipaddress.is_private приватным его не считает.
Многострочные обоснования в defaults, tasks и шаблоне конфига дублировали README роли — в defaults остался указатель на него, в коде по одной строке там, где значение иначе выглядит произвольным или где отсутствие чего-то (sniffing на реле, порядок правил) легко «починить» обратно. В README роли переехало то, чего там не было: параметры реле, access_log, reality_enabled и причина UseIPv4 — иначе эти обоснования пропали бы вместе с комментариями. Корневой README актуализирован: роли xray не было ни в дереве, ни в таблице ролей, а в разделе про безопасность — нового хука и общего staged_diff.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Личный VPN на своём парке вместо внешнего сервиса.
Роль
Inbound VLESS+Reality и отдельный режим реле (
dokodemo-door), переливающий TCP на дальний хост по мешу: клиент стучится на ближний хост, рукопожатие Reality терминируется на дальнем, поэтому реле не нужны ни ключи, ни список клиентов — в клиентском профиле меняется только адрес сервера.Что роль делает сама:
xray run -testдо рестарта: иначе xray стартует, молча проигнорировав опечатку в имени поля Reality, и диагноз сводится к «не подключается»;serverNamesиshortIdsбыли списками: скаляр Jinja перебрала бы посимвольно, JSON остался бы валидным, и возразил бы только xray — рукопожатием;access_logвыключенным: он пишет каждое соединение с адресом назначения независимо отloglevel, то есть в journald оседала бы история всего, что открывали клиенты.Роль подключена в
site.ymlпослеfirewallи подwhen: xray_managed | default(false)— обычный деплой её не трогает.Значений в git нет: uuid клиентов и ключи Reality живут в гитигнорных host_vars и в vault, в
all.vault.yml.example— только имена переменных.Хук против ключ-строк
gitleaks ловит секреты по форме токенов известных сервисов, а uuid клиента и base64-ключ кривой на них не похожи — хотя uuid и есть пароль к inbound, а приватный x25519 открывает его целиком. Новый хук
no-key-materialдержит эту границу.Короткие hex-строки (
shortIdи подобное) сознательно не ловятся: от короткого git-хеша их не отличить, а ложные срабатывания на каждом коммите стоят дороже — без uuid и ключа такая строка сама по себе ничего не открывает. Разрешить конкретную строку — комментарийallow-secretв ней же.Разбор добавленных строк индекса вынесен из
check-staged-ips.pyв общийstaged_diff.py— без изменения поведения.100.64.0.0/10внесён вallowed-public-ips.txt: он стоит вxray_blocked_cidrs, аipaddress.is_privateприватным его не считает.Проверка
Прогнано локально, без деплоя:
ansible-lint roles/xray— 0 failures, 0 warnings, профильproduction. Полный прогон по репозиторию находок в отслеживаемых файлах не даёт (всё, что он сообщает, — в гитигнорных host_vars / inventory / apps.yml, которых в CI нет).config.json.j2отрендерен в двух конфигурациях и распарсен как JSON: Reality-вариант даётserverNamesсписком, а не посимвольно; relay-вариант — правилоrelay→directпервым (иначе 10/8 ушла бы в blackhole) и безsniffing, который подменил бы адрес назначения на имя из SNI и сломал реле.=), уважаетallow-secret, пропускает короткий hex и git-хеши. На реальном индексе оба хука зелёные.xray_archive_sha256помечен# gitleaks:allow: gitleaks принимает сумму публичного релизного архива за jfrog-токен. Маркер на строке, а не fingerprint в.gitleaksignore, — CI сканирует всю историю сfetch-depth: 0, и запись пришлось бы заводить дважды и переписывать после каждого rebase.Роль ни на одном хосте не прогонялась.