(VLESS+XHTTP+REALITY) с на
Порядок правил важен — xray проверяет их сверху вниз и применяет первое совпавшее, поэтому geo-правила должны стоять раньше общего proxy.
sockopt.interface: «enp0s3» — принудительно биндит direct-outbound к физическому интерфейсу (полагаю, это твой enp0s3, судя по прошлой переписке; проверь актуальное имя через ip a).
Проверка конфига и рестарт
bash
xray run -test -config /usr/local/etc/xray/config.json
sudo systemctl restart xray
Дыра в nftables — придётся явно разрешить
Это самая неприятная часть: geoip-диапазоны RU — это тысячи подсетей, вручную не перечислить в nftables. Практичных варианта два:
Вариант А (проще, шире дыра): разрешить весь исходящий трафик с enp0s3, доверяя внутренней логике xray-роутинга (раз direct реально используется только для распознанных RU-адресов):
oifname «enp0s3» ct state new,established,related accept
Добавь это в chain output /etc/nftables.conf. Учти: это фактически ослабляет killswitch до «доверяем xray самому решать, что не прятать» — если xray накосячит в правилах маршрутизации (например domainStrategy неверно классифицирует IP), утечка возможна.
Вариант Б (уже, но сложнее в поддержке): синхронизировать geoip:ru CIDR-список в отдельный nft set и обновлять по расписанию: