Popular Post Александр Рыжов Posted April 26, 2023 Popular Post Share Posted April 26, 2023 Ещё один легковесный способ выборочного роутинга с однократной настройкой в консоли. Основан на том, что актуальная прошивка может использовать разные DNS-серверы для указанных пользователем доменов. Желаемые домены можно будет менять прямо в веб-интерфейсе. Решение основано на немного допиленной мелкой утилите ipset-dns. Прошивка будет обращаться к ней для разрешения определённого доменного имени из пользовательского перечня, а та, в свою очередь, будет складывать результаты работы в отдельный набор ip-адресов. Далее этот набор используется для выборочного роутинга в VPN-соединение ровно так же, как в аналогичных решениях по соседству. Тем самым сохраняются все возможности прошивочного сервиса. Перед установкой настройте в веб-интерфейсе любое VPN-соединение. Установка возможна с помощью пакета, подходящего под любую архитектуру кинетика: opkg install http://bin.entware.net/mipselsf-k3.4/test/ipset-dns-keenetic_0.2-1_all.ipk Для настройки вам понадобится имя и подсеть VPN-интерфейса. Их можно увидеть в выводе команды ip addr. В примере это nwg3 и 10.7.0.0/24: … 37: nwg3: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1324 qdisc noqueue qlen 50 link/[65534] inet 10.7.0.8/24 scope global nwg3 Внесите эти два параметра любым удобным способом в /opt/etc/bypass.conf по имеющемуся примеру в переменные VPN_NAME и VPN_SUBNET: vi /opt/etc/bypass.conf После чего решение готово к использованию. Запустите утилиту ipset-dns или просто перегрузите роутер: /opt/etc/init.d/S52ipset-dns start Список ресурсов для открытия через VPN-соединение удобно вести на странице Сетевые правила → Интернет фильтры → Настройка DNS. Пример добавления домена intel.com вместе с субдоменами: где 192.168.1.1 — IP-адрес роутера. Если вам привычней CLI-интерфейс, то аналог записи выше: ip name-server 192.168.1.1:5353 intel.com Число записей ограничено 64. Изменение списка доменов применяется налету. Для того, чтобы новые настройки вступили в силу ничего делать не надо. 17 5 Quote Link to comment Share on other sites More sharing options...
krass Posted April 26, 2023 Share Posted April 26, 2023 13 минуты назад, Александр Рыжов сказал: Число записей ограничено 64. А для моделей viva( или giga ) и выше можно в дальнейшем увеличить число записей? Речь только про продвинутые модели. Quote Link to comment Share on other sites More sharing options...
keenet07 Posted April 26, 2023 Share Posted April 26, 2023 (edited) 4 часа назад, Александр Рыжов сказал: Решение основано на немного допиленной мелкой утилите ipset-dns. Прошивка будет обращаться к ней для разрешения определённого доменного имени из пользовательского перечня, а та, в свою очередь, будет складывать результаты работы в отдельный набор ip-адресов. Далее этот набор используется для выборочного роутинга в VPN-соединение ровно так же, как в аналогичных решениях по соседству. Тем самым сохраняются все возможности прошивочного сервиса. Тут немножко проясните механизм. В реальном времени происходит обращение к этой утилите по домену прописанному через форму добавления DNS серверов в Интернет фильтрах. Утилита резолвит домен и хранит в оперативной памяти список полученных IP адресов и создает пользовательские маршруты к ним через настроенный в конфиге VPN. Каждое новое обращение к этому домену может добавлять в этот список новые IP адреса, если у домена их множество. 1) Я правильно понимаю, что этот список адресов и маршруты не сохраняется на флэш память устройства не расходуя её ресурс, а при перезагрузке теряются и пополняются заново по мере обращения? 2) Что происходит если VPN не подключен? Маршрут по умолчанию? 3) Адреса субдоменов автоматом также добавляются при обращении к ним. Это уже прошивка сама перенаправляет DNS запросы к субдоменам на резолвер утилиты? Какова глубина субдоменов? 4) Очистка списка IP адресов от устаревших происходит только путем перезагрузки устройства? 5) Будет ли видно эти маршруты в веб-интерфейсе роутера? 6) будет ли это работать, если в качестве DNS на роутере прописаны DOT или DOH? Обычные запросы ведь при этом отсекаются или перенаправляются. Сработает ли направление по домену на DNS утилиты? Это проверил, работает по домену. Edited April 26, 2023 by keenet07 Quote Link to comment Share on other sites More sharing options...
avn Posted April 26, 2023 Share Posted April 26, 2023 (edited) Я бы еще все маршруты в таблицу прокопировал 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 April 26, 2023 by avn Quote Link to comment Share on other sites More sharing options...
Александр Рыжов Posted April 27, 2023 Author Share Posted April 27, 2023 В первой прикидке все зависимости менее одного мегабайта, а значит, решение с помощью SDK можно поднять хоть на Keenetic Start. Необходимые для конфигурирования имена VPN-интерфейса и его подсеть можно выуживать, к примеру, по названию соединения. 21 час назад, krass сказал: А для моделей viva( или giga ) и выше можно в дальнейшем увеличить число записей? Если надо больше, то вряд ли стоит это помещать в прошивочный конфиг или WebUI. Я бы использовал другое решение. @keenet07, всё так. По вопросам: Да, всё в памяти. Решение, по сути, три статичных файла обвязки вокруг iptables и ipset. Ничего. Таблица наполняется адресами, но роутинг ничем не отличается от роутинга по умолчанию. Прошивка. Глубина бесконечна. Да. Понимаю, что при высоких аптаймах сет может накапливать лишнее, но при точечном обходе я бы не стал заморачиваться. Если хочется такое реализовать, то создавайте ipset сразу указывая время жизни элементов и ограничивайте TTL записей DNS-кэша в прошивочном сервисе с помощью dns-proxy max-ttl … Нет. Прошивка не отображает роутинг по таблицам/сетам. 17 часов назад, avn сказал: Я бы еще все маршруты в таблицу прокопировал Т.е. маршруты по умолчанию так же окажутся в таблице для отдельного роутинга. Зачем? 1 1 Quote Link to comment Share on other sites More sharing options...
krass Posted April 27, 2023 Share Posted April 27, 2023 1 минуту назад, Александр Рыжов сказал: Если надо больше, то вряд ли стоит это помещать в прошивочный конфиг или WebUI. Я бы использовал другое решение. Подскажите, пожалуйста, какое другое решение? Quote Link to comment Share on other sites More sharing options...
avn Posted April 27, 2023 Share Posted April 27, 2023 2 часа назад, Александр Рыжов сказал: Т.е. маршруты по умолчанию так же окажутся в таблице для отдельного роутинга. Зачем? Ни в коем случае. Quote Link to comment Share on other sites More sharing options...
keenet07 Posted May 3, 2023 Share Posted May 3, 2023 @Александр Рыжов Подскажите пожалуйста. Это решение может быть развернуто полностью без подключения внешних носителей для OPKG? Знаю, что можно в память роутера разместить. Есть только один вопрос, при таком варианте работы OPKG и скрипта происходит ли какая-либо дополнительная запись/перезапись в память роутера? Не хочется растрачивать ресурс памяти. Quote Link to comment Share on other sites More sharing options...
Александр Рыжов Posted May 3, 2023 Author Share Posted May 3, 2023 В 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 1 Quote Link to comment Share on other sites More sharing options...
krass Posted May 3, 2023 Share Posted May 3, 2023 2 часа назад, Александр Рыжов сказал: Что-нибудь основанное на dnsmasq или adguardhome, они так же умеют наполнять ipset по результатам разрешения DNS-имён. Лично я до последнего использовал это. Подскажите,пожалуйста, предложенные вами варианты и что вы использовали лично -- без ограничений? Или там можно больше, но тоже есть ограничение? Quote Link to comment Share on other sites More sharing options...
keenet07 Posted May 3, 2023 Share Posted May 3, 2023 (edited) В 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 May 4, 2023 by keenet07 Quote Link to comment Share on other sites More sharing options...
Александр Рыжов Posted May 4, 2023 Author Share Posted May 4, 2023 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. 2 Quote Link to comment Share on other sites More sharing options...
keenet07 Posted May 4, 2023 Share Posted May 4, 2023 (edited) 8 минут назад, Александр Рыжов сказал: netfilter c доменами не работает, после того как ipset-dns разрешила очередное доменное имя в IP-адрес(а), способа сопоставить назад эти адреса с исходным доменом нет. Reverse DNS resolving будет не всегда показательным и я бы на него не стал ориентироваться вовсе. Конечно. Я имел в виду было бы здорово, так изменить стандартные средства, чтоб на этапе добавления маршрута туда передавался бы и сам домен (чисто для информации), ну и соответственно так же в таблице хранился бы и выводился стандартными средствами. Сам я такую модификацию не потяну, а просить кого-то без личной заинтересованности и смысла наверное нет. 8 минут назад, Александр Рыжов сказал: Он первым делом добавится в ipset, следственно, обращения к нему будут идти тем же путём, что и к выбранным для обхода блокировок ресурсам. Понял, ну отлично. Edited May 4, 2023 by keenet07 Quote Link to comment Share on other sites More sharing options...
snark Posted May 4, 2023 Share Posted May 4, 2023 Приветствую всех, вопрос про 010-bypass-table.sh из пакета, вероятно немоного недогоняю, в упор не могу отловить link-yes-up-up У меня вот так , link-no-up-up > connected-yes-up-up На всякий - прошивка 4.0 А20 Quote Link to comment Share on other sites More sharing options...
Александр Рыжов Posted May 4, 2023 Author Share Posted May 4, 2023 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 1 Quote Link to comment Share on other sites More sharing options...
snark Posted May 4, 2023 Share Posted May 4, 2023 На 4.0А20 link-yes-up-up не появляется Видимо в 4.0 что то изменилось hook.log 1 Quote Link to comment Share on other sites More sharing options...
Александр Рыжов Posted May 4, 2023 Author Share Posted May 4, 2023 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" и у меня и у вас встречается только один раз и, следственно, однозначно определяет статус интерфейса. Обновлю линк на пакет в первом посте. 2 Quote Link to comment Share on other sites More sharing options...
keenet07 Posted May 5, 2023 Share Posted May 5, 2023 (edited) @Александр Рыжов У меня публичный OpenVPN. Раньше внутренний адрес мне выдавал по-моему всегда один и тот же в сети 10.*.*.*/32. Его и прописал в конфиг вашей утилиты в соответствии с инструкцией. А сейчас заметил что адрес, его последние цифры стал меняться. Не знаю совпадение или нет. Подключаясь с другим адресом утилита всё-равно работает, направляет то что нужно на VPN. Настройки не менял. Получается это не такой важный параметр? Не удерживают/занимают ли какие-то элементы утилиты или entware изначальный адрес VPN не давая потом снова подключиться с ним же? А несколько раз при переподключении VPN вообще оказывался в ситуации, что трафик через него не шёл. Причем не только через утилиту, но и через настройки прошивки Маршрутизация. Поправленный вами недавно файлик мониторинга статуса VPN закинул в ентварь вручную. Edited May 5, 2023 by keenet07 Quote Link to comment Share on other sites More sharing options...
Pepsi CoJla Posted May 9, 2023 Share Posted May 9, 2023 При запуске утилиты 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 Quote Link to comment Share on other sites More sharing options...
hard_alex@mail.ru Posted May 26, 2023 Share Posted May 26, 2023 О! Это зачет. Вопросы. 1. При включенном DoH в мозиле или на устройстве, работать не будет правильно? 2. IPv6 работать будет? а то с нативным ipv6 с интелом проблемка, что не задавай в маршрутах, ipv6 идет родной. VPN тоже в ipv6 умеет, но обычно его никто не учитывает , как будто его вообще не существует. Quote Link to comment Share on other sites More sharing options...
keenet07 Posted May 26, 2023 Share Posted May 26, 2023 (edited) 26 минут назад, hard_alex@mail.ru сказал: 1. При включенном DoH в мозиле или на устройстве, работать не будет правильно? Не будет. Работает только через прямой DNS запрос к роутеру. Вернее работать то оно в мозиле с DoH сможет, но только при условии что ранее были обращения к этим ресурсам из других браузеров напрямую. Edited May 26, 2023 by keenet07 Quote Link to comment Share on other sites More sharing options...
keenet07 Posted June 18, 2023 Share Posted June 18, 2023 Долго уже пользуюсь. Но донимает одна вещь. Каждый новый день, когда подключаю VPN (OpenVPN), роутинг на прописанные маршруты сразу же не идёт. Если снова переподключить VPN то чаще всего сразу всё начинает бегать как нужно. Но иногда и с 3-го раза начинает. Что-то там с механизмом обнаружения соединения не совсем в порядке. Добавлю, что IP шлюза VPN меняется, но он всё-равно уже не такой, как изначально прописанный в конфиге, и каждый раз я его не правлю, но это не мешает утилите работать через VPN даже если шлюз изменился. Можно что-то придумать с переподключением? Quote Link to comment Share on other sites More sharing options...
Александр Рыжов Posted August 17, 2023 Author Share Posted August 17, 2023 В 04.05.2023 в 18:09, snark сказал: На 4.0А20 link-yes-up-up не появляется Видимо в 4.0 что то изменилось Точно. Но менять упрощённый вариант не придётся:) Quote Link to comment Share on other sites More sharing options...
keenet07 Posted August 18, 2023 Share Posted August 18, 2023 (edited) В 26.04.2023 в 23:44, Александр Рыжов сказал: После чего решение готово к использованию. Запустите утилиту ipset-dns или просто перегрузите роутер: opt/etc/init.d/S52ipset-dns start Почему в этом месте пишет что такого файла не существует? Хотя, по факту, он там лежит. Приходится перезагружаться всё же. Edited August 18, 2023 by keenet07 Quote Link to comment Share on other sites More sharing options...
Александр Рыжов Posted August 21, 2023 Author Share Posted August 21, 2023 Забыт слеш перед opt/... Поправил. 1 Quote Link to comment Share on other sites More sharing options...
Андрей Волосков Posted November 6, 2023 Share Posted November 6, 2023 (edited) Вообщем немного добавлю, вдруг кому пригодится, себе еще прикрутил 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 November 6, 2023 by Андрей Волосков 1 Quote Link to comment Share on other sites More sharing options...
Denis P Posted November 6, 2023 Share Posted November 6, 2023 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? Quote Link to comment Share on other sites More sharing options...
Сергей Грищенко Posted November 29, 2023 Share Posted November 29, 2023 (edited) Спасибо за решение! Установил, работает. Можете подсказать, почему может не работать на iphone? На андроиде и ПК всё ок. Я пока добавил два сайта для теста, 2ip.ru и www.dw.ru, и www.dw.ru не хочет работать на iphone. Скрытый текст Edited November 29, 2023 by Сергей Грищенко 1 Quote Link to comment Share on other sites More sharing options...
Александр Рыжов Posted November 29, 2023 Author Share Posted November 29, 2023 35 минут назад, Сергей Грищенко сказал: Можете подсказать, почему может не работать на iphone? На андроиде и ПК всё ок. Проверил на iOS 17.11, точно не работает. Вероятно, iPhone использует стороонние DNS. 1 Quote Link to comment Share on other sites More sharing options...
keenet07 Posted November 29, 2023 Share Posted November 29, 2023 (edited) 10 часов назад, Сергей Грищенко сказал: Можете подсказать, почему может не работать на iphone? На андроиде и ПК всё ок. Я пока добавил два сайта для теста, 2ip.ru и www.dw.ru, и www.dw.ru не хочет работать на iphone. Попробуйте в Интернет-фильтрах - Настройка DNS - для системного профиля (или какой там у вас настроен) запретить транзит запросов (снять галочку). Тогда iOS вынуждена будет использовать DNS роутера. И кэш браузера почистить и перезапустить приложение, если сразу не заработает. Edited November 29, 2023 by keenet07 1 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
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.