Jump to content

Роберт Зарипов

Forum Members
  • Posts

    51
  • Joined

  • Last visited

Posts posted by Роберт Зарипов

  1. Добрый день. . Я хотел спросить у вас у keenetic peak kn-2710 Хуже wi-fi покрытие чем у keenetic ultra kn-1810 У меня почему-то на двухкомнатную квартиру не хватает Его  . Чуть Отойди от комнаты где он стоит . И . Скорость . Падает . На телефоне . Я ничего не понимаю . Либо это брак либо . Я . Плохо закручиваю . Антенны с keenetic ultra kn-1810 Хватало на всю квартиру

    • Confused 2
  2. 3 часа назад, Skrill0 сказал:

    Можно найти строки в init файле S24xray

    for protocol in $protocols; do
      \$cmd -A "\$chain" -p "\$protocol" -j $redirect_mode --to-port $dokodemo_port
    done


    И заменить на

    for protocol in $protocols; do
      \$cmd -A "\$chain" -p "\$protocol" --dport 443 -j $redirect_mode --to-ports $dokodemo_port
      \$cmd -A "\$chain" -p "\$protocol" --dport 80 -j $redirect_mode --to-ports $dokodemo_port
    done


    Немного позже добавлю в init переменную, в которую можно будет внести все порты, с которых требуется перенаправление)

     

    15 минут назад, The_Same сказал:

    Первый скрин в режиме redirect до обновления? Второй после обновления и тоже redirect?

     

  3. 22 минуты назад, Skrill0 сказал:

    Можно найти строки в init файле S24xray

    for protocol in $protocols; do
      \$cmd -A "\$chain" -p "\$protocol" -j $redirect_mode --to-port $dokodemo_port
    done


    И заменить на

    for protocol in $protocols; do
      \$cmd -A "\$chain" -p "\$protocol" --dport 443 -j $redirect_mode --to-ports $dokodemo_port
      \$cmd -A "\$chain" -p "\$protocol" --dport 80 -j $redirect_mode --to-ports $dokodemo_port
    done


    Немного позже добавлю в init переменную, в которую можно будет внести все порты, с которых требуется перенаправление)

    спасибо и скорость увеличилась и вапсап работает

    • Upvote 1
  4. 1 минуту назад, Skrill0 сказал:

    Извиняюсь, возможно, непонятно выразилась.
    Нужно было удалить именно комментарий.

    Вот так должен выглядеть в итоге полный inbounds, как описал выше @bigpu

      Скрыть содержимое
    // Настройка исходящих соединений
    
    {
        "inbounds": [
    		{
    			"listen": "192.168.1.1",    // Адрес Вашего шлюза
    			"port": 54836,
    			"protocol": "dokodemo-door",
    			"settings": {
    				"network": "tcp,udp",
    				"followRedirect": true
    			},
    			"sniffing": {
    				"enabled": true,
    				"destOverride": [
    					"http",
    					"tls"
    				]
    			},
    			"tag": "socks-in"
    		}
        ]
    }


     

    спасибо всем все работает

    • Upvote 2
  5. 2 минуты назад, bigpu сказал:

    вот корректный код:

    // Настройка исходящих соединений
    
    {
        "inbounds": [
    		{
    			"listen": "192.168.1.1",    // Адрес Вашего шлюза
    			"port": 54836,
    			"protocol": "dokodemo-door",
    			"settings": {
    				"network": "tcp,udp",
    				"followRedirect": true
    			},
    			"sniffing": {
    				"enabled": true,
    				"destOverride": [
    					"http",
    					"tls"
    				]
    			},
    			"tag": "socks-in"
    		}
        ]
    }

     

     извините Skrill0 мне сказала удалит все кроме порта

  6. сделал как вы сказали получаю вот это

     

    Xray не запустить
    ~ # xkeen -start
    Xray 1.8.4 (Xray, Penetrates Everything.) Custom (go1.21.0 linux/mipsle)
    A unified platform for anti-censorship.
    2023/10/27 09:57:31 Using confdir from env: /opt/etc/xray/configs
    2023/10/27 09:57:31 [Info] infra/conf/serial: Reading config: /opt/etc/xray/configs/01_log.json
    2023/10/27 09:57:31 [Info] infra/conf/serial: Reading config: /opt/etc/xray/configs/02_stats.json
    2023/10/27 09:57:31 [Info] infra/conf/serial: Reading config: /opt/etc/xray/configs/03_dns.json
    2023/10/27 09:57:31 [Info] infra/conf/serial: Reading config: /opt/etc/xray/configs/04_reverse.json
    2023/10/27 09:57:31 [Info] infra/conf/serial: Reading config: /opt/etc/xray/configs/05_fake-dns.json
    2023/10/27 09:57:31 [Info] infra/conf/serial: Reading config: /opt/etc/xray/configs/06_transport.json
    2023/10/27 09:57:31 [Info] infra/conf/serial: Reading config: /opt/etc/xray/configs/07_inbounds.json
    Failed to start: main: failed to load config files: [/opt/etc/xray/configs/01_log.json /opt/etc/xray/configs/02_stats.json /opt/etc/xray/configs/03_dns.json /opt/etc/xray/configs/04_reverse.json /opt/etc/xray/configs/05_fake-dns.json /opt/etc/xray/configs/06_transport.json /opt/etc/xray/configs/07_inbounds.json /opt/etc/xray/configs/08_outbounds.json /opt/etc/xray/configs/09_policy.json /opt/etc/xray/configs/11_fallbacks.json] > infra/conf/serial: failed to decode config: /opt/etc/xray/configs/07_inbounds.json > infra/conf/serial: failed to read config file at line 7 char 3 > invalid character '}' looking for beginning of object key string
      Xray не запустить
    ~ #
     

  7. 14 минуты назад, Skrill0 сказал:

    Нужно создать новую политику подключения с именем «Xkeen», как на скриншоте
    Xray будет работать только с устройствами из этой политики.

      Скрыть содержимое

    image.thumb.png.164da477603dad14a76ffe2c01efaaf2.png


    В эту политику добавить устройства, которые должны использовать «Xray»

      Скрыть содержимое

    image.thumb.png.2ac24c09cda19a797adf991ccb10b564.png


    Также, нужно удалить комментарий в inbounds, если у Вас он есть, чтобы остался только порт
    К примеру, сейчас у Вас
    «"port": 54836,    // Порт на котором будет слушать Xray. Рекомендуется выбрать порт от 49152 до 65535»

    Должно остаться
    «port": 54836,»

    После этого xkeen -restart в PuTTY.

    вот так

     

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

    {
        "inbounds": [
            {
                "port": 54836,    // Порт на котором будет слушать Xray. Рекомендуется выбрать порт от 49152 до 65535
     

  8. 6 минут назад, Skrill0 сказал:

    После обновления Xray работает с учетом политик, а не на все соединение сразу. 
    Это позволит увеличить скорость доступа и снизить нагрузку на устройство.

    и как это все должно выглядеть правильно чтобы не было ошибок с моей стороный

  9. 6 минут назад, Skrill0 сказал:

    Доброго Вам дня!

    Скажите, пожалуйста, а внеслись ли правила в iptables?

    iptables -t nat -L PREROUTING


    Внизу должна быть цепь XRAY_IPV4

    А внутри нее правила с Redirect

    iptables -t nat -L XRAY_IPV4


    Примерно такие внизу цепи

    REDIRECT   tcp  --  anywhere             anywhere             redir ports 54837
    REDIRECT   udp  --  anywhere             anywhere             redir ports 54837


    Если все на месте, проверьте, пожалуйста, внесли ли Вы клиента в политику и правильно ли политика называется?


    Должна быть назвала «Xkeen», если не меняли переменную.

    я вообще  нечего не вносил раньше и без этого работало

  10. 30 минут назад, insdr сказал:

    А можете чуть подробнее описать как сделали на кинетике в GUI?

    Нарисовал правила фаерволла для коннекта на запрет всего кроме 80/443, но результата не видно.

    Спасибо.

    надо правит сам файл автозапуска 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 br0 -p tcp --dport 443 -j REDIRECT --to-port $xray_port 2>/dev/null; then
            iptables -t nat -A PREROUTING -i br0 -p tcp --dport 443 -j REDIRECT --to-port $xray_port
        fi

        if ! iptables -t nat -C PREROUTING -i br0 -p udp --dport 443 -j REDIRECT --to-port $xray_port 2>/dev/null; then
            iptables -t nat -A PREROUTING -i br0 -p udp --dport 443 -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

  11. 22 часа назад, VladimirM сказал:

    Я использую xkeen на 2 кинетиках, и чуток модифицированную версию скрипта на более слабом роутере Huawei, с entware. Так вот на слабом роутере использую "ленивую конфигурацию", в режиме direct (не socks-прокси). Модуля TRPOXY на том старом роутере вообще нет. В ленивой конфигурации, кто особо не в теме - через vds идёт трафик по заблокированным ресурсам, а всё остальное - мимо прокси. Но я отправляю в xray только http https

    iptables -t nat -A PREROUTING -i br0 -p tcp --dport 80 -j REDIRECT --to-port 54837
    iptables -t nat -A PREROUTING -i br0 -p tcp --dport 443 -j REDIRECT --to-port 54837

    в итоге, skype, zoom, whatsapp вроде работает нормально, с браузингом интернетов тоже всё нормально, падения скорости не наблюдаю. torrent даже не доходит до клиента xray в такой схеме, и падения скорости быть не может.

    Попробуйте на слабом железе, может устроит.

    спасибо вам ваше модификация решило проблему с whatsapp и скоростью 

  12. 37 минут назад, jameszero сказал:

    Добрый вечер, Роберт Зарипов. Да, при редиректе весь трафик проходит через xray и скорость режется для всех сайтов, а при выборочном обходе блокировок скорость режется только для доменов из списка обхода, а остальной трафик идет напрямую со скоростью провайдера.

     

    Вы меня неправильно поняли Я говорю Когда я добавляю сайт Выборочный обход блокировок Например speedtest Тогда скорость Не режет Через xray redirect У меня провайдер 100 мегабит Через xray redirect показывает 80 90 А когда Я пускаю весь трафик через xray redirect Тогда Максимум 50 Мбит скорость на ультре 1810

  13. 10 часов назад, Skrill0 сказал:


    Тогда до выхода обновления можете руками обновить 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

     

    спасибо большое эта конфинурация решило мою проблему 

    • Upvote 1
  14. 7 минут назад, Skrill0 сказал:

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

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

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


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

    спасибо помогло

    • Upvote 1
  15. 3 минуты назад, avn сказал:

     

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

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

×
×
  • Create New...