- 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__ не коммитятся
103 lines
4.4 KiB
Markdown
103 lines
4.4 KiB
Markdown
# 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
|
||
```
|