Перейти к содержанию

Skrill0

Участники форума
  • Постов

    277
  • Зарегистрирован

  • Посещение

  • Победитель дней

    38

Сообщения, опубликованные Skrill0

  1. 17 минут назад, Sercha сказал:

    Спасибо за поддержку!

    Долгое ожидание ничего не даёт, увы, трафик  

    На попытку запустить данный скрипт я получаю краткое "Permission denied"  (поискал поиском - вроде один такой)). Однако принудительный sh вроде исполняет этот скрипт.

    Еще нюанс, что не применив эти правила - трафик идёт "не туда", что, в целом, тоже не комильфо в моём случае. В идеале было бы поведение "kill-switch", чтобы нет ножек-нет печенья... Боюсь подписку потерять на утечке).

    Что касается подождать - это конечно, правда жду как на иголках т.к. в понедельник нужно будет надолго уехать и возможности (мм желания? "настраивать роутер удалённо - к долгой дороге/назад/!") настроить уже не будет. Я, конечно, прочёл, что ожидается прозрачный режим работы, и это прекрасно! Готов быть альфа-тестером )).

    Но пока готов побороться за результат и с нынешней версией.. Возможно попробую вариант с tproxy, хотя боюсь это оверкилл для моих скиллов. Плюс вижу что добавили UDP функционал в штатный прокси - возможно стоит поэкспериментировать в сторону дев-версии прошивки?

    image.png.c9f473a026378673d3ab8532497ba6a7.png


    Тогда до выхода обновления можете руками обновить init скрипт по пути /opt/etc/init.d/S24xray. Это должно решить Вашу проблему)

    Скрытый текст
    #!/bin/sh
    ### Начало информации о службе
    # Краткое-описание: Запуск / Остановка Xray
    # version="0.8"  # Версия
    ### Конец информации о службе
    
    # Цвета для вывода
    green="\033[32m"
    red="\033[31m"
    yellow="\033[33m"
    reset="\033[0m"
    
    # Пути и переменные
    xkeen_info_log="/opt/var/log/xkeen/info.log"
    xkeen_error_log="/opt/var/log/xkeen/error.log"
    path="/opt/bin:/opt/sbin:/sbin:/bin:/usr/sbin:/usr/bin"
    xray_path="xray"
    xray_config="/opt/etc/xray/configs"
    app_name="Xkeen"
    interface="br0"
    ndm="/opt/etc/ndm/netfilter.d"
    
    export XRAY_LOCATION_ASSET="/opt/etc/xray/dat/"
    
    # Функции для ведения журнала в роутере
    log_notice_init() {
        local header="${app_name}"
        logger -p notice -t "${header}" "${1}"
    }
    
    log_error_init() {
        local header="${app_name}"
        logger -p error -t "${header}" "${1}"
    }
    
    exit_with_error() {
        echo "Ошибка: $1"
        exit 1
    }
    
    # Функция для определения файла inbounds
    determine_config_file() {
    	config_file=""
    
    	if [ -n "$(ls "$xray_config" | grep 'inbounds')" ]; then
    		config_file="$xray_config/$(ls "$xray_config" | grep 'inbounds')"
    	elif [ -e "$xray_config/config.json" ]; then
    		config_file="$xray_config/config.json"
    	fi
    }
    
    # Функция для определения порта xray
    determine_xray_port() {
    	xray_port=$(cat "$config_file" | grep -o '"port": [0-9]*' | awk '{print $2}' | head -n 1)
    	if [ -z "$xray_port" ]; then
    		exit_with_error "Не удалось определить xray_port из настроек."
    	else
    		# Проверяем, что xray_port является числом
    		if ! [[ "$xray_port" =~ ^[0-9]+$ ]]; then
    			exit_with_error "xray_port не является допустимым числом."
    		fi
    	fi
    }
    
    add_rules () {
    determine_config_file
    determine_xray_port
    if grep -q '"protocol": "dokodemo-door"' "$config_file"; then
        if grep -q '"tproxy": "tproxy"' "$config_file"; then
            xray_mode="tproxy"
        else
            xray_mode="redirect"
        fi
    else
        xray_mode="socks"
    fi
    
    case "$xray_mode" in
        "tproxy")
            log_notice_init "Найден «dokodemo-door» с режимом Transparent proxy в inbounds. Xray запущен в режиме Transparent proxy."
            ;;
        "redirect")
            log_notice_init "Найден «dokodemo-door» в inbounds. Xray запущен в режиме Redirect."
            ;;
        "socks")
            log_notice_init "Не найден «dokodemo-door» в inbounds. Xray запущен в обычном режиме. Для работы Xray нужно направить на него соединение любым удобным Вам способом."
            ;;
        *)
            log_notice_init "Ошибка: Недопустимое значение xray_mode: $xray_mode"
            exit 1
            ;;
    esac
    
    echo -n > /opt/etc/ndm/netfilter.d/xray.sh
    cat > /opt/etc/ndm/netfilter.d/xray.sh <<EOL
    #!/bin/sh
    
    xray_mode=$xray_mode
    
    if [ "\$xray_mode" = "socks" ]; then
        exit 0
    	
    elif [ "\$xray_mode" = "redirect" ]; then
        if ! iptables -t nat -C PREROUTING -i $interface -p tcp -j REDIRECT --to-port $xray_port 2>/dev/null; then
            iptables -t nat -A PREROUTING -i $interface -p tcp -j REDIRECT --to-port $xray_port
        fi
    
        if ! iptables -t nat -C PREROUTING -i $interface -p udp -j REDIRECT --to-port $xray_port 2>/dev/null; then
            iptables -t nat -A PREROUTING -i $interface -p udp -j REDIRECT --to-port $xray_port
        fi
    
        if ! ip6tables -t nat -C PREROUTING -i $interface -p tcp -j REDIRECT --to-port $xray_port 2>/dev/null; then
            ip6tables -t nat -A PREROUTING -i $interface -p tcp -j REDIRECT --to-port $xray_port
        fi
    
        if ! ip6tables -t nat -C PREROUTING -i $interface -p udp -j REDIRECT --to-port $xray_port 2>/dev/null; then
            ip6tables -t nat -A PREROUTING -i $interface -p udp -j REDIRECT --to-port $xray_port
        fi
    	
    elif [ "\$xray_mode" = "tproxy" ]; then
        iptables -t mangle -N XRAY
        iptables -t mangle -N XRAY_SELF
        iptables -t mangle -N DIVERT
    else
        echo "Ошибка: Недопустимое значение переменной xray_mode: $xray_mode"
        exit 1
    fi
    
    EOL
    }
    
    # Функция для удаления правил redirect для адресов IPv4
    delete_rules() {
            echo -n > /opt/etc/ndm/netfilter.d/xray.sh
    		determine_config_file
    		determine_xray_port
    
    		# Проверка существования правил и удаление их, если они существуют
    		if iptables -t nat -C PREROUTING -i "$interface" -p tcp -j REDIRECT --to-port "$xray_port" 2>/dev/null; then
    			iptables -t nat -D PREROUTING -i "$interface" -p tcp -j REDIRECT --to-port "$xray_port"
    		fi
    
    		if iptables -t nat -C PREROUTING -i "$interface" -p udp -j REDIRECT --to-port "$xray_port" 2>/dev/null; then
    			iptables -t nat -D PREROUTING -i "$interface" -p udp -j REDIRECT --to-port "$xray_port"
    		fi
    
    		if ip6tables -t nat -C PREROUTING -i "$interface" -p tcp -j REDIRECT --to-port "$xray_port" 2>/dev/null; then
    			ip6tables -t nat -D PREROUTING -i "$interface" -p tcp -j REDIRECT --to-port "$xray_port"
    		fi
    
    		if ip6tables -t nat -C PREROUTING -i "$interface" -p udp -j REDIRECT --to-port "$xray_port" 2>/dev/null; then
    			ip6tables -t nat -D PREROUTING -i "$interface" -p udp -j REDIRECT --to-port "$xray_port"
    		fi
    }
    
    # Функция для проверки статуса xray
    xray_status() {
        if pgrep -f "$xray_path run -confdir $xray_config" > /dev/null; then
            return 0  # Процесс существует и работает
        else
            return 1  # Процесс не существует
        fi
    }
    
    # Функция для запуска Xray | Особая благодарность jameszero
    start() {
        log_notice_init "Инициирован запуск Xray"
    
        max_retries=10  # Максимальное количество попыток запуска
        retries=0
        delay=1  # Начальная задержка в секундах
    
        while [ $retries -lt $max_retries ]; do
            if xray_status; then
                echo -e "  Xray уже ${green}запущен${reset}"
                log_notice_init "Не удалось запустить Xray, так как он уже запущен"
                echo "" >> "$xkeen_error_log"
                echo "[start] Проверка статуса Xray" >> "$xkeen_error_log"
                echo "  [error] Xray уже запущен" >> "$xkeen_error_log"
                echo "[end] Проверка статуса Xray выполнена" >> "$xkeen_error_log"
                echo "" >> "$xkeen_error_log"
                return 0  # Прерываем цикл, так как Xray уже запущен
            else
                "$xray_path" run -confdir "$xray_config" &
                sleep $delay
    
                if xray_status; then
                    echo -e "  Xray ${green}запущен${reset}"
                    log_notice_init "Xray запущен"
    				
                    # Устанавливаем правила IPv4 и IPv6
                    add_rules
                    $ndm/xray.sh
    
                    echo "" >> "$xkeen_info_log"
                    echo "[end] Проверка статуса Xray" >> "$xkeen_info_log"
                    echo "  [info] Xray запущен" >> "$xkeen_info_log"
                    echo "[end] Проверка статуса Xray выполнена" >> "$xkeen_info_log"
                    echo "" >> "$xkeen_info_log"
                    return 0  # Прерываем цикл, так как Xray успешно запущен
                else
                    retries=$((retries + 1))
                    echo -e "  Попытка повторного запуска Xray: $retries из $max_retries"
                    log_notice_init "Попытка повторного запуска Xray: $retries из $max_retries"
                    delay=$((delay + 1))  # Увеличиваем задержку на 1 секунду
                fi
            fi
        done
    
        # Если достигнуто максимальное количество попыток и Xray не запущен, выводим ошибку
        echo -e "  Не удалось запустить Xray после $max_retries попыток"
        log_error_init "Не удалось запустить Xray после $max_retries попыток"
    
        echo "" >> "$xkeen_error_log"
        echo "[start] Проверка статуса Xray" >> "$xkeen_error_log"
        echo "  [error] Не удалось запустить Xray после $max_retries попыток" >> "$xkeen_error_log"
        echo "[end] Проверка статуса Xray выполнена" >> "$xkeen_error_log"
        echo "" >> "$xkeen_error_log"
    }
    
    
    # Функция для остановки xray
    stop() {
        log_notice_init "Инициирована остановка Xray"
        if xray_status; then
    	
    		# Удаляем правила IPv4 и IPv6
    		iptables -t nat -A PREROUTING -i "$interface" -s 192.0.0.0/24 -j ACCEPT
    		sleep 1
            delete_rules
    		sleep 1
    		iptables -t nat -D PREROUTING -i "$interface" -s 192.0.0.0/24 -j ACCEPT
    		
            killall -q -9 "$xray_path"
            echo -e "  Xray ${yellow}остановлен${reset}"
            log_notice_init "Xray остановлен"
    
    
            echo "" >> "$xkeen_info_log"
            echo "[start] Проверка статуса Xray" >> "$xkeen_info_log"
            echo "  [info] Xray остановлен" >> "$xkeen_info_log"
            echo "[end] Проверка статуса Xray выполнена" >> "$xkeen_info_log"
            echo "" >> "$xkeen_info_log"
        else
            echo -e "  Xray ${red}не запущен${reset}"
            log_error_init "Остановка Xray не удалась. Xray не был запущен"
    
            echo "" >> "$xkeen_error_log"
            echo "[start] Проверка статуса Xray" >> "$xkeen_error_log"
            echo "  [error] Xray не был запущен" >> "$xkeen_error_log"
            echo "[end] Проверка статуса Xray выполнена" >> "$xkeen_error_log"
            echo "" >> "$xkeen_error_log"
        fi
    }
    
    # Обработка аргументов командной строки
    case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    status)
        if xray_status; then
            echo -e "  Xray ${green}запущен${reset}"
    
            echo "" >> "$xkeen_info_log"
            echo "[start] Проверка статуса Xray" >> "$xkeen_info_log"
            echo "  [info] Xray запущен" >> "$xkeen_info_log"
            echo "[end] Проверка статуса Xray выполнена" >> "$xkeen_info_log"
            echo "" >> "$xkeen_info_log"
        else
            echo -e "  Xray ${red}не запущен${reset}"
    
            echo "" >> "$xkeen_info_log"
            echo "[start] Проверка статуса Xray" >> "$xkeen_info_log"
            echo "  [info] Xray не запущен" >> "$xkeen_info_log"
            echo "[end] Проверка статуса Xray выполнена" >> "$xkeen_info_log"
            echo "" >> "$xkeen_info_log"
        fi
        ;;
    restart)
        stop > /dev/null 2>&1
        start > /dev/null 2>&1
        echo -e "  Xray ${green}перезапущен${reset}"
        ;;
    *)
        echo -e "  Команды: ${green}start${reset} | ${red}stop${reset} | ${yellow}restart${reset} | status"
        ;;
    esac
    
    exit 0

     

  2. 52 минуты назад, Sercha сказал:

    Добрый вечер. Прежде всего большое спасибо автору за такой своевременный и масштабный проект.

    У меня, к сожалению, пока не получается запустить систему. Прошу по возможности помощи.

    Прежде всего, мне чертовски важен UDP, так что вариант с встроенным прокси не рассматриваю. Так же не могу использовать сторонние прокси в клиентах - роутер должен всё переварить сам). Мне не нужна фильтрация и гео-роутинг - я хочу всё завернуть в туннель.

    Версия xkeen у меня актуальная. В режиме socks-прокси работает через внешний прокси-клиент (firefox), на стороне сервера подключение вижу (vless reality). Через встроенный прокси - не работает (не идёт трафик), ну да мне он и не нужен, я с ним особо не разбирался. А вот в режиме redirect весь трафик всегда идёт через провайдера, а не в туннель. В логах всё чисто, в системном логе xkeen рапортует о запуске в redirect режиме. Возможно подскажете, куда копать, спасибо! Далее прилагаю свои основные конфиги/диагностики. За основу брал "ленивый" пример из документации.

    08_outbounds.json заполнен по рыбе и работает, думаю не нужен.

    07_inbounds.json:

      Показать содержимое

    // Настройка исходящих соединений

    {
        "inbounds": [
            {
                "listen": "192.168.99.1",    // Адрес Вашего шлюза
                "port": 54836,    // Порт на котором будет слушать Xray. Рекомендуется выбрать порт от 49152 до 65535
                "protocol": "dokodemo-door",
                "settings": {
                    "network": "tcp,udp",
                    "followRedirect": true
                },
                "sniffing": {
                    "enabled": true,
                    "destOverride": [
                        "http",
                        "tls"
                    ]
                },
                "tag": "socks-in"
            }
        ]
    }

    10_inbounds.json:

      Показать содержимое

    {
      "routing": {
        "domainStrategy": "IPIfNonMatch",
        "rules": [
          {
            "inboundTag": ["socks-in"],
            "outboundTag": "proxy",
            "type": "field"
          }
        ]
      }
    }

    iptables -t nat -L PREROUTING -n -v

    на скриншоте

    Спасибо!

    image.png

    Доброго Вам вечера!

    ndm не отрабатывает сразу после внесения автоматом. Нужно немного подождать)
    Попробуйте запустить руками:

    /opt/etc/ndm/netfilter.d/xray.sh


    В ближайшем обновлении будет исправлено)

  3. 16 минут назад, Roman Balaev сказал:

    Подскажите, а можно использовать отличный от 443 порт, так как он уже занят у меня на сервере под обратный прокси? в конфиге написано настоятельно рекмендуется, чем обернется использование другого порта?

    Все будет работать, но провайдер | цензор может счесть трафик подозрительным. Так как классическое соединение для https запросов устанавливается через 443 порт.

    А цель связки сделать соединение максимально приближенное к обычному интернет-серфингу, где-нибудь на rutube | amd | google и т.п.

    Соответственно, Ваше соединение будет выглядеть [Устанавливает соединение по https > порт отличный от 443 = модифицированное соединение]

    В outbounds на keenetic рекомендуется использовать 443 порт, а на reverse proxy в inbounds — также может быть 443 порт. Все должно работать.

    • Спасибо 1
  4. 21 минуту назад, avn сказал:

    Скажу по поводу tproxy - все мои эксперименты окончились фиаско. Длинные цепочки на keenetic работают очень плохо за счет постоянного их пересоздания и очистки. Думаю про tproxy можно забыть в длинных цепочках. А redirect работает и с udp. С ним проблем не наблюдаю.

    Скажите, пожалуйста, а нет ли у Вас проблем с серверами игр Steam / WhatsApp?
    У некоторых пользователей они возникают в работе с Redirect, при том, что UDP включен.

    Т.е. redirect UDP есть и в inbounds по dokodemo-door udp влючен.

  5. 11 минуту назад, Роберт Зарипов сказал:

    а почему redirect при ручном перезапуске xray долго срабатывает 25 минут аж

    На данном этапе не инициируется ручной перезапуск netfilter скрипта.
    Используется автоматический запуск средствами ndm.

    Можете попробовать инициировать его вручную

    /opt/etc/ndm/netfilter.d/xray.sh


    В следующем обновлении будет также и инициация.

  6. 28 минут назад, Роберт Зарипов сказал:

    добрый день почему когда я перезагружаю роутер xray сразу срабатывает а когда я вручную перезапускаю он только через 24 минуты срабатывает у меня подключение через redirect tproxy

    Здравствуйте!

    За внесение правил в таблицу отвечает netfilter.
    Он срабатывает автоматически, раз в промежуток времени.

    Вы отредактировали init.d под tproxy?
    Так как Xkeen пока что не поддерживает Tproxy полноценно, только в ближайшие несколько дней будет обновление для него.

  7. 1 час назад, jameszero сказал:

    Самым производительным решением оказалась связка xkeen + kvas. При этом список доменов, которые должны идти через vpn, обрабатывает не xray, а kvas, остальные идут напрямую, минуя socks и redirect. В этом решении есть некоторые минусы, например kvas не работает с файлами geoip и geosite, поддерживается только список вручную указанных доменов, ну и автоматизации установки xkeen + kvas тоже нет, нужно поставить kvas с поддержкой shadowsocks, затем xkeen и вместо shadowsocks запустить xray на том-же порту по протоколу dokodemo-door (не используя режим redirect xkeen). Надеюсь авторы проектов скооперируются и выпустят совместимые между собой версии xkeen и kvas 💪 🙂

    Доброго Вам дня!
    В одном из следующих обновлений могу сделать аналогичный мод для Xkeen, по спискам)

    Чтобы Xray открывал только указанные в Вашем личном списке домены. Но, как Вы заметили, без GeoIP/GeoSite)

    • Лайк 3
  8. Всем доброго утра!

    Xkeen сейчас поддерживает работу в 2-х режимах

    1. Socks
    2. Redirect

    Socks — режим, который был изначально. Использовать можно через встроенный прокси-клиент Keenetic или через Proxy интерфейсы windows/браузера.

    Redirect — новый режим, перенаправляет вообще все соединение на Xray. Могут возникнуть проблемы с сервисами / играми, которые не любят работать с Proxy.
    Эта проблема должна быть решена с выходом Transparent proxy режима.

    Режимы включаются автоматически, в зависимости от содержимого Inbounds.
    Если у Вас соединение через Dokodemo-door, то будет использовать Redirect. Если через Socks — будет использоваться Socks.

    Выход режима Transparent proxy откладывается приблизительно на неделю, так как я немного заболела.

     

    • Спасибо 5
    • Лайк 1
  9. Только что, The_Same сказал:
    Не помогает, к сожалению. Меня сын проклянет сейчас уже😄

    Сожалею, что так вышло.
    Попробуйте следующее решение. Будем направлять не все соединение, а только с портов 443 и 80 на xray, то есть тех, которые используются для интернет-серфинга.

    Обновите init.d файл S24xray до следующего содержимого

    Скрытый текст
    #!/bin/sh
    ### Начало информации о службе
    # Краткое-описание: Запуск / Остановка Xray
    # version="0.8"  # Версия
    ### Конец информации о службе
    
    # Цвета для вывода
    green="\033[32m"
    red="\033[31m"
    yellow="\033[33m"
    reset="\033[0m"
    
    # Пути и переменные
    xkeen_info_log="/opt/var/log/xkeen/info.log"
    xkeen_error_log="/opt/var/log/xkeen/error.log"
    path="/opt/bin:/opt/sbin:/sbin:/bin:/usr/sbin:/usr/bin"
    xray_path="xray"
    xray_config="/opt/etc/xray/configs"
    app_name="Xkeen"
    interface="br0"
    
    export XRAY_LOCATION_ASSET="/opt/etc/xray/dat/"
    
    # Функции для ведения журнала в роутере
    log_notice_init() {
        local header="${app_name}"
        logger -p notice -t "${header}" "${1}"
    }
    
    log_error_init() {
        local header="${app_name}"
        logger -p error -t "${header}" "${1}"
    }
    
    exit_with_error() {
        echo "Ошибка: $1"
        exit 1
    }
    
    # Функция для определения файла inbounds
    determine_config_file() {
    	config_file=""
    
    	if [ -n "$(ls "$xray_config" | grep 'inbounds')" ]; then
    		config_file="$xray_config/$(ls "$xray_config" | grep 'inbounds')"
    	elif [ -e "$xray_config/config.json" ]; then
    		config_file="$xray_config/config.json"
    	fi
    }
    
    # Функция для определения порта xray
    determine_xray_port() {
    	xray_port=$(cat "$config_file" | grep -o '"port": [0-9]*' | awk '{print $2}' | head -n 1)
    	if [ -z "$xray_port" ]; then
    		exit_with_error "Не удалось определить xray_port из настроек."
    	else
    		# Проверяем, что xray_port является числом
    		if ! [[ "$xray_port" =~ ^[0-9]+$ ]]; then
    			exit_with_error "xray_port не является допустимым числом."
    		fi
    	fi
    }
    
    add_rules () {
    determine_config_file
    determine_xray_port
    if grep -q '"protocol": "dokodemo-door"' "$config_file"; then
        if grep -q '"tproxy": "tproxy"' "$config_file"; then
            xray_mode="tproxy"
        else
            xray_mode="redirect"
        fi
    else
    xray_mode="socks"
    fi
    
    case "$xray_mode" in
        "tproxy")
            log_notice_init "Найден «dokodemo-door» с режимом Transparent proxy в inbounds. Xray запущен в режиме Transparent proxy."
            ;;
        "redirect")
            log_notice_init "Найден «dokodemo-door» в inbounds. Xray запущен в режиме Redirect."
            ;;
        "socks")
            log_notice_init "Не найден «dokodemo-door» в inbounds. Xray запущен в обычном режиме. Для работы Xray нужно направить на него соединение любым удобным Вам способом."
            ;;
        *)
            log_notice_init "Ошибка: Недопустимое значение xray_mode: $xray_mode"
            exit 1
            ;;
    esac
    
    echo -n > /opt/etc/ndm/netfilter.d/xray.sh
    cat > /opt/etc/ndm/netfilter.d/xray.sh <<EOL
    #!/bin/sh
    
    xray_mode=$xray_mode
    
    if [ "\$xray_mode" = "socks" ]; then
        exit 0
    	
    elif [ "\$xray_mode" = "redirect" ]; then
    if ! iptables -t nat -C PREROUTING -i $interface -p udp --dport 80 -j REDIRECT --to-port $xray_port 2>/dev/null; then
        iptables -t nat -A PREROUTING -i $interface -p udp --dport 80 -j REDIRECT --to-port $xray_port
    fi
    
    if ! iptables -t nat -C PREROUTING -i $interface -p udp --dport 443 -j REDIRECT --to-port $xray_port 2>/dev/null; then
        iptables -t nat -A PREROUTING -i $interface -p udp --dport 443 -j REDIRECT --to-port $xray_port
    fi
    
    if ! iptables -t nat -C PREROUTING -i $interface -p tcp --dport 80 -j REDIRECT --to-port $xray_port 2>/dev/null; then
        iptables -t nat -A PREROUTING -i $interface -p tcp --dport 80 -j REDIRECT --to-port $xray_port
    fi
    
    if ! iptables -t nat -C PREROUTING -i $interface -p tcp --dport 443 -j REDIRECT --to-port $xray_port 2>/dev/null; then
        iptables -t nat -A PREROUTING -i $interface -p tcp --dport 443 -j REDIRECT --to-port $xray_port
    fi
    
    if ! ip6tables -t nat -C PREROUTING -i $interface -p udp --dport 80 -j REDIRECT --to-port $xray_port 2>/dev/null; then
        ip6tables -t nat -A PREROUTING -i $interface -p udp --dport 80 -j REDIRECT --to-port $xray_port
    fi
    
    if ! ip6tables -t nat -C PREROUTING -i $interface -p udp --dport 443 -j REDIRECT --to-port $xray_port 2>/dev/null; then
        ip6tables -t nat -A PREROUTING -i $interface -p udp --dport 443 -j REDIRECT --to-port $xray_port
    fi
    
    if ! ip6tables -t nat -C PREROUTING -i $interface -p tcp --dport 80 -j REDIRECT --to-port $xray_port 2>/dev/null; then
        ip6tables -t nat -A PREROUTING -i $interface -p tcp --dport 80 -j REDIRECT --to-port $xray_port
    fi
    
    if ! ip6tables -t nat -C PREROUTING -i $interface -p tcp --dport 443 -j REDIRECT --to-port $xray_port 2>/dev/null; then
        ip6tables -t nat -A PREROUTING -i $interface -p tcp --dport 443 -j REDIRECT --to-port $xray_port
    fi
    
    	
    elif [ "\$xray_mode" = "tproxy" ]; then
        iptables -t mangle -N XRAY
        iptables -t mangle -N XRAY_SELF
        iptables -t mangle -N DIVERT
    else
        echo "Ошибка: Недопустимое значение переменной xray_mode: $xray_mode"
        exit 1
    fi
    
    EOL
    }
    
    # Функция для удаления правил redirect для адресов IPv4
    delete_rules() {
            echo -n > /opt/etc/ndm/netfilter.d/xray.sh
    		determine_config_file
    		determine_xray_port
    
    		# Проверка существования правил и удаление их, если они существуют
    		if iptables -t nat -C PREROUTING -i $interface -p udp --dport 80 -j REDIRECT --to-port $xray_port 2>/dev/null; then
    			iptables -t nat -D PREROUTING -i $interface -p udp --dport 80 -j REDIRECT --to-port $xray_port
    		fi
    
    		if iptables -t nat -C PREROUTING -i $interface -p udp --dport 443 -j REDIRECT --to-port $xray_port 2>/dev/null; then
    			iptables -t nat -D PREROUTING -i $interface -p udp --dport 443 -j REDIRECT --to-port $xray_port
    		fi
    
    		if iptables -t nat -C PREROUTING -i $interface -p tcp --dport 80 -j REDIRECT --to-port $xray_port 2>/dev/null; then
    			iptables -t nat -D PREROUTING -i $interface -p tcp --dport 80 -j REDIRECT --to-port $xray_port
    		fi
    
    		if iptables -t nat -C PREROUTING -i $interface -p tcp --dport 443 -j REDIRECT --to-port $xray_port 2>/dev/null; then
    			iptables -t nat -D PREROUTING -i $interface -p tcp --dport 443 -j REDIRECT --to-port $xray_port
    		fi
    
    		if ip6tables -t nat -C PREROUTING -i $interface -p udp --dport 80 -j REDIRECT --to-port $xray_port 2>/dev/null; then
    			ip6tables -t nat -D PREROUTING -i $interface -p udp --dport 80 -j REDIRECT --to-port $xray_port
    		fi
    
    		if ip6tables -t nat -C PREROUTING -i $interface -p udp --dport 443 -j REDIRECT --to-port $xray_port 2>/dev/null; then
    			ip6tables -t nat -D PREROUTING -i $interface -p udp --dport 443 -j REDIRECT --to-port $xray_port
    		fi
    
    		if ip6tables -t nat -C PREROUTING -i $interface -p tcp --dport 80 -j REDIRECT --to-port $xray_port 2>/dev/null; then
    			ip6tables -t nat -D PREROUTING -i $interface -p tcp --dport 80 -j REDIRECT --to-port $xray_port
    		fi
    
    		if ip6tables -t nat -C PREROUTING -i $interface -p tcp --dport 443 -j REDIRECT --to-port $xray_port 2>/dev/null; then
    			ip6tables -t nat -D PREROUTING -i $interface -p tcp --dport 443 -j REDIRECT --to-port $xray_port
    		fi
    }
    
    # Функция для проверки статуса xray
    xray_status() {
        if pgrep -f "$xray_path run -confdir $xray_config" > /dev/null; then
            return 0  # Процесс существует и работает
        else
            return 1  # Процесс не существует
        fi
    }
    
    # Функция для запуска Xray | Особая благодарность jameszero
    start() {
        log_notice_init "Инициирован запуск Xray"
    
        max_retries=10  # Максимальное количество попыток запуска
        retries=0
        delay=1  # Начальная задержка в секундах
    
        while [ $retries -lt $max_retries ]; do
            if xray_status; then
                echo -e "  Xray уже ${green}запущен${reset}"
                log_notice_init "Не удалось запустить Xray, так как он уже запущен"
                echo "" >> "$xkeen_error_log"
                echo "[start] Проверка статуса Xray" >> "$xkeen_error_log"
                echo "  [error] Xray уже запущен" >> "$xkeen_error_log"
                echo "[end] Проверка статуса Xray выполнена" >> "$xkeen_error_log"
                echo "" >> "$xkeen_error_log"
                return 0  # Прерываем цикл, так как Xray уже запущен
            else
                "$xray_path" run -confdir "$xray_config" &
                sleep $delay
    
                if xray_status; then
                    echo -e "  Xray ${green}запущен${reset}"
                    log_notice_init "Xray запущен"
    				
                    # Устанавливаем правила IPv4 и IPv6
                    add_rules
    
                    echo "" >> "$xkeen_info_log"
                    echo "[end] Проверка статуса Xray" >> "$xkeen_info_log"
                    echo "  [info] Xray запущен" >> "$xkeen_info_log"
                    echo "[end] Проверка статуса Xray выполнена" >> "$xkeen_info_log"
                    echo "" >> "$xkeen_info_log"
                    return 0  # Прерываем цикл, так как Xray успешно запущен
                else
                    retries=$((retries + 1))
                    echo -e "  Попытка повторного запуска Xray: $retries из $max_retries"
                    log_notice_init "Попытка повторного запуска Xray: $retries из $max_retries"
                    delay=$((delay + 1))  # Увеличиваем задержку на 1 секунду
                fi
            fi
        done
    
        # Если достигнуто максимальное количество попыток и Xray не запущен, выводим ошибку
        echo -e "  Не удалось запустить Xray после $max_retries попыток"
        log_error_init "Не удалось запустить Xray после $max_retries попыток"
    
        echo "" >> "$xkeen_error_log"
        echo "[start] Проверка статуса Xray" >> "$xkeen_error_log"
        echo "  [error] Не удалось запустить Xray после $max_retries попыток" >> "$xkeen_error_log"
        echo "[end] Проверка статуса Xray выполнена" >> "$xkeen_error_log"
        echo "" >> "$xkeen_error_log"
    }
    
    
    # Функция для остановки xray
    stop() {
        log_notice_init "Инициирована остановка Xray"
        if xray_status; then
    	
    		# Удаляем правила IPv4 и IPv6
    		iptables -t nat -A PREROUTING -i "$interface" -s 192.0.0.0/24 -j ACCEPT
    		sleep 1
            delete_rules
    		sleep 1
    		iptables -t nat -D PREROUTING -i "$interface" -s 192.0.0.0/24 -j ACCEPT
    		
            killall -q -9 "$xray_path"
            echo -e "  Xray ${yellow}остановлен${reset}"
            log_notice_init "Xray остановлен"
    
    
            echo "" >> "$xkeen_info_log"
            echo "[start] Проверка статуса Xray" >> "$xkeen_info_log"
            echo "  [info] Xray остановлен" >> "$xkeen_info_log"
            echo "[end] Проверка статуса Xray выполнена" >> "$xkeen_info_log"
            echo "" >> "$xkeen_info_log"
        else
            echo -e "  Xray ${red}не запущен${reset}"
            log_error_init "Остановка Xray не удалась. Xray не был запущен"
    
            echo "" >> "$xkeen_error_log"
            echo "[start] Проверка статуса Xray" >> "$xkeen_error_log"
            echo "  [error] Xray не был запущен" >> "$xkeen_error_log"
            echo "[end] Проверка статуса Xray выполнена" >> "$xkeen_error_log"
            echo "" >> "$xkeen_error_log"
        fi
    }
    
    # Обработка аргументов командной строки
    case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    status)
        if xray_status; then
            echo -e "  Xray ${green}запущен${reset}"
    
            echo "" >> "$xkeen_info_log"
            echo "[start] Проверка статуса Xray" >> "$xkeen_info_log"
            echo "  [info] Xray запущен" >> "$xkeen_info_log"
            echo "[end] Проверка статуса Xray выполнена" >> "$xkeen_info_log"
            echo "" >> "$xkeen_info_log"
        else
            echo -e "  Xray ${red}не запущен${reset}"
    
            echo "" >> "$xkeen_info_log"
            echo "[start] Проверка статуса Xray" >> "$xkeen_info_log"
            echo "  [info] Xray не запущен" >> "$xkeen_info_log"
            echo "[end] Проверка статуса Xray выполнена" >> "$xkeen_info_log"
            echo "" >> "$xkeen_info_log"
        fi
        ;;
    restart)
        stop > /dev/null 2>&1
        start > /dev/null 2>&1
        echo -e "  Xray ${green}перезапущен${reset}"
        ;;
    *)
        echo -e "  Команды: ${green}start${reset} | ${red}stop${reset} | ${yellow}restart${reset} | status"
        ;;
    esac
    
    exit 0

    Потом 

    xkeen -stop
    xkeen -start


     

    • Спасибо 1
  10. 15 минут назад, bigpu сказал:

    могли бы подсказать конфиг xray, чтобы пока юзать его через статические маршруты, как с VPN сейчас? То бишь, весь трафик идет через прокси xray, в маршрутах Кинетик я выбираю IP или их диапазон, конкретного заблокированного ресурса, который открывается через прокси.

    P.S. да, геморно,  но так и скорость будет в режиме direct вся, что дают оба провайдера, и приложение будет работоспособно) Честно, изначально хотел Xray как реализацию обхода блокировок "судного дня".

    P.P.S. с удовольствием перейду полностью на Xray, как только он заработает корректно с приложением Кинетик.

    В таком случае Вам нужно оставить в routing только соединение «proxy».
    Использовать файл автоматического старта Xray из предыдущих версий Xkeen

    Скрытый текст
    #!/bin/sh
    ### Начало информации о службе
    # Краткое-описание: Запуск / Остановка Xray
    # version="0.5"  # Версия
    # mode="redirect" # Мод
    ### Конец информации о службе
    
    green="\033[32m"
    red="\033[31m"
    yellow="\033[33m"
    reset="\033[0m"
    
    xkeen_info_log="/opt/var/log/xkeen/info.log"
    xkeen_error_log="/opt/var/log/xkeen/error.log"
    
    path="/opt/bin:/opt/sbin:/sbin:/bin:/usr/sbin:/usr/bin"
    xray_path="xray"
    xray_config="/opt/etc/xray/configs"
    app_name="Xkeen"
    
    export XRAY_LOCATION_ASSET="/opt/etc/xray/dat/"
    
    # Функция для ведения журнала в роутере
    log_notice_init() {
    	local header="${app_name}"
    	logger -p notice -t "${header}" "${1}"
    }
    
    log_error_init() {
    	local header="${app_name}"
    	logger -p error -t "${header}" "${1}"
    }
    
    exit_with_error() {
    	echo "Ошибка: $1"
    	exit 1
    }
    
    # Функция для проверки статуса xray
    xray_status() {
    	if pgrep -f "$xray_path run -confdir $xray_config" > /dev/null; then
    		return 0  # Процесс существует и работает
    	else
    		return 1  # Процесс не существует
    	fi
    }
    
    # Функция для запуска xray | Особая благодарность jameszero
    start() {
    	log_notice_init "Инициирован запуск Xray"
    
    	max_retries=3  # Максимальное количество попыток запуска
    	retries=0
    
    	while [ $retries -lt $max_retries ]; do
    		if xray_status; then
    			echo -e "  Xray уже ${green}запущен${reset}"
    			log_notice_init "Не удалось запустить Xray, так как он уже запущен"
    
    			echo "" >> "$xkeen_error_log"
    			echo "[start] Проверка статуса Xray" >> "$xkeen_error_log"
    			echo "  [error] Xray уже запущен" >> "$xkeen_error_log"
    			echo "[end] Проверка статуса Xray выполнена" >> "$xkeen_error_log"
    			echo "" >> "$xkeen_error_log"
    			return 0  # Прерываем цикл, так как Xray уже запущен
    		else
    			"$xray_path" run -confdir "$xray_config" &
    			sleep 10
    
    			if xray_status; then
    				echo -e "  Xray ${green}запущен${reset}"
    				log_notice_init "Xray запущен"
    				
    				echo "" >> "$xkeen_info_log"
    				echo "[end] Проверка статуса Xray" >> "$xkeen_info_log"
    				echo "  [info] Xray запущен" >> "$xkeen_info_log"
    				echo "[end] Проверка статуса Xray выполнена" >> "$xkeen_info_log"
    				echo "" >> "$xkeen_info_log"
    				return 0  # Прерываем цикл, так как Xray успешно запущен
    			else
    				retries=$((retries + 1))
    				echo -e "  Попытка повторного запуска Xray: $retries из $max_retries"
    				log_notice_init "Попытка повторного запуска Xray: $retries из $max_retries"
    				sleep 10
    			fi
    		fi
    	done
    
    	# Если достигнуто максимальное количество попыток и Xray не запущен, выводим ошибку
    	echo -e "  Не удалось запустить Xray после $max_retries попыток"
    	log_error_init "Не удалось запустить Xray после $max_retries попыток"
    
    	echo "" >> "$xkeen_error_log"
    	echo "[start] Проверка статуса Xray" >> "$xkeen_error_log"
    	echo "  [error] Не удалось запустить Xray после $max_retries попыток" >> "$xkeen_error_log"
    	echo "[end] Проверка статуса Xray выполнена" >> "$xkeen_error_log"
    	echo "" >> "$xkeen_error_log"
    }
    
    # Функция для остановки xray
    stop() {
    	log_notice_init "Инициирована остановка Xray"
    	if xray_status; then
    		killall -q -9 "$xray_path"
    		echo -e "  Xray ${yellow}остановлен${reset}"
    		log_notice_init "Xray остановлен"
    
    		echo "" >> "$xkeen_info_log"
    		echo "[start] Проверка статуса Xray" >> "$xkeen_info_log"
    		echo "	[info] Xray остановлен" >> "$xkeen_info_log"
    		echo "[end] Проверка статуса Xray выполнена" >> "$xkeen_info_log"
    		echo "" >> "$xkeen_info_log"
    	else
    		echo -e "  Xray ${red}не запущен${reset}"
    		log_error_init "Остановка Xray не удалась. Xray не был запущен"
    
    		echo "" >> "$xkeen_error_log"
    		echo "[start] Проверка статуса Xray" >> "$xkeen_error_log"
    		echo "	[error] Xray не был запущен" >> "$xkeen_error_log"
    		echo "[end] Проверка статуса Xray выполнена" >> "$xkeen_error_log"
    		echo "" >> "$xkeen_error_log"
    	fi
    }
    
    # Обработка аргументов командной строки
    case "$1" in
    start)
    	start
    	;;
    stop)
    	stop
    	;;
    status)
    	if xray_status; then
    		echo -e "  Xray ${green}запущен${reset}"
    
    		echo "" >> "$xkeen_info_log"
    		echo "[start] Проверка статуса Xray" >> "$xkeen_info_log"
    		echo "	[info] Xray запущен" >> "$xkeen_info_log"
    		echo "[end] Проверка статуса Xray выполнена" >> "$xkeen_info_log"
    		echo "" >> "$xkeen_info_log"
    	else
    		echo -e "  Xray ${red}не запущен${reset}"
    
    		echo "" >> "$xkeen_info_log"
    		echo "[start] Проверка статуса Xray" >> "$xkeen_info_log"
    		echo "	[info] Xray не запущен" >> "$xkeen_info_log"
    		echo "[end] Проверка статуса Xray выполнена" >> "$xkeen_info_log"
    		echo "" >> "$xkeen_info_log"
    	fi
    	;;
    restart)
    	stop > /dev/null 2>&1
    	start > /dev/null 2>&1
    	echo -e "  Xray ${green}перезапущен${reset}"
    	;;
    *)
    	echo -e "  Команды: ${green}start${reset} | ${red}stop${reset} | ${yellow}restart${reset} | status"
    	;;
    esac
    
    exit 0

    Соединение оставить также, через dokodemo-door и проложить маршрут до порта на котором слушает Xray.
    Теоретически, должно заработать
     

    • Спасибо 1
  11. 2 минуты назад, The_Same сказал:

    Вылезла проблема откуда не ждал🫢 Сын играет в CS:GO, когда было настроено через прокси кинетика играл спокойно, в режиме redirect сервера в игре недоступны. Выключаю xray, сервера в игре доступны. Куда копать?

    Тут можно посмотреть в 2 направлениях.
    1. Попробуйте добавить в routing в direct подключение 

    ext:geosite_v2fly.dat:steam

    2. Попробуйте сменить поток на клиентской стороне на 

    xtls-rprx-vision-udp443
    • Спасибо 1
  12. 25 минут назад, The_Same сказал:

    Кстати, Quic РКН до сих пор блокирует? Если да, то нужная фича, получается. Заворачивая Quic в TCP мы по прежнему можем его использовать, правильно я понимаю?

    mux то нам для чего? 

    На данном XTLS (не путать с ядром Xray) поддерживает транспорт TCP, mKCP и DomainSocket.
    Quic не очень подходит для проксирования. Внутри него есть механизмы, аналогичные функциональности TCP, такие как управление потоками, адаптация к изменяющимся условиям сети и некоторые другие.

    Когда он передается как UDP-трафик через протокол VLess, основным протоколом является TCP, что эквивалентно двум слоям TCP. 

    Что касается mux, в контексте Quicи других протоколов, он может улучшить производительность и снизить задержки, объединяя несколько потоков в одном соединении без создания множества отдельных соединений.

    • Лайк 1
  13. 1 минуту назад, The_Same сказал:

    Все-таки, согласно документации, параметр xtls-rprx-vision-udp443 относится к UserObject, на стороне сервера это не указываем, там остается xtls-rprx-vision. Либо я чего-то не понял🙂

    Да, на стороне сервера можно оставить только

    xtls-rprx-vision

    Это значит, что на сервер Вы можете отправлять запросы http.3 | Quic, а с сервера получать классические ответы, что считается более надежным.

    Схематично выглядит так

    Скрытый текст

    image.thumb.png.23302be3e352a6b8137a3400f90c1aee.png


    Mux должен быть включен только на стороне клиента. Для просмотра видео, загрузки и тестирования скоростей имеет негативные последствия.
    Позволяет объединить несколько запросов к серверу в 1.

    К примеру, мы отправляем 16 TCP запросов, Mux собирает их в 1 и отправляет на сервер.

     

    • Спасибо 1
  14. 24 минуты назад, The_Same сказал:

    Какой в этом практический смысл?

    Согласно китайским товарищам в чате Telegram, немного меняет логику обработки UDP в режиме мультиплексирования на 443 порту сервера и допускает обработку Quic | http.3.

    Для mux нужно будет также сменить "xudpProxyUDP443": "reject"  на "xudpProxyUDP443": "allow".

    Flow также можно менять только на стороне клиента.
    На стороне сервера следует менять только в редких случаях.

    Пример секции mux в клиентской части

    Скрытый текст
    "mux": { 
      "enabled": true, "concurrency": -1, "http3",
      "concurrency": -1, "xudpConcurrency". 
      "xudpConcurrency": 16, "xudpProxyUDP". 
      "xudpProxyUDP443": "allow"
    }


    Более детального описания, к сожалению, нет. Тесты также еще в пути. В общем, можно попробовать)

    • Спасибо 1
    • Лайк 2
  15. 55 минут назад, The_Same сказал:

    Всем добрый вечер, добрался до роутера. В первую очередь, огромное спасибо @Skrill0 за проделанную работу! Касательно тестов, с redirect скорость через proxy такая:

    Proxy_speed.thumb.png.584dec14e168461b4482964ec8ac0ecb.png

    Скорость через direct такая:

    Direct_speed.thumb.png.b90ae3914c9201f32fc03a650f9ad44a.png

    Тестировал специально до европейских серверов, ибо большинство проксируемых ресурсов для моих задач находятся в европе.

    П.С. Обязательно попозже скину на кофе с тортиком😜

    Благодарю)

    В дополнение ко всему на данном этапе можно попробовать сменить на сервере и в outbounds параметр flow

    xtls-rprx-vision

    на 

    xtls-rprx-vision-udp443
    • Спасибо 1
  16. 1 минуту назад, bigpu сказал:

    видимо, да.

    Да тупо в Спидтест, в режиме прокси показывало 50Мбит+, с ограничением в шапке "приблизительно 40-60мб/сек". Так что показывает более-менее верно, чтобы загоняться с более точным замером)

    Если Вы из России, то для более точных замеров лучше использовать сервис от Yandex
    Они проводят замеры на своих серверах.

    Speedtest работает скорее в роли Proxy.
    Если при замере заглянуть в журнал доступа, то сервер, который может выдать Speedtest, иногда оказывается в соединении proxy, когда он сам откроется через direct. В таком случае замер будет некачественным.
    Также, стоит помнить про разницу из-за шифрования. 

    Правильно ли я поняла, что через встроенный прокси-клиент Ваше соединение достигало ~50мб/сек, а через redirect ~180?

  17. Только что, bigpu сказал:

    от Tproxy не стоит ждать скоростей больших чем сейчас 180Мбит с redirect, верно? Интересует скорость именно в режиме direct.

    Да, на данном этапе скорость упирается в оборудование. Пока что решения не найдено.
    Tproxy должен исправить проблему в локальных сетях с отображением, к примеру, других устройств в приложении.

    На ultra 1811 с redirect скорость с шифрованием всего соединения через Proxy упирается в download 300 и upload 550.
    * Шифрование применяется не часто, так как большая часть соединений уже шифрованы. Это для примера. На деле скорость будет выше.

    Видимо, на viva скорость упирается в 180.
    Скажите, пожалуйста, каким методом проводили замер скорости?
     

    • Спасибо 1
  18. Всем доброго дня!

    Вышла версия 0.9.2 | Благодарю @adk за тестирование

    Журнал

    Скрытый текст
    1. Улучшена логика работы обновлений
    2. Доработан ключ переустановки Xray «-x»
    3. Добавлено больше информации в журнал роутера
    4. Добавлен задел под Tproxy | Пока что нельзя использовать


    Обновиться можно командой

    xkeen -uk

     

     

    • Спасибо 5
  19. 15 минут назад, adk сказал:

    К сожалению, у меня не запустилось...

    Утром проверил версию xkeen - обновилась автоматом

      Показать содержимое

    image.png.40597f047b7d45b3f395e0b6e4c2db45.png

    Актуализировал инбаундс, убрал прокси-соединение из веба кинетика

      Показать содержимое

    image.png.ff5c6ceb84970cf460192f0a7df6410e.png

     

    Вывод iptables -t nat -L PREROUTING -n -v

      Показать содержимое

    image.png.cc3cdc55071a1f215ebef974d3b2c3d4.png

    Ребут роутера, stop\start xkeen не помогли...

    в логах роутера запись из цитаты не появлялась...

     

    Доброго Вам дня!
    Судя по команде

    iptables -t nat -L PREROUTING -n -v

    Правила redirect добавлены успешно.
    Сохраняется ли у Вас доступ к интернету? Попробуйте добавить в proxy-соединение speedtest или 2ip. 
    Какой будет IP, сервера или Ваш?

    Также, попробуйте, пожалуйста, переустановить xkeen. Вижу некоторые проблемы с accept таблицей.

    xkeen -stop
    xkeen -k

     

    • Спасибо 1
  20. 1 минуту назад, bigpu сказал:

    нет, как вижу - /opt/bin/sh: iptables: not found

    Видимо, не установился iptables.
    Вашу проблему решит

    opkg install iptables
    xkeen -stop
    xkeen -start


    Дополнительно проверю установщик необходимых пакетов. Благодарю за информацию!

    • Спасибо 1
×
×
  • Создать...

Важная информация

На этом сайте используются файлы cookie. Нажимая "Я принимаю" или продолжая просмотр сайта, вы разрешаете их использование: Политика конфиденциальности.