diff --git a/README.md b/README.md index 5ff7197..70ecef7 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ | | Инструкция | Что получится | Сложность | |---|---|---|---| -| 🛡 | [3X-UI: все протоколы](manuals/3x-ui.md) | 12 протоколов и единая подписка одной командой, без доменов | ●○○ | +| 🛡 | [3X-UI: все протоколы](manuals/3x-ui.md) | 11 протоколов и единая подписка одной командой, без доменов | ●○○ | | 🚀 | [Hysteria2](manuals/hysteria2.md) | Быстрый протокол на UDP, друзья добавляются командой `hy2 add` | ●○○ | | 📶 | [XKeen на Keenetic](manuals/xkeen-keenetic.md) | Прокси для выбранных устройств прямо на роутере | ●●○ | diff --git a/manuals/3x-ui.md b/manuals/3x-ui.md index 361e36d..6bc5e14 100644 --- a/manuals/3x-ui.md +++ b/manuals/3x-ui.md @@ -3,7 +3,7 @@ [← Все инструкции](../README.md#инструкции) Одна команда ставит панель [3X-UI](https://github.com/MHSanaei/3x-ui), создаёт подключения -на 12 протоколах и выдаёт **одну ссылку-подписку**: приложение само получит +на 11 протоколах и выдаёт **одну ссылку-подписку**: приложение само получит подходящий ему формат и нужные протоколы. Домены не нужны. **Что делает [скрипт](../scripts/3x-ui.sh):** @@ -31,13 +31,17 @@ | VMess WebSocket + TLS | 2087/tcp | всех приложениях | | Shadowsocks 2022 | 8388/tcp+udp | всех приложениях | | TUIC v5 | 8444/udp | Hiddify, Clash Verge, FlClash, NekoBox | -| WireGuard | 51820/udp | всех приложениях и WireGuard | | AmneziaWG | 51821/udp | AmneziaWG на роутерах Keenetic, Clash Verge, FlClash | | AmneziaWG 3.1 | 51822/udp | AmneziaVPN, Clash Verge, FlClash | -| MTProto | 8445/tcp | прокси прямо в Telegram | +| MTProto | 8445/tcp | прокси прямо в Telegram (если сервер сам достаёт до Telegram) | -Каждый протокол проверен настоящим подключением на ядрах Xray, Mihomo и sing-box — -стенд лежит в [tests/matrix](../tests/matrix/). +Каждый протокол проверен настоящим подключением на ядрах Xray, Mihomo и sing-box, +в том числе через интернет к серверу в России — стенд лежит в [tests/matrix](../tests/matrix/). + +> [!NOTE] +> Обычный WireGuard по умолчанию не ставится: в России его рукопожатие режет DPI, +> а попытки подключения могут привести к блокировке IP сервера. AmneziaWG — тот же WireGuard +> с маскировкой — проходит. Если сервер и пользователи за границей, добавьте `wg` в `--protocols`. ## Что понадобится diff --git a/manuals/assets/script-3x-ui.svg b/manuals/assets/script-3x-ui.svg index 8b2f925..08fe418 100644 --- a/manuals/assets/script-3x-ui.svg +++ b/manuals/assets/script-3x-ui.svg @@ -1 +1 @@ -root@vps: ~root@vps: ~# bash <(curl -fsSL https://raw.githubusercontent.com/…/scripts/3x-ui.sh)==> Ставлю пакеты: curl, jq, openssl, qrencode, ufw==> Маскировка: www.microsoft.com==> Ставлю 3X-UI v3.8.5 официальным установщиком (пара минут)==> Создаю подключения: REALITY, Hysteria2, XHTTP, WS, TUIC…==> Настраиваю ufw: 443/tcp 443/udp 8443/tcp 2053/tcp …Готово! 3X-UI работает: 12 протоколов.1Панель: https://203.0.113.10:41873/Xk2vQ9pLmT4sRz8aWc2Логин: aB3kL9mQ2x2Пароль: Zp7Wq2Lk9Vn4Tx8Rb3Hs3https://203.0.113.10:2096/k3v9qx2m7p1a/admin[ здесь QR-код — отсканируйте его телефоном ] \ No newline at end of file +root@vps: ~root@vps: ~# bash <(curl -fsSL https://raw.githubusercontent.com/…/scripts/3x-ui.sh)==> Ставлю пакеты: curl, jq, openssl, qrencode, ufw==> Маскировка: www.microsoft.com==> Ставлю 3X-UI v3.8.5 официальным установщиком (пара минут)==> Создаю подключения: REALITY, Hysteria2, XHTTP, WS, TUIC…==> Настраиваю ufw: 443/tcp 443/udp 8443/tcp 2053/tcp …Готово! 3X-UI работает: 11 протоколов.1Панель: https://203.0.113.10:41873/Xk2vQ9pLmT4sRz8aWc2Логин: aB3kL9mQ2x2Пароль: Zp7Wq2Lk9Vn4Tx8Rb3Hs3https://203.0.113.10:2096/k3v9qx2m7p1a/admin[ здесь QR-код — отсканируйте его телефоном ] \ No newline at end of file diff --git a/scripts/3x-ui.sh b/scripts/3x-ui.sh index 5208da6..97878e8 100755 --- a/scripts/3x-ui.sh +++ b/scripts/3x-ui.sh @@ -6,7 +6,7 @@ # Ставит официальную панель 3X-UI (версия закреплена ниже) её собственным # установщиком, получает сертификат Let's Encrypt на IP, создаёт подключения # REALITY, XHTTP, VLESS/VMess WS, Trojan gRPC, Shadowsocks 2022, Hysteria2, TUIC, -# WireGuard, AmneziaWG (классика и 3.1) и MTProto, включает единую подписку +# AmneziaWG (классика и 3.1) и MTProto (и WireGuard по запросу), включает единую подписку # с форматом под каждый клиент и настраивает ufw. Домены не нужны. # Каждый протокол проверен настоящими клиентами — см. tests/matrix. @@ -25,6 +25,9 @@ XUI_ENV=/etc/x-ui/install-result.env SNI_CANDIDATES=(dl.google.com www.amazon.com www.samsung.com www.yahoo.com) ALL_PROTOS=(reality hy2 xhttp ws trojan vmess ss tuic wg awg awg3 mtproto) +# Обычный WireGuard в России режет DPI (проверено 2026-09-27: рукопожатие доходит до сервера, +# ответ — нет), а его попытки могут привлечь блокировку IP. По умолчанию не ставим. +DEFAULT_PROTOS=(reality hy2 xhttp ws trojan vmess ss tuic awg awg3 mtproto) declare -A PORTS=([xhttp]=8443 [ws]=2053 [trojan]=2083 [vmess]=2087 [ss]=8388 [tuic]=8444 [wg]=51820 [awg]=51821 [awg3]=51822 [mtproto]=8445) PROTOS=(); CREATED=(); OPEN=() @@ -123,7 +126,7 @@ main() { PANEL_SSL=custom fi case $protos in - all) PROTOS=("${ALL_PROTOS[@]}") ;; + all) PROTOS=("${DEFAULT_PROTOS[@]}") ;; minimal) PROTOS=(reality) ;; *) IFS=, read -ra PROTOS <<<"$protos" local x @@ -490,7 +493,20 @@ awg_inbound() { # remark port subnet client-ip suffix mode proto_awg() { awg_inbound "AmneziaWG" "${PORTS[awg]}" 10.8.1.0 10.8.1.2/32 awg classic; } proto_awg3() { awg_inbound "AmneziaWG-3.1" "${PORTS[awg3]}" 10.8.2.0 10.8.2.2/32 awg3 full; } +telegram_reachable() { + local ip + for ip in 149.154.167.51 149.154.175.50 91.108.56.130; do + timeout 5 bash -c "/dev/null && return 0 + done + return 1 +} + proto_mtproto() { + # MTProto бесполезен, если сам сервер не достаёт до Telegram (некоторые хостеры его блокируют). + if ! telegram_reachable; then + warn "MTProto пропущен: с этого сервера недоступны серверы Telegram — прокси для Telegram здесь работать не будет." + return + fi local settings settings=$(jq -nc --argjson c "$(client_base mtproto)" '{fakeTlsDomain: "www.cloudflare.com", clients: [$c + {secret: ""}]}') add_inbound "MTProto" "${PORTS[mtproto]}" tcp mtproto "$settings" '{}' @@ -534,8 +550,10 @@ usage() { cat <