Удалить pi hole ubuntu

Обновлено: 05.07.2024

Любого здравомыслящего человека, к коим я себя причисляю, достала интернет-реклама. При наличии в доме множества разнотипных устройств, упрятанных за единый роутер, рано или поздно приходит понимание, что браузерными адблокерами не обойтись и нужно как-то решать вопрос — чтобы одним ударом прибить всю рекламу «на входе».
И, практически, безальтернативным, но очень толковым решением становится именно Pi-Hole.

Да, можно было наколхозить через opkg на Keenetic, но там всё слишком нетривиально и можно домашних разом лишить интернета, введя что-то не то, поэтому только pihole.

Изначально данная система разрабатывалась для Rapspberry Pi, где я её опробовал и, скажу я вам, работает она там без бубнов: одной консольной командой запускается установка, второй командой меняется пароль доступа к админке, а дальше на домашнем роутере прописываем локальный адрес pihole в качестве DNS-сервера, адрес которого надо раздавать всем устройствам в локалке.

Однако, новую малинку я ещё не купил, а единственную имеющуюся задействовал в предыдущем проекте. Поэтому выбор оказался невелик — мой домашний сервачок на Ubuntu 18.04, он же медиаплеер на Kodi.
Сначала обуревали сомнения, заработает ли всё вместе — и я оказался прав, pi-hole сразу взлететь отказался: то «No connect to API», то FTL не стартует и т.д.

И если соединение с API и запуск FTL решается моментально перезапуском сервиса этого самого FTL, то проблема отказывающегося работать dnsmasq так прямо сразбегу не решилась.
При запуске этого самого dnsmasq упорно вылезала ошибка, что 53 порт уже забинден на кого-то ещё, а pihole -d на голубом глазу сообщал, что dnsmasq, по его сведениям, прекрасно работает на том же порту.
Путём недолгого гугления и последующего (всё через sudo)

netstat -putan | grep ':53'

выяснилось, что 53 порт на себя оттягивает systemd-resolve. ОК, гуглим дальше и находим:

раскомментируем там строку DNSStubListener=no и перегружаемся. После перезагрузки вижу, что systemd-resolve освободил адрес 127.0.0.1, но продолжает вращать на себе 127.0.0.53, что в свою очередь так же не дает работать нормально pihole.

systemctl disable systemd-resolved
reboot

И вуаля: pihole запустился, блокирует рекламу, kodi работает, вебморды обоих на разных портах работают нормально, нагрузка на систему в пределах нормы.

Интернет-реклама раздражает – более того, это потенциальный источник вредоносных программ. Конечно, есть плагины, предназначенные для блокировки рекламы на устройствах или в приложениях, однако блокировка рекламы на уровне DNS – гораздо более надежное решение для ваших приложений и устройств одновременно.

Pi-hole –DNS-сервер, изначально созданный для использования на одноплатном компьютере Raspberry Pi – отфильтровывает запросы доменов, обслуживающих рекламу, блокирует рекламу и улучшает производительность сети. С помощью Pi-hole вы можете активно отслеживать каждый запрос DNS, сделанный в вашей сети, и блокировать запросы на ходу. Эта функциональность также распространяется на веб-браузеры, позволяя отфильтровывать рекламу в других приложениях, ориентируясь на соответствующий DNS-запрос.

Приложение Pi-hole особенно эффективно в связке с виртуальной частной сетью (VPN). VPN создают и поддерживают подключения через туннели, которые являются логическими сетевыми соединениями между клиентами и серверами. Кроме того, если ваша VPN поддерживает протокол Secure Socket Layer (SSL), вся транзакция зашифровывается, обеспечивая безопасный канал для передачи данных.

Данный мануал поможет установить и настроить OpenVPN и Pi-hole как сетевой фильтр для блокировки рекламы на основе DNS для всех устройств, подключенных к вашей сети.

Требования

  • Сервер Ubuntu 16.04,настроенный по этому мануалу.
  • 2 Гб памяти минимум.
  • Предварительно установленный сервер OpenVPN.

1: Сбор информации о сети

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

Используйте команду ip с подкомандами addr и show, чтобы определить IP-адрес tun0, сетевого интерфейса, который использует ваш VPN-туннель.

ip addr show tun0

На выходе представлена подробная информация об интерфейсе.

1: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
link/none
inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0
valid_lft forever preferred_lft forever

Рассмотрим вывод подробнее:

  • Первая строка сообщает имя интерфейса, tun0, а затем идет ряд флагов, которые описывают характеристики сетевого сокета.
  • Вторая строка указывает, что в настоящее время на этом интерфейсе отсутствуют устройства канального уровня.
  • Третья строка содержит IP-адрес для этого сетевого интерфейса.
  • В четвертой строке сообщается, что срок действия IPv6 интерфейса и предпочтительный срок его службы имеют значения forever. В этом случае время аренды IP-адреса никогда не изменится, поскольку адрес был специально назначен интерфейсу во время установки VPN.

Запишите IP-адрес после inet – это адрес вашего VPN-сервера. Он понадобится вам при установке Pi-hole.

Кроме адреса VPN-сервера, Pi-hole еще нуждается в шлюзе для трафика IPv4 (в точке доступа между различными сетями).

