Перейти к содержимому

ipset-dns для выборочного роутинга


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

  • Ответы 244
  • Created
  • Последний ответ

Top Posters In This Topic

13 минуты назад, Александр Рыжов сказал:

Число записей ограничено 64. 

А для моделей  viva( или giga )  и выше можно в дальнейшем увеличить число записей? 
Речь только про продвинутые модели.

Ссылка на комментарий
Поделиться на других сайтах

4 часа назад, Александр Рыжов сказал:

Решение основано на немного допиленной мелкой утилите ipset-dns. Прошивка будет обращаться к ней для разрешения определённого доменного имени из пользовательского перечня, а та, в свою очередь, будет складывать результаты работы в отдельный набор ip-адресов. Далее этот набор используется для выборочного роутинга в VPN-соединение ровно так же, как в аналогичных решениях по соседству. Тем самым сохраняются все возможности прошивочного сервиса.

Тут немножко проясните механизм. В реальном времени происходит обращение к этой утилите по домену прописанному через форму добавления DNS серверов в Интернет фильтрах. Утилита резолвит домен и хранит в оперативной памяти список полученных IP адресов и создает пользовательские маршруты к ним через настроенный в конфиге VPN. Каждое новое обращение к этому домену может добавлять в этот список новые IP адреса, если у домена их множество.

1) Я правильно понимаю, что этот список адресов  и маршруты не сохраняется на флэш память устройства не расходуя её ресурс, а при перезагрузке теряются и пополняются заново по мере обращения?

2) Что происходит если VPN не подключен? Маршрут по умолчанию?

3) Адреса субдоменов автоматом также добавляются при обращении к ним. Это уже прошивка сама перенаправляет DNS запросы к субдоменам на резолвер утилиты? Какова глубина субдоменов?

4) Очистка списка IP адресов от устаревших происходит только путем перезагрузки устройства?

5) Будет ли видно эти маршруты в веб-интерфейсе роутера?

6) будет ли это работать, если в качестве DNS на роутере прописаны DOT или DOH? Обычные запросы ведь при этом отсекаются или перенаправляются. Сработает ли направление по домену на DNS утилиты? Это проверил, работает по домену.

Изменено пользователем keenet07
Ссылка на комментарий
Поделиться на других сайтах

Я бы еще все маршруты в таблицу прокопировал

	ip -4 route show table main |grep -Ev ^default |while read ROUTE; do ip -4 route add table 1001 $ROUTE 2>/dev/null; done

Идея интересна и понятна. Спасибо.

Изменено пользователем avn
Ссылка на комментарий
Поделиться на других сайтах

В первой прикидке все зависимости менее одного мегабайта, а значит, решение с помощью SDK можно поднять хоть на Keenetic Start. Необходимые для конфигурирования имена VPN-интерфейса и его подсеть можно выуживать, к примеру, по названию соединения.

 

21 час назад, krass сказал:

А для моделей  viva( или giga )  и выше можно в дальнейшем увеличить число записей? 

Если надо больше, то вряд ли стоит это помещать в прошивочный конфиг или WebUI. Я бы использовал другое решение.

@keenet07, всё так. По вопросам:

  1. Да, всё в памяти. Решение, по сути, три статичных файла обвязки вокруг iptables и ipset.
  2. Ничего. Таблица наполняется адресами, но роутинг ничем не отличается от роутинга по умолчанию.
  3. Прошивка. Глубина бесконечна.
  4. Да. Понимаю, что при высоких аптаймах сет может накапливать лишнее, но при точечном обходе я бы не стал заморачиваться. Если хочется такое реализовать, то создавайте ipset сразу указывая время жизни элементов и ограничивайте TTL записей DNS-кэша в прошивочном сервисе с помощью dns-proxy max-ttl …
  5. Нет. Прошивка не отображает роутинг по таблицам/сетам.
17 часов назад, avn сказал:

Я бы еще все маршруты в таблицу прокопировал

Т.е. маршруты по умолчанию так же окажутся в таблице для отдельного роутинга. Зачем?

Ссылка на комментарий
Поделиться на других сайтах

1 минуту назад, Александр Рыжов сказал:

Если надо больше, то вряд ли стоит это помещать в прошивочный конфиг или WebUI. Я бы использовал другое решение.

Подскажите, пожалуйста, какое другое решение? 

Ссылка на комментарий
Поделиться на других сайтах

2 часа назад, Александр Рыжов сказал:

 

Т.е. маршруты по умолчанию так же окажутся в таблице для отдельного роутинга. Зачем?

Ни в коем случае.

Ссылка на комментарий
Поделиться на других сайтах

@Александр Рыжов Подскажите пожалуйста. Это решение может быть развернуто полностью без подключения внешних носителей для OPKG?

Знаю, что можно в память роутера разместить. Есть только один вопрос, при таком варианте работы OPKG и скрипта происходит ли какая-либо дополнительная запись/перезапись в память роутера? Не хочется растрачивать ресурс памяти.

Ссылка на комментарий
Поделиться на других сайтах

В 27.04.2023 в 17:11, krass сказал:

Подскажите, пожалуйста, какое другое решение? 

Что-нибудь основанное на dnsmasq или adguardhome, они так же умеют наполнять ipset по результатам разрешения DNS-имён. Лично я до последнего использовал это

В 26.04.2023 в 21:26, keenet07 сказал:

Утилита резолвит домен и хранит в оперативной памяти список полученных IP адресов и создает пользовательские маршруты к ним через настроенный в конфиге VPN. Каждое новое обращение к этому домену может добавлять в этот список новые IP адреса, если у домена их множество.

Ещё отмечу, если DNS-сервер в ответ присылает сразу несколько A/AAAA-записей, то они заносятся в ipset сразу все.

6 часов назад, keenet07 сказал:

Это решение может быть развернуто полностью без подключения внешних носителей для OPKG?

С лёгкой доработкой это решение может быть развёрнуто на любом кинетике, где USB-накопители вообще не предусмотрены. Дело в том, что нужные хук скрипты работают и там, хоть это нигде не документировано. Именно поэтому в роутерах без USB доступен в компонентах OPKG.

Другими словами, если вы соберёте прошивку со своими дополнительными компонентами (busybox, iptables, ipset), то оно будет прекрасно себя чувствовать, к примеру, на Keenetic Start.

6 часов назад, keenet07 сказал:

Знаю, что можно в память роутера разместить. Есть только один вопрос, при таком варианте работы OPKG и скрипта происходит ли какая-либо дополнительная запись/перезапись в память роутера? Не хочется растрачивать ресурс памяти.

Никаких логов или динамических конфигов у приведённого решения нет, все файлы статичные. Ни USB-флешку, ни флешку роутера протирать не будут.

Ссылка на комментарий
Поделиться на других сайтах

2 часа назад, Александр Рыжов сказал:

Что-нибудь основанное на dnsmasq или adguardhome, они так же умеют наполнять ipset по результатам разрешения DNS-имён. Лично я до последнего использовал это

Подскажите,пожалуйста, предложенные вами варианты и что вы использовали лично -- без ограничений?
Или там можно больше, но тоже есть ограничение?

Ссылка на комментарий
Поделиться на других сайтах

В 27.04.2023 в 21:08, Александр Рыжов сказал:

Нет. Прошивка не отображает роутинг по таблицам/сетам.

1. Если не затруднит подскажите какой командой в entware можно увидеть весь список ip адресов направленных через VPN этой утилитой.

ps: тут вроде разобрался. ip route show dev ovpn_br1 но не уверен лучший ли это способ. Вот если бы ещё в этих строках с маршрутами и домен отображался бы....

pss: как оказалось это маршруты прошивки, а не утилиты.

2. Я так понял утилита резолвит адреса через обычный DNS 8.8.8.8. Никак нельзя эти запросы так же через системный безопасный DoH или DoT проводить? Если в конфиге вместо 8.8.8.8 указать 192.168.1.1, то зациклится запрос?

В целом всё установил, настроил, работает.

Изменено пользователем keenet07
Ссылка на комментарий
Поделиться на других сайтах

On 5/3/2023 at 8:10 PM, krass said:

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

Никаких. Лишь бы список выбранных доменов влез на флешку. Хотя такой способ уже трудно будет назвать точечным:)

On 5/3/2023 at 10:41 PM, keenet07 said:

1. Если не затруднит подскажите какой командой в entware можно увидеть весь список ip адресов направленных через VPN этой утилитой.

Посмотрите раздел «Диагностика проблем».

netfilter c доменами не работает, после того как ipset-dns разрешила очередное доменное имя в IP-адрес(а), способа сопоставить назад эти адреса с исходным доменом нет. Reverse DNS resolving будет не всегда показательным и я бы на него не стал ориентироваться вовсе.

On 5/3/2023 at 10:41 PM, keenet07 said:

2. Я так понял утилита резолвит адреса через обычный DNS 8.8.8.8. … Если в конфиге вместо 8.8.8.8 указать 192.168.1.1, то зациклится запрос?

Вы вольны выбрать любой DNS-сервер для работы утилиты ipset-dns в конфиге /opt/etc/bypass.conf

Он первым делом добавится в ipset, следственно, обращения к нему будут идти тем же путём, что и к выбранным для выборочного роутинга ресурсам.

On 5/3/2023 at 10:41 PM, keenet07 said:

Никак нельзя эти запросы так же через системный безопасный DoH или DoT проводить?

В принципе, можно, только в общем случае не нужно (см. выше).  В соседних темах можно найти инфу на каких портах работают прошивочные DoH/DoT.

Ссылка на комментарий
Поделиться на других сайтах

8 минут назад, Александр Рыжов сказал:

netfilter c доменами не работает, после того как ipset-dns разрешила очередное доменное имя в IP-адрес(а), способа сопоставить назад эти адреса с исходным доменом нет. Reverse DNS resolving будет не всегда показательным и я бы на него не стал ориентироваться вовсе.

Конечно. Я имел в виду было бы здорово, так изменить стандартные средства, чтоб на этапе добавления маршрута туда передавался бы и сам домен (чисто для информации), ну и соответственно так же в таблице хранился бы и выводился стандартными средствами. Сам я такую модификацию не потяну, а просить кого-то без личной заинтересованности и смысла наверное нет.

8 минут назад, Александр Рыжов сказал:

Он первым делом добавится в ipset, следственно, обращения к нему будут идти тем же путём, что и к выбранным для обхода блокировок ресурсам.

Понял, ну отлично.

Изменено пользователем keenet07
Ссылка на комментарий
Поделиться на других сайтах

Приветствую всех, вопрос про 010-bypass-table.sh из пакета, вероятно немоного недогоняю, в упор не могу отловить link-yes-up-up

У меня вот так , link-no-up-up > connected-yes-up-up

 

На всякий - прошивка 4.0 А20

Ссылка на комментарий
Поделиться на других сайтах

5 часов назад, keenet07 сказал:

Я имел в виду было бы здорово, так изменить стандартные средства, чтоб на этапе добавления маршрута туда передавался бы и сам домен (чисто для информации), ну и соответственно так же в таблице хранился бы и выводился стандартными средствами.

По идее можно, у записей в ipset'е предусмотрено поле для комментов.

1 час назад, snark сказал:

Приветствую всех, вопрос про 010-bypass-table.sh из пакета, вероятно немоного недогоняю, в упор не могу отловить link-yes-up-up

У меня вот так , link-no-up-up > connected-yes-up-up

Проверял на 3.9.х. Перед отловом нужных событий сперва собираю все возможные варианты, положив в нужную папку /opt/etc/ndm/<name it>.d такое:

#!/bin/sh

LOG='/opt/tmp/hook.log'

echo -e "\n\n--- $(date '+%T') $0 fired ---" >> $LOG
echo $@ >> $LOG
set | grep -vE "^'\$|^HOME|^HOSTNAME|^IFS|^LANG|^LD_|^LINENO|^LOG|^NDM_MOUNT|^OPTIND|^PATH|^PPID|^PS|^PWD|^SHELL|^SHLVL|^TERM|^timezone|^USER|^FUNCNAME"  >> $LOG

exit 0

Во вложении выхлоп скрипта при выключении и повторном включении VPN-соединения.

 

