Docker облегчает запуск нескольких приложений. Но как (и почему) вы запускаете PiHole в Docker в системе Ubuntu с обратным прокси-сервером Traefik впереди? Есть несколько преимуществ для этого, и не так много информации о том, как это сделать. Поэтому в этом руководстве я поделюсь инструкциями по настройке PiHole Docker, и мы сделаем это с помощью docker-compose для простоты. Если вы не используете Docker Compose, проверьте эту страницу на наличие команд Docker .
Недавно я опубликовал свой полный учебник PiHole, в котором содержится вся информация, необходимая для настройки экземпляра PiHole на Raspberry Pi для блокировки всей домашней рекламы. Работая над этим руководством, я также попытался настроить PiHole на Docker, который станет отличным дополнением к моему медиа-серверу Docker. Проблема заключалась в том, что мой док- сервер находился за обратным прокси- сервером Traefik с SSL-сертификатами Let’s Encrypt. Я не смог найти никакой информации о том, как настроить PiHole с обратным прокси-сервером Traefik. Вчера я разобрался, как это сделать. Итак, вот мое руководство по PiHole Docker для систем Ubuntu / Debian с обратным прокси-сервером Traefik. Обратите внимание, что мы используем прокси WebUI (порт 80), а не сам PiHole, который использует порт 53.
Changelog:
- 27 ноября 2018 г. – Первоначальная публикация.
- 6 июня 2019 г. – добавлен шаг 0.
Я опускаю много основной информации, которая была рассмотрена в моем предыдущем руководстве. Поэтому я настоятельно рекомендую прочитать его, даже если все, что там не относится к вам, прежде чем следовать этому руководству.
Преимущества запуска PiHole на Docker
Pi-Hole – это приложение для блокировки рекламы в сети. Если вы не знаете, что такое PiHole, обязательно прочитайте мое предыдущее руководство по PiHole. Docker чрезвычайно упрощает настройку нескольких приложений. В начале этого года я переместил все свои приложения для домашнего сервера, включая Home Assistant, в Docker с обратным прокси-сервером Traefik, и все прошло гладко с автоматическими SSL-сертификатами Let’s Encrypt. Вот некоторые основные преимущества запуска PiHole в Docker:
- Простая, простая в настройке и обслуживании. Docker Compose делает вещи еще проще.
- Долговечность – я говорю это потому, что, если у вас включено ведение журнала запросов, вы можете прожечь свою SD-карту на Raspberry Pi. Это означает, что вам придется все заново настроить. Шансы на что-то подобное на сервере меньше.
- Расширьте свой существующий домашний сервер и устраните необходимость в отдельном устройстве (например, Raspberry Pi).
Но есть еще одно большое преимущество. PiHole требует, чтобы порты 80 и 443 были свободны для использования. Однако эти порты могут требоваться другими приложениями (например, веб-сервером). И если вы следовали моему руководству по обратному прокси-серверу Traefik для настройки вашего сервера Docker Media, то для Traefik требуются порты 80 и 443. Поэтому невозможно установить PiHole непосредственно в системах Ubuntu или Linux. Обратный прокси-сервер – это путь в таких ситуациях, и Docker делает это намного проще. Итак, давайте посмотрим, как запустить PiHole в Docker на сервере Ubuntu с обратным прокси-сервером Traefik.
Требования
Вот что вам нужно, чтобы успешно следовать этому руководству по Pi Hole Docker:
- Ubuntu Server – эти инструкции должны работать на Debian или большинстве систем Linux (с некоторыми изменениями). Это руководство было разработано с использованием Ubuntu Server 18.04 LTS.
- Настройка и запуск Docker в Ubuntu
- Traefik Reverse Proxy настроен и настроен правильно
Кроме того, вам понадобится доступ к вашему серверу Ubuntu напрямую или через SSH. [ Читать: 10 лучших клиентов SSH для Windows: бесплатные альтернативы PuTTY ]
Руководство по настройке PiHole Docker
PiHole Docker – Панель инструментов
Прежде чем мы продолжим, страница PiHole в Docker Hub – отличный ресурс для чтения. Некоторые переменные и настройки, используемые в этом руководстве, подробно описаны на этой странице.
Шаг 0: вытянуть изображение PiHole
На следующем шаге (шаг 1) вы убьете свой сервер DNS resolver. Когда это будет сделано, docker-compose не сможет добраться до док-серверов, чтобы получить последний образ для PiHole. Поэтому сначала вытяните последнее изображение PiHole с помощью следующей команды:
docker pull pihole/pihole:latest
Вывод должен выглядеть примерно так:
Docker Pull PiHole Последнее изображение
После того, как вытащил, вы можете перейти к шагу 1.
Шаг 1: Изменить конфигурацию сети Ubuntu
Поскольку PiHole делает себя DNS-сервером и использует порт 53, возникают конфликты с сетью Ubuntu Server (docker host). На самом деле, это была самая большая проблема, из-за которой я не запускал PiHole в Docker. PiHole работал успешно, но мой сервер Ubuntu не смог получить доступ к интернет-ресурсам. Итак, вот изменения конфигурации сети, которые необходимо внести на вашем сервере Ubuntu, прежде чем приступить к настройке док-станции PiHole.
Сначала отключите и остановите преобразователь DNS Ubuntu, используя следующие две команды:
sudo systemctl disable systemd-resolved.service
sudo systemctl stop systemd-resolved.service
Затем откройте конфигурацию диспетчера сети, используя следующую команду для редактирования:
sudo nano /etc/NetworkManager/NetworkManager.conf
Добавьте dns = default в [main], чтобы содержимое файла выглядело так, как показано ниже:
[main]
plugins=ifupdown,keyfile
dns=default
...
...
...
Затем удалите или даже лучше переименуйте файл /etc/resolv.conf (это символическая ссылка), используя следующую команду:
sudo mv /etc/resolv.conf /etc/resolv.conf.bak
В случае возникновения проблемы вы можете переименовать файл обратно в /etc/resolv.conf. Наконец, перезапустите сетевой менеджер, используя следующую команду.
sudo service network-manager restart
Теперь, когда ваша система подготовлена, давайте перейдем к настройке PiHole в Docker с обратным прокси-сервером Traefik.
Рекомендуемые руководства:
Шаг 2а: Запустите PiHole в Docker с обратным прокси
Если вы не знакомы с Docker и Docker compose, просмотрите мой учебник, прежде чем продолжить. На данный момент, я предполагаю, что у вас уже есть рабочий файл создания докера.
В Докер примере создания сообщения кодового блока PiHole ниже, ${$USERDIR}
, ${SERVER_IP}
, ${TZ}
, ${DOMAINNAME}
и т.д., будут автоматически заполняться с помощью файла из создания сообщения файла среды (/ и т.д. / окружающей среды ). Если у вас его еще нет, проверьте это руководство, чтобы создать файл среды. Кроме того, вы можете заменить переменные окружения в блоке docker-compose ниже фактическими значениями.
Вот код, который нужно добавить (копировать-вставить) в файл docker-compose (обратите внимание на пробелы в начале каждой строки). Обратите внимание, что некоторые строки закомментированы с # перед. Эти строки можно включить, удалив # перед, чтобы настроить состав докера PiHole. Если вы раскомментируете, обратите внимание на выравнивание линий, что очень важно для работы YAML.
pihole:
container_name: pihole
domainname: docker
hostname: pihole
image: pihole/pihole:latest
ports:
- '53:53/tcp'
- '53:53/udp'
# - '67:67/udp'
- 'XXXX:80'
- 'YYYY:443'
restart: unless-stopped
volumes:
- ${USERDIR}/docker/pihole/pihole:/etc/pihole
# - ${USERDIR}/docker/pihole/pihole.log:/var/log/pihole.log
- ${USERDIR}/docker/pihole/dnsmasq.d:/etc/dnsmasq.d
cap_add:
- NET_ADMIN
environment:
- ServerIP=${SERVER_IP}
- PROXY_LOCATION=pihole
- VIRTUAL_HOST=pihole.${DOMAINNAME}
- VIRTUAL_PORT=80
- TZ=${TZ}
- WEBPASSWORD=PIHOLEWEBPASSWORD
- DNS1=127.0.0.1
- DNS2=1.1.1.1
labels:
- "traefik.enable=true"
- "traefik.backend=pihole"
- "traefik.port=80"
- "traefik.frontend.rule=HostRegexp:pihole.${DOMAINNAME},{catchall:.*}"
- "traefik.frontend.priority=1"
- traefik.frontend.headers.SSLRedirect=true
- traefik.frontend.headers.STSSeconds=315360000
- traefik.frontend.headers.browserXSSFilter=true
- traefik.frontend.headers.contentTypeNosniff=true
- traefik.frontend.headers.forceSTSHeader=true
- traefik.frontend.headers.SSLHost=${DOMAINNAME}
- traefik.frontend.headers.STSIncludeSubdomains=true
- traefik.frontend.headers.STSPreload=true
- traefik.frontend.headers.frameDeny=true
Заменить / Настроить:
XXXX
– номер порта на хост-машине, который свободен и будет подключаться к порту 80 контейнера PiHole. Например, я использую 8182.YYYY
– номер порта на хост-машине, который свободен и будет подключаться к порту 443 контейнера PiHole. Порт 443 предназначен для того, чтобы обеспечить место для рекламы, использующей SSL. Например, я использую 8183.67:67/udp
– Я это закомментировал. Если вы хотите, чтобы PiHole выступал в качестве вашего DHCP-сервера, вам нужно раскомментировать это. Я позволил моему маршрутизатору обрабатывать DHCP. Есть некоторые незначительные неудобства в том, чтобы позволить вашему маршрутизатору быть сервером DHCP вместо PiHole. Однако это не влияет на типичного домашнего пользователя.pihole.log
– Я это закомментировал. Но если вы хотите, чтобы ваши журналы PiHole сохранялись (не терялись при воссоздании / обновлении док-контейнеров), то вы должны раскомментировать это. Кроме того, вам придется бежатьtouch pihole.log
внутрь${USERDIR}/docker/pihole/
. Это создаст пустой файл журнала для использования PiHole.cap_add
– Я прокомментировал эту и следующую строку. Чтобы PiHole действовал как DHCP-сервер, эти две строки должны быть некомментированы.PIHOLEWEBPASSWORD
– Пароль для PiHole WebUI.DNS1 and DNS2
– Я в списке Cloudflare DNS IP 1.1.1.1 и 1.0.0.1 (я рекомендую это для конфиденциальности). Вы можете использовать все, что вам подходит.
Сохраните и запустите docker-compose.yml
и проверьте журналы на наличие ошибок:
docker-compose -f ${USERDIR}/docker/docker-compose.yml up -d ; docker-compose logs -tf --tail="50" pihole
Если вы не видите сообщений об ошибках, нажмите Ctrl C для выхода. Веб-интерфейс администратора PiHole должен быть доступен по адресу https://pihole.example.com/admin/.
Шаг 2b: PiHole на Docker без обратного прокси
Так что, если у вас нет обратного прокси и порты 80 и 443 свободны (без веб-сервера). Вы все еще можете использовать Docker для настройки PiHole. В этом случае самым большим преимуществом является простота и изоляция PiHole от хост-машины.
Некоторая предварительная информация, представленная на шаге 2а, применима и здесь.
Вот фрагмент кода для настройки докера, чтобы запустить PiHole без обратного прокси-сервера.
pihole:
container_name: pihole
domainname: docker
hostname: pihole
image: pihole/pihole:latest
ports:
- '53:53/tcp'
- '53:53/udp'
# - '67:67/udp'
- '80:80'
- '443:443'
restart: unless-stopped
volumes:
- ${USERDIR}/docker/pihole/pihole:/etc/pihole
# - ${USERDIR}/docker/pihole/pihole.log:/var/log/pihole.log
- ${USERDIR}/docker/pihole/dnsmasq.d:/etc/dnsmasq.d
cap_add:
- NET_ADMIN
environment:
- ServerIP=${SERVER_IP}
- TZ=${TZ}
- WEBPASSWORD=PIHOLEWEBPASSWORD
- DNS1=127.0.0.1
- DNS2=1.1.1.1
Заменить / Настроить:
67:67/udp
– Я это закомментировал. Если вы хотите, чтобы PiHole выступал в качестве вашего DHCP-сервера, вам нужно раскомментировать это. Я позволил моему маршрутизатору обрабатывать DHCP. Есть некоторые незначительные неудобства в том, чтобы позволить вашему маршрутизатору быть сервером DHCP вместо PiHole. Однако это не влияет на типичного домашнего пользователя.pihole.log
– Я это закомментировал. Но если вы хотите, чтобы ваши журналы PiHole сохранялись (не терялись при воссоздании / обновлении док-контейнеров), то вы должны раскомментировать это. Кроме того, вам придется бежатьtouch pihole.log
внутрь${USERDIR}/docker/pihole/
. Это создаст пустой файл журнала для использования PiHole.cap_add
– Я прокомментировал эту и следующую строку. Чтобы PiHole действовал как DHCP-сервер, эти две строки должны быть некомментированы.PIHOLEWEBPASSWORD
– Пароль для PiHole WebUI.DNS1 and DNS2
– Я в списке Cloudflare DNS IP 1.1.1.1 и 1.0.0.1 (я рекомендую это для конфиденциальности). Вы можете использовать все, что вам подходит.
Сохраните и запустите docker-compose.yml
и проверьте журналы на наличие ошибок:
docker-compose -f ${USERDIR}/docker/docker-compose.yml up -d ; docker-compose logs -tf --tail="50" pihole
Если вы не видите сообщений об ошибках, нажмите Ctrl C для выхода. В этом случае, если вы не настроите переадресацию портов на маршрутизаторе, вы не сможете получить доступ к веб-интерфейсу администратора PiHole из-за пределов вашей домашней сети. В вашей домашней сети веб-интерфейс администратора PiHole должен быть доступен по адресу https: // SERVER-IP-ADDRESS / admin /.
Шаг 3: Конфигурация PiHole и настройки
Я уже рассмотрел конфигурацию и настройки PiHole:
Шаг 4: Доступ к PiHole с помощью командной строки (при необходимости)
Это довольно легко получить доступ к PiHole, работающему на отдельной системе, используя SSH. Как вы получаете доступ к PiHole по командной строке, когда он запускается в докере? Вы можете сделать это с помощью следующей команды:
docker exec -ti pihole /bin/bash
Вы должны быть на терминале внутри контейнера докера. Отсюда вы сможете запускать все команды PiHole, перечисленные в моем предыдущем руководстве по PiHole.
Заключительные мысли о запуске PiHole в Docker
В этом руководстве по PiHole Docker я предполагаю, что у вас есть собственное доменное имя. Вы также можете выполнить то же самое, используя бесплатный динамический DNS. Это было подробно описано в моем предыдущем уроке Traefik.
Я использовал только один экземпляр PiHole в своей сети, и это был Raspberry Pi. Теперь я установил второй экземпляр PiHole в Docker. На моем маршрутизаторе я указал IP-адреса моего сервера Raspberry Pi и Ubuntu в качестве IP-адресов для DNS-серверов имен. Обычно рекомендуется минимум 2 DNS-сервера. С моей установкой Docker PiHole, выступающей в качестве второго сервера PiHole, я теперь могу предоставить два DNS-сервера для распределения нагрузки.
Если вы хотите запустить PiHole в докере, зайдите и сделайте это. Вы будете удивлены, насколько легко это сделать, если вы это сделаете. И вы решили подключиться, надеюсь, это руководство по настройке PiHole Docker окажется полезным.
Источник записи: https://www.smarthomebeginner.com