Давно борюсь с назойливой рекламой в приложениях на телефоне и при серфинге в браузере. И решения как правило являются локальными, где нужно что-то устанавливать и настраивать на каждом устройстве. А всегда хочется автоматизации и минимум действий и максимум удобств =). Совершенно случайно наткнулся на блокировку рекламы с помощью ПО Pi-hole. Официальный сайт - pi-hole.net. И у меня как раз давно без дела лежал Raspberry pi 3.
Установка и настройка на Raspberry крайне понятная и простая. Посмотрим вкратце процесс установки и настройки при условии, что у вас на Raspberry уже установлена ОС Linux и вы имеете доступ по ssh.
Подключаетесь по ssh к Raspberry и выполняете следующую команду:
- sudo curl -sSL https://install.pi-hole.net | bash - после запустится мастер установки, можно всё оставлять по умолчанию. В конце установки вам нужно будет сохранить сгенерированный пароль для доступ к веб-интерфейсу управлению Pi-hole. В случае, если забудете пароль то через ssh командой pihole -a -p можно задать новый пароль.
В принципи на этом можно остановиться и уже подключаться к админке Pi-hole http://ip_address/admin/, но мне ещё хотелось начать использовать DNS over HTTPS.
Определение из википедии:
DNS поверх HTTPS (DoH) — экспериментальный протокол для выполнения разрешения DNS по протоколу HTTPS. Целью этого метода является повышение конфиденциальности и безопасности пользователей путём предотвращения перехвата и манипулирования данными DNS с помощью атак типа «Атака посредника». По состоянию на март 2018 года, Google и Mozilla Foundation тестируют версии DNS по протоколу HTTPS.
Для использование DNS over HTTPS используем сервис от Cloudflare на Raspberry pi 3 и для установки и настройки выполняем следующие команды:
- cd /tmp
- wget https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-linux-arm.tgz
- tar -xvzf cloudflared-stable-linux-arm.tgz
- cp ./cloudflared /usr/local/bin
- sudo chmod +x /usr/local/bin/cloudflared
Создадим пользователя для работы сервиса
- sudo useradd -s /usr/sbin/nologin -r -M cloudflared
Создадим файл конфигурации
- sudo nano /etc/default/cloudflared
Вставим содержимое:
# Commandline args for cloudflared
CLOUDFLARED_OPTS=--port 5055 --upstream 1.0.0.1/dns-query --upstream 1.1.1.1/dns-query
Дадим на него и на исполняемый файл права пользователю сервиса
- sudo chown cloudflared:cloudflared /etc/default/cloudflared
- sudo chown cloudflared:cloudflared /usr/local/bin/cloudflared
Создадим файл для возможности добавления сервиса в автозагрузку
- sudo nano /lib/systemd/system/cloudflared.service
Вставим содержимое:
[Unit]
Description=cloudflared DNS over HTTPS proxy
After=syslog.target network-online.target
[Service]
Type=simple
User=cloudflared
EnvironmentFile=/etc/default/cloudflared
ExecStart=/usr/local/bin/cloudflared proxy-dns $CLOUDFLARED_OPTS
Restart=on-failure
RestartSec=10
KillMode=process
[Install]
WantedBy=multi-user.target
Активация сервиса и его запуск
- systemctl enable cloudflared
- systemctl start cloudflared
- systemctl status cloudflared
Если всё получилось, то увидите, что сервис в состоянии active (running).
Теперь сервис cloudflare необходимо подключить к Pi-hole. Для этого заходим в веб интерфейс http://ip_address/admin/. Переходим в меню Settings — DNS, в Upstream DNS Servers убираете все галки. В custom ipv4 1 добавляете:
- 127.0.0.1#5055
В Advanced DNS Settings галки оставляете только на Never forward non-FQDNs и Never forward revers lookups for private IP ranges. Нажимаете Save.
Далее для теста на компьютере меняете IP адрес днс сервера на IP Raspberry, куда вы установили Pi-hole. Очищайте кэш на своём ПК (Windows) - cmd - ipconfig /flushdns и после пробуете открыть любые сайты. Потом проверяете работу DNS over https через сайт https://www.cloudflare.com/ssl/encrypted-sni/, нажатием на кнопки Check my browser.
Также в белый лист добавил несколько доменов, чтобы они не блокировались.
Добавил блок листы из https://stopad.hook.sh/
И если всё ок, то в настройках DHCP сервера (вероятно он у вас включен в роутере) указываете DNS - ip адрес вашего мини-компьютера Raspberry.
Теперь остаётся настроить роутер Mikrotik на случай, если по какой-либо причине выйдет из строя минипк Raspberry, но хочется, чтобы осталась блокировка рекламы и телеметрии Microsoft. Нашёл сервис для Mikrotik - https://stopad.hook.sh/, который поможет настроить блокировку рекламу.
Добавляете скрипт и настраиваете планировщик ( я у себя настроил запускать скрипт каждые 2 часа) согласно инструкции, указанной на сайте. Рекомендую, в скрипт добавлять и тестить по одному списку, т.к. у меня на Mikrotik HAP AC LITE при добавлении всех списков поднялась загрузка процессора на 100% и после завис. После в Mikrotik переходите в настройки ДНС IP - DNS, указываете первый днс сервер ip адрес Pi-hole, второй днс сервер 1.1.1.1 или гугловский/провайдерский, вообщем любой.
После переходите в настройки DHCP сервера и указываете как второй днс сервер - ip адрес вашего роутера. В моем случае 192.168.77.23 - Pi-hole, 192.168.77.1 - роутер.
На этом всё! Настройка закончена! Приятно удивитесь даже заблокированной рекламой в приложениях на телефоне. Удачи!
CLOUDFLARED_OPTS=--port 5055 --upstream 1.0.0.1/dns-query --upstream 1.1.1.1/dns-query