hook.log

Ссылка на комментарий
Поделиться на других сайтах

3 часа назад, snark сказал:

У меня вот так , link-no-up-up > connected-yes-up-up

Похоже из [ "${change}-${connected}-${link}-${up}" == "link-yes-up-up" ] можно выкинуть $change. Поскольку "${connected}-${link}-${up}" == "yes-up-up" и у меня и у вас встречается только один раз и, следственно, однозначно определяет статус интерфейса. Обновлю линк на пакет в первом посте.

Ссылка на комментарий
Поделиться на других сайтах

@Александр Рыжов У меня публичный OpenVPN. Раньше внутренний адрес мне выдавал по-моему всегда один и тот же в сети 10.*.*.*/32. Его и прописал в конфиг вашей утилиты в соответствии с инструкцией. А сейчас заметил что адрес, его последние цифры стал меняться. Не знаю совпадение или нет. Подключаясь с другим адресом утилита всё-равно работает, направляет то что нужно на VPN. Настройки не менял. Получается это не такой важный параметр?

Не удерживают/занимают ли какие-то элементы утилиты или entware изначальный адрес VPN не давая потом снова подключиться с ним же? 

А несколько раз при переподключении VPN вообще оказывался в ситуации, что трафик через него не шёл. Причем не только через утилиту, но и через настройки прошивки Маршрутизация. 

Поправленный вами недавно файлик мониторинга статуса VPN закинул в ентварь вручную.

Изменено пользователем keenet07
Ссылка на комментарий
Поделиться на других сайтах

При запуске утилиты ipset-dns выдаёт:

ipset v7.17: Set cannot be created: set with the same name already exists
ipset v7.17: Element cannot be added to the set: it's already added

 

 

Ссылка на комментарий
Поделиться на других сайтах

  • 3 weeks later...

О! Это зачет.

Вопросы.

1. При включенном DoH в мозиле или на устройстве, работать не будет правильно?
2. IPv6 работать будет? а то с нативным ipv6 с интелом проблемка, что не задавай в маршрутах, ipv6 идет родной.
VPN тоже в ipv6 умеет, но обычно его никто не учитывает , как будто его вообще не существует.
 

Ссылка на комментарий
Поделиться на других сайтах

26 минут назад, hard_alex@mail.ru сказал:

1. При включенном DoH в мозиле или на устройстве, работать не будет правильно?

Не будет. Работает только через прямой DNS запрос к роутеру. Вернее работать то оно в мозиле с DoH сможет, но только при условии что ранее были обращения к этим ресурсам из других браузеров напрямую.

Изменено пользователем keenet07
Ссылка на комментарий
Поделиться на других сайтах

  • 4 weeks later...

Долго уже пользуюсь. Но донимает одна вещь. 

Каждый новый день, когда подключаю VPN (OpenVPN), роутинг на прописанные маршруты сразу же не идёт. Если снова переподключить VPN то чаще всего сразу всё начинает бегать как нужно. Но иногда и с 3-го раза начинает. Что-то там с механизмом обнаружения соединения не совсем в порядке. 

Добавлю, что IP шлюза VPN меняется, но он всё-равно уже не такой, как изначально прописанный в конфиге, и каждый раз я его не правлю, но это не мешает утилите работать через VPN даже если шлюз изменился. 

Можно что-то придумать с переподключением?

 

Ссылка на комментарий
Поделиться на других сайтах

В 04.05.2023 в 18:09, snark сказал:

На 4.0А20 link-yes-up-up не появляется

Видимо в 4.0 что то изменилось

Точно. Но менять упрощённый вариант не придётся:)

 

Ссылка на комментарий
Поделиться на других сайтах

В 26.04.2023 в 23:44, Александр Рыжов сказал:

После чего решение готово к использованию. Запустите утилиту ipset-dns или просто перегрузите роутер:

opt/etc/init.d/S52ipset-dns start

Почему в этом месте пишет что такого файла не существует? Хотя, по факту, он там лежит. Приходится перезагружаться всё же.

Изменено пользователем keenet07
Ссылка на комментарий
Поделиться на других сайтах

  • 2 months later...

Вообщем немного добавлю, вдруг кому пригодится, себе еще прикрутил dnscrypt-proxy2, делается достаточно просто: 

1. Установка opkg install dnscrypt-proxy2

2. Редактирование файла /opt/etc/dnscrypt-proxy.toml изменить строку listen_addresses = ['127.0.0.1:55']  (Порт можно любой, главное такой же в bypass.conf прописать)

3. Редактирование файла /opt/etc/bypass.conf , первая строка меняется на адрес и порт выше : DNS=127.0.0.1:55

4. /opt/etc/init.d/S52ipset-dns restart

5. /opt/etc/init.d/S09dnscrypt-proxy2 restart

Вы у цели, если есть желание, что бы все днс шифровались, в веб морде кинетика добавьте в Сетевые правила-интернет фильтры DNS сервер для вашего провайдера 192.168.3.1:55, а автоматический выключите.

 

Раньше пользовался Квасом, да, идея хорошая, но как то при добавлении сайта все зависало, инет отваливался, потом долго подключался, надоело, решил это попробовать... да и всё таки с системным ДНС как то проще. 

Изменено пользователем Андрей Волосков
Ссылка на комментарий
Поделиться на других сайтах

5 часов назад, Андрей Волосков сказал:

Вообщем немного добавлю, вдруг кому пригодится, себе еще прикрутил dnscrypt-proxy2, делается достаточно просто: 

1. Установка opkg install dnscrypt-proxy2

2. Редактирование файла /opt/etc/dnscrypt-proxy.toml изменить строку listen_addresses = ['127.0.0.1:55']  (Порт можно любой, главное такой же в bypass.conf прописать)

3. Редактирование файла /opt/etc/bypass.conf , первая строка меняется на адрес и порт выше : DNS=127.0.0.1:55

4. /opt/etc/init.d/S52ipset-dns restart

5. /opt/etc/init.d/S09dnscrypt-proxy2 restart

Вы у цели, если есть желание, что бы все днс шифровались, в веб морде кинетика добавьте в Сетевые правила-интернет фильтры DNS сервер для вашего провайдера 192.168.3.1:55, а автоматический выключите.

 

Раньше пользовался Квасом, да, идея хорошая, но как то при добавлении сайта все зависало, инет отваливался, потом долго подключался, надоело, решил это попробовать... да и всё таки с системным ДНС как то проще. 

А в чем смысл сего действия, если всё равно днс, указанный в bypass.conf будет по умолчанию завернут в vpn?

Ссылка на комментарий
Поделиться на других сайтах

  • 4 weeks later...

Спасибо за решение! Установил, работает. 

Можете подсказать, почему может не работать на iphone? На андроиде и ПК всё ок. Я пока добавил два сайта для теста, 2ip.ru и www.dw.ru, и www.dw.ru не хочет работать на iphone.

Скрытый текст

chrome_2TU0i1aNY3.png

photo_2023-11-29_08-44-21.jpg

 

Изменено пользователем Сергей Грищенко
Ссылка на комментарий
Поделиться на других сайтах

35 минут назад, Сергей Грищенко сказал:

Можете подсказать, почему может не работать на iphone? На андроиде и ПК всё ок.

Проверил на iOS 17.11, точно не работает.

Вероятно, iPhone использует стороонние DNS.

Ссылка на комментарий
Поделиться на других сайтах

10 часов назад, Сергей Грищенко сказал:

Можете подсказать, почему может не работать на iphone? На андроиде и ПК всё ок. Я пока добавил два сайта для теста, 2ip.ru и www.dw.ru, и www.dw.ru не хочет работать на iphone.

Попробуйте в Интернет-фильтрах - Настройка DNS - для системного профиля (или какой там у вас настроен) запретить транзит запросов (снять галочку).

Тогда iOS вынуждена будет использовать DNS роутера. 

И кэш браузера почистить и перезапустить приложение, если сразу не заработает.

Изменено пользователем keenet07
Ссылка на комментарий
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Гость
Ответить в тему...

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

  Разрешено не более 75 смайлов.

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

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

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

  • Сейчас на странице   1 пользователь

×
×
  • Создать...