Установка на хост
nkt — один статический бинарник для Linux. Он ставится на хост, который нужно видеть и править, работает как systemd-служба и слушает только 127.0.0.1:8077. Никаких зависимостей: ни базы, ни агентов, ни Docker.
Платформа — только Linux (amd64, arm64, 32-битный ARM от armv6). На Windows и macOS рабочий режим не запускается — там доступен только режим снапшота для знакомства.
Много хостов?
Если хостов несколько, ставьте хаб: он поставит nkt на каждый сам и покажет их в одном окне.
1. Бинарник
Готовые бинарники для linux/amd64, linux/arm64 и linux/arm лежат в Releases вместе с SHA256SUMS:
# подставьте свою архитектуру; V — последняя версия
V=$(curl -fsSL https://api.github.com/repos/piqab/nkt/releases/latest | sed -n 's/.*"tag_name": *"\(.*\)".*/\1/p')
curl -fsSLO https://github.com/piqab/nkt/releases/download/$V/nkt-linux-amd64
curl -fsSLO https://github.com/piqab/nkt/releases/download/$V/SHA256SUMS
sha256sum -c SHA256SUMS --ignore-missing
chmod +x nkt-linux-amd64
sudo mv nkt-linux-amd64 /usr/local/bin/nktИз исходников нужен только make: он сам решает, собирать в Docker или на голом хосте (тогда при нехватке Go и Node предложит поставить их в ~/.local без sudo):
git clone https://github.com/piqab/nkt.git && cd nkt
make build # dist/nkt
sudo make install # бинарник, юнит и nkt.env (свой nkt.env не перезапишет)Подробнее — в разделе Разработка.
2. Проверить, что хост читается
sudo nkt scanКоманда печатает найденные слушатели, контейнеры, правила firewall и проблемы — то же, что покажет веб-интерфейс; при критичных находках код выхода 2. Нужен root: iptables-save и systemctl обычному пользователю недоступны.
Рабочий режим (NKT_MODE=local) на Linux включён по умолчанию. Состояние пишется в /var/lib/netknownsthat — туда же, куда пишет служба, так что nkt tui, запущенный вручную, читает ту же базу.
3. Служба
Конфиг и systemd-юнит берутся прямо с GitHub, клонировать репозиторий не нужно:
sudo install -d -m 0750 /etc/netknownsthat
curl -fsSL https://raw.githubusercontent.com/piqab/nkt/main/deploy/nkt.env.example \
| sudo install -m 0640 /dev/stdin /etc/netknownsthat/nkt.env
curl -fsSL https://raw.githubusercontent.com/piqab/nkt/main/deploy/netknownsthat.service \
| sudo install -m 0644 /dev/stdin /etc/systemd/system/netknownsthat.service
sudo $EDITOR /etc/netknownsthat/nkt.env
sudo systemctl daemon-reload
sudo systemctl enable --now netknownsthat
sudo journalctl -u netknownsthat -n 30 # здесь будет пароль администратораПароль администратора печатается в журнал один раз, при первом запуске, и нигде не хранится в открытом виде. Чтобы задать его заранее — NKT_BOOTSTRAP_ADMIN_PASSWORD в nkt.env до первого старта; потом пароли меняются командой nkt passwd (см. Доступ).
Юнит запускает nkt от root, но в песочнице: ProtectSystem=strict с явным списком каталогов для записи, урезанный набор capabilities, фильтр системных вызовов. Подробно — в Безопасности.
4. Открыть в браузере
Служба слушает 127.0.0.1:8077, а cookie сессии по умолчанию ходит только по HTTPS (NKT_COOKIE_SECURE=true). Три способа добраться:
- SSH-туннель — быстрее всего:bashи открыть
ssh -L 8077:127.0.0.1:8077 user@hosthttp://127.0.0.1:8077. Туннель отдаёт обычный HTTP, поэтому вnkt.envнужноNKT_COOKIE_SECURE=false. - Свой HTTPS —
NKT_TLS_ENABLED=true. При первом запуске nkt выпускает самоподписанный сертификат вNKT_DATA_DIR/tls/и дальше переиспользует его. По умолчанию он покрывает127.0.0.1,::1и имя хоста; адрес, по которому вы открываете nkt (IP в локальной сети, имя), добавьте сами —NKT_TLS_HOSTS=192.168.1.10,127.0.0.1,::1,имя-хоста— иначе сертификат не подойдёт к нему, даже если ему доверять. Свой сертификат —NKT_TLS_CERTиNKT_TLS_KEY(оба сразу). Самоподписанному сертификату нужно доверие браузера — см. ниже. - Обратный прокси с TLS (nginx, Caddy) перед
127.0.0.1:8077.
Самоподписанный сертификат и терминал
«Дополнительно → Перейти на сайт» в предупреждении браузера действует не навсегда: Chrome через какое-то время (или после перезапуска) забывает это решение. Открытая страница продолжает работать — её запросы идут по уже установленному соединению, — а всё, что открывает новое WebSocket-соединение, падает молча: терминал, консоли, живые журналы заданий и логов, экран машины («Не удалось подключиться…», в консоли браузера — пустое WebSocket connection … failed:). Для WebSocket браузер предупреждения не показывает.
- Сразу: открыть адрес nkt заново (или выйти и войти) и снова принять сертификат.
- Насовсем: сделать сертификат доверенным. Убедитесь, что в
NKT_TLS_HOSTSесть адрес, по которому вы открываете nkt (после правки перезапустите службу — сертификат перевыпустится). Затем скачайте его (замок в адресной строке → сертификат → экспорт, илиNKT_DATA_DIR/tls/cert.pem) и установите в доверенные корневые: Windows — «Доверенные корневые центры сертификации», macOS — «Связка ключей» → «Всегда доверять», Linux — хранилище браузера или/usr/local/share/ca-certificates+update-ca-certificates. Либо настоящий сертификат (свой центр сертификации, certbot) или обратный прокси с ним.
Мобильному приложению это не мешает: оно само сверяет сертификат, закреплённый при входе.
Какие ещё порты бывают и что из них открывать — на странице Порты и доступ.
Доступ к nkt равносилен root на хосте
Он правит конфиги, управляет сервисами и меняет firewall. Не открывайте его в интернет без отдельного слоя аутентификации.
Окна интерфейса
Размер любого окна меняется уголком справа внизу, двойной щелчок по нему возвращает обычный размер. Кнопка в заголовке разворачивает окно на весь экран. Размер окон логов, заданий, редакторов, терминала и экрана машины запоминается в браузере.
5. Терминальный интерфейс
Если вы уже на хосте по SSH, браузер не нужен:
sudo nkt tuiТе же данные и действия: обзор, находки, карта деревом, доступность, нагрузка, конфигурации с редактором (Ctrl+S — с той же проверкой и автооткатом), сервисы, firewall, сертификаты, журнал. Экраны — цифрами 1…9, 0 или Tab; F5 — обновить, r — пересканировать, ? — помощь, q — выход.
TUI не собирает историю сам: пробы и метрики делает служба netknownsthat, без неё экраны доступности и нагрузки пустые. Входа по паролю нет — вы уже root; действия пишутся в журнал как tui:<логин> (под sudo — исходный пользователь). NKT_ALLOW_MUTATIONS=false действует и здесь.
6. Обновление
- Вручную — скачать новый бинарник (шаг 1) поверх
/usr/local/bin/nktиsudo systemctl restart netknownsthat. - Хост под хабом обновляется с хаба: «обновить» в строке хоста или «обновить всё» (см. Хосты хаба).
Юнит из deploy/ иногда меняется (новые каталоги в ReadWritePaths, capabilities). После крупного обновления перезалейте и его — шаг 3 или sudo make install; хост под хабом получает новый юнит при каждом обновлении сам.
Что дальше
- Порты и доступ
- Хаб — если хостов больше одного.
- Настройка — все переменные
NKT_*. - Возможности — что есть в каждом разделе.