• Linux
  • Ubuntu 24.04 Xray-core Kill switch

    (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 и обновлять по расписанию:

      1 минут