Порой хочется сделать фильтрацию нежелательного контента. Уже многие знают про плагины в браузеры, типа AdBlock и их разновидности. Так же есть еще целая куча программ, которая ставится на компьютер и что-то там фильтрует. А еще есть антивирусы, которые имеют ту же функцию (зачастую в платном варианте).
Бродя по просторам интернета наткнулся я на статью с проектом Pi-Hole. Крутость этой штуки в том, что она ставится на одноплатник и просто работает. Ну у нас же есть уже готовый домашний сервер! Тогда приступим.
Немного теории
Основной принцип работы данного сервера, это обычный DNS-сервер. Через него проходят DNS-запросы и проверяются нет ли записи в черном списке. Если же нету, то выполняется forward-запрос на внешний DNS-сервер. Таким образом мы просто фильтруем домены. Все достаточно просто.
Практика
И так, как обычно по канонам мастерства нашей настройки создадим файл /opt/pihole/docker-compose.yml следующего содержимого:
version: "2.4"
services:
pihole:
image: pihole/pihole:2021.11
restart: unless-stopped
volumes:
- type: bind
source: /mnt/nfs/pihole/etc-pihole/
target: /etc/pihole/
- type: bind
source: /mnt/nfs/pihole/etc-dnsmasq.d/
target: /etc/dnsmasq.d/
mem_limit: 256m
mem_reservation: 64m
ports:
- "53:53/tcp"
- "53:53/udp"
- "8086:80/tcp"
environment:
TZ: 'Europe/Moscow'
WEBPASSWORD: <пароль для web-интерфейса>
cap_add:
- NET_ADMIN
После создаем файл /etc/systemd/system/pihole.service:
[Unit]
Description=PiHole docker-compose
Requires=docker.service
After=docker.service
[Service]
Restart=always
WorkingDirectory=/opt/pihole/
# Compose up
ExecStart=/usr/bin/docker-compose -f docker-compose.yml up
# Compose down, remove containers
ExecStop=/usr/bin/docker-compose -f docker-compose.yml down
[Install]
WantedBy=multi-user.target
Далее создаем пару директорий:
mkdir -p /mnt/nfs/pihole/etc-pihole
mkdir -p /mnt/nfs/pihole/etc-dnsmasq.d
И все это дело запускаем:
systemctl daemon-reload
systemctl enable pihole && systemctl enable pihole
После заходим по адресу http://<адрес вашего сервера>:8086 и смотрим, что все работает.
Настройка домашней сети
Теперь требуется немного настроить домашнюю сеть. Так как дома обычно используется роутер для подключения к интернету, то он является шлюзом. Обычно при включении компьютера роутер выдает адрес и некоторые сетевые настройки. Нас интересует настройка DNS. Для этого идем в роутер и в настройках DHCP-сервера указываем IP-адрес нашего нового DNS-сервера.
Если же на устройствах настроена «статика», то настраиваем уже устройства.
Решаем проблемы
После того, как зашли в web-интерфейс попробуем добавить домен в whitelist или blacklist. Если вываливается ошибка, то придется кое-что сделать вручную. Для этого в консоли выполняем:
docker exec -it pihole_pihole_1 chown -R www-data:pihole /etc/pihole
docker exec -it pihole_pihole_1 chmod -R 744 /etc/pihole
В данном случае мы выставляем права доступа для файлов. Так у меня случае они устанавливались не корректно (а может и корректно). В любом случае мне помогло.
Проверка
Чтобы проверить как это все работает идем по адресу https://d3ward.github.io/toolz/adblock.html и проверяем результат. Если все устраивает, то оставляем как есть. Если же нет, то добавляем то что нужно.
Что получилось
Теперь у нас в локальной сети есть свой DNS-сервер, который является еще и кэширующим, а на его основе можно отсечь нежелательные домены. Можно вписать домены, которые раздражают (реклама) и/или нежелательные ресурсы для детей (да и для взрослых). Уже прогресс.