- install.sh работает из клона на роутере: креды из /root/creds или env NIKOVPN_CREDS, бинарники качаются с f.n1ko.dev с фолбэком на локальный bin/ и versions из репозитория - README: быстрый старт git.n1ko.dev:Niko/nikovpn_openwrt.git, nikovpn.py (SSH-управление с ПК) — как опциональный способ - .gitignore: bin/ (~150MB) и __pycache__ не коммитятся
4.4 KiB
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на роутере или envNIKOVPN_CREDS.
Установка
Прямо на роутере:
git clone git.n1ko.dev:Niko/nikovpn_openwrt.git
cd nikovpn_openwrt
./install.sh
Перед запуском положите креды в /root/creds:
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 на роутере:
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.
Как это работает
- Определяется архитектура (
DISTRIB_ARCH→apk→opkg→uname); nikovpn.py делает это по SSH. - Бинарники качаются с f.n1ko.dev (или заливаются из локального
bin/, если он есть). - Через API
vpnd.n1ko.devполучаются ссылки на серверы. - Кандидаты перебираются: конфиг поднимается на роутере, туннель проверяется; файрвол включается только после подтверждения, что туннель живой (в nikovpn.py проверка сквозная — curl с ПК через SSH-форвард).
- Приоритет протоколов:
hysteria2 > tuic > naive > vless > shadowsocks. - Поднимается прозрачный прокси (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