Комментарии 64
Ваш подход похож на опцию --ipset в DNS-резолвере dnsmasq, которая добавляет IP-адреса резолва в ip set, а не в таблицу маршрутизации. IP set'ы хорошо оптимизированы, адреса из set'а могут удаляться по таймауту автоматически, ядром, но требуют маркировки пакетов средствами netfilter, чтобы направить их в нужную таблицу маршрутизации.
Несколько недоработок вашей реализации:
Отсутствует поддержка AAAA-записей. На провайдерах с IPv6 (в России это порядка 7% интернет-трафика) обход не заработает — нужно хотя бы удалять AAAA-ответ из резолва, если нет желания обрабатывать полноценно.
Отсутствует поддержка записи SVCB/HTTPS (type 65), которая используется на устройствах Apple. Она имеет приоритет выше, чем A/AAAA, из-за чего iPhone может отправлять запросы в обход ваших правил.
На некоторых устройствах и некоторых браузерах по умолчанию включены DNS-over-HTTPS/TLS, из-за чего ваш резолвер не будет получать запросы. У Apple шифрование запросов отключается блокировкой доменов 'mask.icloud.com', 'mask-h2.icloud.com', 'mask.apple-dns.net', а в Firefox — 'use-application-dns.net'.
Я крайне не рекомендую блокировать какие-либо домены Apple. Это может привести к непредсказуемым последствиям. Какие-то функции перестанут работать или будут работать медленно, через раз, и вы замучаетесь искать причину.
Лучше в dnsmasq что-то типа:
address=/use-application-dns.net/
address=/_dns.resolver.arpa/
если такой вариант для вас актуален.
Однако, блокировка mask.icloud.com
и mask-h2.icloud.com
отдельно документирована для отключения iCloud Private Relay, что может быть полезно для исключения DNS-запросов мимо своего резолвера.
Как раз на OpenWRT в пакете https-dns-proxy по умолчанию блочатся эти домены)
На ваш, кхм, роутер я бы накатил сперва proxmox ve + pfsense в виде вирт. машины.
Еще и запас мощности остается для экспериментов.
Вот это был бы РОУТЕР :)
P.s. Если заинтересуетесь, цикл статей по proxmox, pfsense etc https://forum.netgate.com/topic/163435/proxmox-ceph-zfs-pfsense-и-все-все-все-часть-2/
Спасибо за развернутую рецензию, со временем я добавлю поддержку остальных режимов)
Хотел написать, что в принципе, на функциональном уровне, это решается много проще , посредством того же privoxy, причем, прописывать там надо скорее прокси в рунет, оставляя заграничный по умолчанию, но если вам так сильно нужен udp ...
Одно из преимуществ моей программы это очень маленькое потребление памяти, примерно 12 мегабайт, из них 8 мегабайт занимают все заблокированные домены. Я постараюсь дополнить пост примерами реального лога и потреблением памяти.
Пожалуйста, распишите подробно, как можно настроить Privoxy?
Минимальная настройка - открываете config (config.txt в win) дописываете
forward / outerworld_proxy:port
forward .ru interrusia_proxy:port
forward .su interrusia_proxy:port
(если соотв прокси не нужен, а нужно - прямое соединение ставите просто точку) . После чего на 127.0.0.1:8118 privoxy поднимает вам прокси перенаправляющий вас туда куда вам нужно.
Где брать внешний прокси ?? Ну тут каждый исхитряется как может. Бомж-вариант - берете смартфон , ставите на него N штук vpn и Android Proxy Server. Главное преимущество - никаких openwrt, никаких BPF - ничерта не нужно, матушка в свои 71 настраивает в режиме телефонной консультации ...
Возможно против блокировок поможет "метод Пригожина", но я ни к чему не призываю. Хотя если уважаемый Максут Шадаев захочет о чем нибудь поговорить с Липовыми, может попросить проработать откровенные недостатки базы заблокированных сервисов. Особенно внесудебные блокировки. Стабильно рабочая сеть важна в стране. Как они ещё госуслуги умудрились не заблокировать я удивлен.
Помнится когда я начал заворачивать трафик до yt3.ggpht.com через VPN у меня начались какие-то нехорошие приколы, но вот в упор не могу вспомнить какие... Но достаточно серьезные чтобы сидеть без аватарок и картинок в community постах (превью как не удивительно почему-то грузятся нормально)
Кстати да, у меня превьюшки тоже грузились и без yt3.ggpht.com, но спасибо автору статьи что ткнул носом - добавил в zapret-hosts-user.txt, обновил списки и теперь аватарки отображаются снова
У меня из таких приколов - долгий "запуск" видео, который начинается спустя N дней нормальной работы завернутого трафика в VPN. Видео просто начинает 5-15 секунд крутить колесом загрузки. Пока не решил.
Если есть возможность, можете попробовать моё решение, у меня проблем с зависанием нет)
Была аналогичная проблема при настройке policy based roting под OpenWrt. Решил тем, что через консоль разработчика посмотрел, обо что именно спотыкаются запросы и жёстко прописал рабочие связки домен-IP в хосты роутера. У меня это www.youtube.com, wide-youtube.l.google.com, www.youtube-nocookie.com
Вообще на Android в WireGuard клиенте можно и не весь трафик пропускать, а только определённые приложения. Там надо зайти в добавленный конфиг, нажать на редактирование и будет пункт с исключёнными приложениями. Так можно исключать банк. приложения, поставить 2 браузера, один из которых идёт по впн, а второй по обычному каналу.
Она у большинства "нормальных" VPN-клиентов под андроид есть.
К сожалению у некоторых (насколько помню — Mullvad когда он еще не был сам заблокирован и Proton VPN) — добавление в список исключений — очень долго если приложений много.
Ну и VPN на андроид = прощай блокировка рекламы (ну или надо ее делать на сервере, если этого достаточно) если она тоже через VPN а сочетать и то и другое умеет штатно только парочка Adguard VPN + Adguard, но вот только они платные.
Kiwi Browser + uBlock origin + Tampermonkey со скриптами под Wireguard и вот резалка рекламы работает
Да? И во всех приложениях который используют WebView или Custom Tab будет работать?
С браузером то проблема решается просто (Firefox и расширения). С Custom Tab там — теоретически проблема решается тем же Firefox'ом а на практике — есть приложения где тупит все из-за этого.
Если нужно в приложениях под впн, то срабатывает Wireguard + Adguard DNS (на андроиде его как кастомный прописать надо). Реклама в играх режется под vpn на удивление. Тут зависит от того, какой список программ на андроид в клиенте прописать. Там есть список исключений (то есть программы, которые не надо через впн проводить), тогда система также через впн ходит (и WebView и прочие, если не исключать) или же есть белый список, то есть только определённые программы ходят через впн, тогда система ходит напрямую.
Аналогично в клиенте OpenVPN. Там эта опция называется bypass. В настройках VPN-соединения во вкладке Allowed Apps. Всякие банковские приложения, хром, такси пускаются через него, а firefox через vpn.
для маршрутизации на роутере необходимо иметь роутер с поддержкой WireGuard, а значит необходим роутер, на который можно установить OpenWrt.
Кинетики на родной прошивке умеют в WireGuard.
и микротики
А policy-based routing они умеют?
Умеют, но у них нет аппаратного ускорения шифрования и сколько-нибудь нормальной скорости работы не добиться. На Микротике только на старших моделях можно что-то выжать. Кинетик быстро упирается в производительность процессора.
WireGuard и не требует аппаратного ускорения шифрования. Какие вообще процессоры умеют аппаратно ускорять ChaCha20 и Poly1305?
Если же вы говорите про аппаратное ускорение AES, то, во-первых, AES в WireGuard не используется, во-вторых кинетики прекрасно ускоряют его, кроме совсем уж старых моделей.
Вышенаписанное относится к роутерам с MIPS-процами. В новые кинетики сейчас вообще ставят ARM-процессоры, в их группе в телеграме скидывали результаты бенчмарков - спокойно жуют сотни мегабит.
А теперь задание со звёздочкой - обход блокировок когда блокировка не на стороне РКН, а на стороне сервера.
Тоже думал на эту тему, но тут уже без DPI ни как не обойтись)Только если кто то составит отдельный список таких)
Любое решение с VPN но точка выхода НЕ в России?
Это сломает Госуслуги.
И не только. Не раз натыкался на рос сайты которые тупо не открываются через vpn
Бывает смешнее — сайт открывается но логин не работает. Потому что site.ru и api.site.ru — за cloudflare но вот у api.site.ru настройки более более жесткие.
Если блокировки на той стороне — можно просто считать их блокировками на этой и просто сайт в туннель заворачивать. Если же это становится неудобно — заворачивать в туннель все по умолчанию (с Youtube/Facebook сложно но списки сетей Google вполне себе публичны например) а то что должно быть в России — принудительно НЕ заворачивать. Либо руками по доменам либо раз список сгенерить либо вообще с https://antifilter.network/bgp брать — есть там списочек ру-сетей.
У меня на основном так сказать месте откуда доступ — схема с получением по BGP списков куда нельзя ходить и отправление трафика на эти сети куда следует. В дополнение — ручное задание по DNS-имени (у роутера и машин за ним — один и тот же DNS-резолвер так что если уж резолвинг на роутере решил что habr.com это 1.2.3.4 то машинки за ним тоже полезут за habr.com через 1.2.3.4).
С копией антизапрета (запуск их контейнера у себя) возится пока не хочется. В том числе потому что ну очень не хочется танцы с прокси устраивать, придется ж не только для браузеров это городить, например для gradle еще надо.
(и без того хватает проблем — приходится вот в Firefox + MultiAccount Containers + Container Proxy несколько групп сайтов через отдельные спецпрокси и в данном случае тема совсем не про цензуру).
Давно есть идея как реализовать подобное: самописная прокся, которая будет автоматически повторять запрос через какой-нить парент при обнаружении 403/access denied. На минутку призадумался, а может это вообще реализуемо через прозрачный squid
нет, потому что мало смотреть на уровне http/https, надо смотреть на уровне tcp/udp.
Там вообще может быть не 403, а 200 ОК — и страница-заглушка «извините, мы с вами больше не работаем».
Вот, например, порнхаб...
Но пока мы делаем это чисто для себя, вполне достаточно вести ручками список таких URL'ов. У меня, например, стоит ящик с pfSense, к нему из разных локаций (дача, другие квартиры — клиенты на роутерах, мобильные клиенты на мобилах) коннектятся по WireGuard (заодно получая доступ к локальным ресурсам этого ящика, от умного дома до файлопомойки и торрентокачалки), а на ящике уже стоит VPN и policy-based routing со списками, формируемыми как вручную, так и из подгружаемых снаружи перечней IP или доменов.
Если сервер блокирует по странам, то подойдёт geo ip роутинг. Есть отличная статья с готовым скриптом по выгрузке подсетей разных стран в формате удобном для запихивания в route add: https://habr.com/en/articles/659655/
Поднимаем на роутере VPN соединения к серверам в нужных странах и роутим подсети этих стран через эти VPN.
https://habr.com/en/companies/xakep/articles/699000/
Выбор точки выхода в зависимости от принадлежности AS к стране. И госуслуги работают, и блокировок нет. Единственный минус — это дополнительный хоп для всего внешнего трафика.
Я задолбался бороться с отдельными блокировками и просто зароутил все зарубежные (с т.з. RIPE) сети в VPN, а российские идут напрямую. Это не идеально, конечно, но лучше чем другие подходы как по мне. Если есть какие-то нестыковки - просто добавляю в исключения.
на моем роутере antiblock стоит уже 3 месяца и не возникает проблем, список доменов обновляется оперативно, так что если есть возможность, можете попробовать)
Зачем? Зашифрованные DNS оно не отловит, да и стояла у меня подобная система какое-то время: https://habr.com/ru/articles/467547/
просто зароутил все зарубежные сети в VPN
я тоже так сделал.
одна из причин: часто доступ закрывается не властями рф, а от рф.
вторая: география ip-подсетей меняется куда реже, чем блокировки.
Если есть какие-то нестыковки — просто добавляю в исключения
да пока мне что-то и не понадобилось исключений )
разве что торренты напрямую пускаю.
Ну вот, например, мы (наша контора) зафайрволилась от РФ и Китая. По очень простой причине: то, что мы продаём, нужно исключительно проживающим на североамериканском континенте. В указанных странах у нас нет и не может быть клиентов — но запросы к сайту оттуда постоянно приходят, так зачем энргию на них тратить?
Есть статья с оригинальным методом получения списка заблокированных сайтов:
Точечный обход блокировок PKH на роутере с OpenWrt с помощью WireGuard и DNSCrypt (часть 1)
https://habr.com/ru/articles/440030/
subnet.lst — список заблокированных подсетей, изменяется не часто.
ip.lst — список заблокированных адресов, прям из списка РКН
community.lst — список заблокированных адресов, который составляется комьюнити antifilter.download
Хм...
Мне хватает socks прокси, который доступен через VPN подключение (можно и без VPN, но надо позаботиться, чтобы другие через вас не начали качать). В браузере плагин, который избранные домены направляет на прокси. Главный недостаток, что настраивать всё нужно на каждом устройстве. Но метод рабочий и пользуюсь им уже много лет.
антизапрет не подходит ?
Автоматический обход блокировок