Не понимаю, в чём ошибка. Предполагаю, что провайдер может блокировать порт-хоппинг, но прошу помощи — возможно, я некорректно настроил сервер. Мой VPS: 1 поток, 1 ГБ ОЗУ; на сервере используется self-sni. Ниже — моя конфигурация: <br/> { <br/> "listen": "", <br/> "port": 15973, <br/> "protocol": "hysteria", <br/> "tag": "in-15973-udp", <br/> "settings": { <br/> "clients": [ <br/> { <br/> "auth": "00000000000000", <br/> "email": "try", <br/> "limitIp": 0, <br/> "totalGB": 0, <br/> "expiryTime": 0, <br/> "enable": true, <br/> "tgId": 0, <br/> "subId": "000000000000", <br/> "comment": "", <br/> "reset": 0, <br/> "created_at": 0000000000000, <br/> "updated_at": 0000000000000 <br/> } <br/> ], <br/> "version": 2 <br/> }, <br/> "sniffing": { <br/> "enabled": true, <br/> "destOverride": [ <br/> "http", <br/> "tls", <br/> "quic", <br/> "fakedns" <br/> ] <br/> }, <br/> "streamSettings": { <br/> "network": "hysteria", <br/> "hysteriaSettings": { <br/> "version": 2, <br/> "udpIdleTimeout": 60 <br/> }, <br/> "security": "tls", <br/> "tlsSettings": { <br/> "serverName": "{myselfsniserver}.duckdns.org", <br/> "minVersion": "1.2", <br/> "maxVersion": "1.3", <br/> "cipherSuites": "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256", <br/> "rejectUnknownSni": false, <br/> "disableSystemRoot": false, <br/> "enableSessionResumption": true, <br/> "certificates": [ <br/> { <br/> "certificateFile": "/etc/letsencrypt/live/makinggoodsoutofwood.duckdns.org/fullchain.pem", <br/> "keyFile": "/etc/letsencrypt/live/makinggoodsoutofwood.duckdns.org/privkey.pem", <br/> "oneTimeLoading": false, <br/> "usage": "encipherment", <br/> "buildChain": true, <br/> "useFile": true <br/> } <br/> ], <br/> "alpn":
Короткий ответ — скорее всего дело не в самой Hysteria, а в том, как мобильный оператор обращается с UDP (блокировка/фрагментация/NAT timeout) и/или в том, что сервер слушает нестандартный порт/интерфейс и TLS-SNI не «маскирует» трафик как HTTPS. Что можно и стоит сделать прямо сейчас:
Общие рекомендованные изменения в конфигурации (Xray/V2Ray + hysteria)
- Явно слушать на всех интерфейсах:
"listen": "0.0.0.0"
- Использовать UDP-порт, который мобильный оператор с большей вероятностью пропускает — 443 (UDP) или 8443:
"port": 443
(Не забудьте открыть порт в iptables/ufw/в панели провайдера и разрешить UDP.)
- В tlsSettings включить ALPN, имитирующий HTTPS:
"alpn": ["h2", "http/1.1"]
Это помогает обойти простую DPI-фильтрацию.
- Увеличить время UDP keep‑alive (чтобы не «падали» сессии из‑за NAT timeout):
"hysteriaSettings": { "version": 2, "udpIdleTimeout": 300 }
(300 сек — пример; можно выставить 300–600.)
- Проверить serverName и сертификат: serverName должен совпадать с доменом в сертификате (duckdns.org). Если вы делаете SNI‑spoofing/self‑sni, то продумайте логику rejectUnknownSni:
- если вы обязуете клиентов шифровать SNI конкретным именем — поставить "rejectUnknownSni": true;
- если хотите принимать любые SNI — false (но это хуже с точки маскировки).
- Понизить MTU/избежать фрагментации (возможно): если есть опции client-side (hysteria client) — задать меньшую максимальную полезную нагрузку (примерно 1200–1350 байт), чтобы не было фрагментации по мобильной сети.
Пример минимально изменённых фрагментов (вставьте в ваш JSON):
- listen и port
"listen": "0.0.0.0",
"port": 443,
- hysteriaSettings
"hysteriaSettings": {
"version": 2,
"udpIdleTimeout": 300
},
- tlsSettings (включаем alpn и проверку SNI при необходимости)
"tlsSettings": {
"serverName": "makinggoodsoutofwood.duckdns.org",
"alpn": ["h2", "http/1.1"],
"minVersion": "1.2",
"maxVersion": "1.3",
"rejectUnknownSni": true,
...
}
Что дополнительно проверить на сервере
- Что процесс слушает UDP на нужном порте:
ss -u -lnp | grep :443 (или ваш порт)
- Что iptables/ufw/панель VPS разрешают UDP на этот порт:
sudo iptables -L -n -v
- Сниффинг входящих пакетов при попытке подключиться с мобилки (на сервере):
sudo tcpdump -n -i any udp port 443
Это покажет, доходят ли UDP-пакеты до VPS.
- Логи xray/v2ray (journalctl -u xray -f или лог-файл) — есть ли ошибки TLS/handshake/authorization.
- Убедитесь, что certfificates корректны и путь к pem/privkey верный; можно перезапустить службу и смотреть ошибки старта.
Пробный план для диагностики
1) Подключитесь к серверу с Wi‑Fi/проводного интернета — работает ли Hysteria? Если да — проблема на стороне мобильного оператора.
2) На мобилке включите режим модема (раздача Wi‑Fi) и попробуйте подключить клиент — если через раздачу (AP hotspot) работает, но напрямую нет — оператор блокирует мобильный UDP.
3) Сделайте tcpdump при подключении с мобилки: если пакеты не доходят — оператор/маршрут блокирует.
4) Если пакеты доходят, но сессия не устанавливается — посмотрите логи сервера для детали (TLS mismatch, auth fail).
Если моб. оператор действительно блокирует UDP (и вы это подтвердили)
- Лучшее решение — иметь TCP/TLS fallback: запустить на том же домене ещё один слушатель TCP+TLS (vless/trojan/tcp) на 443 и переключаться на клиенте при неудаче. Hysteria не «перепрыгнёт» на TCP сама.
- Или использовать CDN/Cloudflare Spectrum/Reverse proxy, который проксирует UDP (не все CDN проксируют UDP; Cloudflare Spectrum платный).
- Можно также поставить Wireguard/SSH/VLESS(TCP) на 443 как резерв.
Про ресурсы VPS
- 1 vCPU/1 GB RAM обычно достаточно для небольших подключений, но если у вас высокий шифрованный трафик — CPU может быть узким местом (особенно с ChaCha20 vs ECDHE). Для диагностики начните с низкой нагрузки; если CPU 100% — думайте про апгрейд.
Если хотите, помогу дальше — пришлите:
- полные логи сервера (ошибки xray/hysteria) при попытке подключения с мобильного,
- вывод ss/tcpdump (что видно при попытке),
- клиентский конфиг и модель мобильного оператора (какой APN/имя оператора).