Исходный код вики 1.ultimate_RemnaNode_install
Версия 118.1 от Anton Krivchenkov на 15.06.2026 14:06
Последние авторы
| author | version | line-number | content |
|---|---|---|---|
| 1 | {{velocity}} | ||
| 2 | {{html clean="false"}} | ||
| 3 | <style> | ||
| 4 | /* Стили для кнопки внутри стандартного блока .code */ | ||
| 5 | .code { | ||
| 6 | position: relative !important; /* Позволяет кнопке «прилипнуть» к углу */ | ||
| 7 | } | ||
| 8 | |||
| 9 | .copy-btn-standard { | ||
| 10 | position: absolute; | ||
| 11 | top: 5px; | ||
| 12 | right: 5px; | ||
| 13 | z-index: 100; | ||
| 14 | padding: 3px 8px; | ||
| 15 | font-size: 11px; | ||
| 16 | background: rgba(255, 255, 255, 0.1); | ||
| 17 | color: #fff; | ||
| 18 | border: 1px solid rgba(255, 255, 255, 0.2); | ||
| 19 | border-radius: 3px; | ||
| 20 | cursor: pointer; | ||
| 21 | transition: all 0.2s; | ||
| 22 | } | ||
| 23 | |||
| 24 | .copy-btn-standard:hover { | ||
| 25 | background: rgba(255, 255, 255, 0.2); | ||
| 26 | border-color: #fff; | ||
| 27 | } | ||
| 28 | </style> | ||
| 29 | |||
| 30 | <script> | ||
| 31 | (function() { | ||
| 32 | function addCopyButtons() { | ||
| 33 | // Находим все стандартные блоки макроса {{code}} | ||
| 34 | const blocks = document.querySelectorAll('.code'); | ||
| 35 | |||
| 36 | blocks.forEach(block => { | ||
| 37 | // Проверяем, не добавили ли мы кнопку уже | ||
| 38 | if (block.querySelector('.copy-btn-standard')) return; | ||
| 39 | |||
| 40 | const btn = document.createElement('button'); | ||
| 41 | btn.className = 'copy-btn-standard'; | ||
| 42 | btn.innerText = 'Копировать'; | ||
| 43 | |||
| 44 | btn.onclick = function(e) { | ||
| 45 | e.preventDefault(); | ||
| 46 | // Берем текст блока, исключая текст самой кнопки | ||
| 47 | const textToCopy = block.innerText.replace('Копировать', '').trim(); | ||
| 48 | |||
| 49 | navigator.clipboard.writeText(textToCopy).then(() => { | ||
| 50 | const originalText = btn.innerText; | ||
| 51 | btn.innerText = '✅'; | ||
| 52 | setTimeout(() => { btn.innerText = originalText; }, 1500); | ||
| 53 | }); | ||
| 54 | }; | ||
| 55 | |||
| 56 | block.appendChild(btn); | ||
| 57 | }); | ||
| 58 | } | ||
| 59 | |||
| 60 | // Запуск после загрузки страницы | ||
| 61 | document.addEventListener('DOMContentLoaded', addCopyButtons); | ||
| 62 | // На случай, если страница загружается асинхронно | ||
| 63 | setTimeout(addCopyButtons, 1000); | ||
| 64 | })(); | ||
| 65 | </script> | ||
| 66 | {{/html}} | ||
| 67 | {{/velocity}} | ||
| 68 | |||
| 69 | * | ||
| 70 | |||
| 71 | Продвинутый скрипт автоматического развертывания **Remnawave Node (Xray-core)**, спроектированный с упором на максимальную скрытность, защиту от активного зондирования (DPI) и гибкую маршрутизацию. | ||
| 72 | |||
| 73 | Это не просто VPN-установка. Это комплексная Defense-in-Depth инфраструктура, которая прячет ваш прокси за реальным облачным хранилищем, анализирует атаки в реальном времени и позволяет строить каскадные цепи прокси-серверов. | ||
| 74 | |||
| 75 | ## ✨ Ключевые архитектурные особенности | ||
| 76 | |||
| 77 | * 🧠 **Active DPI Defense (Динамический Graylist):** Встроенный микросервис dpi-detector в реальном времени анализирует логи Nginx. При обнаружении сканеров уязвимостей или попыток активного зондирования (Active Probing), IP-адрес атакующего заносится в серый список. После этого Nginx на уровне L4 (TCP Stream) отрезает этот IP от ядра Xray, принудительно отдавая ему "белый" сайт-камуфляж. | ||
| 78 | * 🎭 **Идеальная L4/L7 Маскировка:** Единая точка входа на порт 443. Nginx Stream распределяет трафик по SNI: валидные запросы идут в Xray (Reality), весь остальной интернет-мусор и сканеры проваливаются в HTTP-блок, где их встречает легитимное и полностью рабочее файловое облако **Nextcloud**. | ||
| 79 | * 🕸️ **Proxy Chaining (Каскадирование):** Встроенная интеграция с **NaïveProxy**. Скрипт позволяет в пару кликов развернуть как серверную часть (вход для клиентов), так и клиентскую (выходной туннель на следующую ноду), маскируя транзитный трафик под обычные сессии браузера Chrome. | ||
| 80 | * 🔀 **Умный локальный роутинг (SOCKS5):** В ядро интегрированы локальные интерфейсы для точечного обхода ограничений прямо на ноде: | ||
| 81 | * **Cloudflare WARP (порт 40000):** Для прозрачного доступа к ChatGPT, Netflix и сервисам геолокации без риска бана IP дата-центра. | ||
| 82 | * **B4 DPI Bypass (порт 1080):** Для обхода региональных замедлений и блокировок (например, YouTube) на стороне самой ноды. | ||
| 83 | * 🔒 **Hardened Security:** Защита SSH через Fail2ban (с поддержкой рецидивов), блокировка ICMP-пингов, преконфигурированный UFW и защита от массового сканирования портов через TrafficGuard. | ||
| 84 | * 🚀 **Оптимизация ядра:** Автоматический тюнинг TCP BBR + fq_codel, расширение системных лимитов файловых дескрипторов (nofile до 1 млн) и тюнинг TCP keepalive для предотвращения обрывов "спящих" соединений за NAT.curl -fsSL | ||
| 85 | |||
| 86 | -- | ||
| 87 | |||
| 88 | curl -fsSL 'https://xwiki.dev0ps.online/xwiki/bin/download/DevOps/Proxy/1.Remnawave/1.ultimate_remnanode_install/WebHome/install-node-nc.sh?rev=1.38' | sudo bash | ||
| 89 | |||
| 90 | Настройки B4 | ||
| 91 | |||
| 92 | * geoip:<https://github.com/DanielLavrushin/b4geoip/releases/latest/download/geoip.dat> | ||
| 93 | * geosite:<https://raw.githubusercontent.com/runetfreedom/russia-v2ray-rules-dat/release/geosite.dat> | ||
| 94 | |||
| 95 | Сэты | ||
| 96 | |||
| 97 | YOUTUBE: | ||
| 98 | |||
| 99 | {"b4_version":"1.48.1","name":"youtube tls 1.3","tcp":{"incoming":{"mode":"fake","fake_count":10},"rst_protection":{"enabled":true}},"udp":{"mode":"drop","filter_quic":"parse"},"faking":{"sni_type":4,"payload_file":"captures/tls_stun.bin"},"targets":{"sni_domains":["googleapis.com","googleusercontent.com","googlevideo.com","youtu.be","youtube-nocookie.com","youtube.com","www.youtube.com","youtubei.googleapis.com","yt3.ggpht.com","youtubekids.com","dl.google.com"],"geosite_categories":["youtube"],"tls":"1.3"},"enabled":true} | ||
| 100 | |||
| 101 | YouTube - заработал на Selectel | ||
| 102 | |||
| 103 | {"b4_version":"1.47.2","name":"youtube (RT with missing bin) (copy)","udp":{"mode":"drop","filter_quic":"all"},"fragmentation":{"combo":{"shuffle_mode":"reverse","decoy_enabled":true,"fake_per_segment":true,"fake_per_seg_count":0},"disorder":{"fake_per_seg_count":0}},"faking":{"sni":false,"sni_type":4,"payload_file":"captures/tls_vk_com.bin","sni_mutation":{"mode":"fakesni"}},"targets":{"sni_domains":["ggpht.com","googleapis.com","googleusercontent.com","googlevideo.com","gstatic.com","gvt1.com","l.google.com","youtu.be","youtube-nocookie.com","youtube.com","yt.be","ytimg.com","play.google.com"],"geosite_categories":["youtube"]},"enabled":true} | ||
| 104 | |||
| 105 | Youtube + Telegram + Meta (mobile) + Загрузить пэйлоад в закрепе | ||
| 106 | |||
| 107 | {"id":"86746296-4e39-4b9f-9cc8-18669d492e9c","name":"Youtube + Telegram + Meta (mobile)","tcp":{"conn_bytes_limit":19,"seg2delay":0,"seg2delay_max":0,"syn_fake":true,"syn_fake_len":128,"syn_ttl":7,"drop_sack":false,"incoming":{"mode":"off","min":14,"max":14,"fake_ttl":7,"fake_count":3,"strategy":"badsum"},"desync":{"mode":"off","ttl":7,"count":3,"post_desync":false},"win":{"mode":"off","values":[0,1460,8192,65535]},"duplicate":{"enabled":false,"count":3}},"udp":{"mode":"fake","fake_seq_length":6,"fake_len":64,"faking_strategy":"none","dport_filter":"","filter_quic":"disabled","filter_stun":true,"conn_bytes_limit":8,"seg2delay":0,"seg2delay_max":0},"fragmentation":{"strategy":"tcp","reverse_order":true,"tlsrec_pos":0,"middle_sni":false,"sni_position":1,"oob_position":0,"oob_char":120,"seq_overlap_pattern":[],"combo":{"first_byte_split":false,"extension_split":false,"shuffle_mode":"full","first_delay_ms":30,"jitter_max_us":1000,"decoy_enabled":false,"decoy_snis":["ya.ru","vk.com","mail.ru","dzen.ru"]},"disorder":{"shuffle_mode":"full","min_jitter_us":1000,"max_jitter_us":3000}},"faking":{"sni":true,"ttl":7,"strategy":"pastseq","seq_offset":10000,"sni_seq_length":1,"sni_type":3,"custom_payload":"","payload_file":"","tls_mod":[],"timestamp_decrease":600000,"sni_mutation":{"mode":"off","grease_count":3,"padding_size":2048,"fake_ext_count":5,"fake_snis":["ya.ru","vk.com","max.ru"]},"tcp_md5":false},"targets":{"sni_domains":["youtube.com"],"ip":[],"geosite_categories":["youtube","telegram","instagram","meta"],"geoip_categories":["google","telegram","facebook"]},"enabled":true,"dns":{"enabled":true,"target_dns":"9.9.9.9","fragment_query":true},"stats":{"manual_domains":1,"manual_ips":0,"geosite_domains":825,"geoip_ips":5403,"total_domains":826,"total_ips":5403,"geosite_category_breakdown":{"instagram":74,"meta":553,"telegram":20,"youtube":178},"geoip_category_breakdown":{"facebook":108,"google":5283,"telegram":12}}} | ||
| 108 | |||
| 109 | googlevideo.com-pos-search-4 | ||
| 110 | |||
| 111 | {"b4_version":"1.48.1","name":"googlevideo.com-pos-search-4","udp":{"filter_stun":false},"fragmentation":{"reverse_order":false,"middle_sni":false,"sni_position":4,"combo":{"first_byte_split":false,"extension_split":false}},"faking":{"sni":false,"ttl":1,"sni_type":3},"targets":{"sni_domains":["googlevideo.com","youtube.com","google.ru","youtubei.googleapis.com","yt3.ggpht.com"],"geosite_categories":["youtube","google","google-gemini"],"geoip_categories":["google"]},"enabled":true,"dns":{"target_dns":"192.168.1.1","fragment_query":true}} | ||
| 112 | |||
| 113 | youtube (с группы) | ||
| 114 | |||
| 115 | {"b4_version":"1.60.1","name":"YouTube","tcp":{"desync":{"mode":"rst","ttl":5,"count":10},"ip_block_detect":{"cache_blocked_ips":false}},"udp":{"mode":"reject","filter_quic":"all","filter_stun":false,"conn_bytes_limit":2},"fragmentation":{"strategy":"tcp","middle_sni":false,"combo":{"first_byte_split":false,"extension_split":false}},"faking":{"sni_type":3},"targets":{"sni_domains":["rr1---sn-n8v7kne6.googlevideo.com","rr2---sn-4pa5ojvg0-n8ve.googlevideo.com","rr3---sn-4pa5ojvg0-n8ve.googlevideo.com","rr7---sn-n8v7znsy.googlevideo.com","*.googlevideo.com"],"geosite_categories":["youtube"],"geoip_categories":["google"]},"enabled":true} | ||
| 116 | |||
| 117 | hyperion + payload: tls_gosuslugi_ru.bin | ||
| 118 | |||
| 119 | {"id":"1731ef6f-ec56-43b6-bc72-daec1e484daf","name":"hyperion","tcp":{"conn_bytes_limit":19,"seg2delay":20,"seg2delay_max":90,"syn_fake":false,"syn_fake_len":0,"syn_ttl":7,"drop_sack":false,"incoming":{"mode":"off","min":14,"max":14,"fake_ttl":7,"fake_count":3,"strategy":"badsum"},"desync":{"mode":"off","ttl":7,"count":3,"post_desync":false},"win":{"mode":"off","values":[0,1460,8192,65535]},"duplicate":{"enabled":false,"count":3}},"udp":{"mode":"fake","fake_seq_length":6,"fake_len":64,"faking_strategy":"none","dport_filter":"","filter_quic":"disabled","filter_stun":true,"conn_bytes_limit":8,"seg2delay":0,"seg2delay_max":0},"fragmentation":{"strategy":"combo","reverse_order":true,"tlsrec_pos":0,"middle_sni":true,"sni_position":1,"oob_position":0,"oob_char":120,"seq_overlap_pattern":[],"combo":{"first_byte_split":true,"extension_split":true,"shuffle_mode":"full","first_delay_ms":30,"jitter_max_us":1500,"decoy_enabled":false,"decoy_snis":["ya.ru","vk.com","mail.ru","dzen.ru"]},"disorder":{"shuffle_mode":"full","min_jitter_us":1000,"max_jitter_us":3000}},"faking":{"sni":true,"ttl":8,"strategy":"pastseq","seq_offset":10000,"sni_seq_length":1,"sni_type":4,"custom_payload":"","payload_file":"captures/tls_gosuslugi_ru.bin","tls_mod":[],"timestamp_decrease":600000,"sni_mutation":{"mode":"off","grease_count":3,"padding_size":2048,"fake_ext_count":5,"fake_snis":[]},"tcp_md5":true},"targets":{"sni_domains":["kinopub.online","linuxserver.io","euronews.com","shikimori.one","proton.me"],"ip":[],"geosite_categories":["cloudflare","ru-blocked","meta","discord","kinopub","youtube","intel","twitter","protonmail","canva","dw","category-media-ru","linkedin","instagram","hdrezka","fastly","hetzner","oracle","cdn77","digitalocean","akamai"],"geoip_categories":["cloudflare","digitalocean","contabo","akamai","amazon","hetzner","ovh","telegram","twitter","cdn77","scaleway","oracle","fastly"]},"enabled":true,"dns":{"enabled":false,"target_dns":"","fragment_query":false},"stats":{"manual_domains":5,"manual_ips":0,"geosite_domains":76395,"geoip_ips":7137,"total_domains":76400,"total_ips":7137,"geosite_category_breakdown":{"akamai":81,"canva":6,"category-media-ru":131,"cdn77":2,"cloudflare":74,"digitalocean":4,"discord":28,"dw":2,"fastly":8,"hdrezka":11,"hetzner":15,"instagram":74,"intel":288,"kinopub":11,"linkedin":12,"meta":553,"oracle":18,"protonmail":9,"ru-blocked":74866,"twitter":24,"youtube":178},"geoip_category_breakdown":{"akamai":596,"amazon":3447,"cdn77":213,"cloudflare":900,"contabo":284,"digitalocean":173,"fastly":62,"hetzner":117,"oracle":737,"ovh":554,"scaleway":21,"telegram":12,"twitter":21}}} | ||
| 120 | |||
| 121 | telegram | ||
| 122 | |||
| 123 | {"b4_version":"1.47.0","name":"telegram","tcp":{"syn_ttl":7,"incoming":{"fake_ttl":7},"desync":{"ttl":7}},"udp":{"filter_stun":false},"fragmentation":{"reverse_order":false,"strategy_pool":[],"tlsrec_pos_max":0,"middle_sni":false,"sni_position":2,"sni_position_max":0,"oob_position_max":0,"combo":{"first_byte_split":false,"extension_split":false,"shuffle_mode":"full","first_delay_ms":30,"first_delay_ms_max":0,"jitter_max_us":1000,"jitter_max_us_max":0,"fake_per_seg_count":0,"fake_per_seg_count_max":0},"disorder":{"fake_per_seg_count":0,"fake_per_seg_count_max":0}},"faking":{"sni":false,"ttl":1,"sni_type":3,"timestamp_decrease":600000},"targets":{"sni_domains":["t.me"],"geosite_categories":["telegram"],"geoip_categories":["telegram"]},"enabled":true} | ||
| 124 | |||
| 125 | meta | ||
| 126 | |||
| 127 | {"b4_version":"1.47.0","name":"meta","tcp":{"seg2delay":20,"drop_sack":true,"desync":{"mode":"ack","count":15}},"udp":{"fake_seq_length":15,"faking_strategy":"checksum","dport_filter":"443,3478,3482,5222,59234,45395,50300-50400","filter_quic":"parse","filter_stun":false},"fragmentation":{"strategy":"disorder","reverse_order":false,"strategy_pool":[],"tlsrec_pos_max":0,"middle_sni":false,"sni_position_max":0,"oob_position_max":0,"seq_overlap_pattern":["16","03","03","00","00"],"combo":{"first_byte_split":false,"extension_split":false,"first_delay_ms_max":0,"jitter_max_us_max":0,"fake_per_seg_count":0,"fake_per_seg_count_max":0},"disorder":{"min_jitter_us":500,"max_jitter_us":2100,"fake_per_seg_count":0,"fake_per_seg_count_max":0}},"faking":{"sni":false,"seq_offset":1000000,"sni_seq_length":12,"tls_mod":["rnd","dupsid"],"timestamp_decrease":600000},"targets":{"sni_domains":["facebook.com"],"geosite_categories":["meta"],"geoip_categories":["facebook"]},"enabled":true,"dns":{"target_dns":"9.9.9.9","fragment_query":true}} | ||
| 128 | |||
| 129 | | Сервис | Назначение | | ||
| 130 | | ------------------- | ------------------------------------------- | | ||
| 131 | | **remnanode** | VPN-нода Remnawave (xray-core) | | ||
| 132 | | **remnawave-nginx** | Nginx — SNI-роутинг, прокси xHTTP/gRPC/WS | | ||
| 133 | | **nextcloud** | Файловое облако (камуфляж) | | ||
| 134 | | **b4** | B4 DPI Bypass — обход блокировок | | ||
| 135 | | **goaccess** | Визуализация логов nginx в реальном времени | | ||
| 136 | | **watchtower** | Автообновление контейнеров (каждые 24 часа) | | ||
| 137 | |||
| 138 | * | ||
| 139 | |||
| 140 | | Утилита | Назначение | | ||
| 141 | | ------------------- | ----------------------------------------- | | ||
| 142 | | **ctop** | Мониторинг Docker-контейнеров в терминале | | ||
| 143 | | **lazydocker** | TUI для управления Docker | | ||
| 144 | | **fail2ban** | Защита от брутфорса SSH | | ||
| 145 | | **TrafficGuard** | Блокировка сканеров по базам IP | | ||
| 146 | | **Certbot** | Let's Encrypt сертификаты | | ||
| 147 | | **Zapret** | Списки заблокированных в РФ сайтов | | ||
| 148 | | **zsh + Oh My Zsh** | Современный shell с плагинами | | ||
| 149 | |||
| 150 | * | ||
| 151 | |||
| 152 | | Настройка | Описание | | ||
| 153 | | ------------------------- | -------------------------------------- | | ||
| 154 | | **BBR + fq_codel** | Ускорение TCP | | ||
| 155 | | **TCP Fast Open** | Быстрый handshake | | ||
| 156 | | **Socket buffers 128 MB** | Высокая пропускная способность | | ||
| 157 | | **Keepalive 60/10/5** | Быстрое обнаружение мёртвых соединений | | ||
| 158 | | **IP Forwarding** | Для VPN-маршрутизации | | ||
| 159 | |||
| 160 | * | ||
| 161 | |||
| 162 | | Настройка | Описание | | ||
| 163 | | --------------- | -------------------------------------- | | ||
| 164 | | **nofile** | 1048576 — макс. открытых файлов | | ||
| 165 | | **nproc** | 65536 — макс. процессов | | ||
| 166 | | **fs.file-max** | 1000000 — системный лимит дескрипторов | | ||
| 167 | |||
| 168 | * | ||
| 169 | |||
| 170 | | Настройка | Описание | | ||
| 171 | | ------------ | -------------------------------------------------- | | ||
| 172 | | **UFW** | deny incoming, whitelist SSH, 443 + 7443 открыты | | ||
| 173 | | **fail2ban** | sshd (3 попытки → бан 48ч), recidive (до 4 недель) | | ||
| 174 | | **ICMP** | echo-request заблокирован (сервер не пингуется) | | ||
| 175 | | **Nginx** | Блокировка ботов/сканеров по User-Agent | | ||
| 176 | |||
| 177 | * | ||
| 178 | |||
| 179 | | URL | Назначение | Авторизация | | ||
| 180 | | -------------------------------------- | ------------- | ---------------------------- | | ||
| 181 | | <https://DOMAIN/> | Nextcloud | Настроить при первом входе | | ||
| 182 | | <https://DOMAIN:7443/> | B4 DPI Bypass | adminremnanode / B4_PASSWORD | | ||
| 183 | | <https://DOMAIN/nginx-go-access-dash/> | GoAccess логи | adminremnanode / B4_PASSWORD | | ||
| 184 | |||
| 185 | Структура файлов | ||
| 186 | |||
| 187 | /opt/remnawave/ | ||
| 188 | ├── .env # Конфигурация (SECRET_KEY, домен, пути) | ||
| 189 | ├── docker-compose.yml # Docker Compose | ||
| 190 | ├── nginx-stream.conf # Nginx (stream + http) | ||
| 191 | ├── .htpasswd_b4 # Пароли для B4/GoAccess | ||
| 192 | ├── nextcloud/ # Конфиг Nextcloud | ||
| 193 | ├── nextcloud_data/ # Данные Nextcloud | ||
| 194 | ├── b4_config/ # Конфиг B4 DPI | ||
| 195 | ├── nginx_logs/ # Логи nginx | ||
| 196 | ├── goaccess_html/ # HTML-отчёты GoAccess | ||
| 197 | └── xray/share/ | ||
| 198 | ├── zapret.dat # Список запрещённых сайтов | ||
| 199 | ├── geoip.dat # GeoIP база | ||
| 200 | └── geosite.dat # GeoSite база | ||
| 201 | |||
| 202 | Команды управления | ||
| 203 | |||
| 204 | | Команда | Описание | | ||
| 205 | | ----------------------- | ------------------------------------------------------------------------------------ | | ||
| 206 | | d | Статус контейнеров (алиас) | | ||
| 207 | | lzd | lazydocker (TUI) | | ||
| 208 | | dcu | docker compose up -d | | ||
| 209 | | dcd | docker compose down | | ||
| 210 | | dl remnanode | docker logs remnanode | | ||
| 211 | | Обновить ноду | cd /opt/remnawave && docker compose pull remnanode && docker compose up -d remnanode | | ||
| 212 | | Обновить Zapret вручную | bash /opt/remnawave/update-zapret.sh | | ||
| 213 | | Проверить fail2ban | fail2ban-client status sshd | | ||
| 214 | | Управление TrafficGuard | rknpidor — Интерактивное меню | | ||
| 215 | | Сертификаты | certbot certificates certbot renew --dry-run | | ||
| 216 | |||
| 217 | * | ||
| 218 | |||
| 219 | Автоматические задачи (Cron) | ||
| 220 | |||
| 221 | | Время | Задача | | ||
| 222 | | ----- | ----------------------------------- | | ||
| 223 | | 03:00 | Certbot — продление сертификатов | | ||
| 224 | | 03:00 | Zapret — обновление списков | | ||
| 225 | | 04:00 | TrafficGuard — обновление баз IP | | ||
| 226 | | 24ч | Watchtower — обновление контейнеров | | ||
| 227 | |||
| 228 | ### Повторный запуск (обновление SNI) | ||
| 229 | |||
| 230 | Если скрипт обнаружит существующую установку, предложит обновить только Reality SNI: | ||
| 231 | |||
| 232 | [ВНИМАНИЕ] Обнаружена существующая конфигурация в /opt/remnawave/.env | ||
| 233 | Домен: example.com | ||
| 234 | Reality SNI: google.com | ||
| 235 | |||
| 236 | Обновить только Reality SNI? [y/N]: y | ||
| 237 | |||
| 238 | конфиг | ||
| 239 | |||
| 240 | # 🛠 Обновленная инструкция по заполнению полей | ||
| 241 | |||
| 242 | ## 1. VLESS (Reality / Vision) | ||
| 243 | |||
| 244 | Для этого протокола мы объединяем твой системный тюнинг (BBR, WindowClamp) и фрагментацию. | ||
| 245 | |||
| 246 | **Mux JSON:** ❌ НЕ ИСПОЛЬЗОВАТЬ. Mux ломает логику XTLS-Vision и может сделать соединение более заметным для DPI. | ||
| 247 | |||
| 248 | **SockOpt JSON:** ✅ КОПИРОВАТЬ ЭТО: | ||
| 249 | |||
| 250 | ```json | ||
| 251 | { | ||
| 252 | "dialerProxy": "fragment", | ||
| 253 | "tcpcongestion": "bbr", | ||
| 254 | "tcpWindowClamp": 600, | ||
| 255 | "interface": "wg0", | ||
| 256 | "tcpKeepAliveInterval": 5, | ||
| 257 | "fragment": { | ||
| 258 | "packets": "tlshello", | ||
| 259 | "length": "50-100", | ||
| 260 | "interval": "10-20" | ||
| 261 | } | ||
| 262 | } | ||
| 263 | ``` | ||
| 264 | |||
| 265 | **Что мы взяли из твоего примера:** | ||
| 266 | |||
| 267 | * `tcpcongestion: "bbr"` — значительно ускоряет передачу данных при потерях пакетов. | ||
| 268 | * `tcpWindowClamp: 600` — ограничивает размер окна TCP, что мешает DPI анализировать большие объемы данных сразу. | ||
| 269 | * `interface: "wg0"` — если у тебя трафик должен идти через конкретный интерфейс (например, Wireguard), это поле критично. | ||
| 270 | |||
| 271 | --- | ||
| 272 | |||
| 273 | ## 2. xHTTP (TCP) | ||
| 274 | |||
| 275 | Используем твои параметры xmux и extra, объединяя их в одном разделе xHTTP, и добавляем тюнинг в SockOpt. | ||
| 276 | |||
| 277 | **xHTTP JSON:** ✅ КОПИРОВАТЬ ЭТО: | ||
| 278 | |||
| 279 | ```json | ||
| 280 | { | ||
| 281 | "xmux": { | ||
| 282 | "cMaxReuseTimes": 0, | ||
| 283 | "maxConcurrency": "16-32", | ||
| 284 | "maxConnections": 0, | ||
| 285 | "hKeepAlivePeriod": 0, | ||
| 286 | "hMaxRequestTimes": "600-900", | ||
| 287 | "hMaxReusableSecs": "1800-3000" | ||
| 288 | }, | ||
| 289 | "noGRPCHeader": false, | ||
| 290 | "xPaddingBytes": "100-1000", | ||
| 291 | "scMaxEachPostBytes": 1000000, | ||
| 292 | "scMinPostsIntervalMs": 30, | ||
| 293 | "scStreamUpServerSecs": "20-80" | ||
| 294 | } | ||
| 295 | ``` | ||
| 296 | |||
| 297 | **SockOpt JSON:** ✅ КОПИРОВАТЬ ЭТО: | ||
| 298 | |||
| 299 | ```json | ||
| 300 | { | ||
| 301 | "dialerProxy": "fragment", | ||
| 302 | "tcpcongestion": "bbr", | ||
| 303 | "tcpWindowClamp": 600, | ||
| 304 | "fragment": { | ||
| 305 | "packets": "tlshello", | ||
| 306 | "length": "50-100", | ||
| 307 | "interval": "10-20" | ||
| 308 | } | ||
| 309 | } | ||
| 310 | ``` | ||
| 311 | |||
| 312 | --- | ||
| 313 | |||
| 314 | ## 3. WebSocket (WS) — Прямое подключение | ||
| 315 | |||
| 316 | Здесь Mux будет полезен вместе с твоими системными настройками. | ||
| 317 | |||
| 318 | **Mux JSON:** ✅ КОПИРОВАТЬ ЭТО: | ||
| 319 | |||
| 320 | ```json | ||
| 321 | { | ||
| 322 | "enabled": true, | ||
| 323 | "concurrency": 16, | ||
| 324 | "version": 2 | ||
| 325 | } | ||
| 326 | ``` | ||
| 327 | |||
| 328 | **SockOpt JSON:** ✅ КОПИРОВАТЬ ЭТО: | ||
| 329 | |||
| 330 | ```json | ||
| 331 | { | ||
| 332 | "dialerProxy": "fragment", | ||
| 333 | "tcpcongestion": "bbr", | ||
| 334 | "tcpKeepAliveInterval": 5, | ||
| 335 | "fragment": { | ||
| 336 | "packets": "tlshello", | ||
| 337 | "length": "50-100", | ||
| 338 | "interval": "10-20" | ||
| 339 | } | ||
| 340 | } | ||
| 341 | ``` | ||
| 342 | |||
| 343 | --- | ||
| 344 | |||
| 345 | ## 4. gRPC | ||
| 346 | |||
| 347 | Для gRPC важен низкий пинг, поэтому оставляем BBR, но Mux отключаем. | ||
| 348 | |||
| 349 | **Mux JSON:** ❌ НЕ ИСПОЛЬЗОВАТЬ. (gRPC сам управляет потоками). | ||
| 350 | |||
| 351 | **SockOpt JSON:** ✅ КОПИРОВАТЬ ЭТО: | ||
| 352 | |||
| 353 | ```json | ||
| 354 | { | ||
| 355 | "dialerProxy": "fragment", | ||
| 356 | "tcpcongestion": "bbr", | ||
| 357 | "fragment": { | ||
| 358 | "packets": "tlshello", | ||
| 359 | "length": "50-100", | ||
| 360 | "interval": "10-20" | ||
| 361 | } | ||
| 362 | } | ||
| 363 | ``` | ||
| 364 | |||
| 365 | --- | ||
| 366 | |||
| 367 | ## ℹ️ Почему это важно (по твоим файлам): | ||
| 368 | |||
| 369 | * **Фрагментация (tlshello):** Режет первый пакет ClientHello (где виден SNI), не давая ТСПУ заблокировать соединение на старте. | ||
| 370 | * **BBR (tcpcongestion):** Твой сервер увидит, что клиент работает на BBR, и будет отдавать данные максимально быстро, минуя стандартные алгоритмы замедления TCP. | ||
| 371 | * **Interface (wg0):** Если ты используешь это в связке с локальным VPN или WARP (как в твоем конфиге OUT_WARP), этот параметр гарантирует, что трафик пойдет по нужному маршруту. | ||
| 372 | |||
| 373 | --- | ||
| 374 | |||
| 375 | # Репозитории GitHub, используемые в проекте Remnawave Node | ||
| 376 | |||
| 377 | ## Основные компоненты | ||
| 378 | |||
| 379 | | Репозиторий | Описание | Использование | | ||
| 380 | | ------------------------------------------------------------------------------- | -------------------------- | ------------------------------------------- | | ||
| 381 | | [remnawave/node](https://github.com/remnawave/node) | Remnawave Node (Xray-core) | Основной VPN-контейнер | | ||
| 382 | | [nginx/nginx](https://github.com/nginx/nginx) | Nginx | Веб-сервер для SNI-роутинга и прокси | | ||
| 383 | | [linuxserver/docker-nextcloud](https://github.com/linuxserver/docker-nextcloud) | Nextcloud | Файловое облако для камуфляжа | | ||
| 384 | | [bolucat/naive](https://github.com/bolucat/naive) | NaiveProxy | Forward Proxy с маскировкой под Chrome | | ||
| 385 | | [lavrushin/b4](https://github.com/lavrushin/b4) | B4 DPI Bypass | Обход Deep Packet Inspection | | ||
| 386 | | [allinurl/goaccess](https://github.com/allinurl/goaccess) | GoAccess | Визуализация логов nginx в реальном времени | | ||
| 387 | | [containrrr/watchtower](https://github.com/containrrr/watchtower) | Watchtower | Автообновление Docker-контейнеров | | ||
| 388 | |||
| 389 | ## Гео-данные и списки блокировок | ||
| 390 | |||
| 391 | | Репозиторий | Описание | Использование | | ||
| 392 | | ----------------------------------------------------------------------------------------------------- | ------------------------------------ | ---------------------------------- | | ||
| 393 | | [runetfreedom/russia-v2ray-rules-dat](https://github.com/runetfreedom/russia-v2ray-rules-dat) | Гео-файлы для обхода блокировок в РФ | geoip.dat, geosite.dat, zapret.dat | | ||
| 394 | | [Loyalsoldier/v2ray-rules-dat](https://github.com/Loyalsoldier/v2ray-rules-dat) | V2Ray правила (резервный источник) | geoip.dat, geosite.dat | | ||
| 395 | | [kutovoys/ru_gov_zapret](https://github.com/kutovoys/ru_gov_zapret) | Список запрещённых сайтов РФ | zapret.dat | | ||
| 396 | | [hxehex/russia-mobile-internet-whitelist](https://github.com/hxehex/russia-mobile-internet-whitelist) | Whitelist российских доменов | Фильтрация для автоподбора SNI | | ||
| 397 | |||
| 398 | ## Безопасность и защита | ||
| 399 | |||
| 400 | | Репозиторий | Описание | Использование | | ||
| 401 | | ----------------------------------------------------------------------------------- | -------------- | ----------------------------- | | ||
| 402 | | [DonMatteoVPN/TrafficGuard-auto](https://github.com/DonMatteoVPN/TrafficGuard-auto) | TrafficGuard | Защита от сканирования портов | | ||
| 403 | | [XTLS/RealiTLScanner](https://github.com/XTLS/RealiTLScanner) | RealiTLScanner | Автоподбор Reality SNI | | ||
| 404 | |||
| 405 | ## Инструменты и утилиты | ||
| 406 | |||
| 407 | | Репозиторий | Описание | Использование | | ||
| 408 | | ----------------------------------------------------------------------------------------- | ----------------------- | ----------------------------------------- | | ||
| 409 | | [ohmyzsh/ohmyzsh](https://github.com/ohmyzsh/ohmyzsh) | Oh My Zsh | Современный shell с плагинами | | ||
| 410 | | [zsh-users/zsh-autosuggestions](https://github.com/zsh-users/zsh-autosuggestions) | Zsh Autosuggestions | Автодополнение команд в Zsh | | ||
| 411 | | [zsh-users/zsh-syntax-highlighting](https://github.com/zsh-users/zsh-syntax-highlighting) | Zsh Syntax Highlighting | Подсветка синтаксиса в Zsh | | ||
| 412 | | [bcicen/ctop](https://github.com/bcicen/ctop) | ctop | Мониторинг Docker-контейнеров в терминале | | ||
| 413 | | [jesseduffield/lazydocker](https://github.com/jesseduffield/lazydocker) | lazydocker | TUI для управления Docker | | ||
| 414 | |||
| 415 | ## Инструменты сборки | ||
| 416 | |||
| 417 | | Репозиторий | Описание | Использование | | ||
| 418 | | --------------------------------------------------------------- | ------------ | ----------------------------------- | | ||
| 419 | | [caddyserver/xcaddy](https://github.com/caddyserver/xcaddy) | xcaddy | Сборка Caddy с кастомными плагинами | | ||
| 420 | | [klzgrad/forwardproxy](https://github.com/klzgrad/forwardproxy) | forwardproxy | Плагин для Caddy (NaiveProxy) | | ||
| 421 | |||
| 422 | ## Клиентские приложения | ||
| 423 | |||
| 424 | | Репозиторий | Описание | Платформа | | ||
| 425 | | --------------------------------------------------------------------------------- | -------- | --------- | | ||
| 426 | | [MatsuriDayo/NekoBoxForAndroid](https://github.com/MatsuriDayo/NekoBoxForAndroid) | NekoBox | Android | | ||
| 427 | | [hiddify/hiddify-app](https://github.com/hiddify/hiddify-app) | Hiddify | Windows | | ||
| 428 | | [MatsuriDayo/nekoray](https://github.com/MatsuriDayo/nekoray) | NekoRay | Windows | | ||
| 429 | |||
| 430 | ## Docker образы | ||
| 431 | |||
| 432 | | Образ | Репозиторий | Описание | | ||
| 433 | | ------------------------------ | ------------------------------------------------------------------------------- | -------------------------- | | ||
| 434 | | `remnawave/node:latest` | [remnawave/node](https://github.com/remnawave/node) | Remnawave Node (Xray-core) | | ||
| 435 | | `nginx:1.28` | [nginx/nginx](https://github.com/nginx/nginx) | Nginx | | ||
| 436 | | `linuxserver/nextcloud:latest` | [linuxserver/docker-nextcloud](https://github.com/linuxserver/docker-nextcloud) | Nextcloud | | ||
| 437 | | `pocat/naiveproxy:latest` | [bolucat/naive](https://github.com/bolucat/naive) | NaiveProxy Server | | ||
| 438 | | `pocat/naiveproxy:client` | [bolucat/naive](https://github.com/bolucat/naive) | NaiveProxy Client | | ||
| 439 | | `lavrushin/b4:latest` | [lavrushin/b4](https://github.com/lavrushin/b4) | B4 DPI Bypass | | ||
| 440 | | `allinurl/goaccess:latest` | [allinurl/goaccess](https://github.com/allinurl/goaccess) | GoAccess | | ||
| 441 | | `containrrr/watchtower:latest` | [containrrr/watchtower](https://github.com/containrrr/watchtower) | Watchtower | | ||
| 442 | | `alpine:latest` | [alpine](https://github.com/alpinelinux/docker-alpine) | DPI Detector | | ||
| 443 | |||
| 444 | ## Примечания | ||
| 445 | |||
| 446 | 1. **Гео-файлы**: Основным источником является `runetfreedom/russia-v2ray-rules-dat`, оптимизированный для обхода блокировок в РФ. Резервные источники используются при недоступности основного. | ||
| 447 | 1. **NaiveProxy**: Использует готовые Docker образы `pocat/naiveproxy` для серверной и клиентской частей. | ||
| 448 | 1. **Автообновление**: Watchtower автоматически обновляет контейнеры с меткой `com.centurylinklabs.watchtower.enable=true` каждые 24 часа. | ||
| 449 | 1. **Гео-файлы обновляются**: Ежедневно в 03:00 через cron-задачу. | ||
| 450 | 1. **TrafficGuard**: Обновляет базы IP ежедневно в 04:00 со случайной задержкой до 30 минут. |