Перейти к содержанию

Рекомендуемые сообщения

Опубликовано (изменено)

Всем привет!

Это проект для раздельной geo-маршрутизации трафика на Keenetic-роутерах с Entware.

Проект состоит из нескольких opkg-пакетов. По сути это набор shell (sh)-скриптов, которые автоматизируют типовые задачи — всё это можно сделать вручную, но тогда потребуется постоянное сопровождение при изменении конфигурации сети.

Дополнительная информация — в README.md пакетов.

Пока пакеты выкладываются здесь, позже планирую перенести на GitHub.

Пакет keenetic-entware-extras содержит общие библиотеки и обязателен для установки.



Описание, установка, настройка, удаление

Spoiler

# geo-split — split routing для Keenetic (GeoIP + домены) [.ipk пакеты]

Всем привет!

 

Делюсь проектом для раздельной маршрутизации трафика на Keenetic-роутерах с Entware.

 

## Что это

 

**geo-split** — автоматическое разделение трафика по GeoIP-подсетям и спискам доменов для Keenetic + Entware.

 

**Типичные сценарии:**

- **Multi-WAN / LTE-failover** — направить определённый трафик (например, RU-подсети) через конкретный WAN-канал (LTE, второй провайдер), а остальной — через основной

- **VPN split** — весь трафик идёт через VPN (WireGuard/OpenVPN/etc), а RU-трафик — напрямую через провайдера, чтобы российские сервисы (Яндекс, VK, госуслуги, банки) работали без потери скорости

- **Обратный VPN split** — всё через ISP, а выбранные домены — через VPN

 

### Что умеет

 

- 🌍 **GeoIP-маршрутизация** — загружает страновые подсети и направляет трафик к ним через нужный интерфейс

- 🔗 **Маршрутизация по доменам** — можно добавить свои домены в список, их IP будут маршрутизироваться отдельно

- 🔄 **Автоматический failover** — при падении/подъёме VPN или смене WAN маршруты пересоздаются автоматически (NDM-хук)

- ⏱ **Автообновление** — подсети и домены обновляются по cron без вмешательства

- 📦 **CIDR-агрегация** — сжатие подсетей (~13K → ~8.5K маршрутов), меньше нагрузка на роутер

- **Совместимость с Keenetic NDM** — не использует iptables/fwmark, не ломает per-device routing и HW NAT

- 📥 **.ipk пакеты** — установка, обновление и удаление через стандартный `opkg`

 

---

 

## Требования

 

- **KeeneticOS ≥ 5.0** (прошивки серии 5.x). Старые прошивки (2.x / 3.x) **не поддерживаются**.

- Keenetic с установленным **Entware**

- Настроенное **второе подключение**: VPN-туннель (WireGuard, OpenVPN, L2TP, PPTP, SSTP) или дополнительный WAN (LTE, второй ISP)

- Зависимости (`ip-full`, `curl`, `bind-dig`, `aggregate`) ставятся **автоматически** через opkg

 

---

 

## Установка

 

### 1. Скопировать .ipk на роутер

 

```sh

scp *.ipk root@<router-ip>:/tmp/

```

 

### 2. Установить пакеты (порядок важен!)

 

```sh

opkg install /tmp/keenetic-entware-extras_0.9.5_all.ipk

opkg install /tmp/geo-split-data_0.4.0_all.ipk

opkg install /tmp/geo-split_0.10.7_all.ipk

```

 

> ℹ️ Зависимости установятся автоматически из репозитория Entware. Убедитесь, что роутер имеет доступ к интернету.

 

### 3. Настроить

 

```sh

vi /opt/keenetic-entware-extras/geo-split/config/config.conf

```

 

Минимально — установить `ROUTE_OUT`:

 

| Значение | Что делает |

|----------|-----------|

| `"auto"` | Автоопределение ISP-интерфейса из default route. **Подходит большинству.** |

| `"nwg0"` | Через WireGuard VPN |

| `"ovpn0"` | Через OpenVPN |

| `"lte_br1"` | Через LTE-модем |

 

### 4. Запустить

 

```sh

/opt/etc/init.d/S99geo-split start

```

 

При первом запуске скрипт загрузит GeoIP-подсети, отрезолвит домены, заполнит маршрутные таблицы и подключит LAN.

 

### 5. Проверить

 

```sh

/opt/etc/init.d/S99geo-split status

```

 

---

 

## Конфигурация

 

Конфиг: `/opt/keenetic-entware-extras/geo-split/config/config.conf`

 

### Основные параметры

 

| Параметр | По умолчанию | Описание |

|----------|-------------|----------|

| `ROUTE_OUT` | `"auto"` | Куда направлять GEO-трафик. `"auto"` = ISP. Или явно: `"nwg0"`, `"lte_br1"` |

| `ROUTE_IN` | `"br0"` | Откуда берётся трафик. `br0` = Home LAN, `br1` = Guest. Можно несколько через пробел |

| `DOMAINS_LIST_FILE` | `domains.txt` | Список доменов. Поддерживает `@include` для подключения файлов |

| `SUBNET_URL` | ipdeny.com/ru | URL для загрузки GeoIP-подсетей. Можно сменить на другую страну |

| `SUBNET_AGGREGATE` | `1` | Агрегировать CIDR (рекомендуется) |

| `MAX_CACHE_AGE` | 7 дней | Максимальный возраст кэша подсетей |

| `DOMAINS_UPDATE_INTERVAL` | 1 час | Интервал обновления DNS-кэша доменов |

 

> 💾 Конфиг объявлен как `conffile` — при `opkg upgrade` ваши настройки **не перезапишутся**.

 

### Список доменов

 

Домены задаются в `/opt/keenetic-entware-extras/geo-split-data/lists/domains.txt`:

 

```

# По умолчанию подключён курированный белый список RU-сервисов:

@ru-whitelist.txt

 

# Добавьте свои домены:

example.com

my-service.ru

```

 

`domains.txt` тоже conffile — ваши дополнения сохраняются при обновлении.

 

---

 

## Примеры конфигурации

 

### RU → ISP (автоопределение)

 

Весь трафик через VPN, RU-подсети и домены — через провайдера. Самый распространённый вариант.

 

```sh

ROUTE_OUT="auto"

ROUTE_IN="br0"

```

 

### Выбранные домены → VPN

 

Весь трафик через ISP, а определённые домены — через WireGuard.

 

```sh

ROUTE_OUT="nwg0"

ROUTE_IN="br0"

```

 

Добавьте нужные домены в `domains.txt`.

 

### Multi-WAN (LTE как ISP)

 

ISP подключён через USB-модем:

 

```sh

ROUTE_OUT="lte_br1"

ROUTE_IN="br0"

```

 

---

 

## Пример вывода status

 

```

geo-split status:

Mode:

Route in: br0

Route out: auto (detect ISP)

Active out: eth3 (tables 1000,1001)

 

IP rules:

iif br0 → table 1000 (domains) ✓

iif br0 → table 1001 (subnets) ✓

 

Routes:

Domains: 179 routes in table 1000 ✓

Subnets: 8588 routes in table 1001 ✓

 

Caches:

Subnets: cache 2d 5h old (max 7d 0h) ✓

Domains: 179 in cache, 45m old (max 1h 0m) ✓

 

Domain sources: 163 domain(s) configured

 

System:

Uptime: 2d 5h ✓

Cron: 1 job(s) ✓

NDM hook: /opt/etc/ndm/ifstatechanged.d/geo-split-hook ✓

DL iface: default (cached)

DNS: localhost:6153 (SmartDNS)

Background: idle

Loader: cidr-plain

Version: 0.8.0

```

 

Все `✓` — система работает штатно. При проблемах строка покажет `✗`.

 

---

 

## Доступные команды

 

| Команда | Описание |

|---------|----------|

| `start` | Полный запуск (загрузка данных + подключение LAN) |

| `stop` | Остановка (удаление правил маршрутизации) |

| `restart` | Перезапуск |

| `status` | Диагностика — показывает состояние всех компонентов |

| `refresh` | Обновить данные если устарели (вызывается из cron) |

| `update` | Принудительное обновление всех данных |

| `update-subnets` | Принудительно обновить подсети |

| `update-domains` | Принудительно обновить домены |

 

Все команды вызываются через `/opt/etc/init.d/S99geo-split <команда>`.

 

---

 

## Обновление

 

```sh

scp geo-split_<new_version>_all.ipk root@<router-ip>:/tmp/

opkg install --force-reinstall /tmp/geo-split_<new_version>_all.ipk

/opt/etc/init.d/S99geo-split start

```

 

Конфиг и списки доменов **сохраняются** при обновлении.

 

---

 

## Удаление

 

```sh

/opt/etc/init.d/S99geo-split stop

opkg remove geo-split

opkg remove geo-split-data

opkg remove keenetic-entware-extras

```

 

Пакеты удаляют свои файлы, ip rules, cron-задачи и NDM-хуки автоматически.

 

---

 

## Скачать

| Пакет | Версия | Описание | Ссылка |
|-------|--------|----------|--------|
| `keenetic-entware-extras` | 0.9.5 | Базовые библиотеки (обязателен) | ⬇️ [TODO] |
| `geo-split-data` | 0.4.0 | GeoIP-данные и списки доменов | ⬇️ [TODO] |
| `geo-split` | 0.10.7 | Гео-маршрутизация — основной пакет | ⬇️ [TODO] |
| `smartdns-conf-ru-split` | 0.4.3 | DNS split — раздельный DNS по зонам (RU → Yandex/AdGuard, остальное → Google/Cloudflare DoH) | ⬇️ [TODO] |
| `smartdns-redirect` | 0.2.3 | DNAT-перенаправление DNS на SmartDNS (iptables) | ⬇️ [TODO] |
| `webui` | 0.9.0 | Веб-панель мониторинга + карточка в stock UI (**требует KeeneticOS 5.x**) | ⬇️ [TODO] |

> Все пакеты `Architecture: all` — подходят для любой архитектуры Keenetic (mipsel, aarch64).

---

 

## Известные ограничения

 

- **KeeneticOS ≥ 5.0** — прошивки 2.x / 3.x не поддерживаются (другая платформа NDMS2)

- **Только IPv4** — IPv6-трафик проходит по стандартным маршрутам

- **Требует Entware** — на стоковой прошивке без Entware не работает

- **Домены обновляются по cron** (по умолчанию раз в час), а не мгновенно при DNS-запросе

- **Другой механизм, чем fwmark-решения** — geo-split работает через `ip rule`/`ip route` (route-based), а не через iptables/fwmark. С fwmark-решениями (keen-pbr и т.д.) не пересекается и мирно сосуществует, но это разные подходы — маршруты суммироваться не будут

 

---

 

## Лицензия

 

MIT — свободное использование, модификация и распространение с указанием авторства.

 

---

 

## Обратная связь

Приветствуются:
- 🐛 Баг-репорты
- 💡 Предложения по фичам
- Вопросы по настройке

**При проблемах:**
1. Опишите проблему словами — что делали, что ожидали, что получили (чем подробнее, тем лучше)
2. Запустите скрипт диагностики и приложите вывод (под спойлер):

```sh
/opt/keenetic-entware-extras/scripts/bug-report.sh
```

Скрипт собирает версии, статус всех сервисов, проверки DNS и маршрутов, хвосты логов. В выводе нет паролей, ключей или внешних IP — безопасно постить на форуме.

> Доступен начиная с `keenetic-entware-extras` ≥ 0.9.5.

Пишите в этой теме — постараюсь помочь.
 


edited:
2026-04-16:
- geo-split-data_0.3.1 bugfix

2026-05-01:
- обновлены geo пакеты,
- добавлены пакеты DNS geo splitting
(для корректной работы гео-сплитинга желательно так же выполнять раздельную обработку гео зон ДНС: гео зону запрашивать у ДНС этой зоны)
- добавлен эксперементальный web ui (карточка всех сервисов в dashboard; отдельный веб сервер на 8080 порту; авторизация штатная: доступ - только из LAN)

ИИ Changelog:

Spoiler
## 📋 Changelog (с последних опубликованных версий)
 
### geo-split 0.8.0 → 0.9.3
- Миграция CIDR-агрегации с awk на ISC `aggregate` (быстрее, надёжнее)
- Добавлен multi-interface failover для загрузки подсетей (VPN → ISP → default)
- JSON-вывод в status (geo_zone, upstream_name)
- Route table freshness tracking (кэш + возраст таблиц)
- Автоопределение DNS-резолвера (порт 6153/6053/system)
- Улучшенная диагностика: `status` с секцией checks
 
### keenetic-entware-extras 0.7.1 (было 0.4.0)
- Новая библиотека `lib/status.sh` — shared check/show функции
- Новая библиотека `lib/ip.sh` — CIDR-агрегация, ISP-detection, DNS resolver auto-detect
- CLI-утилита `kee-status` (`/opt/bin/kee-status`) — агрегированная диагностика всех сервисов
- Автоопределение IP роутера для bind-адресов
- POSIX-совместимость всех скриптов (ash/BusyBox)
 
### geo-split-data 0.3.1 → 0.3.4
- Удалён t.me из ru-whitelist (не геоблокируется)
- Обновлён список доменов (140 позиций)
- Улучшена структура conffiles
 
---
 
## 🆕 Описания новых пакетов (для поста)
 
### smartdns-conf-ru-split 0.3.5
Конфигурация SmartDNS для split-DNS по RU зоне. Маршрутизирует .ru/.рф/.su через Yandex/AdGuard DNS, остальное через Google/Cloudflare DoH. Toggle вкл/выкл. Использует штатный S38smartdns.
 
### smartdns-redirect 0.1.7
Универсальный DNS DNAT для LAN — перехватывает DNS-трафик (port 53) с br0 и перенаправляет на локальный резолвер (SmartDNS :6053 по умолч.; настраивается на AGH/Unbound/dnsmasq). NDM-совместим: переживает iptables flush через netfilter.d хук. Watchdog перезапуска DNS.
 
### webui 0.7.9
Web-дашборд на nginx+Lua для мониторинга geo-split, smartdns-conf-ru-split и smartdns-redirect. Порт 8080. Статус-карточки с toggle. Интеграция в штатный сайдбар Keenetic. Logrotate для логов nginx.

 

2026-05-01/2:
bugfixes
 

Spoiler
## Changelog (2026-05-01/2)
 
### keenetic-entware-extras 0.8.1
- **fix:** `is_cache_fresh()` считал 0-byte файл свежим (`-f``-s`)
- **feat:** `Depends: cron` — автоустановка cron при первом деплое
 
### geo-split 0.9.4
- **fix:** postinst safe cron restart (не роняет postinst при отсутствии S10cron)
 
### smartdns-redirect 0.1.8
- **fix:** prerm/postinst safe cron restart (устраняет `exit 1` → opkg upgrade failure)
 
### webui 0.7.10
- **fix:** `stop()` убивает orphaned nginx через `pgrep/pkill` (устраняет port conflict при upgrade)

2026-05-01/3:

keenetic-entware-extras_0.9.1_all.ipk - исправлена ошибка автоопределения выходного интерфейса в setup "Default policy to a tunnel"

Пример карточки webui:

 

Spoiler

image.thumb.png.c4111c0d5adb2fe156e2dfb256a325d8.png

2026-05-26:
- обновлены все пакеты
- в webui добавлена поддержка прошивки 5.1
- в пакеты добавлены Changelog

 

2026-05-29:

**При проблемах:**
1. Опишите проблему словами — что делали, что ожидали, что получили (чем подробнее, тем лучше)
2. Запустите скрипт диагностики и приложите вывод (под спойлер):

/opt/keenetic-entware-extras/scripts/bug-report.sh

Скрипт собирает версии, статус всех сервисов, проверки DNS и маршрутов, хвосты логов. В выводе нет паролей, ключей или внешних IP — безопасно постить на форуме.

> Доступен начиная с `keenetic-entware-extras` ≥ 0.9.5.


2026-05-30:
обновлен алгоритм поиска доступного интерфейс для загрузки гео данных в geo-split


 

geo-split-data_0.4.0_all.ipk smartdns-conf-ru-split_0.4.3_all.ipk smartdns-redirect_0.2.3_all.ipk webui_0.9.0_all.ipk

keenetic-entware-extras_0.9.5_all.ipk

geo-split_0.10.8_all.ipk

Изменено пользователем 0xkee
update
  • 2 недели спустя...
Опубликовано

Привет!
Спасибо за работу и проект!
Я столкнулся с тем что при настройке решения RU сайты вообще перестают открываться. Пробовал c помощью ИИ. Думаю что может быть связано с политиками маршрутизации на самом роутере. 
Может у тебя есть совет как должна быть настроена эта секция?

Screenshot 2026-04-30 at 12.00.08.png

Screenshot 2026-04-30 at 11.59.55.png

Опубликовано (изменено)
On 4/30/2026 at 12:01 PM, poo said:

Привет!
Спасибо за работу и проект!
Я столкнулся с тем что при настройке решения RU сайты вообще перестают открываться.

Привет!
Спасибо за отзыв.
Поставь/обнови, пожалуйста, до новых версий пакетов. Рекомендуется поставить все.
Если не заработает (есть вероятность ошибки автоматического определения выходного интерфейса), проведи и скинь диагностику.
HW - KN-3810?

Ошибка исправлена.

Диагностика, если не работает:

Spoiler
Привет! Спасибо за отзыв и за то, что описал проблему.
 
## Диагнозы
 
Судя по скриншотам, у тебя **"Политика по умолчанию" = WireGuard (EE-2)**. Это значит, что весь трафик всех устройств по дефолту идёт в VPN-туннель.
 
geo-split работает так: он перехватывает трафик к RU-подсетям и направляет его напрямую через ISP (минуя VPN). Но для этого он должен корректно определить ISP-интерфейс.
 
## Шаги диагностики
 
Подключись к роутеру по SSH и выполни:
 
```sh
# 1. Статус geo-split (покажет определённый интерфейс)
/opt/etc/init.d/S99geo-split status
 
# 2. Что в main table default route?
ip route | grep "^default"
 
# 3. Что в таблицах geo-split?
ip route show table 1001 | head -5
 
# 4. Есть ли ip rules geo-split?
ip rule show | grep -E "table (1000|1001)"
```
 
Скинь вывод — будет понятно, где проблема.
 
## Наиболее вероятные причины
 
### 1. geo-split не запущен / подсети не загружены
 
Если `ip rule show` не показывает таблицы 1000/1001 — geo-split не активен. Запусти:
 
```sh
/opt/etc/init.d/S99geo-split start
```
 
### 2. DNS идёт через VPN
 
Даже если маршрутизация IP-подсетей работает правильно, **DNS-запросы** могут уходить в VPN. Если VPN-сервер за рубежом, DNS может возвращать IP-адреса, с которых RU-сайты недоступны (или CDN отдаёт заблокированный контент).
 
**Решение:** Установить пакет `smartdns-conf-ru-split` — он настраивает split-DNS: RU-домены резолвятся через российские DNS (77.88.8.8), а остальные — через защищённый DNS.
 
### 3. VPN-сервер в стране, откуда RU-сайты блокируют доступ
 
Если EE-2 (WireGuard) — это выход в Эстонии/Нидерландах/и т.д., многие RU-сайты (банки, госуслуги, стриминги) блокируют зарубежные IP. В этом случае geo-split как раз и должен направить RU-трафик мимо VPN.
 
### 4. ISP-интерфейс определён неверно (маловероятно, но возможно)
 
Если `ip route | grep "^default"` показывает VPN-интерфейс (nwg0, ovpn0) вместо ISP (eth*, ppp*) — значит на твоей модели Keenetic default route в main table указывает на VPN. В этом случае нужно явно указать ISP-интерфейс:
 
