Установка AdGuard Home в контейнере на MikroTik RouterOS 7

Ответить
Аватара пользователя
lammeronline
Администратор
Сообщения: 1
Зарегистрирован: Вчера, 17:21
Возраст: 37
Пол: Мужской
Контактная информация:

Установка AdGuard Home в контейнере на MikroTik RouterOS 7

Сообщение lammeronline » Автор темы

ca6ba752-ce27-4235-a335-772958014986.png
Установка AdGuard Home в контейнере на MikroTik RouterOS 7 Пошаговая инструкция по установке и настройке AdGuard Home непосредственно на MikroTik с использованием Container 1. Введение
AdGuard Home — локальный DNS-сервер, который позволяет блокировать рекламу, трекеры, вредоносные и нежелательные домены сразу для всей домашней сети.
Если ваш MikroTik поддерживает Container, отдельный сервер, Raspberry Pi или виртуальная машина для AdGuard Home не нужны — его можно запустить непосредственно на роутере.
Схема работы будет примерно такой:

Код: Выделить всё

Компьютеры / телефоны / Smart TV|vMikroTik|vAdGuard Home(Container)|vUpstream DNSCloudflare / Google / DoH
В результате все устройства домашней сети смогут использовать единый DNS-фильтр.

2. Что потребуется
Перед установкой необходимо:
  • MikroTik с RouterOS 7;
  • архитектура устройства, поддерживающая Container;
  • установленный пакет container;
  • USB-накопитель, SSD или другое хранилище;
  • доступ MikroTik к интернету;
  • доступ к терминалу RouterOS через WinBox, WebFig или SSH.
Важно:
Не рекомендуется хранить контейнер AdGuard Home во внутренней Flash-памяти роутера. AdGuard ведёт статистику, журналы DNS-запросов и периодически записывает данные на диск.
Лучше использовать USB-накопитель или SSD.
Проверить архитектуру и версию RouterOS:

Код: Выделить всё

/system resource print/system package print
В списке пакетов должен присутствовать:

Код: Выделить всё

container
3. Включаем Container Mode
На актуальных версиях RouterOS разрешаем использование контейнеров:

Код: Выделить всё

/system/device-mode/update container=yes
RouterOS запросит физическое подтверждение изменения Device Mode.
Следуйте сообщению в терминале — в зависимости от модели потребуется нажать кнопку Reset/Mode либо выполнить другое физическое подтверждение.
После этого проверяем:

Код: Выделить всё

/system/device-mode/print
Должно быть:

Код: Выделить всё

container: yes
4. Проверяем накопитель
Посмотрим доступные диски:

Код: Выделить всё

/disk print/file print
В этом гайде будем считать, что USB-накопитель в RouterOS называется: ВАЖНО: на вашем MikroTik имя накопителя может отличаться.
Например:

Код: Выделить всё

usb1disk1usb2sata1
Во всех командах ниже замените usb1 на имя своего накопителя.
Для контейнеров желательно использовать файловую систему ext4.
[warning]Форматирование полностью удалит данные с выбранного накопителя. Не форматируйте диск, пока не убедитесь, что выбрали правильное устройство.[/warning]

5. Настраиваем Container Registry
Укажем Docker Hub как источник образов:

Код: Выделить всё

/container/config/set registry-url=https://registry-1.docker.io tmpdir=/usb1/tmp
Создавать tmpdir вручную на современных версиях RouterOS обычно не требуется, но каталог должен находиться на накопителе с достаточным свободным местом.
Проверяем:

Код: Выделить всё

/container/config/print
6. Создаём виртуальный интерфейс для AdGuard Home
Контейнеру потребуется собственный VETH-интерфейс.
В этом примере используем отдельную сеть:

Код: Выделить всё

172.18.0.0/24
MikroTik:

Код: Выделить всё

172.18.0.1
AdGuard Home:

Код: Выделить всё

172.18.0.2
Создаём VETH:

Код: Выделить всё

/interface/veth/add name=veth-adguard address=172.18.0.2/24 gateway=172.18.0.1
Теперь создаём отдельный bridge:

Код: Выделить всё

/interface/bridge/add name=bridge-containers/interface/bridge/port/add bridge=bridge-containers interface=veth-adguard
Назначаем адресу bridge IP:

Код: Выделить всё

/ip/address/add address=172.18.0.1/24 interface=bridge-containers
Проверяем:

Код: Выделить всё

