Jump to content

Recommended Posts

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
Edited by Skrill0
  • Thanks 1
Link to comment
Share on other sites

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

Касательно тестов, с redirect скорость через proxy такая

да понятно, что с KN-1811 и его arm все будет неплохо) На 7621 уже хуже, на малышах - 7628 как будет, если вообще будет, хрен его)

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

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

тортом тут пахло изначально, при любом раскладе, девушка, и такое запилить👍

  • Upvote 1
Link to comment
Share on other sites

24 минуты назад, Skrill0 сказал:

Благодарю)

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

xtls-rprx-vision

на 

xtls-rprx-vision-udp443

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

Link to comment
Share on other sites

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

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

Почитал документацию, в принципе понятно. Но, разработчики говорят указать на клиенте xtls-rprx-vision-udp443, а на стороне сервера не менять, если я правильно понял.

Цитата

If you do not need to block it, please fill in xtls-rprx-*-udp443 on the client side and do not change the server side.

 

Link to comment
Share on other sites

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"
}


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

Edited by Skrill0
  • Thanks 1
  • Upvote 2
Link to comment
Share on other sites

4 минуты назад, Skrill0 сказал:

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

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

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

Link to comment
Share on other sites

18 минут назад, Skrill0 сказал:

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

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

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

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

Link to comment
Share on other sites

Скажите, кто-нибудь может протестировать конфиг 3X-UI? В режиме "из коробки" профиль reality подставляет SNI yahoo.com и это видно на анализаторе трафика (на телефоне запущен клиент xray, используется профиль по умолчанию):

image.thumb.png.fab1ed704b0a1d20a8ab5e59e4a65330.png

image.png.4e94fbbf763d7f9a13ef9ce83a2ef741.png

Если создаю новый inbound и меняю yahoo на amd, то на анализаторе продолжает светиться yahoo.. 

Может кто-нибудь проверить?

Link to comment
Share on other sites

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 и отправляет на сервер.

 

  • Thanks 1
Link to comment
Share on other sites

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

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

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

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

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

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

Edited by Skrill0
  • Upvote 1
Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

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

Аналогично. Steam, но игра немного другая...)

+ с небольшой периодичностью отваливается подключение через cisco anyconnect к Корп vpn на 2 армах

Edited by adk
Link to comment
Share on other sites

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

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

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

ext:geosite_v2fly.dat:steam

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

xtls-rprx-vision-udp443
  • Thanks 1
Link to comment
Share on other sites

29 минут назад, Skrill0 сказал:

Действительно интересным может быть DNS over Quic на стороне сервера.

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

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

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

Link to comment
Share on other sites

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.
Теоретически, должно заработать
 

  • Thanks 1
Link to comment
Share on other sites

31 минуту назад, Skrill0 сказал:

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

ext:geosite_v2fly.dat:steam

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

xtls-rprx-vision-udp443
Не помогает, к сожалению. Меня сын проклянет сейчас уже😄

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

Edited by The_Same
Link to comment
Share on other sites

Только что, 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


 

  • Thanks 1
Link to comment
Share on other sites

18 минут назад, Skrill0 сказал:

Сожалею, что так вышло.
Попробуйте следующее решение. Будем направлять не все соединение, а только с портов 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


 

Вы спасли мне жизнь 😁Ну во всяком случае нервов сберегли немало. Спасибо снова Вам, все получилось!

  • Upvote 2
Link to comment
Share on other sites

Подскажите, можно-ли исключить проксирование трафика для приложений IVI и Кинопоиск? При добавлении TV в профиль прокси - пропадает RU контент.

Link to comment
Share on other sites

1 час назад, emaklav сказал:

Подскажите, можно-ли исключить проксирование трафика для приложений IVI и Кинопоиск? При добавлении TV в профиль прокси - пропадает RU контент.

А если в конфиге маршрутизации домены ivi.ru и kinopoisk.ru в direct добавить?

П.С. ну и IP адреса на всякий случай тоже.

Ivi.ru - 80.67.43.1, 80.67.43.33, 80.67.43.65

kinopoisk.ru - 213.180.199.9

Edited by The_Same
Link to comment
Share on other sites

13 часа назад, Skrill0 сказал:

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

 

14 часа назад, Skrill0 сказал:

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

ext:geosite_v2fly.dat:steam

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

xtls-rprx-vision-udp443

Странно... в отличие от The_Same, мне не помогло..

Link to comment
Share on other sites

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

Не помогло в чем? Игра не работает? S24xray редактировали?

Так же в CS не доступны сервера.

ext:geosite_v2fly.dat:steam в роутинге есть изначально

Варианты исправления:

1) менял на клиенте flow на xtls-rprx-vision-udp443

2) редактировал S24xray

Результата нет, вернулся на директ.

 

Link to comment
Share on other sites

4 минуты назад, adk сказал:

Так же в CS не доступны сервера.

ext:geosite_v2fly.dat:steam в роутинге есть изначально

Варианты исправления:

1) менял на клиенте flow на xtls-rprx-vision-udp443

2) редактировал S24xray

Результата нет, вернулся на директ.

 

После редактирования S24xray xkeen -stop и xkeen -start выполняли? xkeen -restart не подойдет, ибо он ошибки не показывал у меня. Только при xkeen -start показал, что не видит почему-то S24xray. 

Link to comment
Share on other sites

Если стоит цель ипользовать xray только для вебсерфинга, самое оптимальное решение использовать proxy самого браузера. На kn-1010 для direct трафика получаетя 200 мегабит. Нет никаких проблем с открытием facebook и instagram. Думаю такой вариант можно разметсить в шапке темы.

  • Thanks 1
Link to comment
Share on other sites

Всем доброго утра!

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

  1. Socks
  2. Redirect

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

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

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

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

 

  • Thanks 5
  • Upvote 1
Link to comment
Share on other sites

32 минуты назад, Skrill0 сказал:

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

Эта проблема должна быть решена с выходом Transparent proxy режима.

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

 

Именно поэтому сегодня с утра я вернулся на Soks режим, в Redirect лончеры игр глючат, нет синхронизации и не работает бэкап агент от Synology. Падение скорости перетерплю 😁, подожду развития проекта . @Skrill0, выздоравливайте , пейте морсика побольше.

  • Upvote 1
Link to comment
Share on other sites

1 час назад, Skrill0 сказал:

Всем доброго утра!

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

  1. Socks
  2. Redirect

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

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

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

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

 

здоровья

  • Thanks 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   1 member

×
×
  • Create New...