# 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 не включены. Итог: ~8–14 MB gz вместо ~17–23 MB. - Креды VPN (`login:password`): `/root/creds` на роутере или env `NIKOVPN_CREDS`. ## Установка Прямо на роутере: ```sh git clone git.n1ko.dev:Niko/nikovpn_openwrt.git cd nikovpn_openwrt ./install.sh ``` Перед запуском положите креды в `/root/creds`: ```sh echo 'login:password' > /root/creds ``` Бинарники при установке качаются с f.n1ko.dev (каталог `bin/` ~150 MB в репозиторий не входит; если он есть рядом с install.sh — берётся из него). ## Команды | Команда | Что делает | |---|---| | `./install.sh` | установка / переустановка | | `./install.sh update` | обновление бинарников и пересбор сервера | | `./install.sh status` | статус VPN и трафик | | `./install.sh uninstall` | удаление | То же самое через обёртки `status.sh`, `update.sh`, `uninstall.sh`. ## Управление с ПК (опционально) nikovpn.py делает то же самое по SSH, без git на роутере: ```sh 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_ARCH` → `apk` → `opkg` → `uname`); 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` на роутере: ```sh PREFER_PROTOCOL="tuic" # принудительный протокол PREFER_SERVER="host.n1ko.dev" ``` DNS (порт 53) всегда идёт в обход прокси; трафик в приватные сети и к самому роутеру не проксируется. ## Пересборка бинарников ```sh 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. ## Отладка ```sh 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 ```