/interface/veth/print/ip/address/print
7. Даём контейнеру доступ в интернет
Если стандартное правило masquerade уже распространяется на эту сеть, дополнительное правило может не понадобиться.
В противном случае добавляем:

Код: Выделить всё

/ip/firewall/nat/add chain=srcnat src-address=172.18.0.0/24 action=masquerade comment="Containers Internet"
После запуска контейнера можно будет проверить его доступ к сети.

8. Создаём постоянное хранилище AdGuard Home
AdGuard Home использует два важных каталога:

Код: Выделить всё

/opt/adguardhome/conf/opt/adguardhome/work
В них находятся конфигурация, база, статистика и рабочие данные.
Чтобы они не исчезали при пересоздании контейнера, подключим их через RouterOS Mount.
Создаём Mount для конфигурации:

Код: Выделить всё

/container/mounts/add name=MOUNT_AGH_CONF src=/usb1/containers/adguard-conf dst=/opt/adguardhome/conf
Создаём Mount для рабочих данных:

Код: Выделить всё

/container/mounts/add name=MOUNT_AGH_WORK src=/usb1/containers/adguard-work dst=/opt/adguardhome/work
Проверяем:

Код: Выделить всё

/container/mounts/print
Должны появиться:

Код: Выделить всё

MOUNT_AGH_CONFMOUNT_AGH_WORK
9. Скачиваем контейнер AdGuard Home
Используем официальный Docker-образ:

Код: Выделить всё

adguard/adguardhome:latest
Добавляем контейнер:

Код: Выделить всё

/container/add remote-image=adguard/adguardhome:latest interface=veth-adguard root-dir=/usb1/containers/adguard-root mounts=MOUNT_AGH_CONF,MOUNT_AGH_WORK logging=yes start-on-boot=yes
Примечание:
Скачивание и распаковка образа на MikroTik могут занять некоторое время. Особенно долго это происходит на слабых моделях и медленных USB-накопителях.
Следить за процессом можно командами:

Код: Выделить всё

/container/print/log/print
После завершения установки контейнер должен появиться в:

Код: Выделить всё

/container/print
10. Запускаем AdGuard Home
Посмотрим номер контейнера:

Код: Выделить всё

/container/print
Если AdGuard имеет номер 0:

Код: Выделить всё

/container/start 0
Либо можно запускать контейнер через его имя/идентификатор, отображаемый RouterOS.
Проверяем:

Код: Выделить всё

/container/print
Контейнер должен перейти в состояние: Посмотреть сообщения контейнера:

Код: Выделить всё

/log/print
11. Открываем мастер настройки AdGuard Home
При первом запуске AdGuard Home запускает мастер первоначальной настройки на TCP-порту: Поэтому открываем с компьютера:

Код: Выделить всё

http://172.18.0.2:3000
Важно:
Никакой Docker-style проброс портов в данном варианте не нужен.
Контейнер имеет собственный IP:

Код: Выделить всё

172.18.0.2
Поэтому клиенты локальной сети обращаются непосредственно к этому адресу, если правила Firewall разрешают такой трафик.

12. Настраиваем мастер AdGuard Home
В мастере первоначальной настройки выбираем интерфейс прослушивания.
Для DNS можно использовать:

Код: Выделить всё

All interfaces
DNS-порт: Для Web-интерфейса можно оставить стандартные параметры или выбрать удобный порт.
Создаём:
  • имя администратора;
  • надёжный пароль.
После завершения мастер перезапустит Web-интерфейс.

13. Настраиваем Upstream DNS
Открываем:
Settings → DNS settings
В качестве обычных DNS, например:

Код: Выделить всё

1.1.1.11.0.0.1
Либо можно использовать DNS-over-HTTPS.
Например Cloudflare:

Код: Выделить всё

https://cloudflare-dns.com/dns-query
После сохранения желательно выполнить проверку Upstream DNS Servers непосредственно из интерфейса AdGuard Home.

14. Настраиваем MikroTik DHCP
Теперь необходимо сообщить клиентам локальной сети, что DNS-сервер находится по адресу:

Код: Выделить всё

172.18.0.2
Сначала смотрим DHCP Networks:

Код: Выделить всё

/ip/dhcp-server/network/print
Например, если наша LAN:

Код: Выделить всё

192.168.88.0/24
можно выполнить:

Код: Выделить всё

/ip/dhcp-server/network/set [find address="192.168.88.0/24"] dns-server=172.18.0.2
Замените:

Код: Выделить всё

192.168.88.0/24
на адрес своей локальной сети.
После этого клиентам потребуется обновить DHCP lease.
Самый простой вариант — отключить и снова включить Wi-Fi/сетевой интерфейс.
В Windows можно выполнить:

Код: Выделить всё

ipconfig /releaseipconfig /renew
Проверяем:

Код: Выделить всё

ipconfig /all
В качестве DNS должен отображаться:

Код: Выделить всё

172.18.0.2
15. Вариант: MikroTik сам использует AdGuard Home
При необходимости можно указать AdGuard Home в качестве DNS для самого MikroTik:

Код: Выделить всё

/ip/dns/set servers=172.18.0.2
Однако здесь важно не создать DNS-петлю.
Например, если AdGuard использует MikroTik как Upstream DNS, а MikroTik одновременно использует AdGuard, получится:

Код: Выделить всё

MikroTik → AdGuard → MikroTik → AdGuard → ...
Поэтому Upstream DNS в AdGuard Home должен быть внешним DNS-сервером.
Например:

Код: Выделить всё

AdGuard Home|+--> Cloudflare|+--> Google|+--> Quad9
16. Принудительное перенаправление DNS через AdGuard
Этот пункт необязательный.
Некоторые устройства могут игнорировать DNS, полученный через DHCP, и использовать, например:

Код: Выделить всё

8.8.8.81.1.1.1
Обычные DNS-запросы TCP/UDP 53 можно принудительно перенаправить на AdGuard.
Например, для LAN:

Код: Выделить всё

192.168.88.0/24
добавляем:

Код: Выделить всё

/ip/firewall/nat/add chain=dstnat src-address=192.168.88.0/24 protocol=udp dst-port=53 dst-address=!172.18.0.2 action=dst-nat to-addresses=172.18.0.2 to-ports=53 comment="Force DNS UDP to AdGuard"/ip/firewall/nat/add chain=dstnat src-address=192.168.88.0/24 protocol=tcp dst-port=53 dst-address=!172.18.0.2 action=dst-nat to-addresses=172.18.0.2 to-ports=53 comment="Force DNS TCP to AdGuard"
Замените:

Код: Выделить всё

192.168.88.0/24
на свою LAN-подсеть.
Обратите внимание:
Эти правила перехватывают обычный DNS на порту 53, но не блокируют автоматически DNS-over-HTTPS (DoH) и DNS-over-TLS (DoT).

17. Firewall
Если используется стандартный строгий Firewall MikroTik, необходимо убедиться, что LAN-клиентам разрешено обращаться к сети контейнеров.
Нам как минимум нужен доступ:

Код: Выделить всё

LAN -> 172.18.0.2 TCP/UDP 53
и для администрирования:

Код: Выделить всё

LAN -> 172.18.0.2 TCP Web-порт
Конкретные правила зависят от существующей конфигурации Firewall, поэтому бездумно вставлять универсальные ACCEPT-правила не рекомендуется.
Очень важно:
Не открывайте DNS AdGuard Home в интернет.
Публично доступный UDP/TCP 53 может превратить ваш роутер в открытый DNS resolver.

18. Проверяем работу DNS
На Windows:

Код: Выделить всё

nslookup google.com 172.18.0.2
Если всё работает, получим IP-адрес Google.
Также можно проверить обычный запрос:

Код: Выделить всё

nslookup google.com
DNS Server должен соответствовать AdGuard Home либо выбранной вами схеме DNS.
После этого открываем Web-интерфейс AdGuard Home.
В разделе:
Query Log
должны появляться DNS-запросы клиентов.

19. Добавляем фильтры
Переходим:
Filters → DNS blocklists
AdGuard Home уже имеет базовые возможности фильтрации.
Не стоит сразу добавлять десятки огромных списков.
Для MikroTik особенно важно помнить, что AdGuard работает непосредственно на роутере и использует его:
  • RAM;
  • CPU;
  • дисковое пространство.
Лучше начать с 1–3 качественных списков и посмотреть нагрузку.

20. Ограничиваем размер Query Log и статистики
Если контейнер работает с USB-флешки, желательно не хранить чрезмерное количество статистики.
В настройках AdGuard Home можно уменьшить период хранения:
Settings → General settings
Это снизит объём записей и расход места.
Для постоянной работы контейнеров предпочтительнее хороший USB SSD, чем дешёвая флешка.