Используйте команду ip еще раз, на этот раз с подкомандами route и show, чтобы получить информацию о таблице маршрутизации вашего сервера. Передайте информацию таблицы маршрутизации команде grep, которая будет анализировать и искать вывод для строки default. default указывает шлюз по умолчанию, используемый сервером.

ip route show | grep default

  • Перенаправление ввода-вывода в Linux
  • Использование Grep и регулярных выражений для поиска текстовых шаблонов в Linux

default via 198.51.100.1 dev eth0 onlink

Запишите IP-адрес после via – это адрес шлюза по умолчанию.

2: Загрузка Pi-hole

Используйте Git для клонирования репозитория Pi-hole с GitHub в каталог

Перейдите в домашний каталог и клонируйте репозиторий:

Вывод подтверждает местоположение клонирования, а затем предоставляет отчет в реальном времени, который включает количество объектов, которые нужно было скопировать Git, а также количество скопированных объектов.

Cloning into 'Pi-hole'.
remote: Counting objects: 65, done.
remote: Compressing objects: 100% (56/56), done.
remote: Total 65 (delta 5), reused 26 (delta 1), pack-reused 0
Unpacking objects: 100% (65/65), done.
Checking connectivity. done.

Перейдите в каталог Pi-hole/automated\ install/ и найдите там установочный сценарий Pi-hole.

cd Pi-hole/automated\ install/

Откройте и просмотрите сценарий, чтобы убедиться, что он не сделает ничего лишнего. При необходимости его можно откорректировать.

Сохраните и закройте файл, чтобы продолжить.

Теперь у вас есть самые новые пакеты Pi-hole.

3: Установка Pi-hole

Установка и настройка Pi-hole происходит с помощью мастера в терминале. Запустите мастер установки:

В окне Installing packages мастер сообщит об установке пакетов и извлечении дополнительных файлов.

Pi-hole automated installer
This installer will transform your device into a network-wide ad blocker!

Чтобы продолжить, нажмите Enter.

Затем мастер сообщит, что Pi-hole является свободным и бесплатным программным обеспечением и подскажет, как вы можете пожертвовать проекту Pi-hole.

Нажмите Enter, чтобы продолжить установку.

Затем сценарий установки сообщит вам, что для корректной работы службы необходим статический IP-адрес. Нажмите Enter, чтобы продолжить.

В следующем окне – Choose An Interface – мастер предложит выбрать интерфейс, который будет прослушивать Pi-hole. Чтобы использовать Pi-hole для мониторинга сетевого интерфейса VPN, используйте клавиши со стрелками на клавиатуре, чтобы выбрать tun0, и нажмите пробел. Затем нажмите TAB, чтобы перейти к параметрам в нижней части экрана. Выбрав <Ok>, нажмите Enter, чтобы сохранить настройки и продолжить.

Теперь мастер попросит вас указать Upstream DNS Provider. Это сервис, который Pi-hole будет использовать для разрешения доменов. Для простоты вы можете оставить здесь значение по умолчанию, Google. Нажмите TAB, чтобы перейти к параметрам в нижней части экрана, выберите <Ok> и нажмите Enter.

На следующем экране Pi-hole предложит вам выбрать, какие интернет-протоколы нужно фильтровать. Протоколы – например, IPv4 и IPv6 – определяют технический формат пакетов и схему адресации компьютеров для связи по сети. IPv4 является наиболее широко используемым интернет-протоколом для подключения устройств к сети.

Для эффективной работы Pi-hole требуется фильтрация как IPv4, так и IPv6, поэтому оставьте оба протокола выбранными и нажмите TAB, чтобы перейти к параметрам в нижней части экрана. Выберите <Ok> и нажмите клавишу Enter.

Pi-hole теперь спросит, хотите ли вы использовать текущие сетевые настройки в качестве статического IP-адреса. Чтобы приложение Pi-hole могло использовать VPN, нужно ввести эту информацию вручную на следующем экране. Потому с помощью клавиш со стрелками выберите <No> и нажмите Enter.

Теперь Pi-hole предложит ввести адрес IPv4. Укажите адрес своего VPN-сервера. Это IP-адрес после inet в выводе, который вы получили при первом запуске команды ip (в разделе 1).

Добавьте /24 в конец IP-адреса, чтобы указать маску подсети VPN. Выберите <Ok> и нажмите Enter.

На следующем экране нужно ввести шлюз IPv4 (маршрутизатор), который будет использовать Pi-hole для доступа в Интернет. Введите здесь IP-адрес шлюза по умолчанию. Это IP-адрес, который вернула вторая команда ip в разделе 1.

Выберите <Ok> и нажмите Enter.

На следующем экране убедитесь, что IP-адрес и шлюз указаны верно, прежде чем они будут применены к конфигурации Pi-hole. Если вам нужно внести изменения, выберите <No> и нажмите Enter. В противном случае выберите <Yes> и нажмите Enter, чтобы продолжить установку.

Кроме интерфейса командной строки, также для управления Pi-hole можно использовать веб-интерфейс администратора. Одним из основных преимуществ веб-интерфейса является его способность просматривать прямые DNS-запросы и блокировать статистику.

По умолчанию web admin interface имеет значение On. Это значение рекомендуется использовать и далее (оно необходимо для выполнения разделов 7 и 8).

