Маршрутизация по IP

Маршрутизация по IP

Уровень: Расширенный Keenetic OS: 4.x и 5.x Где в UI: Маршрутизация → IP-адреса
Маршрутизация по IP-адресам и подсетям — без участия DNS. В отличие от NDMS-правил, работает на любой версии Keenetic OS (и 4.x, и 5.x) и не требует, чтобы клиенты использовали роутер как DNS-сервер.

Подходит когда:

  • Целевой сервис известен по IP или диапазону CIDR
  • Нужно обойти ограничения NDMS (клиент с собственным DNS, OS 4.x)
  • Источник списка — Windows-скрипт с route add (часто раздаётся для VPN-обходов)

Открыть раздел

Страница Маршрутизация → вкладка IP-адреса.

Вкладка IP-адреса

Правило

Одно правило — это:

  • Название — для вашего удобства

  • Туннель — один целевой туннель из списка:

    • Пользовательские — туннели, созданные в awg-manager
    • Системные — туннели, поднятые напрямую в Keenetic OS
    • WAN — WAN-интерфейсы роутера (можно маршрутизировать в обход VPN, если нужно)

    В выпадающем списке Туннель доступны все известные роутеру интерфейсы — обычные AWG-туннели, системные NativeWG-туннели, WAN-интерфейсы и Proxy-интерфейсы sing-box-туннелей и подписок.

  • При недоступности интерфейса (fallback-поведение):

    • Bypass — трафик пойдёт обычным маршрутом (по умолчанию)
    • Kill Switch — трафик будет заблокирован (защита от утечки, если туннель упал)
  • Подсети — список CIDR, по одной на строку

Kill Switch недоступен для туннелей, работающих в режиме Kernel на Keenetic OS 4.x — сам режим удаляет маршруты при падении, поэтому reject не сработает.

Создание IP-маршрута

Формат подсетей

Поле принимает по одному CIDR в строку. Опционально — комментарий после !:

10.0.0.0/8
192.168.1.0/24 !домашняя сеть
172.16.0.0/12 !офис
2001:db8::/32 !IPv6 тестовая

Счётчик справа от поля показывает сколько валидных подсетей awg-manager распознал.

Импорт из Windows .bat

Многие провайдеры VPN раздают для настройки на Windows .bat-файлы с командами route add. awg-manager умеет их парсить — кнопка Из .bat файла загружает файл и добавляет подсети в правило.

Поддерживается формат:

route add 185.76.151.0 mask 255.255.255.0 0.0.0.0 !комментарий
route add 91.108.4.0 mask 255.255.252.0 0.0.0.0

awg-manager преобразует маску → CIDR (255.255.255.0/24) и переносит комментарии (после !). Также распознаёт простой список CIDR, если в файле он уже в таком виде.

“Orphan”-правила

Если удалить туннель, правила, ссылавшиеся на него, не пропадают — они остаются в списке как orphan (туннель не задан). Это сохраняет трудоёмкий список CIDR-ов, чтобы после пересоздания туннеля можно было просто переназначить его в правиле, а не собирать список заново.

В интерфейсе orphan-правила помечены отдельно и не применяются до назначения туннеля.

Массовые операции

Как в NDMS-вкладке — режим выделения с чек-боксами, потом Сменить туннель или Удалить для набора правил.

Импорт и экспорт

  • Экспорт — выгрузить все правила как JSON
  • Импорт — загрузить JSON

Полезно для миграции между роутерами или бэкапа.

Трафик самого роутера через туннель

Правила этого раздела и политики доступа работают для устройств локальной сети. Трафик, который порождает сам роутер (обновления, opkg, скачивание rule-set’ов), ими не управляется: у него нет клиента-источника, и NDMS отправляет его в основной канал.

Самый частый случай — недоступный у провайдера GitHub, из-за чего не работают установщики и скачивание наборов правил. Быстрое решение — прибить адреса вручную в CLI роутера:

ip host raw.githubusercontent.com 185.199.109.133
ip host release-assets.githubusercontent.com 185.199.109.133
system configuration save

Более аккуратный вариант — завернуть трафик роутера к конкретным адресам в туннель через ip rule. Скрипт кладётся в хук netfilter.d, чтобы правила восстанавливались после каждой пересборки netfilter:

# /opt/etc/ndm/netfilter.d/10-github-route-router-only.sh
#!/bin/sh
# Хук вызывается со "start", ручной запуск — с "init"
case "$1" in
    start|init) ;;
    *) exit 0 ;;
esac

# Хук дёргается отдельно для iptables и ip6tables — второй вызов пропускаем
[ "$type" = "ip6tables" ] && exit 0

# Системное имя интерфейса, куда перенаправляем запросы
INTERFACE="nwg3"

IPS="
185.199.108.133
185.199.109.133
185.199.110.133
185.199.111.133
"

# Снимаем старые правила до проверки интерфейса — чтобы они убирались
# и в случае, когда интерфейс пропал
for ip in $IPS; do
    while ip rule del to $ip 2>/dev/null; do :; done
done

# Номер таблицы маршрутизации нужного интерфейса
TABLE_NUM=$(ip route show table all | grep "dev $INTERFACE " | grep -oE 'table [0-9]+' | head -n 1 | awk '{print $2}')

if [ -z "$TABLE_NUM" ]; then
    logger -t "GitHub route-script" "Ошибка: таблица для $INTERFACE не найдена. Возможно, интерфейс отключен."
    exit 0
fi

# iif lo — трафик самого роутера; клиентов правило не касается
for ip in $IPS; do
    ip rule add iif lo to $ip table $TABLE_NUM
done

logger -t "GitHub route-script" "Маршрутизация GitHub через $INTERFACE настроена (Table: $TABLE_NUM)."

Не забудьте chmod +x и подставить в INTERFACE системное имя своего туннеля (видно на карточке туннеля). Проверить вручную: /opt/etc/ndm/netfilter.d/10-github-route-router-only.sh init.

Тем же приёмом в туннель заворачивается любой трафик роутера — достаточно поменять список адресов.

Для наборов правил sing-box обходной путь обычно не нужен: с 2.16.0 встроенный каталог раздаётся через зеркало repo.hoaxisr.ru/rulesets, а для наборов, добавленных по своему URL, есть параметр download detour — скачивать через туннель.

Когда использовать IP-маршруты vs DNS-маршруты

СценарийЛучше
Сервис идентифицируется CIDR-блоком (Telegram, Discord)IP-маршрут — проще и не зависит от DNS клиента
Сервис CDN с меняющимися IPDNS-маршрут — следит за изменениями IP в DNS
Клиент использует DoH/DoTIP-маршрут — DNS правила не сработают, запрос обходит NDMS
OS 4.x на роутереIP-маршрут — NDMS-вкладка недоступна

Что дальше?