```sh
vi /opt/etc/keenetic-entware-extras/geo-split/config.sh
# Найти строку ROUTE_OUT="auto" и заменить на:
ROUTE_OUT="eth3" # или ppp0 — твой реальный ISP-интерфейс
 
# Перезапустить:
/opt/etc/init.d/S99geo-split restart
```
 
Чтобы узнать ISP-интерфейс, посмотри: `ip link show` или в веб-интерфейсе "Другие подключения" → какой интерфейс у Ethernet ISP.
 
## Рекомендуемая настройка политик для split-routing
 
Оптимальная конфигурация для сценария "RU через ISP, остальное через VPN":
 
| Политика | Подключение | Назначение |
|----------|-------------|------------|
| Политика по умолчанию | Ethernet ISP | Прямой выход в интернет |
| VPN | EE-2 (WireGuard) | Для VPN-маршрутизации |
 
А назначение устройств на политику VPN — через вкладку "Применение политик".
 
**Но** geo-split должен работать и при твоей текущей конфигурации (дефолт = WireGuard), потому что он вставляет свои правила с более высоким приоритетом (50-51) чем политики Keenetic (100+).
 
---
 
*Скинь вывод диагностических команд — разберёмся точнее.*

 

Изменено пользователем 0xkee
  • 4 недели спустя...
Опубликовано

Спасибо за проект! Поставил на Viva (KN-1910), но не тянет. Зависает. Есть рекомендации по железу?

 

Опубликовано (изменено)
On 5/24/2026 at 4:05 PM, Kservlad said:

Спасибо за проект! Поставил на Viva (KN-1910), но не тянет. Зависает. Есть рекомендации по железу?

 

Добрый день.
На Hero 4G (KN-2310) тянет без проблем, железо идентичное, должно работать и на Viva 1910.

image.thumb.png.ad6e5eec276717af06a4dc11f57d2c87.png


Вероятно, какая-то ошибка.
Можете дать какие-то подробности?

По железу: MediaTek MT7621A + 128 MB DDR3 и выше (последние 8-10 лет) точно работает.
 

edited:
Так же надо ещё учитывать, какую гео зону загружаете, небольшое исследование нейросетки в закрепе. Есть большие и маленькие, они требуют разное количество RAM.
 

 

zone-sizes-research.md

Изменено пользователем 0xkee
added geo zones quantitative synopsis
Опубликовано (изменено)

как

10 часов назад, 0xkee сказал:

Можете дать какие-то подробности?

Версия ОС 5.1 Beta 3 Как собрать данные для анализа? после запуска зависает насмерть не открывается ни web ни ssh. помогает только сброс по питанию... 

Изменено пользователем Kservlad
Опубликовано (изменено)
10 hours ago, Kservlad said:

Версия ОС 5.1 Beta 3 Как собрать данные для анализа?

При установке что выводит, где останавливается?
Лог можете прислать/показать?

На 5.1 не проверялось (как бы dev preview версия), видимо, что-то поменяли, надо изучить...

edited:
5.1 изучен, не работал webui, поправлено, всё остальное без изменений и работает.
Так же выложены новые версии пакетов.

Изменено пользователем 0xkee
Опубликовано

0xkee

Спасибо за проект!

Пытаюсь развернуть на ZyXEL Keenetic Giga II с версией ОС 2.16.D.12.0-12. Пока не взлетело, (например, не запускается webui) но об этом, возможно, попозже.

У вас в smartdns-conf-ru-split_0.4.3_all.ipk в кофиге smartdns.conf в комментариях написано:

Цитата

# ===========================================================================
# 🇷🇺 RU routing rules — какие домены идут через ru-группу
# ===========================================================================
# nameserver /domain/group — domain БЕЗ ведущей точки
# суффикс "ru" → .ru и все *.ru

а сразу далее указаны суффиксы с ведущими точками:

# Russian TLDs
nameserver /.ru/ru
# .рф (punycode)
nameserver /.xn--p1ai/ru
nameserver /.su/ru

нет ли в этом ошибки?

Опубликовано
On 5/28/2026 at 6:23 AM, Kservlad said:

Установил последнюю версию. Недоступен российский сегмент сети. 

пожалуйста подключитесь по ssh к entware роутера и пришлите вывод 

kee-status -d
Опубликовано
1 hour ago, KeenTaur said:

У вас в smartdns-conf-ru-split_0.4.3_all.ipk в кофиге smartdns.conf в комментариях написано:

Привет! Спасибо за обратную связь.

По поводу ведущей точки в nameserver правилах:

Ошибки нет — SmartDNS обрабатывает оба варианта одинаково:

nameserver /.ru/ru
nameserver /ru/ru
Оба означают "домен ru и все его поддомены (*.ru)". Ведущая точка — опциональна, SmartDNS её стрипает при парсинге. Формат с точкой — это dnsmasq-style конвенция, которая широко используется в примерах SmartDNS.

А вот комментарий в конфиге действительно вводит в заблуждение — он говорит "БЕЗ ведущей точки", а правила ниже с ней. Поправлю, спасибо за внимательность!

1 hour ago, KeenTaur said:

Пытаюсь развернуть на ZyXEL Keenetic Giga II с версией ОС 2.16.D.12.0-12. Пока не взлетело, (например, не запускается webui) но об этом, возможно, попозже.

К сожалению, проект рассчитан на KeeneticOS 5.x (прошивки серии 5.0 / 5.1). Keenetic Giga II с ОС 2.16 — это другое поколение платформы (NDMS2), и webui на ней работать не будет: он патчит Angular-based интерфейс NDW4, которого на 2.x нет.

При этом пакеты без webui (smartdns-conf-ru-split, smartdns-redirect, geo-split) теоретически могут работать, если на Giga II установлен Entware и в нём доступен SmartDNS + остальные зависимости. Основные скрипты — POSIX sh, привязки к конкретной версии прошивки нет (кроме webui и NDM-хуков). Но я не тестировал на 2.x, поэтому гарантировать не могу — если попробуете, буду рад услышать результат.

Добавлю в описание минимальные требования к прошивке.

Опубликовано

При проблемах:
1. Опишите проблему словами — что делали, что ожидали, что получили (чем подробнее, тем лучше)
2. Запустите скрипт диагностики и приложите вывод (под спойлер):

/opt/keenetic-entware-extras/scripts/bug-report.sh

Скрипт собирает версии, статус всех сервисов, проверки DNS и маршрутов, хвосты логов. В выводе нет паролей, ключей или внешних IP — безопасно постить на форуме.

> Доступен начиная с `keenetic-entware-extras` ≥ 0.9.5.

Опубликовано
7 часов назад, 0xkee сказал:

Но я не тестировал на 2.x, поэтому гарантировать не могу — если попробуете, буду рад услышать результат

Я попробую, но, скорее всего, где-то во вторник.

По webui понятно, удалю его. Хотя, как мне показалось из его ридми, вроде было два варианта: один с инъекцией в интерфейс, другой без.

Вопрос по зависимостям. Если у меня уже был установлен какой-то пакет (например, ca-certificates) при удалении geoio split routing он останется? А установленный как зависимость smartdns удалится?

Вoпрос по dns. Я верно понял, что выполнять команду opkg dns override не требуется?

По диагностике. Сначала пробовал автоопределение (шлюз по умолчанию был через провайдера), диагностика "споткнулась" на п.4

В 01.05.2026 в 16:45, 0xkee сказал:
# 4. Есть ли ip rules geo-split?
ip rule show | grep -E "table (1000|1001)"

Вывод был пустой. Сейчас я пока передумал и решил, пусть все идет в туннель и только RU через провайдера напрямую. Продолжу не раньше понедельника, но хотел бы уточнить, для такой схемы надо прописывать маршрут по умолчанию через туннель или скрипты сами зарулят что куда надо?

По минимальным требованиям к прошивке. Есть еще линейка устройств с ОС 4.3.7 (типа моих Extra KN-1711).

Спасибо!

Опубликовано
3 hours ago, KeenTaur said:

Сначала пробовал автоопределение (шлюз по умолчанию был через провайдера), диагностика "споткнулась" на п.4

 

3 hours ago, KeenTaur said:

Сейчас я пока передумал и решил, пусть все идет в туннель и только RU через провайдера напрямую.

Это же одно и тоже?

Подробный ответ на все остальные вопросы (совместно с нейросеткой, резюме в конце, не сочтите за слоп)
В 2х словах, скорее всего "core" заработает на 4.х, webui нет, но можно допилить после
2.х очень старая (13 лет) и планов её поддерживать нет (и не факт, что это можно сделать простыми способами)
 

Spoiler

Разбор отзыва KeenTaur — контекст из кодовой базы


1. WebUI — «два варианта: с инъекцией и без»