В этом руководстве для управления Pi-hole используется веб-интерфейс, но если вы хотите проверить различные ветки проекта во время разработки или просто предпочитаете работать через сеанс терминала, вы можете узнать больше о команде Pi-hole -line в официальном FAQ.

Выберите <Ok> и нажмите Enter.

Чтобы использовать интерфейс веб-администратора для просмотра запросов DNS в реальном времени и блокировки статистики, вам необходимо настроить Pi-hole для регистрации запросов.

Это стандартная и рекомендуемая настройка, поэтому используйте TAB, чтобы выбрать <Ok>, а затем нажмите Enter.

На этом этапе Pi-hole загрузит и установит оставшиеся зависимости вместе с данными по умолчанию для списка блокировок и черного списка. Pi-hole применит все настройки сетевой конфигурации, введенные вами в течение установки.

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

Выберите <Yes> и нажмите Enter.

После этого Pi-hole продолжит установку самостоятельно. По окончании заголовок диалогового окна изменится на Installation Complete!, а Pi-hole запустится автоматически и начнет фильтровать все DNS-запросы в сети. Нажмите Enter.

Теперь нужно протестировать установку.

4: Тестирование DNS-фильтрации

Когда OpenVPN и Pi-hole будут полностью настроены и работают, каждый запрос DNS, сделанный в вашей сети, будет перенаправлен в сервис Pi-hole, после чего он проверит, состоит ли домен в списке блокировки или черном списке. Если это так, фильтр удалит домен; если нет, фильтр пропустит запрос.

Несмотря на то, что Pi-hole еще не настроен для работы с OpenVPN, вы все равно можете проверить текущую установку и протестировать способность Pi-hole фильтровать рекламные сайты.

Вместо внешнего IP-адреса вы увидите стандартный шлюз. Это значит, что Pi-hole удалось определить рекламный сайт и сбросить запрос.

Теперь вы знаете, что Pi-hole фильтрует запросы. Пришло время настроить OpenVPN для взаимодействия с Pi-hole.

5: Настройка OpenVPN

На данный момент OpenVPN направляет весь DNS-трафик на DNS-сервер. Чтобы использовать Pi-hole в качестве блокировщика рекламы, нужно настроить OpenVPN для отправки DNS-трафика в Pi-hole.

Откройте главный конфигурационный файл OpenVPN:

sudo nano /etc/openvpn/server.conf

.
;push "dhcp-option DNS 208.67.222.222"
;push "dhcp-option DNS 208.67.220.220"
.

Эти параметры позволяют настраивать DHCP (включая настройки DNS) для клиентов, подключенных к VPN.

Поскольку параметры dhcp-option, включенные в server.conf, по умолчанию закомментированы, оставьте их в файле (на случай, если вам нужно будет снова обратиться к ним в будущем).

Теперь добавьте новый параметр, с помощью которого OpenVPN направит всех DNS-клиентов на Pi-hole по шлюзу 10.8.0.1.

.
;push "dhcp-option DNS 208.67.222.222"
;push "dhcp-option DNS 208.67.220.220"
push "dhcp-option DNS 10.8.0.1"
.

Сохраните и закройте файл.

Чтобы применить изменения, перезапустите OpenVPN.

sudo systemctl restart openvpn@server

Проверьте состояние OpenVPN:

sudo systemctl status openvpn@server

Если все работает правильно, в выводе о состоянии OpenVPN будет строка active (running).

.
Active: active (running) since Mon 2017-11-27 22:08:43 UTC; 1 day 23h ago
.

Если сервис не смог запуститься, повторите предыдущие действия, чтобы устранить проблему.

Теперь OpenVPN перенаправляет DNS-запросы на Pi-hole. Осталось настроить брандмауэр, чтобы все заработало.

6: Настройка брандмауэра

Итак, Pi-hole и OpenVPN взаимодействуют. Теперь нужно открыть порт 53, чтобы разблокировать DNS-запросы, которые прошли через фильтры Pi-hole.

sudo ufw allow 53

Затем нужно разблокировать трансмиссии udp и tcp в диапазоне IP-адресов 10.8.0.0/24 до 10.8.0.1 по порту 53. Это позволит DNS-запросам из IP-диапазона VPN пройти в Pi-hole для фильтрации.

sudo ufw allow proto udp from 10.8.0.0/24 to 10.8.0.1 port 53
sudo ufw allow proto tcp from 10.8.0.0/24 to 10.8.0.1 port 53

Также нужно разрешить веб-трафику в диапазоне 10.8.0.0/24 проходить через VPN-сервер по адресу 10.8.0.1 и порту 80.

sudo ufw allow proto tcp from 10.8.0.0/24 to 10.8.0.1 port 80

sudo ufw reload

Если брандмауэр перезапустился успешно, вы увидите:

7: Фильтрация списка блокировки

Сервис Pi-hole поставляется с набором списков блокировки по умолчанию, которые поддерживаются командой разработчиков проекта; однако эти списки не всегда исчерпывающи. В идеале вы должны адаптировать списки в соответствии с вашими потребностями и приложениями, которые вы используете. Вы можете управлять списками блокировки и многими другими параметрами с помощью веб-интерфейса администратора Pi-hole.

