pi-hole + unbound

Pi-Hole

Уже давно я пользуюсь Pi-hole. Этот инструмент позволяет блокировать разные рекламные баннеры, интернет-трекеры и прочие бесполезные для пользователя ресурсы. При этом вы еще и ускоряете загрузку страниц, так как запросы блокируются на уровне DNS.

Изначально Pi-hole разрабатывался для Raspberry Pi, и изначально он у меня и стоял на Raspberry Pi, и я даже делал пост или ролик о том как его устанавливать. Со временем Raspberry Pi меня стал сильно доставать. Тем, что у флешек случались проблемы с файловой системой. Иногда она просто запарывалась. Ну а проблем с нормальными дисками у меня никогда не было. Поэтому я решил сделать все на нормальном домашнем сервере, без Raspberry Pi. Для большей надежности, а если учесть еще и то, что на Raspberry Pi, по какой-то причине, цена сейчас выше, чем на нормальный неттоп, то выбор вообще очевиден.

Unbound

Еще мы будем использовать Unbound. Unbound это это удостоверяющий, рекурсивный и кеширующий DNS сервер. Некоторые скажут, что это бессмысленно, так как в Pi-hole уже есть dnsmasq. Но dnsmask хоть тоже и является DNS ресолвером и может получать адреса у серверов, но все-таки dnsmasq это только форвардер. Все что он будет делать это спрашивать адрес у ближайшего к вам DNS сервера.

Кроме того unbound умеет использовать различные методы защиты и криптографии. Чтобы избежать плейнтекста. Например, через DNSSEC или DoH.

А еще мне нравится, что у unbound довольно ясный и понятный конфиг.

Используя Unbound мы будем получать ответ от DNS ОЧЕНЬ быстро по сравнению с резолверами вашего провайдера, у которых в любом случае есть какая-то очередь. А еще ваш провайдер не будет знать на какие сайты вы ходите.

А еще локальный резолвер умеет заранее обновлять некоторые записи, проверяя ttl и обновляя те их них, которые вот-вот протухнут. И из-за этого мы тоже всегда выигрываем в скорости.

Есть такая уязвимость, которая называется “dns leak” (утечка днс). Это когда ваши запросы не шифруются и могут быть видны третьим лицам, как минимум, вашему провайдеру. Есть даже различные сервисы, которые могут сказать есть ли у вас утечка (в интернете куча сервисов, которые могут помочь вам узнать, есть ли у вас такая уязвимость)

Wireguard

Еще я видел различные гайды в которых вдовесок устанавливают wireguard. Например, в пакете wirehole, там все это ставится вместе.

У меня есть сомнения в том, что это все целесообразно ставить на один сервер. Как мне кажется, wireguard действительно разумнее ставить куда-нибудь в облако, например, на сервер в digitalocean, тогда как pi-hole и unbound разумнее ставить на сервер в локальной сети, так мы получим значительно более быстрый отклик.

Установка и настройка Pi-hole

У Pi-hole есть два пакета, первый называется “Pi-hole standalone”, это пакет который позволяет вам развернуть пайхол конкретно на том компе на котором вы его устанавливаете. Например, у вас есть один ноут и больше ничего нет, ни сервера, ни телефона, ни чего-то еще. Вот вы можете на него поставить это все и радоваться жизни.

Но значительно разумнее поставить это все на сервер, который будет работать со всем трафиком внутри локальной сети. Для этого есть пакет “pi-hole-server”

Оба пакета находятся в AUR, так что перед тем как их ставить поставьте yay или pacaur, что вам больше нравится.

Теперь намнадо установить пакет

И после этого надо отредактировать файл

и надо раскомментировать три строки:

и в этот же файл добавим строку

Install lighttpd

Установка и настройка Unbound

Для начала надо установить пакет unbound

для ubuntu

для arch

После этого нам нужно добавить в файл /var/lib/unbound/root.hints информацию о root серверах DNS. Мы его можем взять из https://www.internic.net/domain/named.root

Для этого запустим команду

Стандартные настройки уже находятся в файле /etc/unbound/unbound.conf

можем протестировать что все работает нормально

Вот эта команда должна вывести SERVFAIL

А вот эта команда

Должна вывести NOERROR

Теперь идем в админку pi-hole

Идем в раздел settings - dns

убираем стандартный гугловский DNS и ставим свой собственный

И теперь нам надо ждать пока наши клиенты переподключатся (некоторые клиенты сами не переподключатся, и надо выключить и включить сеть руками) и после этого они будут отображаться в этой статистике

Проверка работоспособности Unbound

Для проверки работоспособности DNSSEC, после запуска службы unbound.service выполните:

В ответе должен быть IP адрес и (secure) после него.

Этот ответ должен содержать (BOGUS (security failure)).

Так же вы можете использовать drill для проверки вашего сервера следующими командами:

Первая команда должна в переменной rcode выдать SERVFAIL. Вторая команда должна выдать NOERROR.

Ну а вот скриншот с моим примером



Так же в интернете вы можете найти довольно много сервисов, который помогут вам проверить DNS Leak, не буду рекламировать какой-то конкретный, найдите любой.