Как по шагам настроить сервер Hysteria2 (hysteria v2), чтобы он корректно запускался и принимал подключения клиентов?

Не удаётся настроить сайт для маскировки: в гайде указан шаг mkdir -p /var/www/masq, затем команда micro /var/www/masq/index.html, но при попытке открыть получаю ошибку "micro /var/www/masq/index.html is a directory and cannot be opened". Настраиваю через PuTTY — как это исправить?
  • 8 июня 2026 г. 17:01
Ответы на вопрос 2
Ниже — практическая пошаговая инструкция: как исправить ошибку с micro и как в целом подготовить «маскировочный» сайт и запустить сервер Hysteria2 так, чтобы он принимал подключения. Пишу максимально просто, с командами для Debian/Ubuntu (для других дистрибутивов команды аналогичны).

1) Разбор ошибки "is a directory and cannot be opened"
- Ошибка появляется потому, что /var/www/masq/index.html у вас — не файл, а директория. Это могло случиться, если вы по ошибке создали директорию с именем index.html (например sudo mkdir /var/www/masq/index.html).
- Проверить: 
  sudo ls -la /var/www/masq
  sudo file /var/www/masq/index.html
  или
  [ -d /var/www/masq/index.html ] && echo "index.html — директория"
- Если index.html — директория, удалите её и создайте файл:
  sudo rm -rf /var/www/masq/index.html
  sudo mkdir -p /var/www/masq            # если ещё не создана папка masq
  echo "<!doctype html><html><body>OK</body></html>" | sudo tee /var/www/masq/index.html

- Теперь можно открыть в редакторе (micro, nano, vi):
  sudo micro /var/www/masq/index.html
  Если micro не установлен:
  sudo apt update && sudo apt install micro -y
  Или используйте sudo nano /var/www/masq/index.html

2) Настройка веб-сервера, чтобы маскировочный сайт действительно отдавался по HTTP
- Обычно masq папка должна отдавать простой HTML по http://example.com/ (порт 80). Чаще всего используют nginx. Пример конфигурации nginx:
  sudo apt install nginx -y
  sudo tee /etc/nginx/sites-available/masq <<'EOF'
  server {
      listen 80;
      server_name your.domain.example;   # замените на ваш домен
      root /var/www/masq;
      index index.html;
      location / {
          try_files $uri $uri/ =404;
      }
  }
  EOF
  sudo ln -s /etc/nginx/sites-available/masq /etc/nginx/sites-enabled/masq
  sudo nginx -t && sudo systemctl reload nginx

- Проверка:
  curl -I http://your.domain.example
  curl http://your.domain.example/    # должен вернуть содержимое index.html

3) TLS/сертификат (важно для Hysteria)
- Hysteria обычно использует TLS и host для обфускации (обфс-хост должен совпадать с вашим доменом). Рекомендуется получить Letsencrypt:
  sudo apt install certbot python3-certbot-nginx -y
  sudo certbot --nginx -d your.domain.example
- После этого сертификат будет храниться в /etc/letsencrypt/live/your.domain.example/fullchain.pem и privkey.pem

4) Установка бинаря Hysteria2
- Скачайте релиз под вашу архитектуру с GitHub (замените URL на актуальный релиз):
  wget -O hysteria.tar.gz "https://github.com/.../hysteria2_linux_amd64.tar.gz"
  tar -xzf hysteria.tar.gz
  sudo mv hysteria /usr/local/bin/hysteria
  sudo chmod +x /usr/local/bin/hysteria

5) Пример конфигурации сервера Hysteria2
(формат конфигурации может немного отличаться в конкретной реализации; смотрите docs вашей версии. Ниже — иллюстрация, как задаются listen, сертификат и маск-директория)
- Создайте /etc/hysteria/config.json (пример):
  {
    "listen": ":443",
    "cert": "/etc/letsencrypt/live/your.domain.example/fullchain.pem",
    "key": "/etc/letsencrypt/live/your.domain.example/privkey.pem",
    "obfs": {
      "host": "your.domain.example",
      "masq_dir": "/var/www/masq"
    },
    "auth": {
      "mode": "password",
      "password": "ваш_пароль_клиента"
    }
  }
- Важно: точные ключи (имя поля obfs/masq_dir и т.п.) зависят от версии Hysteria2 — сверяйтесь с официальной документацией или примером конфигурации в релизе.

6) systemd unit для автоматического запуска
- Пример файла /etc/systemd/system/hysteria.service:
  [Unit]
  Description=Hysteria2 server
  After=network.target

  [Service]
  ExecStart=/usr/local/bin/hysteria -c /etc/hysteria/config.json
  Restart=on-failure
  User=root
  CapabilityBoundingSet=CAP_NET_BIND_SERVICE

  [Install]
  WantedBy=multi-user.target

  Затем:
  sudo systemctl daemon-reload
  sudo systemctl enable --now hysteria
  sudo journalctl -u hysteria -f   # смотреть логи

7) Проверка работоспособности
- Убедитесь, что nginx отдает index.html по HTTP (curl http://your.domain.example)
- Убедитесь, что Hysteria запущен и слушает 443 (sudo ss -tulpn | grep 443)
- В логах Hysteria должны быть сообщения о прослушивании и об использованном cert/key
- Настройте клиент Hysteria с тем же obfs-host (your.domain.example) и паролем/ключом; попробуйте подключиться

8) Что делать, если что-то не работает
- Если micro говорит, что index.html — директория: удалите её (rm -rf) и создайте файл (см. п.1).
- Если nginx возвращает 403: проверьте права:
  sudo chown -R www-data:www-data /var/www/masq
  sudo chmod -R 755 /var/www/masq
- Если Hysteria не стартует: смотреть sudo journalctl -u hysteria -e и проверить путь к сертификатам, права на файлы (hysteria должен иметь доступ к cert/key).
- Если обфускация не работает: проверьте что obfs-host в конфиге сервера и в клиенте совпадают с доменом и что этот домен реально возвращает ваш index.html (curl http://domain).

9) Примечание про PuTTY
- PuTTY — это просто SSH-клиент. Все команды выполняются в терминале сервера так же, как если бы вы сидели локально. Ошибка с micro не связана с PuTTY; это файловая ошибка на сервере.

Если хотите — пришлите выводы этих команд:
- ls -la /var/www/masq
- sudo file /var/www/masq/index.html
- sudo nginx -t && sudo systemctl status nginx --no-pager
- sudo systemctl status hysteria --no-pager
и я подскажу дальше, что конкретно исправить.
на этот вопрос ответит любая нейронка... <br/> <br/> mkdir -p /var/www/masq - создаёт папку.  так что дальше тебе всё верно пишется. ну открой через nano редактор <br/> <br/> nano /var/www/masq/index.html - создаст этот файл и откроет <br/> <br/> либо предварительно создай файл и потом открывай через свой micro <br/> touch /var/www/masq/index.html
Похожие вопросы