Вы увидите страницу, на которой представлены виджеты, сообщающие количество запросов, заблокированных в течение 24 часов (Queries Blocked Last 24 Hours), общее количество запросов за 24 часа (Queries Last 24 Hours), заблокированные запросы в процентах (Queries Blocked Last 24 Hours) и количество доменов в списке блокировки (Domains on Blocklists). Вы также увидите диаграмму запросов за последние 24 часа (Queries over last 24 hours), индикатор состояния Pi-hole и параметры навигации дашборда, форму входа и пожертвования на PayPal.

Нажмите Login, чтобы получить доступ к полному интерфейсу. При появлении запроса введите пароль, который вы получили в конце установки Pi-hole в разделе 3.

После входа общий макет интерфейса останется прежним, но теперь он будет содержать больше опций меню в левой части экрана и дополнительные виджеты Query Types over Time и Forward Destinations over Time.

Перед добавлением новых списков блокировки в Pi-hole вы должны сначала обновить данные официального списка блокировки – возможно, последнее обновление включает некоторые или все источники данных, которые вы собираетесь добавить вручную.

В левой части экрана нажмите Tools, чтобы развернуть меню навигации, а затем выберите Update Lists.

На следующем экране нажмите синюю кнопку Update Lists в центре экрана, чтобы получить последнюю версию официального списка блокировки.

Поскольку сервис Pi-hole обновится, он покажет вам источники, из которых он извлекает данные списка, независимо от того, изменились ли они с момента последнего обновления и были ли импортированы данные в вашу установку. В конце вы увидите «Success!» в верхней части экрана.

После обновления официальных данных списка блокировки можно добавить свои собственные списки.

Нажмите Settings в меню навигации в левой части экрана, чтобы просмотреть основные параметры конфигурации Pi-hole.

По умолчанию Pi-hole использует следующие списки для фильтрации:

Чтобы добавить новый список, введите URL-адрес источника в поле ввода в нижней части панели, затем нажмите кнопку Save and Update, чтобы сохранить список, и повторно запустите функцию Update Lists. Это автоматически загрузит данные, связанные с новым списком.

Больше списков блокировки можно найти здесь (списки поделены на категории: подозрительные сайты, списки рекламных сайтов и т.п.).

8: Фильтрация по белому и черному списку

Вместе со списками блокировки, которые Pi-hole использует для фильтрации DNS-запросов, вы также можете настраивать индивидуальные черные списки. Черный список автоматически отбрасывает исходящие и входящие запросы от определенных доменов. Это может быть особенно полезно для предприятий и других организаций, которым необходимо блокировать домены, содержащие нерелевантный контент или известные распространением вирусов и других вредоносных программ.

Чтобы занести в черный список домен, нажмите Blacklist в основном меню навигации в левой части экрана.

На следующем экране вы можете либо добавить точный домен, либо его wildcard.

Белый список содержит домены, чей трафик всегда проходит через фильтры Pi-hole без блокировки. Белый список полезен в том случае, если безопасный для вас сайт попал в список блокировки или если вы хотите разрешить трафик для некоторых доменов, которые могут содержать немного рекламы.

Чтоб добавить домен в белый список, нажмите Whitelist в главном меню навигации.

На следующем экране вы можете добавить домен в белый список и просмотреть домены, которые уже в нем находятся.

По умолчанию сервис Pi-hole добавляет в белый список домены, которые он использует для обновления списков блокировки. Это позволяет избежать конфликтов списков блокировки.

Чтобы удалить домен из белого списка, нужно нажать красную кнопку с символом белой корзины рядом с этим доменом.

Чтобы протестировать черный и белый список вашей установки, посетите эту страницу.

Заключение

Теперь у вас есть простое, но эффективное средство фильтрации DNS-запросов в сети. Имейте в виду: вам может понадобиться немного откорректировать списки блокировки в соответствии с вашими потребностями.

Чтобы узнать, как запустить Pi-hole в контейнере Docker, перейдите на эту страницу.

Чтобы еще больше повысить безопасность сети, узнайте, как включить DNSCrypt в текущей установке Pi-hole.


Мануал

Особенности программного обеспечения pi-hole для черных списков рекламы

Ниже приведены основные особенности pi-hole:

Как установить pi-hole на Linux

Установка Pi-hole на Ubuntu 18.04 / Ubuntu 16.04 и CentOS 7 выполняется через скрипт

При успешной установке вы должны увидеть IP-адрес для установки на своих устройствах в качестве DNS-сервера и URL-адрес для входа в панель управления pi-hole.

Вы также можете скачать программу установки и запустить ее:

Как использовать pi-hole в Linux

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

Если ваш маршрутизатор не поддерживает настройку DNS-сервера, вы можете использовать встроенный DHCP-сервер Pi-hole; просто обязательно отключите DHCP на своем маршрутизаторе (если у него есть эта функция).

В крайнем случае вы всегда можете вручную настроить каждое устройсто

Доступ к интерфейсу администратора pi-hole

Замените pi.hole своим именем хоста или 192.168.10.10 с правильным IP-адресом сервера.

Чтобы войти в интерфейс управления, используйте пароль, указанный после установки, имя пользователя не требуется.

При успешном входе в систему будет показан интерфейс, как показано выше.

  • Просмотр запросов, заблокированных запросов, доменов в блочном списке, верхних доменов, верхних клиентов, верхних заблокированных доменов
  • Добавление долей белого списка / списка блоков
  • Проверка журналов аудита
  • Изменение DNS-серверов восходящего потока
  • Настройка параметров DHCP
  • Настройка параметров API
  • Экспортируйте свои списки Pi-hole в качестве загружаемого архива

Использование CLI для pi-hole

Также можно управлять pi-hole из cli, используя инструмент командной строки pihole.

image

После сравнительно недавнего анонса компанией Mozilla запуска поддержки DNS-over-HTTPS (DoH) в продакшн в сети не утихают споры, зло это или благо. По моим ощущениям, позиция "зло" базируется в основном на том, что при этом манипуляция вашими DNS-запросами даже в полезных для вас целях будет затруднена, поэтому я пока что остаюсь на позиции "благо".

В Российской Федерации операторы связи, поставленные в очень жесткие условия нашим законодательством, вынуждены строить изощренные многоуровневые системы блокировок доступа к запрещенному Роскомнадзором на территории РФ контенту, на одном из уровней которых более-менее успешно работает перехват DNS-запросов. Использование DoH позволит обойти этот уровень, что в совокупности с использованием VPN может несколько облегчить вам жизнь. Обратите внимание, само по себе решение не может избавить вас от блокировок, потому что вряд ли в России есть провайдер, полагающийся только на фильтрацию через DNS. Вам нужен еще какой-то вариант обойти блокировки, например VPN, один из описанных в моих предыдущих статьях.

Парадоксально, но в текущем паноптикуме оператору связи ничем не грозит ваш обход его блокировок (с использованием специальных средств для этого), поэтому если вы опасаетесь навредить ему таким образом — эти опасения напрасны.

Но переходить на специальный браузер, чтобы обойти перехват DNS — не наш путь. Наш путь — перевести все устройства домашней сети на DoH, быстро, эффективно и без лишних трудозатрат.

Disclaimer

Поскольку публиковать способы обхода блокировок доступа к информации, запрещенной на территории Российской Федерации, не очень законно, целью этой статьи будет рассказать о методе, позволяющем автоматизировать получение доступа к ресурсам, разрешенным на территории Российской Федерации, но из-за чьих-то действий недоступным напрямую через вашего провайдера. А доступ к другим ресурсам, получаемый в результате действий из статьи, является досадным побочным эффектом и целью статьи ни в коем случае не является.

Разворачиваем собственный DNS-сервер на базе Pi-Hole, использующий Cloudflare DoH для запросов в мир. Цель — зашифровать все DNS-запросы и обойти таким образом операторскую фильтрацию через перехват DNS. Полезный бонус — фильтрация рекламы.

Никаких волшебных know-how не открывается, простая пошаговая инструкция для тех, кому не хочется разбираться во всех хитросплетениях самому.

Что вам для этого потребуется

  1. Доверять Cloudflare. На самом деле это очень важный пункт, поскольку в описываемой реализации все ваши DNS-запросы обрабатываются сервисом Cloudflare. Если вы ему не доверяете — вам придется внедрить другое решение (и это немногим сложнее, чем описанное, но целью этой статьи не является).
  2. Иметь возможность поддерживать в домашней сети постоянно работающий сервер с Linux, который будет обслуживать DNS-запросы ваших устройств. Требование Pi-Hole — от 512M оперативной памяти (впрочем, работу с меньшим объемом сам не проверял). Если ваш роутер или NAS умеют виртуальные машины — это прекрасный вариант, если на полке где-то завалялась Raspberry Pi или другой микрокомпьютер на ARM — не менее хорошо, если на антресолях в коридоре жужжит виртуальная ферма на ESXi — то что я вам рассказываю, вы и сами всё знаете. Если у вас ничего из этого нет — самые младшие решения, типа Orange Pi Zero, на вторичном рынке можно найти за единицы сотен рублей либо привезти из Али за плюс-минус те же деньги. Но выбор платформы сильно выходит за рамки этой статьи, поэтому считаем, что у вас что-то есть. Впрочем, вопросы на этот счет можно задавать в комментариях.
  3. Вы должны иметь представление о использовании Linux и сетевых технологиях. Или хотя бы хотеть получить такое представление. Поскольку объять необъятное в этот раз я не готов, некоторые непонятные для вас моменты вам придется изучить самостоятельно. Впрочем, на конкретные вопросы, конечно же, отвечу в комментариях и вряд ли окажусь единственным отвечающим, так что не стесняйтесь спрашивать.

Исходные данные

IPv4-адрес нашего сервера в домашней сети: 192.168.1.10 и он назначен как статический.

Настройки на Linux выполняем от root (т.е. перед началом настройки выполняем команду sudo su -).

Кратко — логика решения

  1. Устанавливаем и настраиваем Pi-Hole
  2. Устанавливаем и настраиваем cloudflared
  3. Настраиваем ваш домашний роутер
  4. Решаем проблемы

Собственно решение

1. Устанавливаем и настраиваем Pi-Hole

