Dnscrypt установка на роутер
OpenWrt ставится на очень много моделей soho роутеров, конфигурируется и расширяется как душа пожелает. Сейчас многие прошивки роутеров — это надстройки над OpenWrt.
Wireguard используется из-за его быстрой и простой настройки, а так же из-за высокой скорости передачи через туннель.
В нашем случае сервер — это VPS вне РКН, клиент — OpenWrt роутер дома. Когда вы захотите зайти на pornolab telegram, ваш роутер направит трафик через сервер с WireGuard.
WireGuard поднимает site-to-site соединение, т.е. и у сервера и у клиента имеется серверная и клиентская часть конфигурации. Если не понятно — станет понятно когда увидите конфигурацию.
У сервера и у клиента есть свои собственные приватный и публичный ключи.
Я проделываю всё на Ubuntu 18.04, но в официальной документации есть инструкции по установке для всех известных и не очень ОС.
Установите software-properties-common — пакет предоставляет возможность добавления и удаления PPA
Генерируем ключи для сервера
Ключи сохраним в директории WireGuard для удобства
Соответственно в файле privatekey-server будет приватный ключ, а в publickey-server — публичный.
Так же сгенерируем сразу ключ для клиента
Конфиг хранится в /etc/wireguard/wg0.conf
Серверная часть выглядит так
Address — адрес для интерфейса wg (адрес внутри туннеля)
PrivateKey — Приватный ключ (privatekey-server)
ListenPort — Порт на котором служба ожидает подключения
Ну и делаем маскарадинг, потому что мы будем использовать этот сервер для выхода в интернет
Обратите внимание, что имя интерфейса в вашем случае может отличаться
PublicKey — публичный ключ нашего роутера (publickey-client)
AllowedIPs — подсети, которые будут доступны через этот туннель. Серверу требуется доступ только до адреса клиента
Обе части хранятся в одном конфиге.
Включаем автозапуск при перезагрузке
Делаем сервер маршрутизатором
Настроим фаервол. Предположим, что у нас на сервере только WireGuard и ssh
Сохраним конфигурацию iptables
Поднимаем wg интерфейс первый раз вручную
WireGuard сервер готов
UPD 27.06.19 Если ваш провайдер до сих пор использует PPoE, то нужно добавить правило
Я использую OpenWrt версии 18.06.1 на Xiaomi mi 3G и Asus RT-N16.
Загружаем списки, помещаем их в iptables, все адреса из этих списков iptables помечает маркером 0x1. Далее все пакеты помеченные 0x1 идут в отдельную таблицу маршрутизации, все пакеты попавшие в эту таблицу маршрутизации идут через wg интерфейс.
Насчет занимаемого места на флеше, на всё понадобится примерно 0.9МБ. Если у вас совсем плохо с местом, замените curl wget’ом и можете не ставить dnscrypt-proxy.
Ставим пакеты. В OpenWrt это просто сделать через менеджер пакетов opkg
Всё, что можно сделать через стандартные возможности OpenWrt, сделано через них. Всё остальное (кроме hotplug) я поместил в небольшой скрипт
Списки запрещенных подсетей и адресов получаем файлами. Для них создаём директорию в /tmp. В /tmp — потому что это RAM, такая особенность OpenWrt, довольно удобная. На ROM роутера что-то писать лишний раз не стоит.
Выкачиваем списки с antifilter.download curl’ом, флаг z означает, что curl будет скачивать файл, только если удаленный файл отличается от локального или если его нет, как например в случае при загрузке роутера.
subnet.lst — список заблокированных подсетей, изменяется не часто.
ipsum.lst — список заблокированных адресов, который суммаризирован по маске. Вместо 150 тысяч записей получаем 15 тысяч — удобно.
После того как файлы у нас — рестартуем firewall, это нужно для того что бы ipset отработал и добавил списки в iptables, ipset у нас будет сконфигурен в /etc/config/firewall.
Скрипт этот мы добавляем в /etc/init.d/ назовём hirkn. Сделаем его исполняемым
Теперь у нас не просто скрипт, а целая служба. Для того, что бы он запускался при загрузке, делаем симлинк в /etc/rc.d. Нам нужно, что бы он запускался после всех остальных служб, поэтому делаем приставку S99
Списки нужно обновлять время от времени, добавляем запись в cron
Мне кажется вполне достаточным обновлять их раз в сутки. Имейте в виду, что при добавлении списков в ipset, отваливается сеть, в моём случае это 2 секунды.
Так же включите крон, по дефолту он отключен
Создаем таблицу маршрутизации для трафика через туннель, просто добавив строку
в файл /etc/iproute2/rt_tables
Создать дефолтный маршрут для таблицы “vpn” через wg интерфейс можно командой
Но при рестарте сети маршрут пропадёт, поэтому создаём файл 30-rknroute в директории /etc/hotplug.d/iface/ с простым содержимым:
Это означает, что при включении\выключении интерфейсов будет добавляться наш маршрут. И соответственно, этот маршрут будет всегда прописан.
Нам необходимо сконфигурировать WireGuard и правило для пакетов с меткой 0x1.
Конфигурация WireGuard располагается в /etc/config/network
private_key — это privatekey-client, который мы генерировали при настройке сервера
list addresses — адрес wg интерфейса
listen_port — порт на котором WireGuard принимает соединения. Но соединение будет происходить через порт на сервере, поэтому здесь мы не будем открывать для него порт на firewall
proto — указываем протокол, что бы openwrt понимало что это конфигурация WireGuard
public_key — ключ publickey-server
allowed_ips — подсети, в которые может ходить трафик через тунель, в нашем случае никаких ограничей не требуется, поэтому 0.0.0.0/0
route_allowed_ips — флаг, который делает роут через wg интерфейс для перечисленных сетей из параметра allowed_ips. В нашем случае это не нужно, эту работу выполняет iptables
endpoint_host — ip/url нашего wg сервера
persistent_keepalive — интервал времени, через который отправляются пакеты для поддержки соединения
endpoint_port — порт wireguard на сервере
Ещё в конфигурацию network добавим правило, которое будет отправлять весь трафик, помеченный 0x1, в таблицу маршрутизации “vpn”
UPD: На хабре подсказали, что вполне себе вписываются. Зададим их после настройки ipset
Конфигурация фаервола находится в /etc/config/firewall
Добавляем зону для wireguard. В openwrt зоны — это кастомные цепочки в iptables. Таким образом создаётся зона с одним\несколькими интерфейсами и уже на неё вешаются правила. Зона для wg выглядит например вот так
Мы разрешаем только выход трафика из интерфейса и включаем маскарадинг.
Теперь нужно разрешить переадресацию с lan зоны на wg зону
Настроим формирование списков в ipset
loadfile — файл из которого берем список
name — имя для нашего списка
storage, match — здесь указываем как хранить и какой тип данных. Будем хранить тип “подсеть”
UPD: Если хотите использовать список отдельных IP адресов, то вам необходимо увеличить размер списка ipset. В config ipset добавьте
Иначе вы будете получать ошибку
UPD: Добавим два правила маркировки пакетов
Эти правила подразумевают под собой, что все пакеты идущие в подсети из списков vpn_subnets и vpn_ipsum необходимо помечать маркером 0x1.
После этого рестартуем сеть
и запускаем скрипт
После отработки скрипта у вас должно всё заработать.
Проверьте маршрут на клиенте роутера
Зачем? Ваш провайдер может заботливо подменять ip адрес заблокированного ресурса, таким образом перенаправляя вас на свой ip с заглушкой, ну и наш обход по ip в данном случае не поможет. Для подмены не всегда даже нужно использовать dns сервер провайдера, ваши запросы могут перехватываться и ответы подменяться. Ну и к слову, это может делать не только провайдер.
Настраиваем конфиг /etc/config/dnscrypt-proxy примерно так
Таким образом у нас есть сервис dnscrypt на порту 5353 доступный на localhost.
Настраиваем dnsmasq на работу с dnscrypt. В /etc/config/dhcp комментируем строчку
для того что бы не были задействованы dns серверы провайдера
Запись list server ‘domain/ip_dns’ указывает какой dns сервер использовать для резолва указанного домена. Таким образом мы не задействуем dnscrypt для синхронизации ntp — для работы службе dnscrypt важно иметь актуальное время.
При загрузке роутера, скрипт hirkn запускается быстрее чем стартует dnscrypt, таким образом домен antifilter.download не резолвится и списки не скачиваются. Можно сделать задержку или ещё что придумать, но пока что не вижу смысла.
UPD: необходимо добавить строку
В итоге мы получаем такую вставку в конфиг
Отключаем использование провайдерских DNS для интерфейса wan
В /etc/config/network добавляем строку
к интерфейсу wan.
Получаем такую конфигурацию
Илюстрация работы без DNSCrypt и c DNSCrypt
Playbook и темплейты лежат на github
Я постарался сделать так, что бы ваша конфигурация OpenWrt осталась не тронутой, но всё равно будьте бдительны.
Устанавливаем модуль gekmihesg/ansible-openwrt
Копируем плейбук и темлпейты
Добавляйте ваш роутер в hosts
Подставляете свои переменные в hirkn.yml
Обязательно нужно задать
wg_server_address — ip/url wireguard сервера
wg_private_key, wg_public_key — приватный ключ клиента и публичный сервера
Остальное можно не менять или менять, в зависимости от того как настроен WireGuard сервер
После выполнения плейбука, роутер сразу начнёт выполнять обход блокировок через ваш wireguard сервер.
Под openwrt есть две утилиты реализующих BGP — quagga и bird. Quagg’у мне не удалось заставить забирать данные с antifilter. Bird подружился с сервисом с полпинка, но как заставить добавлять полученным подсетям интерфейс по умолчанию я, к сожалению, не понял. (Буду рад узнать как это можно реализовать)
В комментариях к подобным статьям я видел, что роутеры у людей “призадумывались” на некоторое время, когда те загоняют списки в таблицу маршрутизации. С реализацией через ipset мой Xiaomi mi 3G задумывается на 2 секунды (Asus rt-n16 на 5 секунд), когда скармливаешь ему список из 15ти тысяч подсетей. При дальнейшей работе нагрузки на процессор не замечал.
Все материалы не являются призывом к действию и представлены для ознакомления с функционалом ОС Linux.
В статье VPN безопасность мы уже рассказывали про утечку VPN-трафика. В другой похожей статье мы говорили об утечке WebRTC в браузерах, а в этой статье речь пойдет об утечке DNS-трафика. Которая затрагивает всех, и даже тех кто использует VPN-сервисы и считает, что находится за каменной стеной.
Здравствуйте друзья! Сегодня я расскажу что такое утечка DNS, почему вы должны об этом знать и как от этого защититься используя бесплатную утилиту DNSCrypt.
Утечка DNS
Что значит утечка DNS?
Давайте попробуем разобраться в этом вопросе поглубже. Если вас не интересует теория, но волнует безопасность, можете сразу переходить к следующей главе. Если хотите знать побольше, усаживайтесь поудобнее, сейчас я вам вынесу мозг.
Если же конфигурация сети такова, что используется DNS-сервер провайдера (незашифрованное соединение, отмечено красной линией), то разрешение символьного имени в IP-адрес происходит по незашифрованному соединению.
Во-первых, в такой ситуации провайдер может просмотреть историю DNS и узнать какие сайты вы посещали. Он конечно не узнает какие именно данные передавались, но адреса сайтов он сможет просмотреть запросто.
Во-вторых, есть большая вероятность оказаться жертвой хакерской атаки. Такой как: DNS cache snooping и DNS spoofing.
Что такое DNS снупинг и спуфинг?
Вкратце для тех кто не в курсе.
Описанная ситуация называется утечка DNS (DNS leaking). Она происходит, когда ваша система для разрешения доменных имен даже после соединения с VPN-сервером или сетью Tor продолжает запрашивать DNS сервера вашего провайдера. Каждый раз когда вы попытаетесь зайти на сайт, соединится с новым сервером или запустить какое-нибудь сетевое приложение, ваша система будет обращаться к DNS серверам провайдера, чтобы разрешить имя в IP-адрес. В итоге какой-нибудь хакер или ваш провайдер смогут узнать все имена узлов, к которым вы обращаетесь.
Как проверить утечку DNS
Перед тем как мы перейдем к самой утилите, я бы хотел познакомить вас со специальными онлайн-сервисами. Они позволяют проверить утечку DNS.
Проверка на утечку DNS
Через несколько секунд сервис отобразит список DNS-серверов, через которые проходят ваши запросы. Таким образом вы сможете узнать, кто именно может видеть вашу историю посещения сайтов.
Как устранить утечку DNS утилитой DNSCrypt
Скачивание DNSCrypt
Разработчик программы OpenDNS.
Установка DNSCrypt
В этой статье мы разберем работу с консольной версией утилиты. Настраивать ДНСКрипт будем на Windows 10. Установка на других версиях винды не отличается.
Итак, скачанный архив распаковываем и помещаем содержимое папки dnscrypt-proxy-win32 в любое место на компьютере. В моем примере я расположил в папке “C:\Program Files\DNSCrypt\”.
После чего откройте от имени администратора командною строку.
Запуск командной строки от имени администратора в Windows 10
Теперь в командной строке перейдите в папку DNSCrypt. Сделать это можно с помощью команды:
cd "C:\Program Files\DNSCrypt"
Кликаем сюда, если не можете скопировать команды.
После этого подготовимся к установке службы прокси. Для начала необходимо выбрать провайдера DNS. В архив я положил файл dnscrypt-resolvers.csv. Этот файлик содержит список большинства DNS провайдеров, которые поддерживает DNSCrypt. Для каждого отдельного провайдера есть название, описание, расположение и поддержка DNSSEC и Namecoin. Кроме этого файл содержит необходимые IP-адреса и открытые ключи.
Выберите любого провайдера и скопируйте значение в первом столбце. В моем случае я буду использовать CloudNS, поэтому я скопировал “cloudns-can”. Теперь необходимо убедится, что прокси может подключиться. Сделать это можно с помощью этой команды:
dnscrypt-proxy.exe -R "cloudns-can" --test=0
Если все правильно работает, вы увидите следующие выходные данные:
Если у вас не получилось, попробуйте выбрать другого провайдера и повторить попытку еще раз.
Если все прошло успешно, продолжим установку и введем следующую команду:
dnscrypt-proxy.exe -R cloudns-can --install
Если все правильно работает, вы увидите следующие выходные данные:
Скрин того как это должно выглядеть в командой строке:
После чего необходимо зайти в параметры протокола TCP/IP Windows и изменить настройки DNS на 127.0.0.1.
Для удаления службы ДНСКрипт необходимо вернуть сетевые настройки DNS в начальное состояние. Делается это с помощью этой команды:
Данная команда также может использоваться для смены провайдера DNS. После применения нужно повторить установку с параметрами другого провайдера.
Все, теперь утечка DNS устранена.
DNSCrypt в Яндекс Браузере
DNSCrypt в роутере
Также поддержка ДНСКрипт реализована в популярных прошивках OpenWrt. Подробнее об установке и другой дополнительной информации вы можете узнать на этой странице.
Заключение
На этом все друзья. Надеюсь эта статья помогла вам решить проблему утечки DNS. Удачи вам в новом 2017 году, будьте счастливы!
Начиная с Chaos Calmer 15.05, dnscrypt-proxy и libsodium присутствуют в официальном репозитории:
Кроме того, существует пакет luci-app-dnscrypt-proxy, позволяющий настраивать dnscrypt-proxy через веб-интерфейс LuCi.
Специальная сборка для архитектуры ar71xx от black-roland
Сборка от black-roland имеет ряд преимуществ перед официальным репозиторием Chaos Calmer: пакеты dnscrypt-proxy и libsodium более свежие (и поддерживают Barrier Breaker), dnscrypt-proxy поддерживает использование эфемерных ключей, procd и позволяет одновременно запускать несколько копий себя (если первый DNS -сервер по каким-либо причинам будет недоступен, система использует второй).
Добавляем в файл /etc/opkg.conf источник в зависимости от используемой версии OpenWrt. Для этого выполняем в консоли следующие команды:
Trunk:
Уже содержит актуальную версию dnscrypt-proxy с поддержкой запуска нескольких копий. Ничего добавлять не требуется.
Chaos Calmer:
Barrier Breaker:
Обновляем список пакетов и устанавливаем dnscrypt-proxy и libsodium . Примечание: без обновленной библиотеки служба не запустится (по крайней мере в мультисерверном варианте), при недостатке места библиотеку следует удалить принудительно.
Настройка
По умолчанию dnscrypt-proxy использует адрес и порт 127.0.0.1:5353 . Нужно настроить OpenWrt для отправки DNS -запросов на этот адрес.
dnscrypt-proxy
Настраиваем, редактируя файл /etc/config/dnscrypt-proxy :
Следующие параметры поддерживаются только в Trunk:
Название | Тип | Обязательность | Значение по умолчанию | Описание |
---|---|---|---|---|
client_key | string | нет | отсутствует | Идентификация клиента публичным ключом. По умолчанию (для затруднения отслеживания) клиент использует случайно сгенерированную ключевую пару. Эта настройка заставляет использовать статическую пару, что, например, позволяет DNS -провайдеру предлагать премиум-сервис клиентам, чьи запросы подписаны определёнными публичными ключами. Клиент не может расшифровать поступающие ответы без знания приватного ключа. Значение этой настройки представляет собой путь к файлу, содержащему приватный ключ. Соответствующий ему публичный ключ вычисляется автоматически. |
syslog | boolean | нет | 1 | Отправка событий демону syslog. |
syslog_prefix | string | нет | dnscrypt-proxy | Строка, предваряющая записи в журнале. |
Следующие параметры присутствуют в файле /etc/config/dnscrypt-proxy , но не поддерживаются, поскольку (на данный момент) DNSCrypt в OpenWrt собирается без поддержки плагинов:
Дополнительные параметры, при необходимости, указываются в скрипте инициализации (файл /etc/init.d/dnscrypt-proxy ).
Добавляем dnscrypt-proxy в автозагрузку и запускаем:
Обратите внимание: если dnscrypt-proxy не запускается автоматически после перезагрузки системы, возможно, он пытается запуститься ещё до того, как полностью поднят сетевой интерфейс. Добавьте в файл /etc/rc.local перед строчкой “exit 0”:
Кроме того, на маршрутизаторе должно быть установлено точное время.
dnsmasq
Настраиваем dnsmasq для использования dnscrypt-proxy на 127.0.0.1:5353. Полужирным выделены строки, которые нужно изменить в файле /etc/config/dhcp :
отключили обработку файла /tmp/resolv.conf.auto , поскольку он указывает dnsmasq использовать DNS -серверы провайдера. добавили настройку noresolv , которая (по тем же причинам) отключает обработку файла /etc/resolv.conf .Перезапускаем dnsmasq (или перезагружаем маршрутизатор):
Использование нескольких серверов
Работает с dnscrypt-proxy из стандартного репозитория Chaos Calmer 15.05.1, но для предыдущих выпусков, скорее всего, недоступно |
Добавляем дополнительный сервер в файл /etc/config/dnscrypt-proxy (обратите внимание, что они должны размещаться на разных портах):
Создаём файл /etc/resolv-crypt.conf , содержащий единственную строку: options timeout:1. Эта настройка заставляет dnsmasq после секундного ожидания ответа от первого DNS -сервера переключиться на следующий.
Перезагружаем маршрутизатор, либо перезапускаем dnscrypt-proxy и dnsmasq :
Очищаем кэш DNS на клиентских устройствах
Обратите внимание: команды должны быть выполнены в командной строке с правами администратора.
Используя VPN, TOR, и даже Tails Linux вы думаете что ваша анонимность надежно защищена. Но к сожалению это не так. Существует один очень важный канал утечки вашей приватной информации — служба DNS. Но к счастью на это тоже придумано решения. Сегодня я раскажу как зашифровать свой DNS трафик с помощью утилиты DNSCrypt.
Тут на помощь приходит опенсорсная утилита DNSCrypt, разработанная хорошо известными тебе создателями OpenDNS, — программа, позволяющая шифровать DNS-запросы. После ее установки на компьютер твои соединения также будут защищены и ты сможешь более безопасно бороздить просторы интернета. Конечно, DNSCrypt — это не панацея от всех проблем, а только одно из средств обеспечения безопасности. Для шифрования всего трафика все еще нужно использовать VPN-соединение, но в паре с DNSCrypt будет безопаснее. Если тебя такое краткое объяснение устроило, можешь сразу переходить к разделу, где я буду описывать установку и использование программы.
Попробуем разобраться глубже. Этот раздел предназначен для настоящих параноиков. Если ты ценишь свое время, тогда можешь сразу перей ти к установке программы.
Итак, как говорится, лучше один раз увидеть, чем сто раз услышать. Посмотри на рисунок.
Принцип работы DNSCrypt
Описанная ситуация называется DNS leaking («утечка DNS»). DNS leaking происходит, когда твоя система даже после соединения с VPN сервером или Tor продолжает запрашивать DNS серверы провайдера для разрешения доменных имен. Каждый раз, когда ты посещаешь новый сайт, соединяешься с новым сервером или запускаешь какое-то сетевое приложение, твоя система обращается к DNS провайдера, чтобы разрешить имя в IP. В итоге твой провайдер или любой желающий, находящийся на «последней миле», то есть между тобой и провайдером, может получить все имена узлов, к которым ты обращаешься. Приведенный выше вариант с подменой IP-адреса совсем жестокий, но в любом случае есть возможность отслеживать посещенные тобой узлы и использовать эту информацию в собственных целях.
При этом тебе не нужно никакое другое дополнительное программное обеспечение. Просто настрой свою систему на использование этих DNS-серверов.
Но все равно остается проблема перехвата DNS-соединений. Да, ты уже обращаешься не к DNS провайдера, а к OpenDNS, но все еще можно перехватить пакеты и посмотреть, что в них. То есть при желании можно узнать, к каким узлам ты обращался.
Вот мы и подошли к DNSCrypt. Эта программулина позволяет зашифровать твое DNS соединение. Теперь твой провайдер (и все, кто между тобой и им) точно не узнает, какие сайты ты посещаешь! Еще раз повторюсь. Эта программа не замена Tor или VPN. По-прежнему остальные передаваемые тобой данные передаются без шифрования, если ты не используешь ни VPN, ни Tor. Программа шифрует только DNS трафик.
DNS LEAK
УСТАНОВКА И ИСПОЛЬЗОВАНИЕ DNSCRYPT
Самый простой способ защитить свое DNS соединение — это использовать DNSCrypt.
Осталось только запустить dnscrypt-proxy. exe. В появившемся окне выбери сетевые адаптеры, которые нужно защитить, и нажми кнопку Start. Если все нормально, тогда возле кнопки Stop (в нее превратится кнопка Start) появится надпись DNSCrypt is running. Кстати, обрати внимание, что интерфейс для OS X выглядит несколько иначе (клиент для OS X можно взять здесь: bit.ly/rCNp01).
В КАЧЕСТВЕ ЗАКЛЮЧЕНИЯ
Статья получилась не очень большая, поскольку сама программа очень проста в использовании. Но она была бы неполной, если бы я не упомянул и о VPN. Если ты прочитал эту статью, тебя она заинтересовала, но ты еще не пользуешься услугами VPN-провайдера для шифрования своих данных, то самое время это сделать.
VPN-провайдер предоставит тебе безопасный туннель для передачи твоих данных, а DNSCrypt обеспечит защиту DNS-соединений. Конечно, услуги VPN провайдеров платны, но ведь за безопасность нужно платить?
Можно использовать, конечно, и Tor, но Tor работает относительно медленно, и это, как ни крути, не VPN — весь трафик «торифицировать» не получится. В любом случае (какой бы вариант ты ни выбрал) теперь твои DNS-соединения защищены. Осталось только определиться со средством шифрования трафика (если ты это еще не сделал).
Читайте также: