-
Notifications
You must be signed in to change notification settings - Fork 62
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
Режим IpSet #152
Comments
Не могу уловить идею. Зачем так делать? Если заблокировано по IP, анблок вообще не отработает. Если заблокировано просто, можно обходить ТСПУ. Если говорить про doh, вы его спокойно можете на роутере развернуть. |
Это если можно. Не далее как сегодня чинили очередную "всё сломалось, обход не работает". вот у меня стоит на роутере. И если ломается youtubeUnblock, то приходится воевать с зоопарком гудбайдпи/байдпи на разных устройствах, что еще тот геморрой (ведь там тоже синхронно сломалось). Либо же подрубать впн - но туда не хочется заворачивать весь трафик. А только те же домены для которых работает youtubeUnblock.
doh тут вообще не причем. Просто подход "мы для нужного домена впишем по запросу нужный ip в ipset" (фича dnsmasq) требует чтобы клиент дернул этот dnsmasq, то есть воспользовался днс роутера, а не своим. И заставлять всех пользоваться днс роутера принципиально неудобно, поэтому и не пользуюсь. А так youtubeUnblock сможет не только sni портить, а и заполнять ipset. Если порча sni не помогает - переключился на впн и ждешь "фикса порчи sni". И, в отличие от подхода с днс, клиентские устройства никак настраивать не надо - ведь мимо не пройдешь. |
На лету такое вряд ли получится делать. Даже если анблок просто статично стоит и смотрит на sni мимо него, у нас не получится перенаправить существующее соединение через vpn. Даже если мы просто будем стоять и смотреть какие сайты куда подключаются, мы не можем гарантировать то, что в следующий раз он туда же ткнётся (ситуация с ютубом как вариант) |
так и не нужно ничего перенаправлять. Что делает dnsmasq? Он ничего не отслеживает. Получил домен, получил ip, если домен в вайтлисте - вписать ip в ipset Так и тут. Получили домен (sni), получили ip (destnation ip), если домен в вайтлисте (и включена фича) - вписать ip в ipset то есть то же самое. А далее пользователь замутит что ему удобно на основании этого ipset. |
Если у вас Openwrt, попробуйте пакет PBR (Policy Based Routing) - он это делает из коробки. есть в родной репе. |
@PulseDiver Гугление намекает что даже для политики основанной на dest_addr все равно будет использоваться резолвинг днс "If you’re using domain names in the dest_addr option of the policy, it is recommended to use dnsmasq.nftset options for resolver_set. Otherwise, the domain name will be resolved when the service starts up and the resolved IP address(es) will be added to an apropriate set or an iptables or nft rule. Resolving a number of domains on start is a time consuming operation, while using the dnsmasq.nftset options allows transparent and fast addition of the correct domain IP addresses to the apropriate set on DNS request or when resolver is idle." что на корню ломает весь смысл "не зависеть от разницы днс на разных устройствах" |
Что могу сказать. В целом никто не запрещает развернуть ip логгер на анблоке. Можно просто в функции mangle.c->process_tcp_packet после строки |
@Waujito Решение "сразу пишем в ipset" уже требует приемлемых знаний c++ чтобы правильно прикручивать подсказки от ИИ (особенно учитывая что оно не должно тянуть новых зависимостей и придется работать с тем, что уже есть) и не перестрелять все ноги. Достать ip просто, а вот остальное... ИИ говорит что это возможно, но по факту выдает оторванный от реальности код для libmnl (наполнен разными константами, про которые ни гугл, ни гитхаб не выдают ни одного ответа) Ну да, можно просто тупо в конфиге задать команды для шелла, которые потом просто заполнять нужными ip и вызывать через system(), но все равно нужно же кешировать ip чтобы лишний раз не дергать систему. Что опять же требует знаний чтобы не наделать утечек памяти. В общем это я смогу сделать разве что через 21 день по "сишному календарю" |
"не зависеть от разницы днс на разных устройствах" - запретите на роутере использовать в своей сетке собственные днс устройств, |
Я хочу облегчить себе жизнь, а не усложнять. Само требование "вы на клиенте настраивайте вот так" меня не устраивает. И "не настроите не пущу" не является лечением этой проблемы. |
У iptables и nftables разные ipsetы. Для iptables есть libipset, для nftables libnftnl. На последних версиях openwrt стоит система nftables. Пример здесь: https://git.netfilter.org/libnftnl/tree/examples/nft-set-elem-add.c |
@Waujito ух как страшно выглядит. Еще страшнее чем ИИ выдала Получается что решение "в лоб" самое простое. 0 добавляем в конфиг опцию "писать в ..." и "вызвать команду такую то" Никаких зависимостей от платформы. Ничего не забыл? |
Понятно, что я не буду это добавлять в мэйнстрим. Такие изменения будут только перегружать логику программы и будут требовать поддержки для iptables, nftables, iptables внутри ядра, nftables внутри ядра и еще кучи систем. Плюс не понимаю, про какой кэш вы говорите. Лучший вариант тут действительно использовать libnftnl, максимально низкоуровневую коммуникацию с nftables в ядре. Делать system из программы - худший вариант, который только может быть. |
Почему усложнить-то? Все клиенты в вашей домашней сетке будут использовать единый dns от роутера, выданный по dhcp. От того, что у вас каждое устройство живет само по себе, наоборот, все усложняяет. Но в любом случае, вам решать. Я только предложил. ;) |
Вот согласен. С единым doh dns избавляемся от проблемы настройки его на каждом телевизоре и прочих устройствах |
Я знаю про вариант с единым dns сервером. Но он неудобен. Да сам этот issue именно потому и родился. Я об этом в стартовом посте и описал как основную причину поиска других решений. Я не хочу отключать включать переключать что-то в зависимости от того, где устройство находится. Сидишь дома - выключи privacy dns, вышел куда то - включи.
ничего не усложняет, а наоборот. Это такая же реализация как это делает dnsmasq во всяких там PBR, просто не на этапе запроса днс (что и требует дополнительных приседаний на устройствах), а на уровне самого запроса, который никуда мимо не пройдет независимо от что там на устройстве (QUIC не в счет). Ведь у нас есть хост и ip (который, судя по всему, подходит). Далее просто делаем то же самое. |
Дак не нада ничего выключать переключать. Doh живет на своем порту. Роутер блокирует днс запросы во внешку и перенаправлет их от устройств в домашней сетке на порт doh и все. Вышли на улицу - мобила юзает днс провайдера. |
@PulseDiver |
Возможно бредовая идея, но все же озвучу.
впн морока, но временами приходится юзать пока ждем очередные фиксы обхода тспу после очередного их обновления.
На хабре есть статья, где с помощью dnsmasq можно заполнять ipset для нужных доменов на лету и потом роутить по этому ipset в туннель. Фатальным недостатком является необходимость дернуть запросом днс для нужного домена, для чего нужно выключать всякие dns over tls в браузерах, мудрить в андроидах и так далее.
ruantiblock обладает тем же недостатком. Вообще решение через dns обладает одним и те же фатальным недостатком.
А что если попробовать подобный подход. Ведь, в отличие от днс, запросы идут всегда.
Сейчас софт работает так (ну как я понимаю)
1 все запросы на 443 перенаправляются в queue 537 и попадают в софт
2 он накапливает данные для нового коннекта пока не получит sni
3 если sni подходит под условия, то начинается коверканье выходных пакетов
4 и все это добро идет на выход
Что если после детекта sni, если sni подходит под условия (есть в списке хостов и задан ipset), то добавить в ipset destination ip, который, как я понимаю, можно выдрать (ведь можно же выдрать???) из последнего пакета сформировавшего sni (и тем самым избежать проблемы с разницей в днс ответах) и просто добавить его в этот ipset (если он ранее был туда добавлен - для скорости кешировать в памяти). Ну чтобы было минимум переделок.
Как я понял, этот ip вполне подходит
И далее для выходящего трафика можно далее настроить и включать/выключать впн с правилом "заворачивай в меня для всех кто в ipset".
какая стратегия лучше....
1 просто пишем в ipset и потом включать/выключать впн по нужде (ну да туда пойдут запросы с фрагментацией)
2 впн всегда включен и софт просто переключает режими "коверкаем/ipset" и обнуляет ipset при переключении в режим "коверкаем" и начинает его заполнять при переключении в режим "ipset"
....тут нужно подумать.
Но сначала вопрос "вообще правильно ли я мыслю и возможно ли такое?"
The text was updated successfully, but these errors were encountered: