Jump to content

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


Recommended Posts

  • Replies 84
  • Created
  • Last Reply

Top Posters In This Topic

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

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

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

Link to comment
Share on other sites

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

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

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

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

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

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

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

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

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

Edited by keenet07
Link to comment
Share on other sites

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

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

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

Edited by avn
Link to comment
Share on other sites

В первой прикидке все зависимости менее одного мегабайта, а значит, решение с помощью 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 сказал:

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

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

  • Thanks 1
  • Upvote 1
Link to comment
Share on other sites

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

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

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

Link to comment
Share on other sites

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

 

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

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

Link to comment
Share on other sites

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

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

Link to comment
Share on other sites

В 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-флешку, ни флешку роутера протирать не будут.

  • Thanks 2
  • Upvote 1
Link to comment
Share on other sites

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

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

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

Link to comment
Share on other sites

В 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, то зациклится запрос?

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

Edited by keenet07
Link to comment
Share on other sites

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.

  • Thanks 2
Link to comment
Share on other sites

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

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

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

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

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

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

Edited by keenet07
Link to comment
Share on other sites

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

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

 

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

Link to comment
Share on other sites

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

  • Upvote 1
Link to comment
Share on other sites

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" и у меня и у вас встречается только один раз и, следственно, однозначно определяет статус интерфейса. Обновлю линк на пакет в первом посте.

  • Thanks 2
Link to comment
Share on other sites

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

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

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

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

Edited by keenet07
Link to comment
Share on other sites

  • 3 weeks later...

О! Это зачет.

Вопросы.

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

Link to comment
Share on other sites

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

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

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

Edited by keenet07
Link to comment
Share on other sites

  • 4 weeks later...

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

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

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

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

 

Link to comment
Share on other sites

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

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

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

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

Edited by keenet07
Link to comment
Share on other sites

  • 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, а автоматический выключите.

 

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

Edited by Андрей Волосков
  • Upvote 1
Link to comment
Share on other sites

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?

Link to comment
Share on other sites

  • 4 weeks later...

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

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

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

chrome_2TU0i1aNY3.png

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

 

Edited by Сергей Грищенко
  • Thanks 1
Link to comment
Share on other sites

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

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

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

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

  • Thanks 1
Link to comment
Share on other sites

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

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

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

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

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

Edited by keenet07
Link to comment
Share on other sites

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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...