Серверная инфраструктура и анти-детект
Reality на дешёвом VPS с грязным IP в стране, где блокируют все IP-диапазоны хостинга — это провал ещё до запуска. Хороший VPN начинается с правильного выбора железа, локации, ASN и тюнинга ядра. Разберём всё, что нужно для production-сетапа.
- Как выбрать VPS: страна, провайдер, ASN, чистота IP
- BBR / TCP Brutal на ядре Linux — настройка
- sysctl-тюнинг: буферы, conntrack, fast-open
- fail2ban: защита от scanner'ов и brute force на SSH/админ-панель
- Multi-port: один сервер на 5 разных портов с разными протоколами
- CDN-фронтинг через Cloudflare для WS/gRPC inbound
- Ротация IP: что делать, если IP попал в blacklist
Здесь под протоколы подкладывается фундамент. BBR и тюнинг ядра — те же congestion control и MTU/буферы из урока 2 и разбора TCP; «чистота IP» и ASN важны потому, что цензор блокирует диапазонами (модель противника, урок 5); CDN-фронтинг и защита панели — прямое продолжение урока 10. Reality из урока 7 на «грязном» VPS не спасёт — инфраструктура первична.
1. Выбор VPS — главное
1.1. Страна и юрисдикция
Главный критерий: где НЕ применяют закон о логировании VPN-трафика.
| Страна | Плюсы | Минусы | Тир |
|---|---|---|---|
| Нидерланды | Лучшие провайдеры, чистые IP, GDPR-защита | Дороже среднего, иногда DMCA-блокировки на хостинге | S |
| Германия | Дешёвые тарифы (Hetzner), стабильный backbone | Hetzner блокирует за «massive UDP» | A |
| Финляндия | Низкий ping для РФ, нейтральная юрисдикция | Меньше провайдеров | A |
| Швеция / Норвегия | Дата-центры с холодным климатом, дешёвая электроэнергия | Latency для Сибири +30 мс | A |
| Сингапур | Идеален для Азии | +150 мс для РФ, дороже | B (для РФ) |
| США | Дёшево, много провайдеров | +150 мс для РФ, NSA/Patriot Act | C |
| Турция, Армения, Казахстан | Близко к РФ, низкий ping | Иногда сотрудничают с РФ, IP-диапазоны могут попадать в РФ-blacklist | B |
1.2. ASN и чистота IP
ASN (Autonomous System Number) — идентификатор сети провайдера. У некоторых хостинг-провайдеров блокируют целые ASN в РФ (если оттуда массово исходят VPN-IP).
Проверка ASN при покупке VPS:
- bgp.he.net — введи будущий IP, увидишь ASN и кто владелец
- abuseipdb.com — проверь репутацию IP (не в blacklist ли)
- check-host.net — пинг и доступность из России
- Не в Spamhaus / SORBS
- Не в Censys recently flagged
- Пингуется из России (если цель — пользователи в РФ)
- ASN не помечен в РФ blacklist'ах
- Не был «арендован» предыдущим клиентом-спамером (узнаёшь через AbuseIPDB)
1.3. Хостинг-провайдеры (2024-2026)
| Провайдер | Цена / мес | Плюсы | Особенности |
|---|---|---|---|
| Hetzner (DE/FI) | €4-8 | Дёшево, мощно | Не любит «массовый UDP» — Hysteria может закрыть |
| Contabo (DE/US) | €5-10 | Очень дёшево, много трафика | Slow neighbors, не для GP-задач |
| Vultr (global) | $5-20 | 30+ локаций, hourly billing | Чистые IP, но не самые быстрые |
| DigitalOcean | $5-20 | Хорошие IP, стабильно | Иногда РФ-IP блокируют их диапазоны |
| BuyVM (Frantech) | $2-7 | Дёшево, лояльны к VPN | Малоизвестны, но фанаты privacy |
| 1984.is (Исландия) | €8-15 | Privacy-friendly, не запрашивают KYC | Дорого, ограниченный bandwidth |
| Aeza, AS-Local-IT, Aaaarrgh | 500-1500 ₽ | Российские провайдеры с VPS в ЕС | Удобная оплата картой РФ, но риски юрисдикции |
2. BBR — congestion control на ядре
Linux дефолтный CC — CUBIC. Это «осторожный» алгоритм: при потере пакета снижает скорость в 2 раза. На каналах с натуральными потерями (5-10%) это режет пропускную способность.
BBR (Bottleneck Bandwidth and RTT, Google, 2016) — измеряет фактическую пропускную способность и RTT, не реагирует на потери, а только на сигналы «канал перегружен» (рост RTT). На реальных каналах даёт 2-10x прирост.
Включение:
echo 'net.core.default_qdisc = fq' >> /etc/sysctl.conf echo 'net.ipv4.tcp_congestion_control = bbr' >> /etc/sysctl.conf sysctl -p # проверка: sysctl net.ipv4.tcp_congestion_control # → bbr sysctl net.ipv4.tcp_available_congestion_control
BBR v2 / v3 — лучше, но не всегда доступно
BBR v1 имеет проблему — слишком агрессивен к чужим TCP (отжимает полосу). BBR v2/v3 более «справедливые». Доступны в свежих ядрах (Linux 6.4+) или через CloudLinux BBR-Plus, XanMod, Liquorix.
3. sysctl-тюнинг
Базовый набор оптимизаций для VPN-сервера:
# /etc/sysctl.d/99-vpn-tune.conf # === Network buffers === net.core.rmem_max = 67108864 net.core.wmem_max = 67108864 net.core.rmem_default = 1048576 net.core.wmem_default = 1048576 net.ipv4.tcp_rmem = 4096 87380 67108864 net.ipv4.tcp_wmem = 4096 65536 67108864 # === BBR + fq === net.core.default_qdisc = fq net.ipv4.tcp_congestion_control = bbr # === TCP Fast Open === net.ipv4.tcp_fastopen = 3 # === Notsent buffer (для BBR) === net.ipv4.tcp_notsent_lowat = 16384 # === Connection tracking (для NAT/forwarding) === net.netfilter.nf_conntrack_max = 1048576 net.netfilter.nf_conntrack_tcp_timeout_established = 1200 net.netfilter.nf_conntrack_udp_timeout = 60 net.netfilter.nf_conntrack_udp_timeout_stream = 180 # === SYN flood protection === net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_max_syn_backlog = 8192 net.ipv4.tcp_synack_retries = 2 # === Reuse / recycle === net.ipv4.tcp_tw_reuse = 1 # === IP forwarding для VPN === net.ipv4.ip_forward = 1 net.ipv6.conf.all.forwarding = 1 # === Disable ICMP responses (опционально, для скрытности) === # net.ipv4.icmp_echo_ignore_all = 1
Применить: sysctl -p /etc/sysctl.d/99-vpn-tune.conf
4. fail2ban
Сканеры будут стучать в SSH и админ-порт 3x-ui каждую секунду. fail2ban банит после N неудач.
apt install fail2ban # /etc/fail2ban/jail.d/sshd-aggressive.conf [sshd] enabled = true port = 22,2222 filter = sshd backend = systemd maxretry = 3 findtime = 300 bantime = 86400 banaction = ufw systemctl restart fail2ban fail2ban-client status sshd
То же самое — для 3x-ui (создай filter на патерн «failed login»).
5. Multi-port — несколько inbound на одном сервере
Хорошая стратегия — поднять 3-5 разных протоколов на разных портах:
| Порт | Протокол | Транспорт | Когда работает |
|---|---|---|---|
| 443 | VLESS | Reality + Vision | Основной канал — стабильно работает в РФ |
| 2096 | VLESS | WS + TLS | Через Cloudflare, бэкап |
| 8443 | Hysteria 2 | QUIC + UDP | Когда плохой канал, мобильный |
| 51820 | AmneziaWG | UDP + obfs | Для домашних роутеров |
| 22222 | Trojan | TLS | Запасной, если Reality режут |
Если один протокол блокируется — клиент переключается на другой. Sub-link отдаёт все.
6. CDN-фронтинг через Cloudflare
Для VLESS+WS — Cloudflare предоставляет бесплатный proxy с защитой от прямого обращения к твоему серверу. DPI видит TLS-handshake с CF (IP 104.x, 172.67.x), не с твоим VPS.
- Регистрируешь свободный домен (можно
.tk/.mlбесплатно, или $10/год) - Перевешиваешь NS-серверы на Cloudflare
- В DNS Cloudflare создаёшь A-запись:
vpn.example.com → твой_VPS_IPс включённой Proxy (оранжевая туча) - В CF включаешь WebSockets (Network → WebSockets: ON)
- В Xray inbound — WS + TLS, домен
vpn.example.com, path/secret-uuid-path(длинный, рандомный) - Перед Xray — nginx с Let's Encrypt сертификатом для
vpn.example.com
Даже если твой VPS-IP заблокируют — клиенты, идущие через Cloudflare, продолжают работать, потому что они подключаются к IP CF, а не к твоему. CF проксирует трафик внутрь.
Бонус: CF защищает от DDoS, хайдит реальный IP сервера, добавляет HTTP/3 поддержку «бесплатно».
7. Что делать, если IP попал в blacklist
- Не паникуй — проверь, действительно ли блок (попробуй с другого канала)
- Узнай причину: блок на TCP-handshake или на ML-классификатор? (тест через nc)
- Меняй IP:
- На Vultr/DigitalOcean — можно destroy/recreate (получишь новый IP)
- На Hetzner — заказать additional IP (€4 единоразово)
- На большинстве хостингов — просто арендуй новый VPS
- Меняй порт: с 443 на 8443/22443/любой случайный — может сработать без смены IP
- Меняй dest в Reality: если microsoft.com стал детектиться (что маловероятно), перейди на apple.com или другой
- Перейди на CDN-фронтинг: если ничего не помогает — клиенты через CF будут продолжать работать
VPS-сервер — это участок под дом, а не сам дом
Протокол (Reality, Hysteria) — дом, который ты строишь. Но дом на плохом участке бесполезен. Локация и ASN — район: если весь район хостинга-«гетто» снесён по суду (диапазон IP заблокирован целиком), твой идеальный дом недостижим, хотя с ним всё в порядке. Чистота IP — история участка: на «грязном» IP до тебя кто-то спамил или держал палёный сервис, и он уже в чёрных списках. BBR и sysctl — инженерные коммуникации: без них даже хороший дом «тормозит воду». fail2ban и firewall — забор и охрана. Мораль урока: сначала выбираешь участок (VPS/ASN/локацию) и подводишь коммуникации (ядро), и лишь потом ставишь дом-протокол — обратный порядок даёт «идеальный Reality, который не открывается».
8. Мини-лаба: попробуй прямо сейчас
Оценить «участок» и коммуникации можно с любой Linux-машины (или своего VPS):
# 1. Чей это IP и ASN — тот самый «район», который блокируют диапазонами
curl -s https://ipinfo.io/$(curl -s ifconfig.me)/json | grep -E 'org|country|city'
# 2. Включён ли BBR (congestion control из урока 2)
sysctl net.ipv4.tcp_congestion_control
sysctl net.ipv4.tcp_available_congestion_control # есть ли bbr в списке
# 3. Как включить BBR (на своём VPS с root):
# echo 'net.core.default_qdisc=fq' | sudo tee -a /etc/sysctl.conf
# echo 'net.ipv4.tcp_congestion_control=bbr' | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
# 4. «Чистота» IP: не в спам-листах ли он (замени на свой серверный IP)
# открой https://check.spamhaus.org или:
dig +short 2.0.0.127.zen.spamhaus.org # пример обратного запроса к DNSBL
# 5. Открытые порты снаружи — поверхность атаки (скан своего сервера)
sudo nmap -sT -p- --min-rate 1000 <свой IP> | grep open
Пункт 1 покажет провайдера и страну — если это крупный «хостинг-ASN» в стране жёсткой цензуры,
риск блокировки диапазоном высок (лучше резидентные/менее засвеченные сети). Пункт 2 выдаст
текущий congestion control: если cubic, а bbr есть в доступных —
включив BBR (пункт 3), получишь заметный прирост на дальних/потерянных каналах. Пункт 5 должен
показать только те порты, что ты сознательно открыл: всё лишнее — это дыры, которые закрывают
firewall и раздел про fail2ban.
9. Задачи самопроверки — реши, потом раскрой ответ
Задача 1. Идеально настроенный Reality на свежекупленном дешёвом VPS блокируется через час после запуска, хотя протокол безупречен. Назови две вероятные причины из этого урока.
(1) «Грязный» или уже засвеченный IP: на нём до тебя держали палёный сервис, и он в списках/под наблюдением цензора. (2) Блокировка по ASN/диапазону: провайдер известен как «хостинг для обхода», и цензор рубит весь его диапазон оптом, независимо от протокола. Лечение: сменить IP/провайдера на менее засвеченный, проверять чистоту IP до деплоя, выбирать локацию и ASN осознанно. Протокол тут ни при чём — виноват «участок».
Задача 2. На дальнем канале (клиент РФ — сервер США, RTT 150 мс) скорость упирается в потолок гораздо ниже полосы. Что включить на ядре и почему это помогает?
Включить BBR (net.ipv4.tcp_congestion_control=bbr + fq qdisc). CUBIC на высоком RTT с редкими потерями трактует потери как перегрузку и держит окно маленьким — на «длинной толстой трубе» это недобор. BBR оценивает реальную пропускную способность и RTT напрямую и держит окно ближе к оптимуму, давая заметный прирост на дальних каналах. Плюс тюнинг буферов (rmem/wmem) в sysctl, чтобы окно вообще могло вырасти.
Задача 3. Зачем держать один сервер на нескольких портах с разными протоколами (multi-port), если Reality и так хорош?
Диверсификация под непредсказуемый DPI: если цензор точечно придушит один порт/протокол, у пользователя остаётся запасной inbound (например, Reality на 443 + Hysteria на UDP-диапазоне + ShadowTLS). Разные транспорты по-разному переживают разные приёмы блокировки и разные сети (офис режет UDP — работает TCP, и наоборот). Один сервер обслуживает несколько «дверей», клиент переключается между ними без миграции на новый VPS.
Задача 4. В логах SSH — тысячи попыток входа в минуту с разных IP. Что настроить и чем это отличается от смены порта SSH?
fail2ban: он читает логи и банит IP после N неудачных попыток на время — режет brute-force и массовые сканеры. Смена порта SSH снижает шум от «тупых» ботов, но не защищает от целевого перебора (порт всё равно найдут сканом). Комбинация: key-only аутентификация (пароли вообще выключить), отключить root login, нестандартный порт как гигиена + fail2ban на SSH и админ-порт панели. Ключи закрывают перебор в принципе, fail2ban гасит шум и сканеров.
Задача 5. IP сервера всё-таки попал в blacklist и заблокирован. Каков план восстановления и как снизить шанс повторения?
План: сменить IP (у многих провайдеров — за отдельную плату/пересоздание), при необходимости — сервер в другом ASN/локации; конфиги пользователям обновятся через sub-link (урок 10) без ручной рассылки. Профилактика: не светить IP origin (прятать за Cloudflare/CDN-фронтинг, mTLS origin), не раздавать sub-link публично, держать запасной сервер/локацию, разнести пользователей по нодам, мониторить доступность (UptimeRobot) и списки. Идея та же, что в networking-deep: origin недостижим напрямую — его труднее выбить.
10. Словарик урока
11. Чек-лист для production
- Свежая Ubuntu 22.04/24.04 или Debian 12
- SSH на нестандартном порту, key-only auth, отключён root login
- ufw настроен: разрешены только нужные порты
- fail2ban настроен
- BBR включён
- sysctl-тюнинг применён
- Logrotate для логов Xray (иначе диск кончится)
- Cron на backup БД 3x-ui ежедневно
- Monitor uptime через UptimeRobot (бесплатно)
- Telegram-бот для уведомлений об инцидентах