Пользователь частично прав — в webui есть параметр INJECT_SIDEBAR (0/1😞

Режим Что делает
INJECT_SIDEBAR=1 inject.js добавляет пункт меню "Entware Extras" в sidebar stock UI
INJECT_SIDEBAR=0 Sidebar не трогается, но карточка на дашборде и кастомный дашборд по-прежнему работают

Однако оба режима предполагают патчинг stock UI в tmpfs (webui/README.md:54–75) — inject.js и JS-bundle patches применяются в любом случае. Это не "без инъекции", а скорее "минимальная инъекция" (только dashboard card).

Для ответа пользователю: WebUI — экспериментальный пакет, работает только на KeeneticOS 5.x. Для KN-1711 (OS 4.x) точно не подходит. Основные пакеты (geo-split, smartdns-conf-ru-split) работают без webui.


2. Зависимости при удалении

Из packaging/geo-split/control:

Depends: keenetic-entware-extras, geo-split-data, ip-full, curl, bind-dig, aggregate

Из packaging/smartdns-conf-ru-split/control:

Depends: keenetic-entware-extras, smartdns, ca-certificates

Ответ: opkg в Entware не удаляет зависимости автоматически — нет autoremove. При opkg remove geo-split:

  • ca-certificates — останется (даже если ставился как зависимость другого пакета)
  • smartdns — останется (он зависимость smartdns-conf-ru-split, не geo-split)
  • ip-fullcurlbind-digaggregate — останутся

Для полной очистки нужно вручную: opkg remove smartdns ca-certificates ip-full bind-dig aggregate (только если ничего другое их не использует).


3. DNS — нужна ли opkg dns-override?

НЕТ, не нужна. В docs/forum-post-draft.md:43 явно указано:

«DNS-Override» — не используются.

Проект использует другой подход (из smartdns-conf-ru-split/README.md:42–69😞

  1. SmartDNS слушает на :6053 (не :53)
  2. В Keenetic CLI добавляется: ndmc -c 'ip name-server <IP>:6053'
  3. ndnproxy (по-прежнему на :53) форвардит запросы в SmartDNS

Опционально пакет smartdns-redirect делает iptables DNAT с br0:53 → :6053 для LAN-клиентов (минуя ndnproxy), но opkg dns-override всё равно не нужен.


4. Схема «всё через туннель, только RU напрямую»

Это основной сценарий проекта — из docs/forum-post-draft.md:12:

VPN split — весь трафик идёт через VPN, а RU-трафик — напрямую через провайдера

Из сравнительной схемы (geo-split/docs/comparison/keen-pbr.md:28–51😞

RULE -->|dst в table 1000/1001| → ISP (ROUTE_OUT)
RULE -->|dst НЕ в table|       → Default route (main table) → VPN tunnel

Ответ для пользователя:

  • Да, маршрут по умолчанию через туннель нужно настроить самому — в Keenetic «Приоритеты подключений» или ip route CLI. Это стандартная настройка VPN на Keenetic.
  • geo-split только добавляет RU-подсети/домены в кастомные routing tables (1000, 1001) c путём через ISP (параметр ROUTE_OUT="auto")
  • Всё остальное (не-RU) проходит по main table → попадает в default route → идёт в VPN

Конфигурация:

ROUTE_OUT="auto"   # auto = ISP (определяется из default route ДО подъёма VPN)
ROUTE_IN="br0"

Причина пустого ip rule show | grep table 1000 (п.4 диагностики): скрипт geo-split не был запущен, или VPN не поднят, или NDM-хук не сработал. После установки нужно:

  1. Убедиться что VPN настроен и поднят
  2. Запустить /opt/etc/init.d/S99geo-split start
  3. Проверить S99geo-split status

5. Минимальные требования — KeeneticOS 4.3.7 (Extra KN-1711)

Из docs/forum-post-draft.md:29:

KeeneticOS ≥ 5.0 (прошивки серии 5.x). Старые прошивки (2.x / 3.x) не поддерживаются.

Из docs/bugs/giga-ii-os-2.16-feedback/analysis.md:38:

Проект разработан и протестирован исключительно для KeeneticOS 5.x (NDMS4 / NDW4)

Extra KN-1711 с ОС 4.3.7:

  • Это промежуточное поколение (между NDMS2 и NDMS4). Не 2.x, но и не 5.x.
  • Entware — поддерживается (mipsel, arch mipsel-3.4_kn)
  • WebUI — совершенно другой (не Angular/NDW4), webui пакет точно не работает
  • ndmc CLI — доступен, но набор команд может отличаться

NDM hooks — ПОДТВЕРЖДЕНО через анализ пакета opt-ndmsv2

Проверка пакета opt-ndmsv2_1.0-17_mipsel-3.4_kn.ipk из репозитория bin.entware.net/mipselsf-k3.4/keenetic/ показала:

  • Пакет помечен Essential: yes — устанавливается автоматически при инициализации Entware
  • Пакет создаёт все NDM hooks каталоги, в т.ч. критичные для нашего проекта:
    • /opt/etc/ndm/ifstatechanged.d/ — используется geo-split/scripts/ndm-hook.sh
    • /opt/etc/ndm/netfilter.d/ — используется smartdns-redirect/scripts/netfilter-hook.sh
  • Архитектура mipsel-3.4_kn — тот же репозиторий, что используется на KN-1711 Extra

Вывод: Раз Keenetic распространяет opt-ndmsv2 как обязательный пакет для этой архитектуры — прошивка поддерживает вызов скриптов из /opt/etc/ndm/ каталогов. NDM hooks каталоги идентичны тем, что мы используем на 5.x (включая ifstatechanged.d и netfilter.d).

Вердикт для core-пакетов (geo-split, smartdns-conf-ru-split, smartdns-redirect):

  • Не тестировано на реальном железе, но NDM hooks infrastructure идентична 5.x
  • geo-split — должен работатьip rule/ip route (kernel API) + NDM hooks (подтверждены)
  • smartdns-conf-ru-split — должен работать: конфиг SmartDNS, не зависит от версии ОС
  • smartdns-redirect (iptables DNAT + netfilter.d hook) — должен работать
  • webui — НЕ работает (требует Angular SPA / NDW4, которого нет на 4.x)

 ndmc CLI — НЕ используется core-пакетами

Проверка по кодовой базе: ndmc вызывается только в:

Core-скрипты geo-splitsmartdns-conf-ru-splitsmartdns-redirect используют только Linux-утилиты из Entwareipiptablesdigcurlgrepsedawk. Никакой зависимости от ndmc.

Единственное место, где ndmc упоминается — инструкция для пользователя (README.md) по настройке DNS:

ndmc -c 'ip name-server <IP>:6053'

Это базовая команда Keenetic CLI, доступная на всех версиях прошивки.

Рекомендация для ответа:

Не тестировал на 4.x, но проверил подробно:

Core-пакеты (geo-split, smartdns-conf-ru-split, smartdns-redirect):

  • Пакет opt-ndmsv2 (Entware) для архитектуры mipsel-3.4 идентичен — те же каталоги /opt/etc/ndm/ifstatechanged.d/netfilter.d/ и т.д.
  • Скрипты не используют ndmc — только стандартные Linux-утилиты (ipiptablesdigcurl)
  • Должны работать на KN-1711 без доработок. Если попробуете — буду рад фидбэку.

WebUI:

  • Пока не ставьте — сейчас поддерживает только 5.x
  • Но! Скачал и распаковал вашу прошивку 4.3.7 — там тот же Angular (NDW4)
  • 7 из 9 патчей переносятся тривиально, 2 требуют доработки
  • Если core заработает нормально и будет интерес — попробую портировать webui на 4.x

Общая сводка для формулировки ответа

Вопрос Краткий ответ
WebUI два варианта Один пакет, настройка INJECT_SIDEBAR=0/1. Сейчас для 4.x не работает — не ставить. Но 4.x использует тот же Angular — порт возможен по запросу после подтверждения core.
Зависимости при удалении opkg не удаляет deps автоматически. ca-certificates и smartdns останутся.
opkg dns-override НЕ требуется. Проект использует ip name-server <ip>:6053.
Default через туннель Маршрут по умолчанию через VPN настраивается пользователем в Keenetic. geo-split только добавляет маршруты для RU через ISP.
KeeneticOS 4.3.7 NDM hooks идентичны 5.x, скрипты не используют ndmc. Core должно работать. WebUI — можно портировать по запросу.

 

Опубликовано
2 hours ago, LuckyOwner said:

Рабочее решение?
Почему сайт пишет, что IPK недоступны для скачивания?
Еще не выложено на GitHub?

Пока нет отзывов, что работает. Вопрос в сетапах/конфигурации сетей, всего не предусмотреть, если и не работает, то скорее всего по этому.
Глючит.
Нет, планируется.

Опубликовано

Спасибо! Стало несколько понятнее, на практике эксперименты продолжу со "старичком" с v2.16 в пн-вт. С подробной диагностикой при необходимости (предыдущее сообщение писал по памяти, уже без доступа к устройству).

На Экстрах 1711 у меня пока AWG-Manager + MagiTrickle. Версию 4.3.7 упомянул для определенности. К тому же, она, 4.3.7 вроде как получила статус LTS.

Опубликовано
7 minutes ago, KeenTaur said:

AWG-Manager

Красивое, изучу возможность совместимости. 
 

8 minutes ago, KeenTaur said:

MagiTrickle

Видел, тут (пока) принципиально иное решение: мухи отдельно, котлеты отдельно. И в этом есть масса плюсов - что нетфликс, что банки думают то, что им и положено думать. (Но в процессе эксплуатации возникла проблема, что топология (что ли) сетей меняется чаще, чем дефолтные обновления гео (7 дней) и доменов (1 час). Возможно, некий гибрид on-demand+full-split наиболее оптимален в будущем)

 

12 minutes ago, KeenTaur said:

Версию 4.3.7 упомянул для определенности. К тому же, она, 4.3.7 вроде как получила статус LTS.

У меня, к сожалению, нет железки с 4.х.
Пока исследовал по прошивке, должно работать.
Если есть какая-то железка с 4.х, куда можете дать ssh - могу всё проверить и добавить поддержку за час-два... как вариант. Либо фидбеки.
 

16 minutes ago, KeenTaur said:

Стало несколько понятнее,

Уточню на всякий случай, у Вас уже должен быть Кинетик/Неткрез + entware + a tunnel (типо vpn/proxy или что-то такое), оно всё должно быть настроено и работать. А эти пакеты добавляют [global] geo splitting на 2х уровнях (иначе никак): ip routing (по крону загружаются/обновляются официальные таблицы + резолвятся домены из определённого списка, это фактически на будущее) + dns geo resolving (это делается с помощью конифга smartdns, которые такое умеет), поэтому несколько пакетов. Плюс добавлено куча настроек в конфиги, большая часть из которых в 99% сетапов менять не потребуется, но дают бОльшую гибкость и позволяют сплиттить из любого интефейса в любой любую гео зону (в перспективе несколько одновременно, пока не реализовано). Плюс обходятся стоковые dns службы, т.к. они не очень. Вот как-то так...

Опубликовано
2 hours ago, KeenTaur said:

AWG-Manager

Разобрался с совместной работой geo-split и awg-manager. Если коротко — всё должно работать вместе без дополнительных настроек. Единственное, что не нужно — это DNS от awg-manager, но он и так не требуется при использовании geo-split. Подробности — в приложениях.

В процессе нашлась причина, по которой geo-split мог не работать совместно с awg-manager.

Суть проблемы: некоторые российские провайдеры блокируют доступ к сайтам с гео-списками. Чтобы обойти такую блокировку, geo-split умеет пробовать загрузку через разные сетевые интерфейсы. Раньше список этих интерфейсов был зашит вручную — туда входили только «родные» подключения роутера, потому что сторонние пакеты не предполагались. Из-за этого интерфейсы, созданные awg-manager, просто не учитывались — скорее всего именно это и приводило к проблемам.

Исправил: теперь geo-split автоматически перебирает все активные интерфейсы, включая те, что создаёт awg-manager.

Обновите geo-split до последней версии.

ps
сорри за ии-фильтр текста
 

awg-manager-compatibility-post.md compatibility-analysis.md

Опубликовано (изменено)
В 29.05.2026 в 15:17, 0xkee сказал:

пожалуйста подключитесь по ssh к entware роутера и пришлите вывод 

kee-status -d

 # kee-status -d
keenetic-entware-extras status:
  geo-split            Alive
    geo-split status:
      Mode:
        Geo zone:    RU
        Route in:    br0
        Route out:   auto (detect ISP)
        Active out:  eth2.4 (tables 1000,1001)

      IP rules:
        iif br0 → table 1000 (domains) ✓
        iif br0 → table 1001 (subnets) ✓

      Routes:
        Domains:     184 routes in table 1000, filled 41s ago ✓
        Subnets:     8613 routes in table 1001, filled 37s ago ✓

      Caches:
        Subnets:     cache 2d 23h 8m old (max 7d 0h 0m) ✓
        Domains:     184 in cache, 24m 7s old (max 1h 0m 0s) ✓

      Domain sources: 103 domain(s) configured

      System:
        Uptime:      49s ✓
        Cron:        1 job(s) (shift 10m) ✓
        NDM hook:    /opt/etc/ndm/ifstatechanged.d/geo-split-hook ✓
        DL iface:    default (cached)
        DNS:         system resolver
        Background:  idle
        Loader:      cidr-plain
        Version:     0.10.7
~ #

tracert youtube.com

Трассировка маршрута к youtube.com [142.251.38.110]
с максимальным числом прыжков 30:

  1    <1 мс    <1 мс    <1 мс  KEENETIC-0861 [192.168.0.1]
  2     *        *        *     Превышен интервал ожидания для запроса.
  3    72 ms    71 ms    72 ms  178.18.225.111.ix.dataix.eu [178.18.225.111]
  4    69 ms    69 ms    69 ms  178.18.235.253
  5    70 ms    71 ms    70 ms  72.14.237.55
  6    72 ms    70 ms    70 ms  142.251.65.81
  7    70 ms    72 ms    70 ms  lcarna-ac-in-f14.1e100.net [142.251.38.110]

tracert mail.ru

Трассировка маршрута к mail.ru [185.180.201.1]
с максимальным числом прыжков 30:

  1    <1 мс    <1 мс    <1 мс  KEENETIC-0861 [192.168.0.1]
  2  ХХХХХХХ[ХХХ.ХХХ.ХХХ.ХХХ]  сообщает: Заданный узел недоступен.

 

 

Изменено пользователем Kservlad
Опубликовано
1 hour ago, Kservlad said:

keenetic-entware-extras status:
  geo-split            Alive
    geo-split status:
      Mode:
        Geo zone:    RU
        Route in:    br0
        Route out:   auto (detect ISP)
        Active out:  eth2.4 (tables 1000,1001)

Привет! Спасибо за подробный вывод.

## Что происходит

geo-split определил **eth2.4** как ISP-интерфейс и маршрутизирует через него RU-трафик. Но этот интерфейс отвечает "узел недоступен" — значит либо это **не тот интерфейс** (не интернет, а, например, IPTV), либо ISP-подключение ещё не успело подняться (uptime всего 49 секунд).

YouTube работает потому что идёт через VPN (не попадает в RU-подсети).

## Диагностика

Подключись по SSH и выполни **одной командой** (скопировать целиком):

echo "=== INTERFACES ===" && ip -br link show && \
echo "=== ADDRESSES ===" && ip -br addr show && \
echo "=== DEFAULT MAIN ===" && ip route show default && \
echo "=== DEFAULT ALL ===" && ip route show table all 2>/dev/null | grep "^default" && \
echo "=== TABLE 1001 ===" && ip route show table 1001 2>/dev/null | head -3 && \
echo "=== PING eth2.4 ===" && ping -c2 -W3 -I eth2.4 77.88.8.8 2>&1 && \
echo "=== NDM ===" && ndmc -c "show interface" 2>/dev/null | grep -E "interface-name:|description:|connected:" | head -30


Скинь полный вывод — станет ясно, в чём дело.

## Быстрый workaround (если не хочешь ждать)

Если в выводе `ndmc` видно, что у Ethernet-интернета другой interface-name (например `eth2.2` или `eth3`) — можно сразу указать его явно:

cat > /opt/keenetic-entware-extras/geo-split/config/config.conf << 'EOF'
ROUTE_OUT="eth2.2"
EOF

/opt/etc/init.d/S99geo-split restart

 

Замени `eth2.2` на реальное имя ISP-интерфейса из вывода `ndmc`.

## Либо: просто подожди 2-3 минуты

Uptime 49 секунд — ISP-подключение могло ещё не полностью подняться. Попробуй повторить `tracert mail.ru` через пару минут после загрузки.
 

***

Скорее всего, неправильно авто определился интерфейс к провайдеру. eth2.4 - это один из ethernet на роутере, такое подключение - прямое, без ppp (когда вводятся логин/пароль для подключения), это маловероятно, если провайдер более-менее большой, у них у всех ppp over eth (т.е. должен определяться типа ppp0).
То, что isp ещё не поднялся - это маловероятно.
Если так - самое простое, поправить в конфиге ROUTE_OUT на правильный интерфейс (от провайдера) и рестартануть geo-split.
Если это поможет - доработаю логику авто определения выходного интерфейса.

Опубликовано

в том то и дело что автоопределил правильно...

=== PING eth2.4 ===
PING 77.88.8.8 (77.88.8.8): 56 data bytes
64 bytes from 77.88.8.8: seq=0 ttl=59 time=63.660 ms
64 bytes from 77.88.8.8: seq=1 ttl=59 time=56.693 ms
 

Опубликовано (изменено)

=== INTERFACES ===
lo               UNKNOWN        00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP>
tunl0@NONE       DOWN           0.0.0.0 <NOARP>
ip6tnl0@NONE     DOWN           :: <NOARP>
sit0@NONE        DOWN           0.0.0.0 <NOARP>
gre0@NONE        DOWN           0.0.0.0 <NOARP>
gretap0@NONE     DOWN           00:00:00:00:00:00 <BROADCAST,MULTICAST>
ethoip0@NONE     DOWN           00:00:00:00:00:00 <BROADCAST,MULTICAST>
dummy0           DOWN           72:72:ca:df:a8:73 <BROADCAST,NOARP>
ezcfg0           DOWN           <NO-CARRIER,POINTOPOINT,MULTICAST,NOARP,UP>
eth2             UP             50:ff:20:57:06:8e <BROADCAST,MULTICAST,UP,LOWER_UP>
eth3             DOWN           50:ff:20:57:06:8f <NO-CARRIER,BROADCAST,MULTICAST,UP>
xfrms1@NONE      UNKNOWN        <NOARP,UP,LOWER_UP>
xfrms2@NONE      UNKNOWN        <NOARP,UP,LOWER_UP>
ra0              DOWN           50:ff:20:57:06:8e <NO-CARRIER,BROADCAST,MULTICAST,UP>
ra1              DOWN           52:ff:20:17:06:8e <NO-CARRIER,BROADCAST,MULTICAST,UP>
ra2              DOWN           52:ff:20:27:06:8e <BROADCAST,MULTICAST>
ra3              DOWN           52:ff:20:37:06:8e <BROADCAST,MULTICAST>
ra4              DOWN           52:ff:20:47:06:8e <BROADCAST,MULTICAST>
ra5              DOWN           52:ff:20:57:06:8e <BROADCAST,MULTICAST>
ra6              DOWN           52:ff:20:67:06:8e <BROADCAST,MULTICAST>
ra7              DOWN           52:ff:20:77:06:8e <NO-CARRIER,BROADCAST,MULTICAST,UP>
ra8              DOWN           52:ff:20:87:06:8e <NO-CARRIER,BROADCAST,MULTICAST,UP>
ra9              DOWN           52:ff:20:97:06:8e <NO-CARRIER,BROADCAST,MULTICAST,UP>
ra10             DOWN           52:ff:20:a7:06:8e <BROADCAST,MULTICAST>
ra11             DOWN           52:ff:20:b7:06:8e <BROADCAST,MULTICAST>
ra12             DOWN           52:ff:20:c7:06:8e <BROADCAST,MULTICAST>
ra13             DOWN           52:ff:20:d7:06:8e <BROADCAST,MULTICAST>
ra14             DOWN           52:ff:20:e7:06:8e <BROADCAST,MULTICAST>
ra15             DOWN           52:ff:20:f7:06:8e <NO-CARRIER,BROADCAST,MULTICAST,UP>
apcli0           DOWN           56:ef:20:57:06:8e <BROADCAST,MULTICAST>
apcli1           DOWN           56:ff:20:57:06:8e <BROADCAST,MULTICAST>
dsl_br0          DOWN           06:b2:f6:e0:4e:0a <BROADCAST,MULTICAST>
eth2.1@eth2      UP             50:ff:20:57:06:8e <BROADCAST,MULTICAST,UP,LOWER_UP>
eth2.2@eth2      UP             52:ff:20:57:06:8d <BROADCAST,MULTICAST,UP,LOWER_UP>
eth2.4@eth2      UP             50:ff:20:57:06:8e <BROADCAST,MULTICAST,UP,LOWER_UP>
cdc_br0          UP             34:4b:50:00:00:00 <BROADCAST,MULTICAST,UP,LOWER_UP>
br0              UP             50:ff:20:57:06:8e <BROADCAST,MULTICAST,UP,LOWER_UP>
br1              UP             52:ff:20:57:06:8d <BROADCAST,MULTICAST,UP,LOWER_UP>
ra7.1@ra7        UP             52:ff:20:77:06:8e <BROADCAST,MULTICAST,UP,LOWER_UP>
ra15.1@ra15      UP             52:ff:20:f7:06:8e <BROADCAST,MULTICAST,UP,LOWER_UP>
nwg0             UNKNOWN        <POINTOPOINT,NOARP,UP,LOWER_UP>
ra7.2@ra7        UP             52:ff:20:77:06:8e <BROADCAST,MULTICAST,UP,LOWER_UP>
ra15.2@ra15      UP             52:ff:20:f7:06:8e <BROADCAST,MULTICAST,UP,LOWER_UP>
nwg1             UNKNOWN        <POINTOPOINT,NOARP,UP,LOWER_UP>
vpn0             UNKNOWN        <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP>
eth0             UP             34:4b:50:00:00:00 <BROADCAST,MULTICAST,UP,LOWER_UP>
=== ADDRESSES ===
lo               UNKNOWN        127.0.0.1/8 ::1/128
tunl0@NONE       DOWN
ip6tnl0@NONE     DOWN
sit0@NONE        DOWN
gre0@NONE        DOWN
gretap0@NONE     DOWN
ethoip0@NONE     DOWN
dummy0           DOWN
ezcfg0           DOWN           xxxxxxxxxxx/32 2001:2:7847:1251:feee:xxxx:xxxx:xxxx:xxxx:/128
eth2             UP             xxxxxxxxxxxxxxx/64
eth3             DOWN           xxxxxxxxxxx/24
xfrms1@NONE      UNKNOWN        xxxxxxxxxxxxxxxxxxxxxxx/64
xfrms2@NONE      UNKNOWN        xxxxxxxxxxxxxxxxxxx/64
ra0              DOWN
ra1              DOWN
ra2              DOWN
ra3              DOWN
ra4              DOWN
ra5              DOWN
ra6              DOWN
ra7              DOWN
ra8              DOWN
ra9              DOWN
ra10             DOWN
ra11             DOWN
ra12             DOWN
ra13             DOWN
ra14             DOWN
ra15             DOWN
apcli0           DOWN
apcli1           DOWN
dsl_br0          DOWN
eth2.1@eth2      UP             xxxxxxxxxxxxxxxxxxxxxxxx/64
eth2.2@eth2      UP             xxxxxxxxxxxxxxxxxxxxxxx/64
eth2.4@eth2      UP             xxxxxxxxxxxxxxxx/22 xxxxxxxxxxxxxxxxxxxx/64
cdc_br0          UP             192.168.22.127/24 xxxxxxxxxxxxxxxxxxx/64
br0              UP             192.168.0.1/24 xxxxxxxxxxxxxxxxxxxx/64
br1              UP             10.1.20.1/24 xxxxxxxxxxxxxxxxxxxxxxx/64
ra7.1@ra7        UP             xxxxxxxxxxxxxxxxxxxxx/64
ra15.1@ra15      UP             xxxxxxxxxxxxxxxxxxx/64
nwg0             UNKNOWN        172.16.82.1/24
ra7.2@ra7        UP             xxxxxxxxxxxxxxxxxxx/64
ra15.2@ra15      UP             xxxxxxxxxxxxxxxxxxx/64
nwg1             UNKNOWN        10.40.121.59/32 2010:db0:3::a28:793b/128
vpn0             UNKNOWN        192.168.0.1 peer 172.16.1.33/32
eth0             UP             xxxxxxxxxxxxxxxxxxx/64
=== DEFAULT MAIN ===
default via xxxxxxxxxxxxxxxxxxx.1 dev eth2.4  metric 1000
10.1.20.0/24 dev br1  proto kernel  scope link  src 10.1.20.1
77.88.8.8 via 176.65.44.1 dev eth2.4  metric 1000
xxxxxxxxxxxxxxxxxxx via xxxxxxxxxxxxxxxxxxx dev eth2.4  metric 1000
xxxxxxxxxxxxxxxxxxx/24 dev eth3  proto kernel  scope link  src xxxxxxxxxxxxxxxxxxx linkdown
172.16.1.33 dev vpn0  proto kernel  scope link  src 192.168.0.1
172.16.82.0/24 dev nwg0  proto kernel  scope link  src 172.16.82.1
unreachable 172.16.82.2  proto static  scope link  metric 1000
xxxxxxxxxxxxxxxxxxx/22 dev eth2.4  proto kernel  scope link  src xxxxxxxxxxxxxxxxxxx
192.168.0.0/24 dev br0  proto kernel  scope link  src 192.168.0.1
192.168.22.0/24 dev cdc_br0  proto kernel  scope link  src 192.168.22.127
=== DEFAULT ALL ===
default dev nwg1  table 4096  scope link  metric 1000
default via xxxxxxxxxxxxxxxxxxx dev eth2.4  table 4098  metric 1000
default via xxxxxxxxxxxxxxxxxxx dev eth2.4  table 16387  src xxxxxxxxxxxxxxxxxxx  metric 1000
default via xxxxxxxxxxxxxxxxxxx dev eth2.4  table 4100  metric 1000
default via 192.168.22.1 dev cdc_br0  table 16393  src 192.168.22.127  metric 1000
default dev nwg1  table 16397  scope link  src 10.40.121.59  metric 1000
default via xxxxxxxxxxxxxxxxxxx dev eth2.4  metric 1000
default dev nwg1  table 4096  metric 1000  pref medium
default dev nwg1  table 16397  metric 1000  pref medium
default dev nwg1  metric 1000  pref medium
=== TABLE 1001 ===
2.56.24.0/22 dev eth2.4  scope link
2.56.88.0/22 dev eth2.4  scope link
2.56.180.0/22 dev eth2.4  scope link
=== PING eth2.4 ===
PING 77.88.8.8 (77.88.8.8): 56 data bytes
64 bytes from 77.88.8.8: seq=0 ttl=59 time=63.660 ms
64 bytes from 77.88.8.8: seq=1 ttl=59 time=56.693 ms

--- 77.88.8.8 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 56.693/60.176/63.660 ms
=== NDM ===
   interface-name: GigabitEthernet0
      description:
        connected: yes
        interface-name: 1
        interface-name: 2
        interface-name: 3
        interface-name: 4
    interface-name: 1
    interface-name: 2
    interface-name: 3
    interface-name: 4
   interface-name: GigabitEthernet0/Vlan1
      description: Home VLAN
        connected: yes
   interface-name: GigabitEthernet0/Vlan2
      description:
        connected: yes
   interface-name: GigabitEthernet0/Vlan4
      description: К-телеком
        connected: yes
   interface-name: ISP
      description: Авантел
        connected: no
        interface-name: 0
    interface-name: 0
   interface-name: WifiMaster0
      description:
        connected: no
   interface-name: AccessPoint
      description: Wi-Fi access point
 

Изменено пользователем Kservlad
Опубликовано
16 hours ago, Kservlad said:

=== INTERFACES ===

да, похоже ошибка для случая с uplink via eth...
(во-первых, не проверялось, это только для "прямого", не PPP-like соединения... обычно это маленькие провы, большие поднимают PPP или аналог ради авторизации, маленькие ставят фильтры по MAC;
во-вторых, не очевидная вещь - пока модемные интерфейсы работают фактически как ptp и просто форвардят всё непонятное дальше, классический eth на стороне клиента (linux ярдо кинетика) без явного gw считает что "mail.ru" прямо в eth сегменте, отправляет его прову, а тот, проверив arp, логично дропает, т.к. mail.ru у него в сегменте (с пользователями) точно нет, и таким образом надо инструктировать ядро кинетика не считать таргеты локальными явно указывая gw, а ptp-like ifaces можно отправлять без gw как и прежде... есть длинный ответ от ии-шки, если кому интересно могу выложить)

Из-за этого ядро Linux считает, что адреса 2.56.24.X находятся прямо на вашем L2-сегменте, и пытается отправить ARP-запрос за IP-адрес назначения. На Ethernet-провайдерах (в отличие от LTE-модемов) это не работает — провайдер не отвечает на ARP за чужие IP.
 

## Верификация

Чтобы убедиться, что причина именно в этом, сделайте простой тест:

**Шаг 1.** На роутере по SSH:
```sh
ip route replace 77.88.8.8/32 via 176.65.44.1 dev eth2.4 table 1001
```

**Шаг 2.** На ПК (Windows) откройте `cmd` и выполните:
```
ping 77.88.8.8
```

Если пинг прошёл — причина подтверждена на 100%. Маршрутам не хватает gateway.

(77.88.8.8 уже есть в table 1001 как часть подсети, но без `via` — мы заменяем на host-route с gateway.)



 

## Временный workaround (до выхода исправления)

```sh
# Определяем gateway:
GW=$(ip route show dev eth2.4 | grep "^default" | grep -o 'via [^ ]*' | awk '{print $2}')
[ -z "$GW" ] && GW=$(ip route show default dev eth2.4 table all | grep -o 'via [^ ]*' | head -1 | awk '{print $2}')
echo "Gateway: $GW"

# Перезаливаем таблицу с gateway:
ip route flush table 1001
while read -r cidr; do
  ip route add "$cidr" via "$GW" dev eth2.4 table 1001 2>/dev/null
done < /opt/var/cache/geo-split/subnets.txt

echo "Done. Routes with gateway:"
ip route show table 1001 | head -3
```

После этого RU-сайты должны заработать. Эффект сохранится до перезагрузки или перезапуска geo-split.

(это не batch load - может долго грузить таблицу (пару-тройку минут))


 

## Статус исправления

Это баг в geo-split — маршруты должны добавляться с `via <gateway>` для Ethernet-провайдеров. Исправление уже в работе, выйдет в следующей версии.
(если подтвердится, хотя бы одним  ip route replace 77.88.8.8/32 via 176.65.44.1 dev eth2.4 table 1001 + ping OK)

Опубликовано (изменено)

Доброго времени суток! Хочу направить только RU трафик через VPN. Указал ngw0 в ROUTE_OUT, но после перезагрузки все равно в статусе отображается auto или eth3. Подскажите, возможно ли так сделать?


geo-split status:
  Mode:
    Geo zone:    RU
    Route in:    br0
    Route out:   auto (detect ISP)
    Active out:  eth3 (tables 1000,1001)

Конфигурация:

ROUTE_OUT="ngw0"

ROUTE_IN="br0"

Изменено пользователем cryoPanda
Опубликовано

Доброго времени суток! 

7 hours ago, cryoPanda said:

Подскажите, возможно ли так сделать?

Да, этот штатный (второй) режим, должно работать...

Проверьте пожалуйста:
1. **Проверьте имя интерфейса:** на Keenetic это `nwg0`, не `ngw0`
2. **Конфиг должен быть в `config.conf`**, не в `defaults.conf`:
   ```sh
   vi /opt/keenetic-entware-extras/geo-split/config/config.conf
   ```

(!) defaults.conf переписывается при апдейтах
vi - любой редактор, mcedit для любителей midc (mc)


   Содержимое:
   ```sh
   ROUTE_OUT="nwg0"
   ```

или даже без редактора

echo "ROUTE_OUT=\"nwg0\"" >>  /opt/keenetic-entware-extras/geo-split/config/config.conf


3. **Перезапустить:** `/opt/etc/init.d/S99geo-split restart`
4. **Проверить:** интерфейс `nwg0` должен быть поднят (VPN-подключение активно)
   ```sh
   ip link show nwg0
   ```

должно быть UP


Если не поможет, пожалуйста, запустите диагностический скрипт для сбора инфы на роутере и пришлите вывод:
/opt/keenetic-entware-extras/scripts/bug-report.sh
что-то можно заменить на *** по желанию

Опубликовано
7 часов назад, 0xkee сказал:

Доброго времени суток! 

Да, этот штатный (второй) режим, должно работать...

Проверьте пожалуйста:
1. **Проверьте имя интерфейса:** на Keenetic это `nwg0`, не `ngw0`
2. **Конфиг должен быть в `config.conf`**, не в `defaults.conf`:
   ```sh
   vi /opt/keenetic-entware-extras/geo-split/config/config.conf
   ```

(!) defaults.conf переписывается при апдейтах
vi - любой редактор, mcedit для любителей midc (mc)


   Содержимое:
   ```sh
   ROUTE_OUT="nwg0"
   ```

или даже без редактора

echo "ROUTE_OUT=\"nwg0\"" >>  /opt/keenetic-entware-extras/geo-split/config/config.conf


3. **Перезапустить:** `/opt/etc/init.d/S99geo-split restart`
4. **Проверить:** интерфейс `nwg0` должен быть поднят (VPN-подключение активно)
   ```sh
   ip link show nwg0
   ```

должно быть UP


Если не поможет, пожалуйста, запустите диагностический скрипт для сбора инфы на роутере и пришлите вывод:
/opt/keenetic-entware-extras/scripts/bug-report.sh
что-то можно заменить на *** по желанию

Всё получилось, работает хорошо. Спасибо за помощь! Проблемы было 2:

1) Неверное имя интерфейса - ngw0 вместо nwg0

2) Редактировал неправильный конфиг - по изначальной инструкции использовал config.sh вместо config.conf

Сейчас есть несколько вопросов:

1) Если хочется временно отключить перенаправление, то можно просто остановить сервисы в таком порядке?

```sh

/opt/etc/init.d/S39smartdns-redirect stop

/opt/etc/init.d/S38smartdns stop

/opt/etc/init.d/S99geo-split stop

```

А при необходимости включить в обратном порядке?

2) Компонент smartdns обязательно использовать или можно ограничиться встроенным в Netcraze интернет-фильтром? Или при использовании geo-split следует совсем отключать интернет-фильтр?

3) WebUI установился, но при подключении к порту 8080 и вводе учетных данных выдает ошибку, что данные неверны.

Опубликовано
4 hours ago, cryoPanda said:

Всё получилось, работает хорошо.

Первый отзыв, что работает 👍

 

4 hours ago, cryoPanda said:

1) Неверное имя интерфейса - ngw0 вместо nwg0

2) Редактировал неправильный конфиг - по изначальной инструкции использовал config.sh вместо config.conf

1. бывает... я выше не сообразил, что белая коробочка с wifi антеннами, sim слотом и навязывающеюся роутером при включении в обычный eth является обычным хостом и ей надо задавать gw... 🤦‍♂️
2. это ошибка (артефакт) в доке, поправлю 

 

4 hours ago, cryoPanda said:

1) Если хочется временно отключить перенаправление, то можно просто остановить сервисы в таком порядке?

А при необходимости включить в обратном порядке?

### 1. Порядок остановки и запуска сервисов

**Почти.** Порядок остановки верный, но порядок запуска нужно скорректировать — geo-split при старте резолвит домены через SmartDNS (вызывает `update-domains.sh` → `dig @localhost -p 6053`). Поэтому SmartDNS должен быть запущен **до** geo-split.

**Остановка** (от зависимых к базовым):

```sh
# === ОСТАНОВКА ===
/opt/etc/init.d/S99geo-split stop           # 1) снять ip rules и маршруты
/opt/etc/init.d/S39smartdns-redirect stop   # 2) снять iptables DNAT (DNS)
/opt/etc/init.d/S38smartdns stop            # 3) остановить SmartDNS
```

**Запуск** (по S-номерам — каждый сервис зависит от предыдущего):

```sh
# === ЗАПУСК ===
/opt/etc/init.d/S38smartdns start           # 1) поднять DNS-резолвер
/opt/etc/init.d/S39smartdns-redirect start  # 2) перехватить LAN DNS → SmartDNS
/opt/etc/init.d/S99geo-split start          # 3) загрузить подсети + резолв доменов через SmartDNS
```

> **Почему S99 последний при запуске:** `geo-split start` вызывает `update-domains.sh`, который резолвит домены из списка через SmartDNS (порт 6053). Если SmartDNS не запущен — домены отрезолвятся через системный ndnproxy, и CDN-адреса могут быть «не те».

**Альтернатива — быстрое отключение только маршрутизации (без DNS):**

Если нужно только отключить split-routing, но DNS оставить через SmartDNS:

```sh
/opt/etc/init.d/S99geo-split stop    # трафик пойдёт обычным путём
/opt/etc/init.d/S99geo-split start   # вернуть обратно
```

+ в webui есть переключалки
+ в webui есть кнопки refresh или /opt/etc/init.d/S99geo-split update... их можно использовать по необходимости
 

4 hours ago, cryoPanda said:

2) Компонент smartdns обязательно использовать или можно ограничиться встроенным в Netcraze интернет-фильтром? Или при использовании geo-split следует совсем отключать интернет-фильтр?

### 2. Обязателен ли SmartDNS? Совместимость с интернет-фильтром

**SmartDNS + smartdns-redirect НЕ обязательны для работы geo-split.** Они решают разные задачи:

| Компонент | Роль | Обязателен? |
|-----------|------|-------------|
| **geo-split** | Маршрутизация по IP-подсетям (через nwg0) | Основной |
| **smartdns-conf-ru-split** | Конфиг SmartDNS: резолвит RU-домены через РФ DNS | Рекомендуется |
| **smartdns-redirect** | iptables DNAT: DNS клиентов → SmartDNS (порт 6053) | Рекомендуется |

**Зачем SmartDNS нужен:**

Без него geo-split работает **только по IP-подсетям** (CIDR из geo-списков). Многие CDN-домены (vk.com, mail.ru, yandex.ru) отдают разные IP в зависимости от DNS-сервера. Если DNS-резолвер за рубежом — вернёт зарубежный CDN-адрес, и он может не попасть в RU-подсети.

SmartDNS решает эту проблему: для RU-доменов запрашивает DNS через РФ-сервер → получает корректный российский IP → geo-split маршрутизирует его правильно.

**Насчёт встроенного интернет-фильтра Keenetic:**

- Интернет-фильтр (профили защиты, AdGuard DNS, Яндекс.DNS) — это **DNS-фильтрация контента** (блокировка порно, рекламы и т.д.)
- SmartDNS — это **split-resolving** (разные DNS-серверы для разных доменов)
- Это **разные функции**, они не взаимозаменяемы

**Рекомендация:**

| Сценарий | Рекомендация |
|----------|-------------|
| Нужен только split-routing по подсетям | geo-split достаточно |
| Нужен надёжный доступ к RU-сайтам через CDN | geo-split + SmartDNS + redirect |
| Используете интернет-фильтр Keenetic для детей | Можно оставить, но `PRESERVE_FILTER_PROFILES` пока не реализован — дети получат нефильтрованный DNS через SmartDNS |

**Если нужен и фильтр, и split-routing:**

Пока `PRESERVE_FILTER_PROFILES` не реализован, есть обходной путь — в `smartdns-redirect` config указать `INTERFACES="br0"` — это перенаправит DNS **только с основного LAN**. Если детские устройства на отдельном VLAN (br1/Guest), их DNS не тронется.

+ надо уточнить, что технически это ответ верный для случая направления какой-то гео зоны в туннель
 

4 hours ago, cryoPanda said:

3) WebUI установился, но при подключении к порту 8080 и вводе учетных данных выдает ошибку, что данные неверны.

### 3. WebUI: ошибка авторизации на порту 8080

WebUI на порту 8080 — это **reverse proxy** к штатному Keenetic WebUI (порт 80). Авторизация работает через стандартный механизм Keenetic (`x-ndw2-interactive` challenge-response).

Авторизация работает напрямую на порту 8080 — при первом заходе появится стандартная форма логина Keenetic. Учётные данные — те же, что для штатного WebUI (обычно `admin` + ваш пароль).

> **Подсказка:** Если сначала зайти на штатный WebUI (`http://<ip>:80`) и залогиниться там, то на порту 8080 авторизацию спрашивать не будет — сессионная cookie (RFC 6265) шарится между портами одного IP.

**Возможные причины ошибки «неверные данные»:**

1. **Несоответствие realm** — пароль в Keenetic хешируется вместе с realm (имя устройства). Если роутер был переименован после создания пароля, может быть рассогласование. Попробуйте сбросить пароль admin через штатный UI.

2. **listen.conf не сгенерирован** — nginx не может корректно проксировать auth.

3. **Штатный httpd на порту 80 недоступен с 127.0.0.1** — наш nginx проксирует `/auth` на `127.0.0.1:80`.

**Диагностика:**

```sh
# На роутере: проверить что nginx-webui запущен
/opt/etc/init.d/S80nginx-webui status

# Проверить что штатный UI доступен локально
curl -s -o /dev/null -w '%{http_code}' http://127.0.0.1:80/

# Проверить listen.conf (должен содержать LAN IP)
cat /opt/keenetic-entware-extras/webui/config/listen.conf

# Полная диагностика
/opt/keenetic-entware-extras/webui/scripts/status.sh
```

**Если `listen.conf` пустой или содержит неверный IP:**

```sh
# Пересоздать (подставьте IP роутера в LAN)
echo 'listen 192.168.1.1:8080;' > /opt/keenetic-entware-extras/webui/config/listen.conf
/opt/etc/init.d/S80nginx-webui restart
```

Опубликовано
2 часа назад, 0xkee сказал:

Первый отзыв, что работает 👍

 

1. бывает... я выше не сообразил, что белая коробочка с wifi антеннами, sim слотом и навязывающеюся роутером при включении в обычный eth является обычным хостом и ей надо задавать gw... 🤦‍♂️
2. это ошибка (артефакт) в доке, поправлю 

 

### 1. Порядок остановки и запуска сервисов

**Почти.** Порядок остановки верный, но порядок запуска нужно скорректировать — geo-split при старте резолвит домены через SmartDNS (вызывает `update-domains.sh` → `dig @localhost -p 6053`). Поэтому SmartDNS должен быть запущен **до** geo-split.

**Остановка** (от зависимых к базовым):

```sh
# === ОСТАНОВКА ===
/opt/etc/init.d/S99geo-split stop           # 1) снять ip rules и маршруты
/opt/etc/init.d/S39smartdns-redirect stop   # 2) снять iptables DNAT (DNS)
/opt/etc/init.d/S38smartdns stop            # 3) остановить SmartDNS
```

**Запуск** (по S-номерам — каждый сервис зависит от предыдущего):

```sh
# === ЗАПУСК ===
/opt/etc/init.d/S38smartdns start           # 1) поднять DNS-резолвер
/opt/etc/init.d/S39smartdns-redirect start  # 2) перехватить LAN DNS → SmartDNS
/opt/etc/init.d/S99geo-split start          # 3) загрузить подсети + резолв доменов через SmartDNS
```

> **Почему S99 последний при запуске:** `geo-split start` вызывает `update-domains.sh`, который резолвит домены из списка через SmartDNS (порт 6053). Если SmartDNS не запущен — домены отрезолвятся через системный ndnproxy, и CDN-адреса могут быть «не те».

**Альтернатива — быстрое отключение только маршрутизации (без DNS):**

Если нужно только отключить split-routing, но DNS оставить через SmartDNS:

```sh
/opt/etc/init.d/S99geo-split stop    # трафик пойдёт обычным путём
/opt/etc/init.d/S99geo-split start   # вернуть обратно
```

+ в webui есть переключалки
+ в webui есть кнопки refresh или /opt/etc/init.d/S99geo-split update... их можно использовать по необходимости
 

### 2. Обязателен ли SmartDNS? Совместимость с интернет-фильтром

**SmartDNS + smartdns-redirect НЕ обязательны для работы geo-split.** Они решают разные задачи:

| Компонент | Роль | Обязателен? |
|-----------|------|-------------|
| **geo-split** | Маршрутизация по IP-подсетям (через nwg0) | Основной |
| **smartdns-conf-ru-split** | Конфиг SmartDNS: резолвит RU-домены через РФ DNS | Рекомендуется |
| **smartdns-redirect** | iptables DNAT: DNS клиентов → SmartDNS (порт 6053) | Рекомендуется |

**Зачем SmartDNS нужен:**

Без него geo-split работает **только по IP-подсетям** (CIDR из geo-списков). Многие CDN-домены (vk.com, mail.ru, yandex.ru) отдают разные IP в зависимости от DNS-сервера. Если DNS-резолвер за рубежом — вернёт зарубежный CDN-адрес, и он может не попасть в RU-подсети.

SmartDNS решает эту проблему: для RU-доменов запрашивает DNS через РФ-сервер → получает корректный российский IP → geo-split маршрутизирует его правильно.

**Насчёт встроенного интернет-фильтра Keenetic:**

- Интернет-фильтр (профили защиты, AdGuard DNS, Яндекс.DNS) — это **DNS-фильтрация контента** (блокировка порно, рекламы и т.д.)
- SmartDNS — это **split-resolving** (разные DNS-серверы для разных доменов)
- Это **разные функции**, они не взаимозаменяемы

**Рекомендация:**

| Сценарий | Рекомендация |
|----------|-------------|
| Нужен только split-routing по подсетям | geo-split достаточно |
| Нужен надёжный доступ к RU-сайтам через CDN | geo-split + SmartDNS + redirect |
| Используете интернет-фильтр Keenetic для детей | Можно оставить, но `PRESERVE_FILTER_PROFILES` пока не реализован — дети получат нефильтрованный DNS через SmartDNS |

**Если нужен и фильтр, и split-routing:**

Пока `PRESERVE_FILTER_PROFILES` не реализован, есть обходной путь — в `smartdns-redirect` config указать `INTERFACES="br0"` — это перенаправит DNS **только с основного LAN**. Если детские устройства на отдельном VLAN (br1/Guest), их DNS не тронется.

+ надо уточнить, что технически это ответ верный для случая направления какой-то гео зоны в туннель
 

### 3. WebUI: ошибка авторизации на порту 8080

WebUI на порту 8080 — это **reverse proxy** к штатному Keenetic WebUI (порт 80). Авторизация работает через стандартный механизм Keenetic (`x-ndw2-interactive` challenge-response).

Авторизация работает напрямую на порту 8080 — при первом заходе появится стандартная форма логина Keenetic. Учётные данные — те же, что для штатного WebUI (обычно `admin` + ваш пароль).

> **Подсказка:** Если сначала зайти на штатный WebUI (`http://<ip>:80`) и залогиниться там, то на порту 8080 авторизацию спрашивать не будет — сессионная cookie (RFC 6265) шарится между портами одного IP.

**Возможные причины ошибки «неверные данные»:**

1. **Несоответствие realm** — пароль в Keenetic хешируется вместе с realm (имя устройства). Если роутер был переименован после создания пароля, может быть рассогласование. Попробуйте сбросить пароль admin через штатный UI.

2. **listen.conf не сгенерирован** — nginx не может корректно проксировать auth.

3. **Штатный httpd на порту 80 недоступен с 127.0.0.1** — наш nginx проксирует `/auth` на `127.0.0.1:80`.

**Диагностика:**

```sh
# На роутере: проверить что nginx-webui запущен
/opt/etc/init.d/S80nginx-webui status

# Проверить что штатный UI доступен локально
curl -s -o /dev/null -w '%{http_code}' http://127.0.0.1:80/

# Проверить listen.conf (должен содержать LAN IP)
cat /opt/keenetic-entware-extras/webui/config/listen.conf

# Полная диагностика
/opt/keenetic-entware-extras/webui/scripts/status.sh
```

**Если `listen.conf` пустой или содержит неверный IP:**

```sh
# Пересоздать (подставьте IP роутера в LAN)
echo 'listen 192.168.1.1:8080;' > /opt/keenetic-entware-extras/webui/config/listen.conf
/opt/etc/init.d/S80nginx-webui restart
```

Спасибо за ответ, теперь стало понятнее! Теперь, по поводу webui. Вывод status.sh:

nginx-webui status:
  Service:
    Process:     running (pid 1270 via pidfile, RSS 3472kB) ✓
    Config:      /opt/keenetic-entware-extras/webui/scripts/../config/nginx.conf ✓
    Listen conf: /opt/keenetic-entware-extras/webui/scripts/../config/listen.conf ✓
    Lua module:  /opt/lib/nginx/modules/ngx_http_lua_module.so ✓
    Ports:       127.0.0.1:8080 ✓
                 192.168.10.1:8080 ✓

  HTTP:
    Static:      GET / → 200 ✓
    API:         GET /api/system/info → 200 ✓

  Logrotate:
    Binary:      /opt/sbin/logrotate ✓
    Config:      /opt/etc/logrotate.d/nginx-webui ✓
    Cron daily:  /opt/etc/cron.daily/logrotate ✓

  System:
    Uptime:      7m 55s ✓
    Version:     0.9.0

 

В listen.conf адрес корректный:

listen 192.168.10.1:8080;

 

А вот при проверке доступа через curl выдает 403:

curl -s -o /dev/null -w '%{http_code}' http://127.0.0.1:80/

403

Опубликовано
5 часов назад, 0xkee сказал:

=== ОСТАНОВКА ===
/opt/etc/init.d/S99geo-split stop           # 1) снять ip rules и маршруты
/opt/etc/init.d/S39smartdns-redirect stop   # 2) снять iptables DNAT (DNS)
/opt/etc/init.d/S38smartdns stop            # 3) остановить SmartDNS
```

Ещё обнаружил по логам, что похоже cron мешает и снова запускает указанные сервисы. Там тоже что-то нужно модифицировать?

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...

Важная информация

На этом сайте используются файлы cookie. Нажимая "Я принимаю" или продолжая просмотр сайта, вы разрешаете их использование: Политика конфиденциальности.