Ground-Zerro / DomainMapper

A tool for scanning and resolving DNS names into IP addresses
MIT License
307 stars 55 forks source link

Готовые списки #46

Closed manifet closed 1 day ago

manifet commented 1 day ago

Привет, не планируешь сделать папку в репозитории с уже готовыми спискам, которые будут обновляться при обновлении репозитория? Меня полностью устраивают списки, которые генерирует скрипт, но, мне нужно каждый раз закидывать их ручками на роутер, а с готовыми списками можно просто написать один раз crontab задачу. Если готовые списки не входят в концепцию твоего проекта, то подскажи, пожалуйста, как автоматизировать выполнения скрипта от обновления в твоём репозитории?

Ground-Zerro commented 1 day ago

@manifet Привет. Отвечал на этот вопрос много раз. Коротко: не планирую. Длинно: Многие сервисы используют CDN, итоговый список IP-адресов доменов будет отличаться для разных хостов (устройств) в зависимости от их геопозиции, текущей нагрузки на сервера сервиса, времени суток и еще ряда факторов. Вот пример для "Antifilter community edition": Первый список доменов обработан на моей локальной машине, второй на VPS в Нидерландах: List1.txt List2.txt Результаты сравнения двух списков IP-адресов: В первом списке есть 1099 IP-адресов, которых нет во втором. Во втором списке есть 993 IP-адреса, которых нет в первом. 1276 IP-адресов присутствуют в обоих списках. Различие между двумя списками составляет около 62.11%. ​ Списки отличаются более чем на половину!! Т.е. 62% или больше половины IP-адресов полученных на одной машине будет полностью бесполезна на другой и будет просто висеть в таблице маршрутизации мертвым грузом, нагружая процессор и увеличивая время обработки этой таблицы роутером т.е. увеличивая задержки.

Итого: Резолвить домены в IP на одной машине с целью использования этого списка на другой не всегда приведет к желаемому результату - не на всех хостах будет работать полноценно проще говоря. Да это хоть как-то работает и вполне устраивает большинство, но я считаю такой способ неполноценным.

Варианты решения: При наличии роутера с Linux ядром лучше использовать раздельную маршрутизацию на основе доменных списков, разделяя их трафик между тонелями. Главное преимущество такой схемы в том, что домен резолвится в IP-адрес на конкретном устройстве и удаленный хост 100% будет ему (IP-адресу) соответствовать и обмениваться трафиком через указанный пользователем тоннель (VPN).

Есть готовые решения для Роутеров на OpenWRT, KeeneticOS, RouterOS и других.

В крайнем случае можно использовать DomainMapper прямо на роутере например запуская его по крону раз в стуки когда роутер менее всего загружен (как правило это 5-6 утра) и сразу же добавлять маршруты в таблицу.

Ground-Zerro commented 1 day ago

Давно думаю над тем, чтобы добавить в DM функцию загрузки маршрутов в роутер после завершения работы скрипта используя telnet или ssh. Не знаю насколько это будет востребовано и нужно ли вообще.

manifet commented 13 hours ago

Спасибо, что ответил так объемно! Я вроде смотрел закрытые issues, по названию не нашел ничего похожего, но теперь будет.

Понял, почему нецелесообразно делать на одной конкретной машине готовые списки для общего пользования. Но, возможно, собирать от пользователей твоего скрипта их списки в общий и удалять дубликаты будет полезно для сообщества. Есть, правда, community-список от antifilter, но там есть и свои проблемы.

Я видел статьи на Хабре по маршрутизации по доменам через туннели. Но у меня специфичная проблема: я не могу установить туннель через Shadowsocks/VLESS через sing-box/tun2socks, потому что у меня только 8 MB памяти роутера. Могу использовать только Shadowsocks-libev, но он принимает списки в формате IP/net, и больше никакие. В общем, спустя неделю моих попыток, понял, что лучше купить роутер получше, а пока что посижу на community списке antifilter.

P.S. Если кто-то ищет гайд по маршрутизации через домены - вот.

Ground-Zerro commented 11 hours ago

Спасибо, что ответил так объемно!

Рад помочь.

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

Можно, но сообщество не сильно здесь активное, а после добавления localmode в DM так и вообще по своим норкам попряталось.

у меня только 8 MB памяти роутера

Именно по этой причине и был написан DM, также был роутер лишенный части функционала из-за ограниченного ROM.

Позже поняв, что вопрос статическими маршрутами полностью не решить учитывая использование сервисами CDN, написал DNS-RouteSync-Navigator. Он был призван выполнять те же функции, что и дополнительное ОП для роутеров на Linux. Только делал он это не в самом роутере, а на внешнем VPS выступая для роутера DNS сервером и отправляя в роутер маршруты к запрашиваемым пользователем ресурсам, указанным в списке "доменов под VPN" по ssh и/или telnet. В целом все работало, но позже опять всплыли нюансы, например провайдер активно гадил подменяя ответы DNS сервера на заглушки. Так, что тоже пришел к выводу, что проблему полностью решит только покупка более мощного роутера. Пока ждал сделал бета версию программы с защищенным DNS, но мне какраз пришел роутер и необходимость продолжения разработки отпала ))

понял, что лучше купить роутер получше

Я купил Beeline Smart Box GIGA, на авито они не дорогие относительно устройств от Кинетик, Микротик и других с такой-же или похожей начинкой в магазине. Перешил его на KeenetikOS получив полный доступ к дополнительному функционалу с использованием Entware. С учетом смешной цены в 1500р. получил:

USB 3.0,
256 ОЗУ,
гигабитные порты,
MIMO 2x2,
IEEE 802.11ac1200
+ стабильная прошивка
+ плюшки для кастомизации