Полная инструкция: Let’s Encrypt + Hysteria2 для Remnawave
Введение
В этой инструкции мы настроим автоматическое получение и обновление TLS-сертификатов от Let’s Encrypt и подключим их к ноде Remnawave для работы протокола Hysteria2 (QUIC + TLS).
Что вы получите:
— Действующий сертификат для вашего домена (например,h2.example.com)
— Интеграцию с контейнером Remnawave через Docker volume
— Автообновление сертификатов раз в месяц через cron
Требования
- Сервер с открытым портом 80 (на время первого получения сертификата) и 443 (для работы Hysteria)
- Установленный Docker и Docker Compose
- Домен, направленный A-записью на IP вашего сервера
- Установленная и работающая нода Remnawave (обычно в
/opt/remnanode)
1. Подготовка и установка Certbot
Создадим рабочую директорию для Certbot и базовый docker-compose.yml.
mkdir -p /opt/certbot && cd /opt/certbot nano docker-compose.yml
Вставьте следующее содержимое:
services:
certbot:
container_name: certbot
image: certbot/certbot
network_mode: host
volumes:
- ./certs:/etc/letsencryptСохраните (Ctrl+O, Enter, Ctrl+X).
Что здесь происходит:
—network_mode: host— Certbot сможет слушать порт 80 на хосте
—./certs:/etc/letsencrypt— сертификаты будут храниться в/opt/certbot/certs
2. Первичное получение сертификата
Перед запуском убедитесь, что порт 80 свободен (ни Nginx, ни нода Remnawave, ни другие сервисы его не занимают).
docker run --rm \ -v $(pwd)/certs:/etc/letsencrypt \ -v $(pwd)/var-lib-letsencrypt:/var/lib/letsencrypt \ --network host \ certbot/certbot certonly --standalone \ --non-interactive --agree-tos \ --email admin@your-domain.com \ -d your-domain.com
docker run --rm \ -v $(pwd)/certs:/etc/letsencrypt \ -v $(pwd)/var-lib-letsencrypt:/var/lib/letsencrypt \ --network host \ certbot/certbot certonly --standalone \ --non-interactive --agree-tos \ --email admin@example.com \ -d h2.example.com
После успешного выполнения сертификаты появятся в папке:
/opt/certbot/certs/live/your-domain.com/ ├── fullchain.pem ├── privkey.pem └── ...
3. Проброс сертификатов в Remnawave
Теперь подключим папку с сертификатами к контейнеру ноды Remnawave.
cd /opt/remnanode nano docker-compose.yml
Найдите секцию volumes: внутри services.remnanode и добавьте строку:
services:
remnanode:
...
volumes:
- '/opt/certbot/certs:/etc/letsencrypt:ro' # <-- добавить эту строкуВажно: режим :ro означает read-only — безопасно.
services:
remnanode:
image: remnawave/backend:latest
container_name: remnanode
restart: always
network_mode: host
volumes:
- ./data:/app/data
- '/opt/certbot/certs:/etc/letsencrypt:ro'docker compose down && docker compose up -d
4. Настройка профиля Hysteria2 в панели Remnawave
В веб-панели Remnawave при создании или редактировании профиля узла (node) вставьте следующий JSON.
⚠️ Обязательно заменитеyour-domain.comна ваш реальный домен в путяхkeyFileиcertificateFile.
{
"log": { "loglevel": "none" },
"inbounds": [
{
"tag": "HYSTERIA-BBR",
"port": 443,
"listen": "0.0.0.0",
"protocol": "hysteria",
"settings": {
"clients": [],
"version": 2
},
"streamSettings": {
"network": "hysteria",
"security": "tls",
"finalmask": {
"quicParams": { "debug": false, "congestion": "bbr" }
},
"tlsSettings": {
"alpn": ["h3"],
"certificates": [
{
"keyFile": "/etc/letsencrypt/live/your-domain.com/privkey.pem",
"certificateFile": "/etc/letsencrypt/live/your-domain.com/fullchain.pem"
}
]
},
"hysteriaSettings": { "version": 2 }
}
}
],
"outbounds": [
{ "tag": "DIRECT", "protocol": "freedom" },
{ "tag": "BLOCK", "protocol": "blackhole" }
],
"routing": {
"rules": [
{ "ip": ["geoip:private"], "outboundTag": "BLOCK" },
{ "domain": ["geosite:private"], "outboundTag": "BLOCK" },
{ "protocol": ["bittorrent"], "outboundTag": "BLOCK" }
]
}
}- Путь к сертификатам — внутри контейнера Remnawave:
/etc/letsencrypt/live/... - Именно туда мы пробросили папку
/opt/certbot/certsна хосте - Протокол Hysteria2 работает поверх QUIC, поэтому указан
alpn: ["h3"]
5. Автоматическое обновление сертификатов (Cron)
Сертификаты Let’s Encrypt действительны 90 дней. Настроим ежемесячное обновление.
crontab -e
Добавьте строку (запуск 28-го числа каждого месяца в 00:00):
0 0 28 * * cd /opt/certbot && docker compose run --rm certbot renew
cd /opt/certbot docker compose run --rm certbot renew --dry-run
--dry-run — тестовый режим без реального обновления.Проверка работоспособности
- Сертификат получен:bashls /opt/certbot/certs/live/your-domain.com/
- Remnawave видит сертификаты:bashdocker exec remnanode ls /etc/letsencrypt/live/your-domain.com/
- Порт 443 слушается:bashss -tulpn | grep 443
- Подключение клиентом Hysteria2 — используйте ваши ключи из панели Remnawave.
Устранение типичных проблем
Остановите nginx / apache / другой сервис: systemctl stop nginx
Сертификат не обновляется в cron
Проверьте путь: cd /opt/certbot должен работать. Добавьте --debug в команду renew
Убедитесь, что volume проброшен именно в /etc/letsencrypt, а не в другую папку
Проверьте JSON: нет ли лишних запятых. Убедитесь, что keyFile и certificateFile указывают на существующие файлы внутри контейнера
Итог
- ✅ Автоматическое получение Let’s Encrypt сертификата для вашего домена
- ✅ Проброс сертификатов в контейнер Remnawave
- ✅ Рабочий профиль Hysteria2 с TLS и BBR
- ✅ Ежемесячное обновление сертификатов через cron
Теперь ваша нода Remnawave готова принимать Hysteria2 соединения по защищённому TLS каналу.