21. Обновление AdGuard Home
Контейнеры на MikroTik отличаются от обычного Docker.
Для обновления безопаснее сохранить каталоги:

Код: Выделить всё

/usb1/containers/adguard-conf/usb1/containers/adguard-work
а затем загрузить свежий образ и пересоздать контейнер, снова подключив существующие Mount.
Именно поэтому конфигурацию и рабочие данные мы вынесли из:

Код: Выделить всё

adguard-root
в отдельные каталоги.
Таким образом:

Код: Выделить всё

Container root|+--- можно пересоздатьadguard-conf|+--- сохраняемadguard-work|+--- сохраняем
22. Полезные команды
Посмотреть контейнеры:

Код: Выделить всё

/container/print
Посмотреть подробную информацию:

Код: Выделить всё

/container/print detail
Запустить контейнер:

Код: Выделить всё

/container/start 0
Остановить:

Код: Выделить всё

/container/stop 0
Посмотреть VETH:

Код: Выделить всё

/interface/veth/print detail
Проверить Mount:

Код: Выделить всё

/container/mounts/print detail
Посмотреть логи:

Код: Выделить всё

/log/print
Следить за логом в реальном времени:

Код: Выделить всё

/log/print follow
Проверить адреса:

Код: Выделить всё

/ip/address/print
Проверить маршруты:

Код: Выделить всё

/ip/route/print
Проверить DNS MikroTik:

Код: Выделить всё

/ip/dns/print
23. Типичные проблемы
Проблема №1: контейнер не скачивается
Проверяем:

Код: Выделить всё

/container/config/print/ip/dns/print/ip/route/print/log/print
У MikroTik должен быть рабочий интернет и DNS.
---
Проблема №2: AdGuard запущен, но 172.18.0.2 недоступен
Проверяем:

Код: Выделить всё

/container/print/interface/veth/print detail/interface/bridge/port/print/ip/address/print
VETH должен находиться в bridge-containers.
---
Проблема №3: AdGuard работает, но клиенты не имеют интернета
Сначала проверяем DNS:

Код: Выделить всё

nslookup google.com 172.18.0.2
Затем смотрим:

Код: Выделить всё

/ip/firewall/filter/print/ip/firewall/nat/print
---
Проблема №4: ошибка при добавлении mounts
Mount должны быть сначала созданы:

Код: Выделить всё

/container/mounts/print
После этого их имена передаются контейнеру:

Код: Выделить всё

mounts=MOUNT_AGH_CONF,MOUNT_AGH_WORK
---
Проблема №5: после обновления/пересоздания пропали настройки
Проверьте, что конфигурация действительно вынесена через Mount:

Код: Выделить всё

MOUNT_AGH_CONF -> /opt/adguardhome/confMOUNT_AGH_WORK -> /opt/adguardhome/work
Если данные хранились только внутри root-dir контейнера, при его удалении они также могут быть потеряны.
24. Итоговая схема
В результате получаем:

Код: Выделить всё

INTERNET||[ MikroTik ]|+-------------+-------------+|                           ||                     bridge-containers|                           ||                      172.18.0.1|                           ||                     veth-adguard|                           ||                      172.18.0.2|                           ||                    [ AdGuard Home ]|                           ||                       DNS/DoH|                           ||                    Upstream DNS|LAN Bridge|192.168.88.0/24|+----+----+--------+|         |        |PC      Phone    Smart TV
DNS-запрос проходит:

Код: Выделить всё

Клиент|v172.18.0.2:53|vAdGuard Home|+--> проверка фильтров|vUpstream DNS|vInternet
25. Краткий результат
После выполнения настройки мы получаем:
  • AdGuard Home непосредственно на MikroTik;
  • отдельный IP контейнера;
  • DNS-фильтрацию для всей локальной сети;
  • блокировку рекламы и трекеров;
  • Web-интерфейс AdGuard Home;
  • сохранение конфигурации вне root контейнера;
  • автоматический запуск AdGuard после перезагрузки MikroTik;
  • возможность принудительно направлять обычный DNS клиентов через AdGuard.
Главное преимущество такой схемы — для сетевой DNS-фильтрации не требуется отдельный компьютер или сервер. Всё работает непосредственно на MikroTik.
Готово! AdGuard Home работает в Container на MikroTik RouterOS 7.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Ответить