-
Notifications
You must be signed in to change notification settings - Fork 5
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Комбинирование листов антизапрета #3
Comments
Не совсем хотелось бы переходить в телеграм. Тем более, вдруг кому-нибудь будет полезно наше обсуждение и решение некоторых вопросов.
[
{
"url": "https://reestr.rublacklist.net/api/v3/ips/",
"contentType": "JsonListIPs",
"category": "ru",
"isExclude": true
}
] А достать ip из geoip можно с помощью того же sing-box'а: либо с помощью mmdbinspect:
[
{
"url": "https://reestr.rublacklist.net/api/v3/ips/",
"contentType": "JsonListIPs",
"category": "ru",
"isExclude": true
},
{
"url": "https://url.to/last/geoip.db",
"contentType": "GeoIP", // Парсинг GeoIP не реализован
"category": "ru"
}
]
|
Артем, в первую очередь большое спасибо Вам, за всегда развернутые ответы.
Вот, например, неофициальный. Обновляется раз в сутки без проверки на то, есть там новые данные или нет: или вот: |
Спасибо за реализацию скрипта! Вариантов есть несколько, вот пример двух из них:
Соответсвенно, сначала необходимо спарсить из общего geoip файла только нужный нам кусок (:ru, .ir или любой другой) и уже потом с этим списком работать |
Теперь я понял для чего вам понадобилось парсить srs) В целом, да, неплохо бы научиться парсить srs, но на данный момент проще всего будет распарсить geoip.db. Да, там много стран помимо ru, но это не проблема. Парсер можно какой угодно написать. Тут обнаружилась другая проблема, куда посерьёзней. Дело в том, что в geoip.db указываются в основном не единичные IP-адреса, а целые подсети, и далеко не маленькие. А в списках rublacklist в основном единичные IP адреса указаны. Как в таком случае исключать из подсетей один ip-адрес?
Скорее всего, лучшим вариантом будет сделать менее оптимизированный, но более простой в реализации способ. Тем более, раз вы решаете использовать список антизапрета, не думаю что вас волнует производительность))
И что насчёт того, что вы хотите заворачивать всё в проксю, и только РУшные адреса напрямую. Считаю что у этого подхода есть несколько минусов:
Я сам настроил у себя так, что отправляю в прокси только указанные мною домены. IP вообще не трогаю, т.к. не вижу смысла. Поэтому, у меня уже накопился небольшой список самых часто посещаемых мною сайтов. В скором будущем планирую начать собирать так называемый список "токсичных" сайтов, где будут указываться домены сайтов, которые не были заблокированы РКН'ом, но при этом они сами блокируют доступ к себе с российских IP. Т.е. сюда попадут все те самые ЧатGPT, intel.com и т.д. Придётся только такой список собирать, пополнять и актуализировать самому, т.к. нигде подобных готовых списков мною найдено не было, за исключением toxic-repos, который и был взят за основу для составления списка "токсичных" сайтов.
|
Действительно, самый оптимальный способ, это просто пустить список с заблокированными ресурсами в РФ выше остальных и не делать никаких сложных списков. Так это сейчас и реализовано. Просто планировалось именно уменьшить в размере список Антизапрета/ Антифильтра / Роскомсвободы или других аналогов. Условно, сейчас список весит 3мб, а мог бы весить 500кб. Не проблема и все 3мб оставить в правилах, как есть. И мы сейчас говорим лишь о небольшом куске правил из общего списка. Конечно, сверху мы можем надстраивать дополнительные правила. Нам никто не мешает пустить в DIRECT youtube, twitch и другие ресурсы, которые сжирают трафик, плюс, к тому же избавимся от рекламы на этих ресурсах. Эти списки "ДИРЕКТА" идут уже отдельно и не относятся конкретно к задаче уменьшить список заблокированных в РФ сайтов для синг-бокса). Схема роутинга на деле может быть масштабирована куда больше, чем на блок-схемах выше в примере. Задача была просто оптимизировать в размере то, что уже используется) |
В итоге, к какому решению мы пришли? Если вы хотите исключать из geoip адреса из антизапрета, надо решить проблему с сетями. Приведу пример. В списках РКН имеется ip адрес: 194.84.56.170. Также, в списках geoip имеется подсеть 194.84.0.0/16. Как можно заметить, данный хост принадлежит этой подсети, следовательно из всей подсети необходимо исключить этот один IP адрес. Как преобразовать запись 194.84.0.0/16 так, чтобы в итоге из всех IP адресов в подсети только один был исключён? Можно поинтересоваться, как вы собираетесь уменьшать в размере список антизапрета? У меня есть одна мысль по этому поводу. Я как то писал программу, которая в течении 2 недель сканировала все домены из антизапрета. Вначале, программа смотрела какие IP адреса принадлежат домену (A-записи на ДНС сервере). Если в ДНС нет таких записей нет, домен добавлялся в список "Домены без IP". Остальные же домены пропрялись на предмет наличия веб сервера, а именно проверялось, слушаются ли 80 и 443 порты по данным IP адресам. Если веб сервер не был найден, домен попадает в список "Домены без веб-сервера". Если же веб сервер находится, то домен добавляется в общий файлик, куда добавляется вся информация о итогах скана. В итоге, имеется 2 списка доменов, которые можно смело исключать из списков антизапрета. В общей сложности, около 73к строк из ~400к получится сократить. |
Пока точно не знаю, что лучше использовать. Плюс, у того же антифильтра есть списки с объединенными адресами, так список становится уже куда меньше по размеру. Возможно будет быстрее работать с таким списком. (allyouneed.lst: Также, есть еще одна "народная версия" списка: По поводу сканирования доменов из списка— идея, как по мне, очень хорошая. Удалить лишние можно было бы. |
В общем, релизнул новую версию v1.3.0, в которой допилил нормальную проверку на вхождения IP адресов в сети, чтобы правильно исключать их (раньше было тупое сравнение строк). Более подробно как оно теперь исключается написал в примечаниях к релизу. Но если грубо говоря, он ищет любое совпадение адресов/сетей в включающем списке с адресами/сетями исключающих адресов. Т.е. в вашем случае, он исключит любые совпадения закрашенной области: Что по производительности... Взял включающий список geoip:ru с 17к строками и исключающий список ip.lst с ~400к строк. На моём ПК (R7 5700X) исключение занимает чуть меньше 1 минуты. Довольно долго получается, и дольше всего занимает проверка всех 17к сетей на включение в них одного из 400к IPшников. И как раз на этой проверке больше всего IP сетей исключается из geoip:ru. В итоге получается около 15.5к записей. Данную операцию явно можно ускорить, использовав горутины, которые будут не в одном потоке всё это обрабатывать. Но пока что я не достаточно с ними поработал, чтобы мог сразу всё правильно сделать. Хотя вроде как ничего сложного нет) Парсинг geoip я ещё не реализовывал, так что вам необходимо самим его преобразовать в обычный список, он должен быть "Включающим" (include-ip-geoip.lst), а исключающий можно автоматически качать с помощью source файла: [
{
"url": "https://antifilter.download/list/ip.lst",
"contentType": "DefaultList",
"category": "geoip",
"isExclude": true
}
] За народную версию списка спасибо, не замечал как то его раньше. Посмотрю что с ним можно будет сделать. |
Супер! Спасибо за релиз, будем изучать. Думаю, многим будет полезно для понимания. Прикрепляю картинку для примера: В данном случае, имеем 2 списка: Как нам на данном примере получить область (1) — это СПИСОК1 за вычетом пересечения со СПИСКОМ2? Как нам получить область (2) — это СПИСОК2 за вычетом пересечения со СПИСКОМ1? И последнее, как нам получить область (3), как перечение первого и второго списка? На примере с geoip:ru и списками блокировок нам, по-хорошему, находить как раз пересечение двух списков, чтобы добавить его в исключение на —> PROXY. Или мы сейчас не можем найти пересечение двух списков? только исключение одного из другого? То есть, чтобы найти их пересечение, нужно будет найти исключение второго списка из первого и потом получившийся список исключить из первого полного? Не можем сразу найти пересечение? Спасибо. |
Да, вы правильно поняли, сразу найти пересечение двух списков не получится, потому что программа может только исключать пересечение одного списка из другого. Можете пояснить, зачем вам находить пересечение? Вам же достаточно составить всего 1 список, и направить его в директ, а весь остальной трафик пускать в прокси:
|
Постараюсь тут объяснить мысль, но лучше бы связаться с тобой в телеграмме, найди меня плиз.
У нас есть geoip:ru с РФ сайтами, которые мы пускаем в директ.
Есть остальной зарубежный трафик, который мы пускаем в прокси.
При этом, среди geoip:ru сайтов, есть сайты, которые заблокированы РКН (список антизапрет). Но в этом списке много сайтов, которые не в РУ зоне и мы их и так пускаем в прокси.
Так вот, нам нужно взять небольшую часть сайтов, заблокированных РКН в зоне РФ и пускать их также через прокси. Иначе, у нас сейчас часть сайтов не будет открываться.
Вариантов 2:
The text was updated successfully, but these errors were encountered: