April 4

🚀 Полная инструкция: Hysteria2 на RemnaNode (Node)

Предварительные требования

· Установленный RemnaWave Panel (где вы создаете профили).
· Установленный RemnawaveNode по официальной документации.
· Домен, который НЕ используется для Selfsteal (Caddy) или любого другого сервиса на порту 443.
· Открытый порт 443 (UDP) в firewall.

---

Шаг 1: Остановить Caddy (Selfsteal) и другие сервисы на 443 порту

Hysteria2 требует монопольного доступа к UDP 443. Caddy (или другой веб-сервер) должен быть остановлен.

```bash
# Остановить контейнер Caddy (если он использует host network)
docker stop caddy-selfsteal

# Проверить, что порт 443 (TCP/UDP) свободен
ss -tulpn | grep :443
```

Важно: Если у вас есть другие сервисы на 443 (nginx, apache), остановите их временно.

---

Шаг 2: Получить SSL-сертификат через Certbot (HTTP-01 challenge)

Так как порт 80 обычно свободен (Caddy его использует только для редиректа), мы используем standalone режим Certbot.

```bash
# Установить certbot
apt update && apt install certbot -y

# Остановить всё, что может занимать порт 80 (Caddy)
docker stop caddy-selfsteal

# Получить сертификат для вашего поддомена (например, hy2.example.com)
certbot certonly --standalone -d hy2.example.com --non-interactive --agree-tos --email your@email.com
```

После успешного выполнения: сертификаты лежат в /etc/letsencrypt/live/hy2.example.com/.

---

Шаг 3: Создать директорию и скопировать сертификаты для RemnaNode

RemnaNode ожидает сертификаты в configs/xray/ssl внутри контейнера. Мы смонтируем туда директорию с сертификатами.

```bash
# Создать папку на хосте
mkdir -p /opt/remnawave/nginx

# Скопировать сертификаты (обязательно используйте cp -L, чтобы скопировать файлы, а не симлинки)
cp -L /etc/letsencrypt/live/hy2.example.com/fullchain.pem /opt/remnawave/nginx/fullchain.pem
cp -L /etc/letsencrypt/live/hy2.example.com/privkey.pem /opt/remnawave/nginx/privkey.key

# Установить правильные права (важно для безопасности)
chmod 644 /opt/remnawave/nginx/fullchain.pem
chmod 600 /opt/remnawave/nginx/privkey.key
```

---

Шаг 4: Смонтировать сертификаты в контейнер RemnawaveNode

Отредактируйте docker-compose.yml RemnawaveNode:

```bash
nano /opt/remnanode/docker-compose.yml
```

Найдите секцию volumes: для сервиса remnanode и добавьте следующую строку:

```yaml
services:
remnanode:
# ... остальные настройки ...
volumes:
# ... существующие volumes ...
- /opt/remnawave/nginx:/var/lib/remnawave/configs/xray/ssl
```

Важно: Сохраните отступы (пробелы, не табуляция).

---

Шаг 5: Перезапустить RemnawaveNode

```bash
cd /opt/remnanode
docker compose down
docker compose up -d

# Проверить, что контейнер поднялся и сертификаты смонтировались
docker exec remnanode ls -la /var/lib/remnawave/configs/xray/ssl
```

Вы должны увидеть:

```
fullchain.pem
privkey.key
```

---

Шаг 6: Вернуть Caddy (Selfsteal) обратно

```bash
docker start caddy-selfsteal
```

Теперь Caddy снова работает на своём порту (обычно 9443 или другом, не 443).

---

Шаг 7: Настроить Hysteria2 в RemnaWave Panel

1. Зайдите в админку RemnaWave → Nodes → выберите вашу ноду → Edit.
2. В разделе "Inbound Configurations" создайте новый профиль Hysteria2.
3. Заполните поля:
· Domain: hy2.example.com (тот же, на который получили сертификат).
· Port: 443 (UDP).
· Path: (оставьте пустым, если не используете).
· Up / Down Mbps: ваши лимиты.
4. В поле "Certificates" (внизу, JSON-редактор) вставьте:
```json
"certificates": [
{
"keyFile": "/var/lib/remnawave/configs/xray/ssl/privkey.key",
"certificateFile": "/var/lib/remnawave/configs/xray/ssl/fullchain.pem"
}
]
```
5. Сохраните профиль.

---

Шаг 8: Проверить работу Hysteria2

```bash
# Проверить, что контейнер слушает UDP 443
ss -ulnp | grep :443

# Посмотреть логи RemnawaveNode на предмет ошибок Hysteria2
docker logs remnanode --tail 50 | grep -i hysteria
```

Если всё правильно — в логах не будет ошибок, а порт 443 будет слушаться внутри контейнера.

---

🔄 Автообновление сертификатов (важно!)

Certbot выдаёт сертификаты на 90 дней. Нужно автоматически продлевать их и перезапускать RemnaNode.

Создайте скрипт:

```bash
nano /usr/local/bin/renew-hy2-certs.sh
```

```bash
#!/bin/bash
set -e

# Обновить сертификаты
certbot renew --quiet

# Скопировать обновлённые сертификаты
cp -L /etc/letsencrypt/live/hy2.example.com/fullchain.pem /opt/remnawave/nginx/fullchain.pem
cp -L /etc/letsencrypt/live/hy2.example.com/privkey.pem /opt/remnawave/nginx/privkey.key
chmod 644 /opt/remnawave/nginx/fullchain.pem
chmod 600 /opt/remnawave/nginx/privkey.key

# Перезагрузить конфигурацию Hysteria2 в контейнере (без остановки)
docker exec remnanode pkill -SIGHUP hysteria 2>/dev/null || true
# Если не поддерживает HUP, просто рестарт ноды:
# docker compose -f /opt/remnanode/docker-compose.yml restart
```

Сделайте скрипт исполняемым и добавьте в cron:

```bash
chmod +x /usr/local/bin/renew-hy2-certs.sh
crontab -e
```

Добавьте строку:

```
0 3 * * * /usr/local/bin/renew-hy2-certs.sh >> /var/log/hy2-renew.log 2>&1
```

---

⚠️ Возможные проблемы и решения

Проблема Решение
certbot не может занять порт 80 Остановите все сервисы: systemctl stop nginx или docker stop caddy-selfsteal
В логах failed to load certificate Проверьте права: chmod 644 fullchain.pem && chmod 600 privkey.key
Hysteria2 не стартует на 443 UDP Убедитесь, что порт не занят: ss -ulnp | grep 443. Caddy использует TCP, не должен мешать.
После перезапуска сертификаты пропадают Проверьте монтирование в docker-compose.yml. Пути должны быть абсолютными.
Ошибка certificate signed by unknown authority Используйте полную цепочку fullchain.pem, а не cert.pem

---

📌 Итоговая структура

```
/opt/remnanode/
├── docker-compose.yml # с монтированием /opt/remnawave/nginx
/opt/remnawave/nginx/
├── fullchain.pem # сертификат + цепочка
└── privkey.key # приватный ключ
```

Главное преимущество: Hysteria2 работает на настоящем SSL-сертификате, его трафик неотличим от обычного HTTPS, обход DPI эффективнее, чем у Reality.