Hysteria2 — этоproxy-протокол на базе QUIC (UDP), разработанный для обхода блокировок и цензуры. Обеспечивает высокую скорость даже при потере пакетов, маскируется под обычный HTTPS-трафик.
Создай A-запись:
- Имя: vpn (или любое)
- Значение: IP твоего сервера
- Cloudflare: DNS-only (серое облако, НЕ проксировать — Hysteria2 работает по UDP, Cloudflare прокси только TCP)
Проверь что DNS работает:
dig vpn.example.com +short
# должен вернуть IP сервера
# Официальный скрипт установки
bash <(curl -fsSL https://get.hy2.sh/)
Проверь что установилось:
hysteria version
# Установка certbot
apt update && apt install -y certbot
# Получение сертификата (порт 80 должен быть свободен!)
certbot certonly --standalone -d vpn.example.com
# Сертификаты будут здесь:
# /etc/letsencrypt/live/vpn.example.com/fullchain.pem
# /etc/letsencrypt/live/vpn.example.com/privkey.pem
mkdir -p /etc/hysteria
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \
-keyout /etc/hysteria/server.key \
-out /etc/hysteria/server.crt \
-subj "/CN=vpn.example.com"
⚠️ С self-signed сертификатом клиент должен использовать
insecure=1
Создай файл /etc/hysteria/config.yaml:
listen: :443
# TLS сертификаты
tls:
cert: /etc/letsencrypt/live/vpn.example.com/fullchain.pem
key: /etc/letsencrypt/live/vpn.example.com/privkey.pem
# Пароль (сгенерируй свой)
obfs:
type: salamander
salamander:
password: ТВОЙ_ПАРОЛЬ_ОБФУСКАЦИИ
# Авторизация
auth:
type: password
password: ТВОЙ_ПАРОЛЬ_ДОСТУПА
# Маскировка под обычный сайт
masquerade:
type: proxy
proxy:
url: https://bing.com
rewriteHost: true
# Логи
log:
level: info
# Пароль для auth (доступ клиента)
openssl rand -base64 16
# Пароль для obfs (обфускация)
openssl rand -base64 16
# UDP порт 443 — основной для Hysteria2
ufw allow 443/udp
# TCP 80 — для обновления Let's Encrypt
ufw allow 80/tcp
# Проверка
ufw status
⚠️ Hysteria2 работает по UDP, не TCP! Убедись что VPS-провайдер не блокирует UDP-трафик.
# Запуск
systemctl start hysteria-server
# Автозапуск
systemctl enable hysteria-server
# Проверка статуса
systemctl status hysteria-server
# Логи (если ошибки)
journalctl -u hysteria-server -f --no-pager
hysteria2://ПАРОЛЬ_ДОСТУПА@vpn.example.com:443?sni=vpn.example.com&insecure=0&obfs=salamander&obfs-password=ПАРОЛЬ_ОБФУСКАЦИИ#Hysteria2-MyVPN
Если self-signed сертификат:
insecure=1вместоinsecure=0
Android:
- Hysteria2 (Google Play / GitHub)
- NekoBox (поддерживает Hysteria2)
- v2rayNG (с плагином)
iOS:
- Shadowrocket (платный, $2.99)
- Streisand (бесплатный)
- Stash
Windows / macOS:
- Hysteria2 (CLI: hysteria client)
- v2rayN / NekoRay
- Clash Verge (с hysteria-провайдером)
Создай ~/config.yaml:
server: vpn.example.com:443
auth: ПАРОЛЬ_ДОСТУПА
tls:
sni: vpn.example.com
insecure: false # true если self-signed
obfs:
type: salamander
salamander:
password: ПАРОЛЬ_ОБФУСКАЦИИ
socks5:
listen: 127.0.0.1:1080
http:
listen: 127.0.0.1:8080
Запуск:
hysteria client -c ~/config.yaml
# Тест обновления
certbot renew --dry-run
# Cron для автообновления (уже добавляется автоматически)
# Проверь:
systemctl list-timers | grep certbot
Hysteria2 автоматически подхватит новые сертификаты — перезапуск не нужен.
На сервере:
# Проверь что слушает порт 443 UDP
ss -ulnp | grep 443
# Логи в реальном времени
journalctl -u hysteria-server -f
На клиенте:
# Проверка через SOCKS5
curl --socks5 127.0.0.1:1080 https://ifconfig.me
# должен вернуть IP сервера, а не твой
ufw statushtopcertbot renew
systemctl restart hysteria-server
# Что занимает порт 443?
ss -ulnp | grep 443
ss -tlnp | grep 443
# Если Nginx/Apache — останови или перевеси на другой порт
# Перезапуск
systemctl restart hysteria-server
# Стоп
systemctl stop hysteria-server
# Конфиг
nano /etc/hysteria/config.yaml
# Логи
journalctl -u hysteria-server -f --no-pager
# Версия
hysteria version
# Проверка конфига
hysteria server -c /etc/hysteria/config.yaml --check
hysteria2://ПАРОЛЬ@vpn.example.com:443?insecure=0&sni=vpn.example.com&obfs=salamander&obfs-password=ПАРОЛЬ_ОБФ#Hysteria2-MyVPN
Заменить:
- ПАРОЛЬ — пароль из auth
- vpn.example.com — твой домен
- ПАРОЛЬ_ОБФ — пароль из obfs
- insecure=0 → insecure=1 если self-signed