Pi-Hole — это известная домашняя платформа, предназначенная прежде всего для борьбы с рекламой через блокирование запросов к доменам из централизованно обновляемого списка. Не то чтобы это был необходимый компонент решения, но если начал собирать домашний DNS, становится трудно остановиться. А если серьезно — Pi-Hole, возможно, и не идеален, но снимает большой объем головной боли с человека, которому надо "чтобы работало".

Чтобы установить Pi-Hole на уже имеющийся у нас запущенный Linux-сервер, нам достаточно выполнить одну команду:

И далее запущенный скрипт проведет вас по шагам установки.

В момент, когда он спросит вас про выбор Upstream DNS Provider, вы можете выбрать любой, поскольку на следующем шаге мы всё равно будем его менять. Все остальные параметры можно смело оставлять по умолчанию.

В конце инсталляции скрипт покажет вам сгенерированный случайным образом пароль от веб-интерфейса, который вам было бы полезно записать.

Если что-то при установке пошло не так — можно использовать альтернативные способы, описанные тут.

2. Устанавливаем и настраиваем cloudflared

Тут для установки нам потребуется приложить немного больше усилий, но тоже ничего особо сложного.

Выбираем и загружаем инсталлятор для нашей платформы.

После выполнения последней команды мы должны получить вывод, подобный следующему:

Если он у вас такой (естественно, номер версии и билда может отличаться) — то поздравляю, установка прошла успешно. Теперь дело за настройкой.

Создаем пользователя для работы сервиса:

Создаем файл конфигурации сервиса /etc/default/cloudflared:

И даем на него и на исполняемый файл права свежесозданному пользователю:

Далее создаем файл /lib/systemd/system/cloudflared.service, который даст нам возможность интеграции сервиса в systemd:

Активируем сервис и запускаем его:

Если всё получилось — вы увидите, что сервис в состоянии active (running).

Вы можете проверить работу сервиса, например командой dig:

Осталось только подключить сервис к Pi-Hole. Для этого вы заходите в веб-интерфейс Pi-Hole (тут вам пригодится записанный в первом этапе пароль), идете в пункт меню Settings — DNS и делаете его выглядящим приблизительно вот так:

Screenshot of Pi-hole configuration

Если вы забыли записать пароль — ничего страшного, заходите на сервер через ssh и исполняете команду pihole -a -p, она позволит задать новый пароль. Ну и в целом посмотрите ключи команды pihole, там много интересного. Например, обновление системы делается одной командой pihole -up.

3. Настраиваем ваш домашний роутер

Всё многообразие роутеров я, конечно, закрыть этим текстом не могу. Но для большинства домашних роутеров справедливы следующие моменты:

1) У роутера можно задать кастомный DNS-сервер в настройках WAN-интерфейса, даже если IP-адрес получается от провайдера динамически

2) Роутер выдает внутренним клиентам свой адрес в качестве DNS и переправляет их запросы на тот сервер, который указан в настройках WAN

Соответственно, в этом случае нам необходимо и достаточно прописать адрес нашего Pi-Hole в качестве DNS-сервера в настройках WAN-интерфейса домашнего роутера. Важно, чтобы он был единственным DNS-сервером в настройках, если будет указан какой-то еще — роутер будет балансировать запросы между ними по только ему известному принципу и такая ситуация крайне неудобна для отладки проблем в сети.

Если вдруг что-то пошло не так и сервис перестал работать, указанную выше настройку достаточно поменять на адрес DNS-сервера вашего провайдера или, например, 8.8.8.8, а уже потом начинать разбираться.

Если у вас роутер более умный и, например, имеет возможность указать в DHCP, какой адрес раздавать клиентам в качестве DNS-сервера, можете пойти по альтернативному пути и настроить раздачу адреса Pi-Hole клиентам напрямую. Это немного разгрузит роутер, но зато усложнит вышеописанный откат с использования сервиса.

В случае, если что-то не будет получаться — спрашивайте в комментариях, найдем решение.

4. Решаем проблемы

В целом после выполнения вышеописанных пунктов у вас уже всё должно быть хорошо, но бывают нюансы, с которыми я и мои клиенты иногда сталкивались.

Обнаружить такую проблему достаточно просто — если вы пытаетесь зайти на заблокированный сервер, ваш браузер показывает вам ошибку ERR_NAME_NOT_RESOLVED или подобную, а проверка в командной строке через nslookup <имя сервера> в ответ выдает 0.0.0.0.

Также регулярно бывает, что Pi-Hole инсталлируют на сервер, на котором уже работает какой-то веб-сервис. В этом случае вы не получите доступа к веб-интерфейсу управления. Как разруливать такой конфликт — зависит от конкретной ситуации, но основные пути решения — это:

Заключение

Как и обещал, не написал ничего нового. Для многих читателей эта схема понятна и очевидна, и или уже внедрена, или не внедрена за ненадобностью. Многие другие построили что-то подобное по-другому, с использованием тех же или иных компонентов. Предлагаю рассматривать этот пост скорее как заготовку для вашего собственного решения, если оно вам когда-либо потребуется. Но, выполнив его как пошаговую инструкцию, вы уже получите сервис, закрывающий ваши базовые потребности в фильтрации рекламы и использовании DoH.

Apple, технологии, информационная безопасность и все остальное

alexmak.net

