diff --git a/app/bot.php b/app/bot.php index 76c15a9..ca273b9 100644 --- a/app/bot.php +++ b/app/bot.php @@ -5309,35 +5309,21 @@ DNS-over-HTTPS with IP: public function getMirror() { - unlink('/config/mirror.tar.gz'); - unlink('/config/mirror.tar'); $s = file_get_contents('/mirror/start_socat.sh'); - $t = preg_replace([ - '~{ip}~', - '~{tg}~', - '~{ss}~', - '~{wg}~', + $t = str_replace([ + '~ip~', + '~tg~', + '~ss~', + '~wg1~', + '~wg2~', ], [ getenv('IP'), getenv('TGPORT'), getenv('SSPORT'), getenv('WGPORT'), + getenv('WG1PORT'), ], $s); - file_put_contents('/mirror/start_socat.sh', $t); - $a = new PharData('/config/mirror.tar'); - $a->buildFromDirectory('/mirror'); - $a->compress(Phar::GZ); - if (!empty($this->input)) { - $this->sendFile($this->input['from'], curl_file_create('/config/mirror.tar.gz')); - } else { - header('Content-Disposition: attachment; filename=mirror.tar.gz'); - header('Content-Type: application/tar+gzip'); - echo file_get_contents('/config/mirror.tar.gz'); - exit; - } - unlink('/config/mirror.tar.gz'); - unlink('/config/mirror.tar'); - file_put_contents('/mirror/start_socat.sh', $s); + $this->sendFile($this->input['from'], new CURLStringFile($t, 'socat.sh', 'application/x-sh')); } public function ocMenu() diff --git a/mirror/docker-compose.yml b/mirror/docker-compose.yml deleted file mode 100644 index 280c8bc..0000000 --- a/mirror/docker-compose.yml +++ /dev/null @@ -1,18 +0,0 @@ -version: "3" - -services: - socat: - build: - dockerfile: ./dockerfile - ports: - - 80:80 - - 443:443 - - 853:853 - - ${TGPORT}:${TGPORT} - - ${SSPORT}:${SSPORT} - - ${SSPORT}:${SSPORT}/udp - - ${WGPORT}:${WGPORT}/udp - volumes: - - ./start_socat.sh:/start_socat.sh - command: /bin/sh /start_socat.sh - stop_grace_period: 1s diff --git a/mirror/dockerfile b/mirror/dockerfile deleted file mode 100644 index 7265553..0000000 --- a/mirror/dockerfile +++ /dev/null @@ -1,2 +0,0 @@ -FROM alpine:3.18 -RUN apk add socat htop net-tools \ No newline at end of file diff --git a/mirror/makefile b/mirror/makefile deleted file mode 100644 index 9893c3d..0000000 --- a/mirror/makefile +++ /dev/null @@ -1,11 +0,0 @@ -b: - docker compose build --no-cache -u: - docker compose up -d --build -d: - docker compose down -ps: - docker compose ps -e: - docker compose exec socat sh -r: d u \ No newline at end of file diff --git a/mirror/start_socat.sh b/mirror/start_socat.sh index a731760..e14f275 100755 --- a/mirror/start_socat.sh +++ b/mirror/start_socat.sh @@ -1,8 +1,53 @@ -socat TCP-LISTEN:80,fork TCP:{ip}:80 & -socat TCP-LISTEN:443,fork TCP:{ip}:443 & -socat TCP-LISTEN:853,fork TCP:{ip}:853 & -socat TCP-LISTEN:{tg},fork TCP:{ip}:{tg} & -socat TCP-LISTEN:{ss},fork TCP:{ip}:{ss} & -socat UDP-LISTEN:{ss},fork UDP:{ip}:{ss} & -socat UDP-LISTEN:{wg},fork UDP:{ip}:{wg} & -tail -f /dev/null \ No newline at end of file +#!/bin/bash + +# Параметры (можно менять) +PORTS=(80 443 853 ~tg~ ~ss~ ~wg1~ ~wg2~) # Прослушиваемые порты +TARGET="~ip~" # Куда перенаправляем трафик +TCP_CMD="socat TCP-LISTEN:{PORT},fork,reuseaddr TCP:$TARGET:{PORT}" +UDP_CMD="socat UDP-LISTEN:{PORT},fork,reuseaddr UDP:$TARGET:{PORT}" + +# Проверяем, установлен ли socat +if ! command -v socat &> /dev/null; then + echo "socat не установлен. Устанавливаем..." + if [[ -f /etc/debian_version ]]; then + sudo apt update && sudo apt install -y socat + elif [[ -f /etc/redhat-release ]]; then + sudo yum install -y socat + else + echo "Ошибка: Неизвестный дистрибутив. Установите socat вручную." + exit 1 + fi +fi + +# Проверяем, заняты ли порты (TCP и UDP) +for PORT in "${PORTS[@]}"; do + # Проверка TCP + if ss -tulnp | grep -q ":$PORT "; then + PROCESS=$(ss -tulnp | grep ":$PORT " | awk '{print $7}') + echo "Ошибка: Порт $PORT (TCP) занят процессом: $PROCESS" + exit 1 + fi + # Проверка UDP + if ss -ulnp | grep -q ":$PORT "; then + PROCESS=$(ss -ulnp | grep ":$PORT " | awk '{print $6}') + echo "Ошибка: Порт $PORT (UDP) занят процессом: $PROCESS" + exit 1 + fi +done + +# Запускаем socat для каждого порта (TCP и UDP) +for PORT in "${PORTS[@]}"; do + # TCP + CMD_TCP=$(echo "$TCP_CMD" | sed "s/{PORT}/$PORT/g") + echo "Запуск (TCP): $CMD_TCP" + eval "$CMD_TCP &" # Запускаем в фоне + + # UDP + CMD_UDP=$(echo "$UDP_CMD" | sed "s/{PORT}/$PORT/g") + echo "Запуск (UDP): $CMD_UDP" + eval "$CMD_UDP &" # Запускаем в фоне +done + +echo "socat запущен для портов: ${PORTS[*]} (TCP и UDP)" +echo "Трафик перенаправляется на: $TARGET" +echo "Для остановки выполните: pkill socat" \ No newline at end of file