Ниже — практическая пошаговая инструкция: как исправить ошибку с 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
и я подскажу дальше, что конкретно исправить.