После эксперимента с роутером ASUS и возвращением на mesh wifi NetGear мне захотелось сделать с домашней сетью что-нибудь еще. Конечно, до виртуальных локальных сетей и серверных шкафов домашней сети мне пока далеко, да и не очень хочется этим заниматься пока что, а вот какие-то базовые вещи вполне можно сделать.У ASUS там были кое-какие встроенные настройки для безопасности сети, есть что-то и у NetGear, но за них хотят отдельную подписку. Поэтому очевидной была идея улучшения безопасности сети, и в частности — добавления механизма предотвращения трекинга в интернете устройств, находящихся в локальной сети дома. Один из таких инструментов — это построение “черной дыры” запросов DNS.


Многие, если не все, слышали про расширения для браузеров, которые отрезают рекламу и трекеры за пользователями на отдельно взятом устройстве — телефоне или компьютере. “Черные дыры” по сути, позволяют делать то же самое, но на уровне локальной сети с помощью фильтрации запросов DNS. Все, что нужно для этого сделать — добавить в сеть специальное программное обеспечение, перехватывающее DNS-запросы. Когда пользователь вбивает адрес сайта в строку браузера, на сервер DNS уходит запрос о переводе URL в IP-адрес сайта, к которому надо подключиться. Фильтры, о которых речь пойдет ниже, умеют блокировать часть DNS-запросов по известным спискам, таким образом предотвращая загрузку контента из сети. В списках в данном случае содержатся доменные адреса различных рекламных сетей, трекеров, фишинговых и других вредоносных сайтов. Я попробовал пару таких решений — Pi-hole и AdGuard Home — и делюсь тем, что я об этом узнал, поскольку в твиттере получил много вопросов по этому поводу.

Безусловно, есть некая “серая территория” по поводу блокировки рекламы, и она располагается больше в этической, а не юридической, области. Блокировка рекламы законом не запрещена, хотя для многих сайтов, живущих с рекламы, это может оказаться болезненным ударом. К сожалению, в интернете реклама и слежка за пользователем чаще всего неразрывно связаны, и поэтому могут быть случайные жертвы. Подумайте о том, чтобы при установке и настройке такого фильтра добавлять в исключения любимые сайты, нуждающиеся в поддержке путем показа рекламы, или же просто дайте им денег путем пожертвований или оформления подписки.

Аппаратная часть
Для реализации этого плана в первую очередь вам понадобится Raspberry Pi — полноценный компьютер размером с ладонь, который работает под управлением варианта Linux. Можно купить только плату, а можно сразу купить набор у реселлеров, где в комплекте сразу будет то, что и так понадобится: блок питания, карта памяти с установщиком системы, кабель HDMI, корпус для платы. Я купил вот такой у CanaKit, в котором есть сразу все:



(Позже я купил другой корпус с улучшенным охлаждением, что позволило отказаться от кулера)

Кроме этого, для настройки понадобятся USB клавиатура и мышь, а также Ethernet-кабель для подключения к сети. Хотя у Raspberry Pi есть Wifi, подключать её как сетевой фильтр лучше через кабель. Сам процесс настройки Raspberry Pi достаточно простой и сопровождается графическим интерфейсом, поэтому там даже рассказывать особо нечего. Если вы купили набор, типа того, который выше, там на SD-карте уже сразу будет установщик, который проведет вас через нужные шаги установки системы. Можно скачать установщик системы, который отформатирует на Маке карту памяти и запишет туда загрузочный образ, где можно будет выбрать вариант операционной системы для Rasbperry


Для такого фонового процесса как Pi-hole даже графический интерфейс системы не нужен, поэтому можно установить версию Raspbian Lite OS без него. Но если вас пугает необходимость управлять системой в командной строке, то можно и обычную Raspbian ставить, так как Pi-hole не пожирает много ресурсов, и ничего ужасного в работе GUI не будет. Либо в командной строке, либо же через интерфейс Raspbian лучше сразу активировать возможность подключаться к устройству по ssh (в терминале можно сделать touch ssh и скопировать файл на карту памяти). Пройдя настройку Raspberry Pi, вы получите работающий компьютер с логином pi и паролем raspberry, который, разумеется, лучше сразу поменять на что-то другое (для этого можно использовать passwd в терминале).


Теперь можно ходить к Raspberry Pi удаленно через SSH (или, например, клиентом VNC, включив в настройках Raspbian доступ по VNC). В любом случае, при работе с Raspbian часто команды придется выполнять в командной строке, поэтому лучше к этому привыкать.

Установка фильтра Pi-hole
Следующим шагом вам надо определиться с тем, какой фильтр DNS-запросов устанавливать. Я вначале попробовал AdGuard Home, который многие в твиттере рекомендовали как более продвинутое решение. Принципиально AdGuard Home и Pi-hole не отличаются, но у AdGuard есть интересные возможности, для которых на Pi-hole еще надо делать дополнительные приседания.


Я бы с удовольствием продолжил пользоваться AdGuard Home, но у меня после его установки возникли проблемы. Не знаю, с чем именно это связано, но на некоторых устройствах дома DNS сошел с ума, и многие совершенно обычные ресурсы перестали загружаться. Я читал, что иногда роутер NetGear Orbi может перехватывать запросы DNS, и это может вызывать проблемы при работе фильтра в сети. У меня они возникли, и в итоге пришлось срочно все отключить, чтобы не ломался рабочий день (мы же в эпохе WFH). Вместо повторной настройки AdGuard Home я решил сделать второй попыткой установку Pi-hole, и в этот раз у меня все заработало без проблем. Возможно, я сделаю еще один подход к AdGuard Home, потому что мне не очень нравится интерфейс Pi-hole, но уже потом, когда появится дополнительное желание.

