aarch64-k3.10 Entware lacks sshpass, cronie, and openssh-keygen. Generate the ed25519 keypair on the VPS (where ssh-keygen is always present) and ship the private key to the router inside the install script. The router only sees a short curl|sh one-liner — easy to copy, immune to markdown auto-linkification of .sh paths that mangled previous attempts. - _gen_ed25519_keypair / _add_pubkey_to_authorized_keys helpers - /tunnel-cmd: generate keypair on first call, store priv+pub on router record, add pub to ~/.ssh/authorized_keys, return one-liner - /tunnel-script: returns full install script with private key embedded (text/plain), token-authenticated, single-use - removed /tunnel-register-key endpoint (router no longer generates the key) - copy button: select on-page text + execCommand fallback for non-HTTPS; if both fail, leave selected so user can Cmd+C manually Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Keenetic DNS Routes
Мини-сервис для роутеров без HydraRoute Neo: централизованное редактирование списков US / RU (домены и IP/CIDR, по одной строке) и применение на роутеры через NDM RCI — те же object-group fqdn и dns-proxy route, что создаёт веб-интерфейс «Маршруты DNS» (документация Keenetic).
С Keenetic Unified и domen_hydra не смешивается: другой порт (8001), другие роутеры в своём списке, отдельный data/store.json.
Логика синхронизации списков с роутером совместима с подходом gokeenapi (GET /rci/object-group/fqdn, GET /rci/dns-proxy/route, POST /rci/ с массивом {"parse":"…"}).
Важно: здесь не SSH — и отличие от «белого» IP
Этот сервис не подключается по SSH к роутеру: настройки применяются через NDM RCI по KeenDNS HTTP Proxy (см. блок «Требования» ниже) — модель доступа, которую Keenetic описывает для работы через облако без прямого Telnet/SSH.
Проекты Keenetic Unified, domen_hydra и Keenetic SSH для управления с VPS используют прямой SSH на WAN; для них нужен публичный («белый») IPv4 или иной прямой доступ к порту SSH. В сценарии KeenDNS «только облако», когда по документации Keenetic доступна только веб-морда по HTTP/HTTPS на заданных портах, а SSH через облако не работает, — эти проекты к роутеру по SSH не подключатся; keenetic-dns-routes при корректно настроенном HTTP Proxy может продолжать работать.
Сводная таблица и формулировка производителя про облако vs SSH: Keenetic Unified — README.
Требования
- KeeneticOS ≥ 5.0.1 (DNS-based routes).
- Доступ к RCI с VPS: KeenDNS + HTTP Proxy для API (четвёртый уровень
rci.…, порт 79): инструкция Keenetic. - Пользователю роутера выданы права на HTTP Proxy. Учётка API: по умолчанию
KEENETIC_*в.env, либо у каждого роутера свои поля / один раз URLhttp(s)://логин:пароль@хост:порт(при сохранении логин/пароль переносятся в поля).
Entware/SSH не требуется для
keenetic-dns-routes(здесь всё через RCI по HTTP Proxy), но на практике часто нужно для обслуживания роутера. Ниже — шпаргалка.
Quickstart
- На VPS поставь сервис (раздел “Установка (Ubuntu)” ниже).
- Открой веб‑интерфейс:
http://IP_СЕРВЕРА:8001 - В Keenetic включи KeenDNS + HTTP Proxy для API (порт
79) и выдай права пользователю (см. требование выше). - В веб‑панели добавь роутер (base URL KeenDNS HTTP Proxy), нажми Сканировать интерфейсы, заполни списки и нажми Применить.
📦 Установка Entware на Keenetic
━━━━━━━━━━━━━━━━━━━━━━ ⚠️ Определи свою архитектуру
- Mipsel — роутеры на чипе MT7628/MT7621
- Aarch64 — роутеры на чипе MT7622/MT7981/MT7988 (ARM)
━━━━━━━━━━━━━━━━━━━━━━
💡 Совет
Начиная с KeeneticOS 4.2 Entware можно установить прямо через браузер — просто открой192.168.1.1/aи следуй инструкции. ━━━━━━━━━━━━━━━━━━━━━━ 🚀 Установка онлайн — одной командой
🔵 Mipsel (MT7628/MT7621)
opkg disk storage:/ https://bin.entware.net/mipselsf-k3.4/installer/mipsel-installer.tar.gz
🟢 Aarch64 (MT7622/MT7981/MT7988)
opkg disk storage:/ https://bin.entware.net/aarch64-k3.10/installer/aarch64-installer.tar.gz
⏳ Дождись окончания установки — это займёт пару минут. После этого Entware готов к работе.
🔌 Подключение по SSH
📋 Данные для входа
- Логин:
root - Пароль:
keenetic - Порт:
22(если вы не меняли порт SSH вручную)
Частые ошибки (и решения)
Connection refused / не применяются правила через KeenDNS HTTP Proxy
- Проверь, что включён HTTP Proxy для API (уровень
rci...), обычно порт79. - Проверь, что у пользователя Keenetic есть права на HTTP Proxy.
- Если ходишь к роутеру через WireGuard (
wg0) и получаешьConnection refused, возможно сервис слушает только LAN‑IP.
Решение: DNATwg0:<порт> → LAN_IP:<порт>(можно автоматизировать черезkeenetic_ssh-web/tunnelс--dnat 79).
Установка (Ubuntu)
git clone https://github.com/andrey271192/keenetic-dns-routes.git /opt/keenetic-dns-routes
cd /opt/keenetic-dns-routes
sudo bash install.sh
nano .env # ADMIN_PASSWORD + при желании KEENETIC_LOGIN / KEENETIC_PASSWORD (дефолт для роутеров без своих полей)
sudo systemctl restart keenetic-dns-routes
Интерфейс: http://IP_СЕРВЕРА:8001
Настройка
- В Interface ID для US/RU — имя интерфейса (
Wireguard0,PPPoE0…). Кнопка «Сканировать…» подгружает список с роутера; опция «Только WireGuard» сужает выбор до WG-туннелей. - В списках — одна строка = один домен или IPv4/IPv6/CIDR. Пустые строки и строки с
#в начале игнорируются. - Добавь роутеры: base URL прокси KeenDNS (
http(s)://хост:порт, без пути/rci/...). Логин/пароль — в полях или в URLлогин:пароль@хост; если пусто — изKEENETIC_*в.env. - Сохранить на сервер — только JSON на VPS.
- Применить на всех legacy или отметь галочками и Только на выбранных — пошлёт на каждый RCI дифф: удалит лишние
include, добавит новые, обновитdns-proxy routeпри смене интерфейса, в концеsystem configuration save.
API (скрипты)
Все запросы с заголовком X-Admin-Password.
PUT /api/data— полное или частичное обновление (groupsи/илиrouters).POST /api/groups/{US|RU}/lines— тело{"add":["a.com"],"remove":["b.com"]}: правка списка на сервере без пересылки всего textarea (порядок: сначала удаления, затем добавления в конец).POST /api/apply—{"mode":"all"|"selected","router_ids":["id1"]}.GET /api/keenetic-env— дефолтный логин из.envи флаг «KEENETIC_PASSWORD задан».GET /api/routers/{id}/interfaces— список интерфейсов (GET /rci/show/interface); querywireguard_only=1— только WireGuard.PATCH /api/routers/{id}— правка имени, URL,keenetic_login/keenetic_password.
Ограничения
- На один object-group Keenetic заводит лимит по числу записей (ориентир ~300 доменов на группу — как в gokeenapi). При превышении роутер может вернуть ошибку RCI.
- Строки без точки (не похожие на домен и не на IP/CIDR) отбрасываются при применении.
Обновление
cd /opt/keenetic-dns-routes && sudo bash update.sh
Если update.sh: No such file or directory: подтяни свежий install.sh с репозитория и один раз выполни sudo bash install.sh — он создаст update.sh, если файла нет. Либо вручную:
cd /opt/keenetic-dns-routes && git pull --ff-only
source venv/bin/activate && pip install -r requirements.txt
sudo systemctl restart keenetic-dns-routes
Без git: скопируй каталог проекта поверх, затем снова sudo bash update.sh или команды выше.
Удаление с сервера (одной командой)
Останавливается keenetic-dns-routes, удаляется unit и каталог /opt/keenetic-dns-routes:
curl -fsSL https://raw.githubusercontent.com/andrey271192/keenetic-dns-routes/main/uninstall.sh | sudo bash
Из каталога установки: sudo bash uninstall.sh
Поддержка
- GitHub: andrey271192
- Boosty: Поддержка
- Поддержка проекта (Ozon Bank, СБП): ссылка
- Telegram: @Iot_andrey
Связь
Проект рядом по смыслу с keenetic-unified (Neo + дашборд) и domen_hydra (только Neo-конфиг), но предназначен только для встроенной DNS-маршрутизации без Neo.