No description
Find a file
2026-08-26 15:22:25 +03:00
.gitignore on-router install: git clone + ./install.sh 2026-08-26 09:44:07 +03:00
fetch.py on-router install: git clone + ./install.sh 2026-08-26 09:44:07 +03:00
install.sh install.sh: поддержка uclient-fetch (роутеры без curl/wget, напр. filogic-билды) 2026-08-26 15:22:25 +03:00
nikovpn.py бинарники из релизов репозитория вместо f.n1ko.dev 2026-08-26 12:07:32 +03:00
README.md бинарники из релизов репозитория вместо f.n1ko.dev 2026-08-26 12:07:32 +03:00
status.sh бинарники из релизов репозитория вместо f.n1ko.dev 2026-08-26 12:07:32 +03:00
uninstall.sh бинарники из релизов репозитория вместо f.n1ko.dev 2026-08-26 12:07:32 +03:00
update.sh бинарники из релизов репозитория вместо f.n1ko.dev 2026-08-26 12:07:32 +03:00
versions on-router install: git clone + ./install.sh 2026-08-26 09:44:07 +03:00

NikoVPN OpenWRT

Установщик VPN для роутеров OpenWRT. Всё выполняется прямо на роутере: нужны только busybox + wget/curl + nft/iptables (и git один раз — для клонирования).

  • Принцип: sing-box → ipt2socks (прозрачный прокси для всего LAN).
  • sing-box собирается из исходников slim-патчем: только vless (+uTLS, без reality), hysteria, hysteria2, tuic, naive. vmess/trojan/shadowsocks/ssh/ tor/shadowtls/anytls/tun выпилены, gvisor/wireguard/clash-api/acme/dhcp не включены. Итог: ~814 MB gz вместо ~1723 MB.
  • Креды VPN (login:password): /root/creds на роутере или env NIKOVPN_CREDS.

Установка

Прямо на роутере:

git clone git.n1ko.dev:Niko/nikovpn_openwrt.git
cd nikovpn_openwrt
./install.sh

Перед запуском положите креды в /root/creds:

echo 'login:password' > /root/creds

Бинарники при установке качаются из [релизов репозитория] (https://git.n1ko.dev/Niko/nikovpn_openwrt/releases/tag/bins) — каталог bin/ в клон не входит; если он есть рядом с install.sh — берётся из него. f.n1ko.dev остаётся резервным источником.

Команды

Команда Что делает
./install.sh установка / переустановка
./install.sh update обновление бинарников и пересбор сервера
./install.sh status статус VPN и трафик
./install.sh uninstall удаление

То же самое через обёртки status.sh, update.sh, uninstall.sh.

Управление с ПК (опционально)

nikovpn.py делает то же самое по SSH, без git на роутере:

uv run nikovpn.py --host 192.168.1.1 --creds 'login:password' install
uv run nikovpn.py update | status | uninstall

Параметры подключения: --host (по умолчанию 192.168.1.1), --user, --port, --password (нужен sshpass), --identity.

Как это работает

  1. Определяется архитектура (DISTRIB_ARCHapkopkguname); nikovpn.py делает это по SSH.
  2. Бинарники качаются с f.n1ko.dev (или заливаются из локального bin/, если он есть).
  3. Через API vpnd.n1ko.dev получаются ссылки на серверы.
  4. Кандидаты перебираются: конфиг поднимается на роутере, туннель проверяется; файрвол включается только после подтверждения, что туннель живой (в nikovpn.py проверка сквозная — curl с ПК через SSH-форвард).
  5. Приоритет протоколов: hysteria2 > tuic > naive > vless > shadowsocks.
  6. Поднимается прозрачный прокси (nft, при отсутствии — iptables) и init-скрипт /etc/init.d/nikovpn (procd).

Типичные параметры — в /etc/nikovpn/state, предпочтения можно задать в /etc/nikovpn/config на роутере:

PREFER_PROTOCOL="tuic"      # принудительный протокол
PREFER_SERVER="host.n1ko.dev"

DNS (порт 53) всегда идёт в обход прокси; трафик в приватные сети и к самому роутеру не проксируется.

Пересборка бинарников

uv run fetch.py --jobs 4          # все архитектуры
uv run fetch.py --only mipsle     # одну

Требует go (скачает сам), clang/lld + musl.cc sysroot для naive-архитектур, zig для loong64. Готовое bin/ + versions заливаются на f.n1ko.dev/nikovpn_openwrt/.

xhttp не поддерживается: это транспорт Xray-core, в sing-box его нет (только v2ray-транспорты tcp/ws/grpc/httpupgrade/quic). VLESS работает поверх tcp+tls.

Отладка

ssh root@192.168.1.1 sh /etc/nikovpn/install.sh status
ssh root@192.168.1.1 cat /var/log/nikovpn.log
ssh root@192.168.1.1 nft list table inet nikovpn