С установкой Pi-hole все почти так же просто, как и к настройкой Raspberry Pi — нужно закачать установщик из интернета, запустить его, и дальше следовать шагам визарда. Я выбрал путь ручной загрузки и установки отсюда. В терминале (разумеется, по ssh на Raspberry Pi) делаем:


А дальше достаточно просто пройти путь настройки Pi-hole через прекрасный визуальный визард:

Примерно 12-15 экранов визарда расскажут вам, что для Pi-hole нужен нужен фиксированный IP-адрес, позволят выбрать интерфейс (Ethernet или Wifi), напомнят о необходимости задонатить бесплатному проекту, а также выбрать DNS-сервер, к которому будет ходить Pi-hole, чтобы резолвить запросы, которые не блокируются. Я выбрал Cloudflare за их подход к конфиденциальности: они не торгуют данными пользователей, и не хранят логи дольше 24 часов.



(я потерял свой скриншот, поэтому пришлось одолжить из интернета)

Собственно, после того, как пройдена первоначальная настройка Pi-hole, дальше почти что и делать нечего. Самое главное — нужно добавить Pi-hole как DNS в локальной сети. Для этого в настройках роутера нужно указать IP-адрес Pi-hole вместо тех DNS-серверов, которые там прописаны (вероятней всего — что-то, полученное автоматически от провайдера). Таким образом это позволит всем устройствам в домашней сети пользоваться преимуществами Pi-hole по фильтрации запросов. Альтернативно можно прописать IP-адрес Raspberry Pi в качестве DNS-сервера на тех устройствах, которым вы хотите обеспечить работу фильтра, но это нивелирует смысл разворачивания такого DNS-фильтра в локальной сети.

Второе, что понадобится сделать — добавить списки доменов, которые надо блокировать. Списки обычно собирает, обновляет и распространяет весьма активное сообщество, за что ему, безусловно, спасибо. Список — это txt файл, в котором перечислены домены, которые будут блокироваться вашей Pi-hole. Есть масса сайтов в сети, откуда такие списки распространяются, есть мегасписки, которые содержат другие списки, и тд. Но со списками надо осторожно, и не надо стараться добавить сразу все: если перестараться, то легко заблокировать что-то лишнее: некоторые сайты могут перестать работать, или будут работать неправильно. Можно добавлять списки по одному (там в списках, как правило, сразу десятки тысяч доменов), и смотреть, что из критического перестало работать (если перестало).


Через консоль можно смотреть статистику, добавлять и удалять домены для блокировки и исключений, и, в общем-то, все. Дополнительно можно установить полезное мобильное приложение Pi-hole Remote (от стороннего разработчика), и смотреть статистику, и управлять самой pi-hole через него. Важный момент: для того, чтобы получить доступ к консоли в мобильном приложении, надо просканировать токен, который можно найти в настройках веб-консоли, пароль к админской части консоли для этой цели не годится.

Посмотреть, как работает Pi-hole, лучше всего на каком-нибудь сайте, где много рекламы и трекеров (типа Buzzfeed). Достаточно загрузить этот сайт с включенной и выключенной Pi-hole, и вы сразу почувствуете разницу (ну, может, не сразу, так как надо обычно сделать несколько перезагрузок сайтов, чтобы все кэши обновились). Надо также учитывать, что некоторые сайты понимают факт блокировки рекламы через Pi-hole, и все равно будут требовать отключить блокировщик рекламы. Тут как раз одно из неудобств PiHole и проявляется: просто так отключить её как расширение в браузере для конкретной страницы нельзя. Также не получится просто добавить сам домен сайта в исключения, потому что проблема как раз в загружающейся на этом сайте рекламе и трекерах. Я еще пока что изучаю, что по этому поводу делать. Есть смысл периодически заглядывать в статистику: так я узнал, что больше всего Pi-hole блокирует один из адресов CDN Apple. Что странно — я не замечал никаких побочных эффектов, кроме того, что в Apple News перестала загружаться реклама. Правда, я считаю это честной игрой: я плачу за Apple News+, а мне все равно показывают рекламу, да еще и в виде автоматически проигрывающегося видео, и это даже нельзя отключить. Кстати, о рекламе в видео: YouTube активно борется с блокировками Pi-hole и заблокировать рекламу на YouTube сложно, а работающие сегодня методы могут перестать работать уже завтра.

Еще один момент: на данном этапе все запросы на Pi-hole показываются “от роутера”, потому что он оказывается главным “клиентом”, который ходит в сеть от лица всех домашних устройств. Мне это не показалось большой проблемой, хотя если захочется вычислить какое-то активно “стучащее” в сеть устройство, то надо будет заморочиться. Этот вопрос решается, например, путем поднятия DHCP-сервера на Raspberry, тогда каждое устройство будет ходить на Raspberry Pi со своим IP-адресом.

Читайте также: