Яндекс.DNS — новый инструмент для защиты домашней сети — Блог Яндекса
3 апреля 2013, 12:00
Интернет — это в первую очередь информация, и это хорошо. Но не весь интернет одинаково полезен. Некоторые сайты могут заразить компьютер вирусом или выманить личные данные у доверчивых пользователей, которых много среди старшего поколения. А в какие-то уголки сети вряд ли стоит заглядывать детям.
У Яндекса есть несколько продуктов и инструментов, помогающих обезопасить работу в интернете: предупреждения и фильтры в поиске, браузер с двойной системой защиты, Яндекс-версия антивируса Касперского. Сегодня эту линейку пополнил Яндекс.DNS.
Яндекс.DNS — это бесплатный сервис, который поможет вам заблокировать опасные и «взрослые» сайты. Его можно настроить на компьютере, в мобильном или сразу во всей сети — через точку доступа Wi-Fi. Настроив Яндекс.DNS, например, на домашнем роутере, вы сразу обезопасите все устройства, которые к нему подключаются. Чтобы облегчить настройку, мы вместе с производителями роутеров разработали специальные прошивки. Прошивку для моделей ZyXel серии Keenetic можно скачать уже сейчас, а совсем скоро появится версия для моделей D-Link DIR-615 и DIR-620 (подписывайтесь, и мы вас уведомим о её появлении). Конечно, мы планируем расширить список сетевых устройств, для которых есть прошивка Яндекс.DNS, и открыты к сотрудничеству с их производителями.
Собственно, немного о самом сервисе. У Яндекс.DNS есть три режима:
— «Безопасный» защищает от вредоносных и мошеннических сайтов.
— «Семейный» закрывает доступ и к опасным сайтам, и к ресурсам для взрослых.
— «Без фильтрации» просто предоставит вам быстрый и надёжный DNS-сервер.
Сайты проверяются Яндексом ещё до того, как вы открыли их в браузере. При попытке зайти на небезопасный сайт, вы увидите соответствующее предупреждение. На скорость интернета Яндекс.DNS никак не влияет.
Все подробности, инструкции и установочные файлы вы найдёте на сайте dns.yandex.ru.
Делаем Неопасными Сети,
Команда безопасного поиска Яндекса
сервис блокировки опасных сайтов. Настройка Яндекс.DNS на Wi-Fi роутере (точке доступа), компьютере и телефоне.
Здравствуйте друзья! Узнал сегодня новость, что Яндекс запустил свой новый, бесплатный DNS-сервис, который называется Яндекс.DNS. И тут мне пришло письмо от Я. Мол Серега, напиши о нашем сервисе у себя на блоге, в долгу не останемся. Шутка конечно же :).
Если серьезно, то новость о новом сервисе Яндекс.DNS я как-то пропустил не обратив на нее внимания. Подумаешь, очередной сервис. Но ближе к вечеру, все же решил проверить, что там интересного, полезного и как все это работает. Было интересно, как Яндекс будет фильтровать плохие сайты.
Что такое Яндекс.DNS и как он работает?
Яндекс.DNS – это бесплатный DNS-сервис, блокирующий опасные сайты и сайты для взрослых.
Посмотрел я подробную информацию о нем, сервис действительно интересный и заслуживает внимания.
- Он позволит защитить Вас от вредоносных сайтов, на которых можно поймать вирус, или стать жертвой например кражи паролей.
- Позволит защитить Ваших детей от доступа к сайтам для взрослых.
- Яндекс всегда будет обновлять список вредоносных сайтов, так что защита должна быть на высшем уровне.
- Защита осуществляется без установки дополнительных программ, дополнений и т. д. Просто нужно сменить DNS на компьютере, Wi-Fi роутере, или телефоне.
Если у Вас дома доступ к интернету идет например через точку доступа, он же Wi-Fi роутер, то достаточно в настройках прописать DNS которые Яндекс предлагает в рамках сервиса Яндекс.DNS. И все устройства, которые будут подключатся к интернету через этот роутер, будут защищены от опасных сайтов.
Если Вы не используете точку доступа, то можно указать DNS от Яндекса в настройках самого компьютера, ноутбука, нетбука, телефона, планшета и т. д. Все настройки делаются очень просто, Яндекс об этом позаботился.
А я, как любитель всяких там роутеров и прочего оборудования, расскажу Вам подробно о том, как настроить Wi-Fi роутер (точку доступа) на работу с сервисом Яндекс.DNS. Так же покажу как настройить Яндекс.DNS на компьютере и телефоне на Android.
Перед тем как производить настройку, заходим на сайт сервиса dns.yandex.ru и в правой колонке выбираем один из трех DNS адресов, в зависимости от уровня фильтрации. Подробнее о фильтре каждого из адресов можно узнать нажав на меленькую кнопку в виде знака вопроса.
Яндекс так же приготовил прошивку для роутеров с уже внесенными настройками. Пока только для двух: D-Link DIR-615 / DIR-620 и ZyXEL серия Keenetic. Но мне кажется, что лучше указать настройки вручную, а то мало ли что может случится после прошивки.
- 77.88.8.8 – обычный адрес без фильтрации.
- 77.88.8.88 – если указать этот адрес, то будет закрыт доступ к опасным сайтам.
- 77.88.8.7 – блокировка опасных сайтов и сайтов для взрослых
Настройка Яндекс.DNS на Wi-Fi роутере (точке доступа)
Все очень просто. Показываю на примере роутера TP-Link TL-WR841N. Заходим в настройки роутера. Наберите в адресной строке браузера адрес 192.168.1.1 (если этот адрес не работает, то посмотрите снизу роутера, там есть информация).
Введите логин и пароль для доступа к настройкам, по умолчанию это admin и admin. Нам нужно указать свой DNS, точнее DNS Яндекса. Для этого переходим на вкладку “Network” – “WAN”.
Ставим галочку возле Use These DNS Servers и в первой строчке напротив Primary DNS пропишите один из DNS от Яндекса. Во второй строчке, напротив Secondary DNS ничего указывать не нужно. Если там у Вас были уже прописаны DNS, то Вы можете их удалить. Но советую записать их куда нибудь, на всякий случай. После этого нажмите кнопку “Save” для сохранения изменений.
Вот и все настойка роутера закончена. У меня все работало даже без перезагрузки роутера. Опасные сайты блокировались.
Если Вы захотите убрать DNS от Яндекса, тем самым отключить блокировку сайтов, то просто на этой же странице удалите адрес и уберите галочку возле пункта Use These DNS Servers. А если у Вас провайдер выдает статичные DNS, то пропишите их, Вы же их сохранили?
Если установить настройки на точке доступа, то нежелательные сайты будут блокироваться на всех устройствах (компьютеры, телефоны и т. д.), которые будут подключатся через эту точку доступа.
Настройка Яндекс.DNS на компьютере (ноутбуке, нетубке и т. д.)
Если Вы хотите установить защиту от опасных сайтов только на одном компьютере, или например Вы подключаетесь к интернету напрямую по сетевому кабелю, или по технологии 3G, то нужно указать DNS адрес в настройках сетевого соединения. На панели уведомлений нажмите правой кнопкой мыши на значок интернет подключения и выберите “Центр управления сетями и общим доступом”.
Выбираем “Изменение параметров адаптера”.
Теперь внимание! Если Вы подключаетесь к интернету по Wi-Fi, то нажимаем правой кнопкой на “Беспроводное сетевое соединение” и выбираем “Свойства”. Если же Вы подключаетесь по кабелю, то выбираем “Подключение по локальной сети” и свойства. Выделяем пункт «Протокол интернета версии 4 (TCP/IPv4)», затем нажимаем “Свойства”. Ставим метку возле “Использовать следующие адреса DNS-серверов “. Напротив “Предпочитаемый DNS-сервер” указываем DNS от Яндекса. Нажимаем “Ок” и еще раз “Ок”.
Все готово, защита на компьютере настроена.
Указываем Яндекс.DNS на мобильном устройстве
Я покажу на примере HTC One V, который работает на Android 4.0.
Заходим в настройки и выбираем Wi-Fi. Затем нажимаем на сеть к которой подключены и держим несколько секунд, пока не появится меню. Выбираем “Изменить сеть”.
Устанавливаем галочку возле “Расширенные параметры” и прокручиваем окно. Нажимаем кнопку “DHCP”. Выбираем “Статический”.
Прокручиваем список, и там где “DNS 1” пишем выбранный Вами DNS от Яндекса. Нажимаем “Сохранить”.
Теперь опасные сайты будут заблокированные на телефоне.
Проверка Яндекс.DNS в работе
Для того, что бы проверить работает ли блокировка опасных сайтов, нужно просто зайти на сайт с плохим содержанием, или на сайт взрослой тематики (если Вы установили DNS с фильтром сайтов для взрослых).
Для проверки я попытался зайти на один из таких сайтов, и вот что увидел:
Проблемы при работе через Яндекс.DNS
Скорее всего, без проблем при работе через эти DNS не обойтись. Тем более, что сервис Яндекс.DNS пока что работает в режиме бета тестирования (по состоянию на 03.04.2013). Что стоит понимать под словом “проблемы”? Прежде всего, это блокировка нужных и не опасных сайтов. Поскольку для блокировки Яндекс будет использовать свою базу “плохих” сайтов, то казусы будут. Я как вебмастер, знаю, что Яндекс может ошибочно отнести хороший и чистый сайт к числу вредоносных.
Заключение
Мне нравится то, что делает Яндекс. Его старания сделать интернет безопасным и чистым, заслуживают внимания. Самое главное, что есть хорошая возможность защитить детей от сайтов, которые содержат информацию для взрослых.
Защита от плохих сайтов на уровне доступа к сети, это отлично. Но нужно, что бы это все хорошо и адекватно работало. Сейчас еще рано говорить о качестве работы сервиса Яндекс.DNS, время и отзывы пользователей покажут насколько хорошо, или плохо работает этот сервис.
Ну а я свое дело сделал, я рассказал Вам как это все настроить :). Всего хорошего!
Родительский контроль с помощью роутера | Маршрутизаторы | Блог
Интернет несет в себе множество соблазнов, поэтому желание родителей как-то обезопасить детей от «тлетворного влияния» всемирной паутины вполне понятно. В то же время, полностью запрещать Интернет — не лучший выход: в сети много полезной и важной информации. К счастью, отделить «полезный» Интернет от «вредного» вполне возможно и для этого достаточно правильно настроить роутер, раздающий дома Wi-Fi.
Что лучше — роутер или специальные программы?
Для родительского контроля создано большое количество приложений, которые устанавливаются на компьютер или смартфон и не дают посещать с него сайты с сомнительным содержанием.
Некоторые брандмауэры и антивирусы тоже имеют функцию родительского контроля. За счет более глубокого вмешательства в системные процессы, они способны контролировать и ограничивать установку небезопасных программ, устанавливать лимиты времени работы и доступа к Интернет, блокировать доступ к приложениям, сайтам, социальным сетям, вести учет деятельности в сети и даже определять «нежелательные» слова в переписке, которую ведет ребенок.
Однако минусы у программ родительского контроля тоже есть. Во-первых, большинство из них платные. Во-вторых, смышленые дети исхитряются обойти блокировку. В-третьих, приложение защищает только то устройство, на которое установлено (а иногда защита и вовсе работает только в одном браузере). Стоит ребенку войти в сеть с другого телефона или компьютера — и никаких ограничений не будет.
Другое дело — родительский контроль на роутере. Он будет распространяться на все подсоединенные к нему устройства. И избавиться от этого контроля не так просто.
Что нужно знать для настройки роутера
Нужно понимать, что такое MAC-адрес и IP-адрес.
МАС-адрес — это уникальный физический адрес устройства, подключающегося к сети. Состоит из восьми пар цифр и букв (от a до f), разделенных двоеточием. Выглядит примерно как 4f:34:3a:27:e0:16.
IP-адрес — это сетевой адрес устройства в локальной сети или сети Интернет, он состоит из четырех чисел (от 0 до 255), разделенных точкой (например, 124.23.0.254).
Любое устройство, даже обесточенное, имеет МАС-адрес. IP-адрес устройство получает, когда подключается к сети. Очень часто роутеры выдают IP-адреса динамически, из незанятых. Утром устройство может получить один IP-адрес, а вечером — уже другой. А на другом роутере — вообще третий.
Можно использовать следующую аналогию: МАС-адрес — это ФИО человека, а IP-адрес — его прозвище в коллективе. «Иванов Иван Иванович», «Ванёк», «сынок» и «Иваныч» могут обозначать одного и того же человека, но «Иванов Иван Иванович» он всегда, а «сынок» — только для родителей.
МАС-адрес используется для физической идентификации клиента и именно по этому адресу настраивается фильтрация в маршрутизаторе. Разобраться, кого как зовут поможет вкладка «Клиенты» веб-интерфейса роутера — там обычно есть полный список подключенных устройств, МАС-адреса, сетевые имена и IP-адреса.
IP-адрес меняется, а MAC-адрес — нет. В принципе, его можно сменить, но на некоторых устройствах (смартфонах, некоторых сетевых картах, сетевых устройствах) это сделать довольно непросто.
Настройка роутера с помощью специальных вкладок родительского контроля
Родительский контроль — проблема весьма актуальная и производители роутеров массово оснащают прошивки своих устройств средствами для блокирования нежелательного контента. У роутеров D-link и ТР-Link блокировка настраивается через вкладку «Яндекс.DNS», а у TP-Link и Sagemcom вкладка называется «Родительский контроль».
Подобные вкладки есть и у других производителей, с особыми названиями и тонкостями — универсальной инструкции по настройке не существует.
Вкладка «Яндекс.DNS» роутеров D-link и TP-link использует бесплатную одноименную службу, о которой будет подробнее написано ниже. Вообще Яндекс.DNS можно использовать на любом роутере, но роутер D-link с новой прошивкой позволяет задать ограничения конкретным устройствам в сети.
С помощью этой вкладки можно оставить «полный» доступ только с определенных устройств, а все новые, входящие в сеть, будут входить в ограниченном режиме — например, в «детском». Для этого следует закрепить за «родительскими» устройствами определенные IP-адреса на странице LAN.
Затем на вкладке «Яндекс.DNS-Устройства и правила» выставить им правило «Без защиты».
На вкладке «Яндекс.DNS-Настройки» следует задать режим по умолчанию «Детский».
Готово. Теперь роутер позволяет смотреть всё подряд только разрешенным устройствам, а все остальные — под контролем.
У роутеров TP-link есть несколько версий прошивки с родительским контролем. В старых прошивках в этой вкладке можно создать черный или белый список сайтов и, в зависимости от выбранного режима работы, запретить доступ к сайтам в списке или, наоборот, разрешить доступ только к указанным в списке.
Фактически это просто URL-фильтр, который есть в любом роутере. Единственная разница — здесь можно задать МАС-адрес контролирующего компьютера, к которому правила родительского контроля применяться не будут.
На прошивках поновее можно также задать расписание включения контроля и задать список устройств, на которые будет распространяться контроль.
А вот новейшая прошивка TP-Link предоставляет побольше возможностей. Здесь уже можно к различным устройствам применить разные уровни фильтрации контента.
Настройки позволяют широко варьировать уровень фильтрации как по возрасту посетителей «всемирной сети» (Дошкольники, Школьники, Подростки, Совершеннолетние), так и по категориям контента (Материалы для взрослых, Азартные игры, Социальные сети и т. д.).
Функционал прошивки может поспорить и с некоторыми платными программами и сервисами. Здесь же можно настроить и расписание действия родительского контроля.
Вкладка «Родительский контроль» на роутерах Sagemcom скрывает обычный URL-фильтр без возможности определения клиентов, для которых он будет действовать и расписание доступности Интернета.
Расписание, в отличие от URL-фильтра, можно привязать к отдельным клиентам.
Настройка роутера без вкладок родительского контроля
Если вкладки «Родительский контроль» нет в веб-интерфейсе вашего устройства, нужно попробовать обновить прошивку. Если же и после обновления ничего похожего не появилось, придется обойтись штатными возможностями, которые есть во всех моделях маршрутизаторов — фильтрацией по URL и сменой адреса DNS-сервера.
Настройка URL-фильтра
URL-фильтр позволяет ограничить доступ к определенным сайтам по их именам.
В большинстве устройств URL-фильтр может работать одном из двух режимов: черного или белого списка. В режиме черного списка будут доступны все сайты, кроме перечисленных.
В режиме белого списка будут доступны только перечисленные сайты.
Поскольку перечислить все «неблагонадежные» сайты абсолютно нереально, чаще всего роутер настраивается по «жесткому» второму варианту. В качестве основы можно использовать какой-нибудь рекомендованный белый список и добавлять в него сайты по необходимости.
URL-фильтр удобен, если его действие можно применять или не применять к определенным устройствам в сети. Редкие роутеры позволяют гибко настраивать каждый разрешенный адрес на каждое устройство. Обычно маршрутизаторы позволяют задать как минимум список клиентов, на которых URL-фильтр не действует. Если и такой возможности устройство не предоставляет, вам придется менять настройки роутера каждый раз, как потребуется посетить сайт не из «белого списка». Это совсем неудобно и лучше воспользоваться другими функциями ограничения доступа.
Смена адреса DNS-сервера
DNS-сервер (сервер имен) конвертирует привычное нам имя сайта (например, yandex.ru) в IP-адрес сервера яндекса. Только получив этот IP-адрес, браузер сможет открыть запрошенный сайт. Защита от нежелательного контента с помощью DNS предполагает, что вместо простого DNS-сервера вы используете DNS-сервер специальный, который не просто конвертирует имя сайта в его IP-адрес, но и проверяет его «благонадежность». И если запрашиваемый сайт включен в «черный список» службы, вместо искомого сайта на экране браузера появится «заглушка». Просто и достаточно эффективно.
Удобнее всего пользоваться такими сервисами, если настройки роутера позволяют задавать разный DNS-сервер для разных клиентов (или групп клиентов, или хотя бы сетей). Иначе вам, опять же, придется менять настройки роутера всякий раз, как вы увидите «заглушку» вместо нужного сайта.
В некоторых вариантах соединения с провайдером DNS-сервер задать невозможно — он предоставляется провайдером автоматически и в настройках соединения его просто нет. В этом случае можно попробовать задать его с помощью настроек DHCP-сервера роутера — DNS-сервер службы следует вписать в строку Primary DNS.
Из наиболее распространенных сервисов родительского контроля на основе DNS можно отметить Яндекс.DNS, OpenDNS и SkyDNS.
Яндекс.DNS — российский сервис, предоставляющий два уровня защиты — «безопасный» (без мошеннических сайтов и вирусов) и «семейный» (то же, плюс блокируются еще сайты для взрослых).
Для установки «безопасного» режима следует указать в качестве адреса DNS-сервера один из двух серверов Яндекса: 77.88.8.88 или 77.88.8.2. Для «семейного» режима адреса другие — 77.88.8.7 или 77.88.8.3.
Плюсы сервиса — отличная скорость, высокая эффективность и полная бесплатность. Минусы — нельзя настроить или добавить категории блокируемых сайтов. Социальные сети, например, не блокируются. Если вы хотите запретить ребенку доступ к «Вконтакте», вам придется использовать URL-фильтр в дополнение к Яндекс.DNS.
OpenDNS (он же Cisco Umbrella) — служба DNS-серверов, принадлежащая американской компании Cisco.
Кроме общедоступных DNS-серверов, OpenDNS предоставляет сервера с защитой от нежелательного содержимого. Например, Family Shield c защитой от сайтов для взрослых имеет адреса DNS серверов 208.67.222.123 или 208.67.220.123. А вот бесплатный вариант Home с возможностью настройки блокируемого контента в России недоступен — можно использовать только платный вариант Home VIP.
В плюсах у OpenDNS — платные варианты с возможностью конфигурирования. В минусах — нет безопасного варианта без фильтрации «взрослого» контента, да и фильтр нацелен, в основном, на обслуживание англоязычного сегмента Интернета, так что некоторые русскоязычные сайты для взрослых могут пройти сквозь фильтр.
SkyDNS — платный сервис фильтрации нежелательного контента. Приобретя аккаунт, вы получите богатые возможности по конфигурированию фильтра. Можно выбрать, сайты какой категории блокировать (тут и безопасность, и сайты для взрослых, и социальные сети, и игры, и многое другое), задать различные профили с разными настройками блокировок, установить расписание действия того или иного профиля, и многое другое.
Существует расширение для роутеров Zyxel, которое упрощает настройку сервиса и позволяет применять к разным устройствам в сети разные профили.
Это сильно расширяет возможности контроля и наблюдения — в личном кабинете сервиса можно получить полную статистику по сетевой активности из вашей сети.
Плюс сервиса — широчайшие возможности настройки. Минусы — кроме отсутствия бесплатных сервисов — ваш профиль должен быть привязан к статическому IP-адресу. Если провайдер выдает вам при подключении динамический IP-адрес (что происходит в 99,9% случаев) вам придется разбираться с конфигурированием DDNS на вашем роутере, подключать одну из служб DDNS и привязывать к ней ваш профиль. Или же подключать услугу статического IP у провайдера. Впрочем, на сайте SkyDNS есть описание настроек DDNS для большинства распространенных роутеров.
Как не позволить обойти родительский контроль
У многих людей любая попытка контроля вызывает желание его обойти, даже если в этом нет никакой реальной надобности, и ваши дети — не исключение. Самый строгая фильтрация Интернета будет абсолютно бесполезна, если вы оставите «лазейки» для её обхода.
Во-первых, смените имя и пароль доступа к веб-интерфейсу на что-нибудь посложнее стандартного admin/admin.
Во-вторых, имея физический доступ к роутеру, пароль на нем можно сбросить (правда, это ведет и к сбросу всех остальных настроек).
В-третьих, заблокируйте различные способы обхода блокировки. Tor Browser, например, без малейших проблем обходит любые сервисы на основе DNS. Единственный способ пресечь этот обход — жесткая фильтрация по белому списку.
Если вы фильтруете контент не для всей сети, а только для определенных устройств, то смена МАС-адреса моментально выведет гаджет вашего ребенка «из-под колпака».Наиболее сложен для обхода URL-фильтр в режиме «белого списка» для всей сети (без привязки к МАС-адресам), но подумайте — нужна ли такая жесткая блокировка? Ведь есть мобильные сети, общедоступные Wi-Fi сети и т. п. Если совсем «перекрыть кислород» ребенку, он может начать искать совершенно неподконтрольные вам способы получения информации — нужно ли вам это? В родительском контроле (и не только в нем) наилучший эффект дает именно «золотая середина».
Решаем проблему перехвата и подмены DNS-запросов. DNSCrypt в Яндекс.Браузере
Когда речь заходит о защите веб-трафика от перехвата и подмены, то на ум в первую очередь приходят протокол HTTPS или даже собственный VPN-сервер. К сожалению, многие забывают еще об одной незащищенной стороне, а именно о DNS-запросах. Сегодня я еще раз привлеку внимание к этой проблеме и расскажу о том, как мы решаем ее в Яндекс.Браузере с помощью технологии DNSCrypt.Архитектура системы доменных имен (DNS) за редким исключением остается неизменной с 1983 года. Каждый раз, когда вы хотите открыть сайт, браузер отправляет запрос с указанием домена на DNS-сервер, который в ответ отправляет необходимый IP-адрес. И запрос, и ответ на него передаются в открытом виде, без какого-либо шифрования. Это значит, что ваш провайдер, администратор сети или злоумышленник c MITM могут не только хранить историю всех запрошенных вами сайтов, но и подменять ответы на эти запросы. Звучит неприятно, не правда ли?
Предлагаю вспомнить несколько реальных историй перехвата и подмены DNS-запросов.
DNS hijacking
Перехват DNS-запросов (DNS hijacking) это не какая-то редкая страшилка, а вполне распространенная практика. Например, среди провайдеров. Обычно это работает следующим образом. Если пользователь пытается перейти на несуществующий сайт, то провайдер перенаправляет его на свою страницу с рекламой. А может и не на свою.
Американский провайдер Earthlink в 2006 году стал перенаправлять пользователей и информацию об их запросах рекламному партнеру Barefruit. Особенно плохо это выглядело в том случае, если пользователь запрашивал несуществующий домен известного сайта, например, webmale.google.com. Пользователь видел рекламу и контент, которые не имели ничего общего с google.com в адресной строке.
Подобная практика явно нарушает стандарт RFC для DNS-ответов и делает пользователей уязвимыми для XSS-атак. К примеру, исследователь Дэн Камински продемонстрировал уязвимость, которая позволяла встраивать в Facebook или PayPal мошеннические фреймы.
Вы, конечно же, можете отказаться от использования DNS-сервера провайдера и прописать в настройках роутера сторонние решения (например, Google Public DNS или Яндекс.DNS). Но при отсутствии шифрования это никак не решит проблему. Провайдер вполне может вмешаться и здесь, подменив ответ на свой.
Если уж провайдеры научились зарабатывать на подмене DNS-ответов, то что говорить о мошенниках. В 2007 году группа предприимчивых людей из Эстонии создала троян DNSChanger, который за несколько лет заразил 4 млн компьютеров по всему миру. Троян изменял системные настройки DNS, что приводило к появлению рекламы на веб-страницах. Это принесло создателям $14 млн и тюремный срок. Причем самое удивительное в этой истории то, что по решению суда пришлось в течение 7 месяцев поддерживать временные DNS-сервера по тем адресам, где располагались сервера мошенников. Если бы они это не сделали, то пользователи зараженных устройств одномоментно лишились бы доступа в сеть.
Масштабы трояна DNSChanger впечатляют, но бразильцы его переплюнули. 4,5 млн DSL-модемов было взломано в одной только Бразилии в 2011-2012 годах. Для этого было достаточно разослать спам со ссылкой на вредоносную страницу, которая взламывала модем и прописывала новый адрес DNS-сервера. Причем в этот раз мошенники не стали мелочиться с рекламой. На своих подставных DNS-серверах они подменяли адреса для всех крупнейших банков Бразилии.
С домашними и офисными WiFi-роутерами дело обстоит так же печально, как и с бразильскими модемами. Пользователи нередко оставляют заводские логин и пароль на админку, да и за выходом свежих прошивок с исправленными уязвимостями не следит почти никто (кроме читателей Хабра, конечно же). В прошлом году исследователи из Sentrant в своем докладе рассказали о новых случаях взлома роутеров. Мошенники перехватывали обращения к Google Analytics и благодаря этому встраивали на сайты рекламу.
Думаю, с примерами перехвата можно закончить. Вывод тут простой: DNS перехватывают много, на разных этапах и с разной целью.
DNSCrypt
Разработчики популярного сервиса OpenDNS предложили решение проблемы еще несколько лет назад. Они создали опенсорсную утилиту DNSCrypt и одноименный протокол, который играет для DNS-запросов такую же роль, как и SSL для HTTP.
Во-первых, DNSCrypt зашифрует с помощью стойкой эллиптической криптографии сообщения между вашим компьютером и DNS-сервером. Это защитит их от прослушки и MITM.
Во-вторых, вы больше не привязаны к серверу провайдера или настройкам своего роутера. DNSCrypt обращается за адресами напрямую на указанный вами сервер.
До сих пор для применения DNSCrypt пользователям было необходимо установить на компьютер отдельную утилиту. Это не сложно, но без широкого распространения знаний об угрозе и способах ее решения вряд ли стоит рассчитывать на массовое применение технологии.
Поддержка DNSCrypt в Яндекс.Браузере
Наша команда считает шифрование DNS не менее важным, чем переход на HTTPS, поэтому мы решили поддержать DNSCrypt на уровне Яндекс.Браузера. И сегодня мы начинаем тестирование новой бета-версии Яндекс.Браузера 16.4, пользователи которой могут включить в настройках защиту DNS-запросов.
При этом все запросы в зашифрованном виде будут отправляться на быстрый DNS-сервер Яндекса, который также получил поддержку протокола DNSCrypt. Ограничивать пользователей только одним сервером мы не хотим, поэтому уже в ближайшее время добавим в этом месте возможность выбрать альтернативный DNS-сервер (например, тот же OpenDNS).
И еще кое-что. Подменить IP-адрес на фишинговый можно не только через перехват запроса, но и через самый обычный системный host-файл. Поэтому мы сейчас экспериментируем с запретом использовать системный резолвер в случае недоступности DNS-сервера. Мы понимаем, что включение этой опции по умолчанию может навредить пользователям корпоративных и локальных ресурсов, поэтому пока только наблюдаем и собираем отзывы.
Установить бету вы можете с browser.yandex.ru/beta. Нам было бы интересно узнать мнение сообщества.
Яндекс.DNS
Технические подробности
Яндекс.DNS — это бесплатный рекурсивный DNS-сервис. Сервера Яндекс.DNS находятся в России, странах СНГ и Западной Европе. Запросы пользователя обрабатывает ближайший дата-центр, что обеспечивает высокую скорость соединения.
Базовый | Безопасный | Семейный | ||
IPv4 | Preferred DNS | 77.88.8.8 | 77.88.8.88 | 77.88.8.7 |
Alternate DNS | 77.88.8.1 | 77.88.8.2 | 77.88.8.3 | |
IPv6 | Preferred DNS | 2a02:6b8::feed:0ff | 2a02:6b8::feed:bad | 2a02:6b8::feed:a11 |
Alternate DNS | 2a02:6b8:0:1::feed:0ff | 2a02:6b8:0:1::feed:bad | 2a02:6b8:0:1::feed:a11 |
Скорость работы Яндекс.DNS во всех трёх режимах одинакова. В «Базовом» режиме не предусмотрена какая-либо фильтрация трафика. В «Безопасном» режиме обеспечивается защита от заражённых и мошеннических сайтов. «Семейный» режим включает защиту от опасных сайтов и блокировку сайтов для взрослых.
Защита от заражённых сайтов
Яндекс ежедневно проверяет десятки миллионов страниц на наличие вредоносного кода, выявляя тысячи зараженных сайтов. Для этого применяются сигнатурная технология Sophos и собственный антивирус Яндекса, построенный на анализе поведения исследуемых сайтов. При обнаружении подозрительной активности страница отмечается как опасная, а вредоносный код добавляется в базу вирусных сигнатур. Данные о заражённых сайтах обновляются несколько раз в сутки.
Защита от мошеннических сайтов
Яндекс также выявляет сайты, обладающие признаками мошеннических. К ним относятся, например, страницы, созданные с целью выманить номер телефона пользователя или вынуждающие его отправить сообщение на короткий номер, потеряв деньги. В «Безопасном» и «Семейном» режимах, Яндекс.DNS блокирует такие сайты — при попытке зайти на них, пользователь увидит предупреждение.
Защита от ботнетов
Попавший в ботнет заражённый компьютер обычно управляется централизованно, через специальный C&C-сервер (от англ. command-and-control — «командование и контроль»). Адрес управляющего сервера меняется динамически, чтобы затруднить его обнаружение и блокировку. Поэтому боту на заражённом компьютере известно только доменное имя сервера — IP-адрес он запрашивает с помощью системного DNS. Яндекс.DNS в «Безопасном» и «Семейном» режимах блокирует запросы IP-адресов всех известных C&C-серверов. Из-за этого программа-бот вынуждена бездействовать, а злоумышленник теряет удалённый доступ к компьютеру пользователя. Постоянно обновляемый список ботнетов и управляющих серверов Яндекс получает от системы Virus Tracker.
Блокировка сайтов для взрослых
Алгоритмы Яндекса умеют определять эротический и порнографический контент в проиндексированных страницах. Анализируется как текст и картинки в документе, так и другие факторы — например, ссылочное окружение. Данные о сайтах с такими страницами обновляются 2-3 раза в неделю.
Блокировка рекламы для взрослых
Яндекс.DNS в роутере
Яндекс.DNS доступен в роутерах Asus, D-Link, TP-Link и ZyXEL. Для популярных моделей этих производителей выпущены специальные версии прошивки с интегрированным Яндекс.DNS.
Особенности Яндекс.DNS в роутере:
- Возможность в один клик выставить режим по умолчанию, в том числе для вновь подключаемых устройств.
- Для каждого устройства можно выбрать свой режим Яндекс.DNS. Устройства идентифицируются по MAC-адресу.
- В «Безопасном» и «Семейном» режимах все запросы к другим DNS-сервисам обрабатывает Яндекс.DNS.
Все способы обхода блокировок любых сайтов!
Этот режим также получить доступ к заблокированным сайтам.
Использование плагинов к браузерам
В браузер можно установить плагины: friGate, ZenMate, Browsec или Data Saver. Данные плагины работают по принципу VPN но только для браузера. Эти плагины легко могут открыть доступ к заблокированным сайтам, это самый легкий способ обхода блокировки. За VPN я расскажу ниже.
Использование VPN сервисов
Следующая возможность обхода блокировки сайтов это использование VPN сервисов. Подключая VPN весь ваш интернет трафик шифруется, а доступ к любым сайтам открывается так трафик проходит через сервера других стран где нет запретов для наших сайтов. Однако, при использовании VPN могут наблюдаться просадки в скорости подключения. Приводить список VPN сервисов я не буду так как их много. Просто гуглите — VPN или бесплатный VPN. На данный момент таких сервисов много и вам не составит труда найти нужный, лично я рекомендую CyberGhost VPN или Open VPN (бесплатный). А тут я расскажу о топ 7 лучших бесплатных VPN!
Использование Tor браузера
Еще один хороший способ для обхода блокировки сайтов — использование веб-браузера Tor Browser. Tor браузер создает анонимную сеть которая шифрует все передаваемые данный в том числе и от провайдера, так же использует серверы разных стран для подключения к интернету. Для обеспечения конфиденциальности пользователей используется многоуровневое шифрование и маршрутизация вашего сетевого трафика по распределенной сети.
Данная технология предотвращает возможность внешнему наблюдателю вашего интернет-соединения узнать какие веб-сайты вы посещаете, предотвращает возможность сайтам узнать ваше физическое местоположение, а также позволяет получить доступ к заблокированным веб-ресурсам.
Но у Tor есть недостаток это низкая скорость подключения. Браузер можно использовать абсолютно бесплатно и без ограничений. О нем я более подробно рассказывал тут.
Более подробно о обходе блокировки сайтов я расскажу в своем видео:
Анонимайзеры
Что бы заходить на любы сайты можно использовать специальные сервисы анонимайзеры, они изменяют URL адрес нужного вам сайта, таким образом можно получить доступ к любому сайту. Лучшие и известные мне анонимайзеры это: Хамелион и noblockme.ru, остальные можете загуглить сами. Просто заходите на сайте анонимайзер и в строке пишете нужный вам сайт, он откроется в анонимном режиме.
Надеюсь, вам поможет обойти блокировку сайтов, один из способов описанных выше. если вы знаете еще какие либо методы, пишите их в комментариях и я добавлю этот метод в статью!
Обход блокировок РКН с помощью DNSTap и BGP / Habr
Тема довольно изъезжена, знаю. К примеру, есть отличная статья, но там рассматривается только IP-часть блоклиста. Мы же добавим еще и домены.
В связи с тем, что суды и РКН блокируют всё направо и налево, а провайдеры усиленно пытаются не попасть под штрафы, выписанные «Ревизорро» — сопутствующие потери от блокировок довольно велики. Да и среди «правомерно» заблокированных сайтов много полезных (привет, rutracker)
Я живу вне юрисдикции РКН, но на родине остались родители, родственники и друзья. Так что было решено придумать легкий для далеких от ИТ личностей способ обхода блокировок, желательно вовсе без их участия.
В этой заметке я не буду расписывать базовые сетевые вещи по шагам, а опишу общие принципы как можно реализовать эту схему. Так что знания как работает сеть вообще и в Linux в частности — must have.
Для начала освежим в памяти что же блокируется.
В выгружаемом XML от РКН несколько типов блокировок:
Мы их сведем для простоты к двум: IP и домен, а из блокировок по URL будем просто вытаскивать домен (точнее за нас это уже сделали).
Хорошие люди из Роскомсвободы реализовали прекрасный API, через который можно получать то, что нам нужно:
Для этого нам нужен какой-нибудь маленький зарубежный VPS, желательно с безлимитным траффиком — таких много по 3-5 баксов. Брать нужно в ближнем зарубежье чтобы пинг был не сильно большой, но опять-таки учитывать, что интернет и география не всегда совпадают. А так как никакого SLA за 5 баксов нет — лучше взять 2+ штуки у разных провайдеров для отказоустойчивости.
Далее нам необходимо настроить зашифрованный туннель от клиентского роутера до VPS. Я использую Wireguard как самый быстрый и простой в настройке т.к. клиентские роутеры у меня тоже на базе Linux (APU2 или что-то на OpenWRT). В случае каких-нибудь Mikrotik/Cisco можно использовать доступные на них протоколы вроде OpenVPN и GRE-over-IPSEC.
Можно, конечно, завернуть вообще весь интернет-траффик через зарубеж. Но, скорее всего, от этого сильно пострадает скорость работы с локальным контентом. Плюс требования к полосе пропускания на VPS будут сильно выше.
Поэтому нам нужно будет каким-то образом выделять траффик к заблокированным сайтам и выборочно его направлять в туннель. Даже если туда попадёт какая-то часть «лишнего» траффика, это всё равно гораздо лучше, чем гонять всё через тоннель.
Для управления траффиком мы будем использовать протокол BGP и анонсировать маршруты до необходимых сетей с нашего VPS на клиентов. В качестве BGP-демона возьмём BIRD, как один из наиболее функциональных и удобных.
IP
С блокировками по IP всё понятно: просто анонсируем все заблокированные IP с VPS. Проблема в том, что подсетей в списке, который отдает API, около 600 тысяч, и подавляющее большинство из них — это хосты /32. Такое количество маршрутов может смутить слабые клиентские роутеры.
Поэтому было решено при обработке списка суммировать до сети /24 если в ней 2 и более хоста. Таким образом количество маршрутов сократилось до ~100 тысяч. Скрипт для этого будет дальше.
Домены
Тут сложнее и способов есть несколько. Например, можно поставить прозрачный Squid на каждом клиентском роутере и делать там перехват HTTP и подглядывание в TLS-хендшейк с целью получения запрашиваемого URL в первом случае и домена из SNI во втором.
Но из-за всяких новомодных TLS1.3+eSNI анализ HTTPS с каждым днем становится всё менее реальным. Да и инфраструктура со стороны клиента усложняется — придется использовать как минимум OpenWRT.
Поэтому я решил пойти по пути перехвата ответов на DNS-запросы. Тут тоже над головой начинает витать всякий DNS-over-TLS/HTTPS, но эту часть мы можем (пока что) контролировать на клиенте — либо отключить, либо использовать свой сервер для DoT/DoH.
Как перехватывать DNS?
Тут тоже может быть несколько подходов.
- Перехват DNS-траффика через PCAP или NFLOG
Оба эти способа перехвата реализованы в утилите sidmat. Но она давно не поддерживается и функционал очень примитивен, так что к ней нужно всё равно нужно писать обвязку. - Анализ логов DNS-сервера
К сожалению, известные мне рекурсоры не умеют логгировать ответы, а только запросы. В принципе это логично, так как в отличии от запросов ответы имеют сложную структуру и писать их в текстовой форме трудновато. - DNSTap
К счастью, многие из них уже поддерживает DNSTap для этих целей.
Что такое DNSTap?
Это клиент-серверный протокол, основанный на Protocol Buffers и Frame Streams для передачи с DNS-сервера на некий коллектор структурированных DNS-запросов и ответов. По сути DNS-сервер передает метаданные запросов и ответов (тип сообщения,IP клиента/сервера и так далее) плюс полные DNS-сообщения в том (бинарном) виде в котором он работает с ними по сети.
Важно понимать, что в парадигме DNSTap DNS-сервер выступает в роли клиента, а коллектор — в роли сервера. То есть DNS-сервер подключается к коллектору, а не наоборот.
На сегодняшний день DNSTap поддерживается во всех популярных DNS-серверах. Но, например, BIND во многих дистрибутивах (вроде Ubuntu LTS) часто собран почему-то без его поддержки. Так что не будем заморачиваться пересборкой, а возьмём более легкий и быстрый рекурсор — Unbound.
Чем ловить DNSTap?
Есть некоторое количество CLI-утилит для работы с потоком DNSTap-событий, но для решения нашей задачи они подходят плохо. Поэтому я решил изобрести свой велосипед, который будет делать всё что необходимо: dnstap-bgp
Алгоритм работы:
- При запуске загружает из текстового файла список доменов, инвертирует их (habr.com -> com.habr), исключает битые строки, дубликаты и поддомены (т.е. если в списке есть habr.com и www.habr.com — будет загружен только первый) и строит префиксное дерево для быстрого поиска по этому списку
- Выступая в роли DNSTap-сервера ждет подключения от DNS-сервера. В принципе он поддерживает как UNIX- так и TCP-сокеты, но известные мне DNS-сервера умеют только в UNIX-сокеты
- Поступающие DNSTap-пакеты десериализуются сначала в структуру Protobuf, а затем само бинарное DNS-сообщение, находящееся в одном из Protobuf-полей, парсится до уровня записей DNS RR
- Проверяется есть ли запрашиваемый хост (или его родительский домен) в загруженном списке, если нет — ответ игнорируется
- Из ответа выбираются только A/AAAA/CNAME RR и из них вытаскиваются соответствующие IPv4/IPv6 адреса
- IP-адреса кешируются с настраиваемым TTL и анонсируются во все сконфигурированные BGP-пиры
- При получении ответа, указывающего на уже закешированный IP — его TTL обновляется
- После истечения TTL запись удаляется из кеша и из BGP-анонсов
Дополнительный функционал:
- Перечитывание списка доменов по SIGHUP
- Синхронизация кеша с другими экземплярами dnstap-bgp через HTTP/JSON
- Дублирование кеша на диске (в базе BoltDB) для восстановление его содержимого после перезапуска
- Поддержка переключения в иной network namespace (зачем это нужно будет описано ниже)
- Поддержка IPv6
Ограничения:
- IDN домены пока не поддерживаются
- Мало настроек BGP
Я собрал RPM и DEB пакеты для удобной установки. Должны работать на всех относительно свежих OS с systemd, т.к. зависимостей у них никаких нет.
Итак, приступим к сборке всех компонентов воедино. В результате у нас должна получиться примерно такая сетевая топология:
Логика работы, думаю, понятна из диаграммы:
- У клиента настроен наш сервер в качестве DNS, причем DNS запросы тоже должны ходить по VPN. Это нужно для того чтобы провайдер не мог использовать перехват DNS для блокировки.
- Клиент при открытии сайта посылает DNS-запрос вида «а какие IP у xxx.org»
- Unbound резолвит xxx.org (или берет из кеша) и отправляет ответ клиенту «у xxx.org такие-то IP», параллельно дублируя его через DNSTap
- dnstap-bgp анонсирует эти адреса в BIRD по BGP в том случае если домен есть в списке заблокированных
- BIRD анонсирует маршрут до этих IP с
next-hop self
клиентскому роутеру - Последующие пакеты от клиента к этим IP идут уже через туннель
На сервере для маршрутов к заблокированным сайтам у меня внутри BIRD используется отдельная таблица и с ОС она никак не пересекается.
В этой схеме есть недостаток: первый SYN пакет от клиента, скорее всего, успеет уйти через отечественного провайдера т.к. маршрут анонсируется не мгновенно. И тут возможны варианты в зависимости от того как провайдер делает блокировку. Если он просто дропает траффик, то проблем нет. А если он редиректит его на какой-то DPI, то (теоретически) возможны спецэффекты.
Также возможны чудеса с несоблюдением клиентами DNS TTL, что может привести к тому что клиент будет юзать какие-то устаревшие записи из своего протухшего кеша вместо того чтобы спросить Unbound.
На практике у меня ни первое ни второе не вызывало проблем, but your mileage may vary.
Настройка сервера
Для удобства раскатывания я написал роль для Ansible. Она может настраивать как сервера, так и клиенты на базе Linux (рассчитано на deb-based дистрибутивы). Все настройки достаточно очевидны и задаются в inventory.yml. Эта роль вырезана из моего большого плейбука, поэтому может содержать ошибки — pull requests welcome 🙂
Пройдёмся по основным компонентам.
BGP
При запуске двух BGP-демонов на одном хосте возникает фундаментальная проблема: BIRD никак не хочет поднимать BGP-пиринг с локалхостом (или с любым локальным интерфейсом). От слова совсем. Гугление и чтение mailing-lists не помогло, там утверждают что это by design. Возможно есть какой-то способ, но я его не нашёл.
Можно попробовать другой BGP-демон, но мне нравится BIRD и он используется везде у меня, не хочется плодить сущности.
Поэтому я спрятал dnstap-bgp внутрь network namespace, которое связано с корневым через veth интерфейс: это как труба, концы которой торчат в разных namespace. На каждый из этих концов мы вешаем приватные p2p IP-адреса, которые за пределы хоста не выходят, поэтому могут быть любыми. Это тот же механизм который используется для доступа к процессам внутри любимого всеми Docker и других контейнеров.
Для этого был написан скрипт и в dnstap-bgp был добавлен уже описанный выше функционал перетаскивания себя за волосы в другой namespace. Из-за этого его необходимо запускать под root либо выдать бинарнику CAP_SYS_ADMIN через команду setcap.
Пример скрипта для создания namespace
#!/bin/bash
NS="dtap"
IP="/sbin/ip"
IPNS="$IP netns exec $NS $IP"
IF_R="veth-$NS-r"
IF_NS="veth-$NS-ns"
IP_R="192.168.149.1"
IP_NS="192.168.149.2"
/bin/systemctl stop dnstap-bgp || true
$IP netns del $NS > /dev/null 2>&1
$IP netns add $NS
$IP link add $IF_R type veth peer name $IF_NS
$IP link set $IF_NS netns $NS
$IP addr add $IP_R remote $IP_NS dev $IF_R
$IP link set $IF_R up
$IPNS addr add $IP_NS remote $IP_R dev $IF_NS
$IPNS link set $IF_NS up
/bin/systemctl start dnstap-bgp
dnstap-bgp.conf
namespace = "dtap"
domains = "/var/cache/rkn_domains.txt"
ttl = "168h"
[dnstap]
listen = "/tmp/dnstap.sock"
perm = "0666"
[bgp]
as = 65000
routerid = "192.168.149.2"
peers = [
"192.168.149.1",
]
bird.conf
router id 192.168.1.1;
table rkn;
# Clients
protocol bgp bgp_client1 {
table rkn;
local as 65000;
neighbor 192.168.1.2 as 65000;
direct;
bfd on;
next hop self;
graceful restart;
graceful restart time 60;
export all;
import none;
}
# DNSTap-BGP
protocol bgp bgp_dnstap {
table rkn;
local as 65000;
neighbor 192.168.149.2 as 65000;
direct;
passive on;
rr client;
import all;
export none;
}
# Static routes list
protocol static static_rkn {
table rkn;
include "rkn_routes.list";
import all;
export none;
}
rkn_routes.list
route 3.226.79.85/32 via "ens3";
route 18.236.189.0/24 via "ens3";
route 3.224.21.0/24 via "ens3";
...
DNS
По умолчанию в Ubuntu бинарник Unbound зажат AppArmor-профилем, который запрещает ему коннектиться ко всяким там DNSTap-сокетам. Можно либо удалить нафиг этот профиль, либо отключить его:
# cd /etc/apparmor.d/disable && ln -s ../usr.sbin.unbound .
# apparmor_parser -R /etc/apparmor.d/usr.sbin.unbound
Это, наверное, надо добавить в плейбук. Идеально, конечно, поправить профиль и выдать нужные права, но мне было лень.
unbound.conf
server:
chroot: ""
port: 53
interface: 0.0.0.0
root-hints: "/var/lib/unbound/named.root"
auto-trust-anchor-file: "/var/lib/unbound/root.key"
access-control: 192.168.0.0/16 allow
remote-control:
control-enable: yes
control-use-cert: no
dnstap:
dnstap-enable: yes
dnstap-socket-path: "/tmp/dnstap.sock"
dnstap-send-identity: no
dnstap-send-version: no
dnstap-log-client-response-messages: yes
Скачивание и обработка списков
Скрипт для скачивания и обработки списка IP-адресов
Он скачивает список, суммаризует до префикса pfx. В dont_add и dont_summarize можно сказать IP и сети, которые нужно пропустить или не суммаризовать. Мне это было нужно т.к. подсеть моего VPS оказалась в блоклисте 🙂
Самое смешное что API РосКомСвободы блокирует запросы с дефолтным юзер-агентом Питона. Видать скрипт-кидди достали. Поэтому меняем его на Огнелиса.
Пока что он работает только с IPv4 т.к. доля IPv6 невелика, но это будет легко исправить. Разве что придется использовать еще и bird6.
rkn.py
#!/usr/bin/python3
import json, urllib.request, ipaddress as ipa
url = 'https://api.reserve-rbl.ru/api/v2/ips/json'
pfx = '24'
dont_summarize = {
# ipa.IPv4Network('1.1.1.0/24'),
}
dont_add = {
# ipa.IPv4Address('1.1.1.1'),
}
req = urllib.request.Request(
url,
data=None,
headers={
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36'
}
)
f = urllib.request.urlopen(req)
ips = json.loads(f.read().decode('utf-8'))
prefix32 = ipa.IPv4Address('255.255.255.255')
r = {}
for i in ips:
ip = ipa.ip_network(i)
if not isinstance(ip, ipa.IPv4Network):
continue
addr = ip.network_address
if addr in dont_add:
continue
m = ip.netmask
if m != prefix32:
r[m] = [addr, 1]
continue
sn = ipa.IPv4Network(str(addr) + '/' + pfx, strict=False)
if sn in dont_summarize:
tgt = addr
else:
tgt = sn
if not sn in r:
r[tgt] = [addr, 1]
else:
r[tgt][1] += 1
o = []
for n, v in r.items():
if v[1] == 1:
o.append(str(v[0]) + '/32')
else:
o.append(n)
for k in o:
print(k)
Скрипт для обновления
Он у меня запускается по крону раз в сутки, может стоит дергать раз в 4 часа т.к. это, по-моему, период обновления который РКН требует от провайдеров. Плюс, есть какие-то еще суперсрочные блокировки у них, которые может и быстрее прилетают.
Делает следующее:
- Запускает первый скрипт и обновляет список маршрутов (
rkn_routes.list
) для BIRD - Релоадит BIRD
- Обновляет и подчищает список доменов для dnstap-bgp
- Релоадит dnstap-bgp
rkn_update.sh
#!/bin/bash
ROUTES="/etc/bird/rkn_routes.list"
DOMAINS="/var/cache/rkn_domains.txt"
# Get & summarize routes
/opt/rkn.py | sed 's/\(.*\)/route \1 via "ens3";/' > $ROUTES.new
if [ $? -ne 0 ]; then
rm -f $ROUTES.new
echo "Unable to download RKN routes"
exit 1
fi
if [ -e $ROUTES ]; then
mv $ROUTES $ROUTES.old
fi
mv $ROUTES.new $ROUTES
/bin/systemctl try-reload-or-restart bird
# Get domains
curl -s https://api.reserve-rbl.ru/api/v2/domains/json -o - | jq -r '.[]' | sed 's/^\*\.//' | sort | uniq > $DOMAINS.new
if [ $? -ne 0 ]; then
rm -f $DOMAINS.new
echo "Unable to download RKN domains"
exit 1
fi
if [ -e $DOMAINS ]; then
mv $DOMAINS $DOMAINS.old
fi
mv $DOMAINS.new $DOMAINS
/bin/systemctl try-reload-or-restart dnstap-bgp
Они были написаны не особо задумываясь, поэтому если видите что можно улучшить — дерзайте.
Настройка клиента
Тут я приведу примеры для Linux-роутеров, но в случае Mikrotik/Cisco это должно быть еще проще.
Для начала настраиваем BIRD:
bird.conf
router id 192.168.1.2;
table rkn;
protocol device {
scan time 10;
};
# Servers
protocol bgp bgp_server1 {
table rkn;
local as 65000;
neighbor 192.168.1.1 as 65000;
direct;
bfd on;
next hop self;
graceful restart;
graceful restart time 60;
rr client;
export none;
import all;
}
protocol kernel {
table rkn;
kernel table 222;
scan time 10;
export all;
import none;
}
Таким образом мы будем синхронизировать маршруты, полученные из BGP, с таблицей маршрутизации ядра за номером 222.
После этого достаточно попросить ядро глядеть в эту табличку перед тем как заглядывать в дефолтную:
# ip rule add from all pref 256 lookup 222
# ip rule
0: from all lookup local
256: from all lookup 222
32766: from all lookup main
32767: from all lookup default
Всё, осталось настроить DHCP на роутере на раздачу туннельного IP-адреса сервера в качестве DNS и схема готова.
При текущем алгоритме формирования и обработки списка доменов в него попадает, в том числе, youtube.com
и его CDNы.
А это приводит к тому что все видео будут ехать через VPN, что может забить весь канал. Возможно стоит составить некий список популярных доменов-исключений, которые блокировать у РКН пока что кишка тонка. И пропускать их при парсинге.
Описанный способ позволяет обходить практические любые блокировки, которые реализуют провайдеры на данный момент.
В принципе, dnstap-bgp можно использовать для любых других целей где необходим некий уровень управления траффиком на основе доменного имени. Только нужно учитывать что в наше время на одном и том же IP-адресе может висеть тысяча сайтов (за каким-нибудь Cloudflare, например), так что этот способ имеет довольно низкую точность.
Но для нужд обхода блокировок этого вполне достаточно.
Дополнения, правки, пуллреквесты — приветствуются!