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

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

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

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

Проект состоит из нескольких пакетов opkg.
Пакеты представляют из себя набор shell (sh) скриптов, которые предназначены для автоматизации того, что можно сделать и руками (но потребует ручного управления при каждом изменении конфигурации сетевых подключений).
Дополнительная информация в README.md пакетов.
Пока пакеты будут выкладоваться здесь, в дальнейшем будут доступны на гитхабе.
feedback и (конструктивная) критика приветствуются
disclaimer: да, это в некотором роде нейрослоп

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

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`

 

---

 

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

 

- 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.3.1_all.ipk

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

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

```

 

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

 

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

 

```sh

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

```

 

Минимально — установить `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.sh`

 

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

 

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

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

| `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.4.0 | Базовые библиотеки | ⬇️ [TODO] |

| `geo-split-data` | 0.3.0 | GeoIP-данные и списки доменов | ⬇️ [TODO] |

| `geo-split` | 0.8.0 | Основной пакет | ⬇️ [TODO] |

 

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

 

---

 

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

 

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

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

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

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

 

---

 

## Лицензия

 

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

 

---

 

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

 

Приветствуются:

- 🐛 Баг-репорты (приложите вывод `status`)

- 💡 Предложения по фичам

- Вопросы по настройке

 

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


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

geo-split_0.8.0_all.ipk keenetic-entware-extras_0.4.0_all.ipk

geo-split-data_0.3.1_all.ipk

Изменено пользователем 0xkee

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

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

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

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

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

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

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

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

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

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

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

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