Пример Xray-конфига
Подписка может возвращать полные конфигурационные файлы xray-core с балансировщиками, обсерваториями и кастомной маршрутизацией. Такие конфигурации передаются в xray-core практически без изменений.
Определение
Конфигурация считается «полной», если JSON содержит оба поля:
inbounds— входящие подключенияoutbounds— исходящие подключения
Любой JSON-объект, содержащий и inbounds, и outbounds, распознаётся как полная конфигурация — независимо от наличия балансировщиков, обсерваторий или метаданных.
Формат
Одиночная конфигурация
{
"log": { "loglevel": "warning" },
"dns": { "servers": [...] },
"inbounds": [
{ "tag": "socks-in", "protocol": "socks", "port": 10808, "listen": "127.0.0.1" },
{ "tag": "http-in", "protocol": "http", "port": 10809, "listen": "127.0.0.1" }
],
"outbounds": [
{ "tag": "proxy-1", "protocol": "vless", "settings": {...} },
{ "tag": "proxy-2", "protocol": "vless", "settings": {...} },
{ "tag": "direct", "protocol": "freedom" },
{ "tag": "block", "protocol": "blackhole" }
],
"routing": {
"domainStrategy": "IPIfNonMatch",
"rules": [...],
"balancers": [
{
"tag": "balancer-1",
"selector": ["proxy-1", "proxy-2"],
"strategy": { "type": "leastPing" }
}
]
},
"burstObservatory": {
"subjectSelector": ["proxy-1", "proxy-2"],
"pingConfig": {
"destination": "http://www.google.com/generate_204",
"connectivity": "http://www.google.com/generate_204",
"interval": "30s",
"sampling": 2,
"timeout": "5s"
}
},
"stats": {}
}Массив конфигураций
Каждый элемент массива — отдельная полная конфигурация, импортируется как отдельный «сервер».
Автоматический патчинг
При запуске приложение автоматически патчит конфигурацию (patchFullConfigInbounds):
1. Логирование
log.loglevel— устанавливается из настроек пользователяlog.accessиlog.error— устанавливается путь к лог-файлу приложения
iOS:
group.llc.itdev.incy/logs/xray.logAndroid/Desktop: передаётся через параметрlogFilePath
2. Inbound порты
Все
socksinbound'ы → порт10808, listen127.0.0.1Все
httpinbound'ы → порт10809, listen127.0.0.1Если SOCKS inbound отсутствует — добавляется автоматически с настройками sniffing
3. Stats
Если конфигурация содержит burstObservatory или observatory, но не содержит stats — автоматически добавляется пустой объект "stats": {}.
4. DNS Direct Routing (предотвращение циклической зависимости)
Условие: конфигурация содержит и observatory, и balancers.
Проблема: Observatory проверяет серверы → для проверки нужен DNS → DNS идёт через балансировщик → балансировщик зависит от результатов Observatory → цикл.
Решение: IP-адреса DNS-серверов из dns.servers добавляются в начало routing.rules с outbound "direct":
Если outbound с тегом "direct" или протоколом "freedom" отсутствует — добавляется автоматически.
Отображение в UI
Полные конфигурации отображаются как один сервер в списке
Бейджи безопасности и транспорта скрываются (информация внутри конфига)
Если в
metaестьserverDescription— отображается как описание сервераИмя сервера берётся из первого proxy-outbound'а
Особенности работы с полными конфигурациями
MPH Cache
Для полных конфигураций MPH cache не используется. Кэш (mph_cache.dat) предназначен для сериализации DomainMatcher, но несовместим с полными JSON-конфигурациями. При обнаружении полной конфигурации:
Существующий файл
mph_cache.datудаляетсяXray-core строит матчеры в рантайме
Флаг
isFullConfigпередаётся из основного приложения в Network Extension (iOS) черезproviderConfigurationиsharedDefaults
Геофайлы (Geo Trimming)
Для полных конфигураций обрезка геофайлов пропускается. Полные конфигурации поставляются с собственными кастомными геофайлами от подписки, которые используются как есть. При подключении:
GeoTrimmerне вызываетсяОбрезанные файлы удаляются (
deleteTrimmedGeoFiles)Xray-core использует оригинальные геофайлы
DNS
Для полных конфигураций DNS-серверы не заменяются. Полные конфигурации уже содержат корректно настроенные DNS с фильтрами domains/expectIPs, поэтому приложение:
Не подставляет свои DNS-серверы
Сохраняет оригинальные DNS-записи из конфигурации
Добавляет только Direct-правило для DNS-серверов (для предотвращения циклической зависимости с Observatory)
Хранение
Полная JSON-конфигурация сохраняется в поле fullConfigJson модели VLESSConfig. При запуске xray-core конфиг патчится и передаётся целиком, без генерации из отдельных полей.
Последнее обновление