Конфигурация Xray в XKeen является модульной — она разбита на несколько JSON-файлов в директории /opt/etc/xray/configs/. Каждый файл отвечает за свой аспект работы. Файлы загружаются в алфавитном порядке, поэтому они пронумерованы: 01, 03, 04, 05. Разберем каждый из них подробно.
Файл управляет логированием работы Xray:
{
"log": {
"access": "/opt/var/log/xray/access.log",
"error": "/opt/var/log/xray/error.log",
"loglevel": "none",
"dnsLog": false
}
}
Параметры:
access — путь к логу доступа. Сюда записываются все обработанные соединения.error — путь к логу ошибок.loglevel — уровень логирования. Значение "none" отключает логи для экономии ресурсов роутера. Для отладки можно установить "warning" или "info".dnsLog — логирование DNS-запросов. Отключено (false) в продакшене.
Совет: при первоначальной настройке рекомендуем установить loglevel в "warning", чтобы видеть возможные ошибки. После того как все заработает стабильно — переключите на "none".
Этот файл определяет, как Xray принимает перенаправленный трафик от Netfilter. Настраиваются два обработчика для разных типов трафика:
{
"inbounds": [
{
"tag": "redirect",
"port": 61219,
"protocol": "dokodemo-door",
"settings": {
"network": "tcp",
"followRedirect": true
},
"sniffing": {
"enabled": true,
"destOverride": ["http", "tls"]
}
},
{
"tag": "tproxy",
"port": 61219,
"protocol": "dokodemo-door",
"settings": {
"network": "udp",
"followRedirect": true
},
"streamSettings": {
"sockopt": {
"tproxy": "tproxy"
}
},
"sniffing": {
"enabled": true,
"destOverride": ["http", "tls"]
}
}
]
}
Разберем ключевые моменты:
- redirect — обработчик TCP-трафика. Использует протокол
dokodemo-door («дверь куда угодно»), который принимает любое входящее соединение и перенаправляет его согласно правилам маршрутизации. - tproxy — обработчик UDP-трафика. Использует тот же протокол, но работает в режиме tproxy (transparent proxy) для прозрачного проксирования UDP.
- Порт 61219 — оба обработчика слушают на одном порту, но для разных протоколов (TCP и UDP).
- sniffing — включен для обоих обработчиков. Позволяет Xray анализировать содержимое соединения (HTTP-заголовки и TLS SNI), чтобы определить домен назначения даже когда клиент обращается по IP-адресу.
- followRedirect — указывает обработчику следовать за перенаправлением iptables, то есть использовать оригинальный адрес назначения.
Самый важный конфигурационный файл — здесь определяются каналы, через которые трафик покидает роутер. Настраиваются три исходящих подключения:
{
"outbounds": [
{
"tag": "vless-reality",
"protocol": "vless",
"settings": {
"vnext": [
{
"address": "ВАШ_СЕРВЕР",
"port": 443,
"users": [
{
"id": "ВАШ_UUID",
"flow": "xtls-rprx-vision",
"encryption": "none"
}
]
}
]
},
"streamSettings": {
"network": "tcp",
"security": "reality",
"realitySettings": {
"fingerprint": "chrome",
"serverName": "ВАШ_SNI_ДОМЕН",
"publicKey": "ВАШ_PUBLIC_KEY",
"shortId": "ВАШ_SHORT_ID"
}
}
},
{
"tag": "direct",
"protocol": "freedom",
"settings": {}
},
{
"tag": "block",
"protocol": "blackhole",
"settings": {
"response": {
"type": "http"
}
}
}
]
}
Подробный разбор каждого outbound:
1. vless-reality — основной VPN-канал. Протокол VLESS с технологией Reality обеспечивает максимальную маскировку трафика:
address — IP-адрес или домен вашего VPN-сервера. Именно сюда будет направляться трафик к заблокированным ресурсам.port — порт сервера, стандартно 443 (HTTPS), что делает трафик неотличимым от обычного веб-трафика.id — UUID пользователя, который генерируется на сервере. Используется для аутентификации.flow: "xtls-rprx-vision" — оптимизированный алгоритм передачи данных XTLS, который минимизирует накладные расходы шифрования.fingerprint: "chrome" — Xray имитирует TLS-отпечаток браузера Chrome, что делает VPN-трафик неотличимым от обычного просмотра веб-страниц.serverName — SNI (Server Name Indication) — домен, который будет виден при анализе TLS-handshake. Обычно указывается популярный сайт, например, сайт Microsoft или Google.publicKey — публичный ключ Reality, генерируется на сервере.shortId — короткий идентификатор для дополнительной аутентификации.
2. direct — прямое подключение через протокол freedom. Трафик, направленный в этот outbound, идет к адресату напрямую, без VPN.
3. block — блокировка через протокол blackhole. Трафик, направленный сюда, просто отбрасывается. Полезно для блокировки нежелательных соединений (телеметрия, реклама и т.д.).
Где взять параметры для vless-reality? Вам понадобится VPN-сервер с настроенным Xray и протоколом VLESS Reality. Это может быть VPS за рубежом (Нидерланды, Германия, Финляндия — популярные локации). Настройка серверной части — тема для отдельной статьи, но все необходимые параметры (UUID, publicKey, shortId, serverName) генерируются при настройке серверной части Xray.
Этот файл — мозг всей системы. Здесь определяется, какой трафик куда направлять:
{
"routing": {
"domainStrategy": "IPIfNonMatch",
"rules": [
{
"inboundTag": ["redirect", "tproxy"],
"outboundTag": "block",
"type": "field",
"network": "udp",
"port": "135,137,138,139"
},
{
"inboundTag": ["redirect", "tproxy"],
"outboundTag": "block",
"type": "field",
"domain": ["appcenter.ms"]
},
{
"inboundTag": ["redirect", "tproxy"],
"outboundTag": "vless-reality",
"type": "field",
"domain": [
"ext:geosite_v2fly.dat:google",
"ext:geosite_v2fly.dat:speedtest",
"ext:geosite_v2fly.dat:tiktok",
"ext:geosite_zkeen.dat:domains",
"ext:geosite_zkeen.dat:other",
"2ip.ru",
"2ip.io"
]
},
{
"inboundTag": ["redirect", "tproxy"],
"outboundTag": "vless-reality",
"type": "field",
"ip": [
"ext:geoip_v2fly.dat:google",
"ext:geoip_v2fly.dat:twitter"
]
},
{
"inboundTag": ["redirect", "tproxy"],
"outboundTag": "direct",
"type": "field"
}
]
}
}
Разберем каждое правило по порядку (правила обрабатываются сверху вниз, первое совпавшее — срабатывает):
Правило 1 — блокировка SMB-портов: UDP-трафик на порты 135, 137, 138, 139 блокируется. Это порты Windows-сервисов (NetBIOS, SMB), которые не должны уходить за пределы локальной сети.
Правило 2 — блокировка определенных доменов: в данном случае блокируется appcenter.ms (Microsoft App Center), который может генерировать большой объем телеметрии.
Правило 3 — маршрутизация доменов через VPN: здесь перечислены категории доменов, трафик к которым идет через VLESS Reality:
ext:geosite_v2fly.dat:google — все домены Google (google.com, googleapis.com, youtube.com и т.д.)ext:geosite_v2fly.dat:speedtest — сервисы измерения скоростиext:geosite_v2fly.dat:tiktok — TikTok и связанные сервисыext:geosite_zkeen.dat:domains — заблокированные домены из базы AntiZapret/zkeenext:geosite_zkeen.dat:other — другие заблокированные домены2ip.ru и 2ip.io — сервисы определения IP, добавлены для проверки работоспособности VPN
Правило 4 — маршрутизация по IP через VPN: трафик к IP-адресам Google и Twitter направляется через VPN. Это дополнение к правилу по доменам — на случай, если клиент обращается напрямую по IP.
Правило 5 — всё остальное напрямую: финальное правило-ловушка — весь трафик, не совпавший с предыдущими правилами, идет напрямую через обычное интернет-подключение.
Параметр domainStrategy: "IPIfNonMatch" означает: если ни одно правило по доменам не совпало, Xray разрешит домен в IP-адрес и попробует применить правила по IP. Это обеспечивает максимально точную маршрутизацию.
Для кейса НетВорк Консалтинг мы добавили дополнительные домены в правило 3:
"domain": [
"ext:geosite_v2fly.dat:google",
"ext:geosite_v2fly.dat:speedtest",
"ext:geosite_zkeen.dat:domains",
"ext:geosite_zkeen.dat:other",
"github.com",
"github.io",
"githubusercontent.com",
"ghcr.io",
"docker.io",
"docker.com",
"registry-1.docker.io",
"hub.docker.com",
"npmjs.org",
"npmjs.com",
"registry.npmjs.org",
"yarnpkg.com",
"2ip.ru",
"2ip.io"
]
Это обеспечило стабильный доступ ко всем сервисам, необходимым разработчикам.