August 30, 2024

Настройка Xray на кинетике

Оглавление

1. Настройка сервера

Сначала надо настроить это на сервере. Вариантов много, я использовал сетап через клиент амнезии впн

В клиенте выбираем свой сервер, жмем на Прокотолы, выбираем Xray. Настройки были по дефолту, я не менял.

После этого на сервере запустится контейнер с названием amnezia-xray.

Сервер настроен, вы молодцы, всем спасибо!)

[в начало]

2. Получаем креды для подключения

Нужны данные для подключения клиентов. Для этого в приложении амнезии жмем на кнопку Поделиться(1), выбираем свой сервер(2), выбираем прокол Xray(3), формат подключения Xray native format(4), жмем кнопку Поделиться(5), и кнопку Показать настройки подключения(6).

Для нас будут интересны такие параметры в разделе outbounds:

"address": "IP сервера",                                                                                                                                                                 
"port": порт сервера,
"id": "ID сервера"                                                                                                        
"publicKey": "Публичный ключ сервера",                                                                                                                         
"serverName": "сайт под который маскируемся",
"shortId": "короткий id"

Запоминаем эти значения, записываем их, они нам еще понадобятся. В самом приложении амнезии этого клиента не будет видно, так как конфиг по факту общий.

[в начало]

3. Настройка кинетика

3.1. Установка и настройка sing-box

заходим в ентваре и выполняем:

opkg install sing-box-go iptables
vi /opt/etc/sing-box/config.json

Использовал sing-box, есть в репозиториях так же родной xray, но его не пробовал, по конфигам не подскажу

Итак, у нас открылся файл config.json, нужно из него все удалить и вставить следующее

{
  "log": {
    "level": "debug"
  },
  "inbounds": [
    {
      "type": "tun",
      "interface_name": "tun0",
      "domain_strategy": "ipv4_only",
      "inet4_address": "172.16.50.1/30", // Тут можно указать любой свободный адрес с маской /30
      "auto_route": false,
      "strict_route": false,
      "sniff": true
   }
  ],
  "outbounds":  [
    {
      "type": "vless",
      "server": "IP сервера из переменной address",
      "server_port": Порт сервера из переменной port,
      "uuid": "ID сервера из перемиенной id",
      "flow": "xtls-rprx-vision",
      "tls":      {
        "enabled": true,
        "server_name": "Сайт под который маскируемся из переменной serverName",
        "utls":        {
          "enabled": true,
          "fingerprint": "chrome"
        },
        "reality":        {
          "enabled": true,
          "public_key": "Публичный ключ сервера из переменной publicKey",
          "short_id": "Короткий id из переменной shortId"
        }
      }
    }
  ],
  "route": {
    "auto_detect_interface": true
  }
}

Изменяем параметры на свои, еще можно поменять inet4_address на что-то свое

[в начало]

3.2. Настройка фаерволла

Так же нужно настроить фаерволл на кинетике для разрешения трафика в tun0

выполняем

vi /opt/etc/ndm/netfilter.d/020-sing-box.sh

Если прошивка кинетика версии 4.2 и выше

#!/opt/bin/sh
if [ "$table" = 'filter' ]; then
  if [ -z "$(iptables-save | grep tun+ | grep INPUT)" ]; then
      /opt/sbin/iptables -A INPUT -i tun+ -j ACCEPT
  fi
  if [ -z "$(iptables-save | grep tun+ | grep FORWARD)" ]; then
      /opt/sbin/iptables -A FORWARD -i tun+ -j ACCEPT
      /opt/sbin/iptables -A FORWARD -o tun+ -j ACCEPT
  fi
fi

Если прошивка кинетика старее, чем 4.2

#!/opt/bin/sh
if [ -z "$(iptables-save | grep tun+ | grep INPUT)" ]; then
    /opt/sbin/iptables -A INPUT -i tun+ -j ACCEPT
fi
if [ -z "$(iptables-save | grep tun+ | grep FORWARD)" ]; then
    /opt/sbin/iptables -A FORWARD -i tun+ -j ACCEPT
    /opt/sbin/iptables -A FORWARD -o tun+ -j ACCEPT
fi

После этого делаем:

chmod +x /opt/etc/ndm/netfilter.d/020-sing-box.sh
/opt/etc/ndm/netfilter.d/020-sing-box.sh
/opt/etc/init.d/S99sing-box restart

[в начало]

4. Проверка

/opt/etc/init.d/S99sing-box check

должно сказать, что служба запущена

iptables-save | grep tun

должно вывести 3 строки, с одним INPUT и двумя FORWARD

curl --interface tun0 ifconfig.me

должно вывести ip адрес сервера, а не провайдера

Если все проверки пройдены, то можно переустановить Bird4Static, указав ему в качестве впн интерфейс tun0 как вариант.

Так же с помощью дополнительного скрипта можно в кинетике сделать Политику доступа, что бы устройства из нее всегда ходили через xray. Инструкция по этому способу лежит тут

За настройку самого sing-box поддержку не оказываю, так как сам в этих настройках разбираюсь слабо))

[в начало]

5. Дополнение

1. Что бы Ipset4Static нормально работал после перезапуска sing-box нужно в файл /opt/etc/init.d/S99sing-box добавить в самый конец код:

start_ipset(){
 sleep 3 && sh /opt/etc/init.d/S03ipset-table restart
}
case "$1" in
 start | restart)
  start_ipset
 ;;
 *)
;;
esac

2. Если Bird4Static после перезапуска роутера не заполняет 1021 таблицу и в впн ничего не направляет, то скорее всего поможет создание файла в /opt/etc/init.d/ с названием например S99-delay-restart-bird

В файл нужно прописать:

#!/bin/sh
sleep 30
/opt/etc/init.d/S70bird restart

и выдать права к файлу

chmod +x /opt/etc/init.d/S99-delay-restart-bird

Теперь, при запуске роутера, спустя 30 секунд будет выполнятся команда с перезапуском bird. Изначальная проблема в том, что sing-box стартует позже bird, и bird не видит интерфейс туннеля при запуске, и отбраковывает все машруты в впн

[в начало]