tuna ❤️ NanoKVM
NanoKVM — это компактное IP-KVM устройство от Sipeed на базе RISC-V (Cube/PCIe) или ARM64 (Pro) или ARMv7 (GxxKVM/JxxKVM). Оно позволяет удалённо управлять компьютером: видеть экран, управлять клавиатурой и мышью, монтировать образы ди сков — всё через веб-интерфейс в браузере.
По умолчанию NanoKVM доступен только в локальной сети. С помощью Tuna вы можете открыть доступ к нему через интернет — без «белого» IP, без VPN, без проброса портов на роутере.
Мы тестировали данную инструкцию только на NanoKVM Cube, но вероятнее всего это будет работать на всех устройствах линейки NanoKVM.
Подготовка
Помимо установи инструкция по настройке разделена на 2 типа, в зависимости от наличия платной подписки Tuna.
Что потребуется
- NanoKVM, подключённый к локальной сети и доступный по SSH или терминал в веб интерфейсе
- Аккаунт на tuna.am (бесплатный или с подпиской)
- Токен авторизации со страницы токена
Структура хранилища NanoKVM
NanoKVM имеет три раздела:
| Раздел | Точка монтирования | Назначение |
|---|---|---|
/dev/mmcblk0p1 | /boot | Загрузчик, ядро |
/dev/mmcblk0p2 | / | Корневая ФС (Buildroot) |
/dev/mmcblk0p3 | /data | Данные, ISO-образы |
Раздел /data сохраняется при обновлениях приложения и remote rsync, поэтому мы будем хранить tuna именно там.
Установка tuna на NanoKVM
Подключитесь к NanoKVM по SSH и установите бинарник:
ssh root@<IP-адрес-NanoKVM>
Или откройте терминал в веб интерфейсе:
Установите tuna с помощью скрипта, указав /data/tuna в качестве директории установки:
- curl
- wget
mkdir -p /data/tuna
INSTALL_DIR=/data/tuna sh -c "$(curl -sSLf https://releases.tuna.am/tuna/get.sh)"
mkdir -p /data/tuna
INSTALL_DIR=/data/tuna sh -c "$(wget -qO- https://releases.tuna.am/tuna/get.sh)"
Раздел /data смонтирован как exFAT с fmask=0022, файлы автоматически получают права 0755 — бинарник можно запускать сразу после копирования. Кроме того, /data сохраняется при обновлениях, поэтому tuna не придётся переустанавливать.
Сохраните токен авторизации:
/data/tuna/tuna --config=/data/tuna/.tuna.yml config save-token <ВАШ_ТОКЕН>
Рекомен дуем создать дополнительный токен для устройства.
Тип 1. Бесплатный тариф — HTTP-туннель
На бесплатном тарифе доступен HTTP-туннель с динамическим адресом. Этого достаточно, чтобы открыть веб-интерфейс NanoKVM в интернет и управлять компьютером через браузер.
- Адрес туннеля меняется каждые 30 минут
- Нельзя задать фиксированный поддомен
- Текущий адрес всегда можно посмотреть в личном кабинете
Создание скрипта запуска
cat << 'EOF' > /data/tuna/tuna-http.sh
#!/bin/sh
# Ждём сеть
while ! ip route | grep -q default; do
sleep 1
done
exec /data/tuna/tuna \
--config=/data/tuna/.tuna.yml \
--log=/tmp/tuna-http.log \
http \
--inspect=false \
--basic-auth=tuna:SecurePasswd \
--https-redirect \
80
EOF
chmod +x /data/tuna/tuna-http.sh
Пояснение флагов
| Флаг | Обязательный | Описание |
|---|---|---|
--inspect=false | Нет | Отключает инспектор трафика (не нужен для KVM), чтобы не расходовать RAM |
--basic-auth=admin:ВашПароль | Нет | Дополнительная HTTP-авторизация (подробнее) |
--https-redirect | Нет | Перенаправляет HTTP на HTTPS |
80 | Да | Порт веб-интерфейса NanoKVM |
Также можно ограничить доступ по IP-подсетям.
Настройка автозапуска
Добавьте строку в /etc/inittab, чтобы init автоматически запускал и перезапускал туннель:
cat << 'EOF' >> /etc/inittab
# Tuna HTTP tunnel (respawn = auto-restart)
tweb::respawn:/data/tuna/tuna-http.sh
EOF
Применить без перезагрузки:
kill -HUP 1
Проверка
Убедитесь, что процесс запущен:
ps -ef | grep tuna
В выводе должна быть строка с /data/tuna/tuna ... http .... Если процесса нет — смотрите раздел Диагностика неполадок.
В логах вы увидите URL вашего туннеля:
cat /tmp/tuna-http.log
Также текущий адрес доступен в личном кабинете.
Тип 2. Подписка — SSH и HTTP туннели
С подпиской вы получаете:
- Фиксированный поддомен для HTTP-туннеля — адрес не меняется
- SSH-туннель — прямой доступ к консоли NanoKVM из любой точки мира
Ну и в целом особо ограничений нет, можете ещё несколько туннелей запустить и прокинуть доступ например к web интерфейсу роутера, SSH или RDP управляемого или любого другого компьютера в локальной сети.
HTTP-туннель с фиксированным адресом
cat << 'EOF' > /data/tuna/tuna-http.sh
#!/bin/sh
# Ждём сеть
while ! ip route | grep -q default; do
sleep 1
done
exec /data/tuna/tuna \
--config=/data/tuna/.tuna.yml \
--log=/tmp/tuna-http.log \
http \
--subdomain=nanokvm \
--inspect=false \
--basic-auth=admin:ВашПароль \
--https-redirect \
80
EOF
chmod +x /data/tuna/tuna-http.sh
Отличие от бесплатной версии — флаг --subdomain=nanokvm, который закрепляет за вами постоянный адрес. После перезапуска туннеля URL останется прежним.
Поддомен из примера уже занят. Зарезервируйте свой поддомен заранее в личном кабинете, затем используйте его в флаге --subdomain=ваш-поддом ен.
Пояснение флагов HTTP-туннеля
| Флаг | Обязательный | Описание |
|---|---|---|
--subdomain=nanokvm | Нет | Фиксирует постоянный адрес туннеля (только с подпиской) |
--inspect=false | Нет | Отключает инспектор трафика (не нужен для KVM), чтобы не расходовать RAM |
--basic-auth=admin:ВашПароль | Нет | Дополнительная HTTP-авторизация (подробнее) |
--https-redirect | Нет | Перенаправляет HTTP на HTTPS |
80 | Да | Порт веб-интерфейса NanoKVM |
Также можно ограничить доступ по IP-подсетям.
SSH-туннель
SSH-туннель позволяет подключаться к консоли NanoKVM через интернет. Это удобно для администрирования, обновления прошивки и диагностики.
cat << 'EOF' > /data/tuna/tuna-ssh.sh
#!/bin/sh
# Ждём сеть
while ! ip route | grep -q default; do
sleep 1
done
exec /data/tuna/tuna \
--config=/data/tuna/.tuna.yml \
--log=/tmp/tuna-ssh.log \
ssh \
--port=nanokvm-ssh \
--password-auth=false
EOF
chmod +x /data/tuna/tuna-ssh.sh
Пояснение флагов SSH-туннеля
| Флаг | Обязательный | Описание |
|---|---|---|
--port=nanokvm-ssh | Нет | Фиксирует порт SSH-туннеля. Без этого флага порт будет назначаться случайно при каждом запуске. Алиас для порта нужно зарезервировать заранее перед запуском. |
--password-auth=false | Нет | Запрещает подключение по паролю — доступ только по SSH-ключам (подробнее) |
Также можно задать статичный логин и пароль или ограничить доступ по IP-подсетям.
Настройка автозапуска обоих туннелей
Добавьте строки в /etc/inittab:
cat << 'EOF' >> /etc/inittab
# Tuna tunnels (respawn = auto-restart)
tssh::respawn:/data/tuna/tuna-ssh.sh
tweb::respawn:/data/tuna/tuna-http.sh
EOF
Применить без перезагрузки:
kill -HUP 1