Pi-hole и VPN на одном Pi: поддерживается ли ещё операционная система?
Прежде чем разместить Pi-hole и VPN на одном Raspberry Pi, согласуйте поддержку платы, архитектуру пользовательского пространства, поддержку служб и путь обновления.
На одном совмещённом устройстве с Pi-hole и VPN смешиваются две вещи: установленное семейство дистрибутива и выпуск с архитектурой, которые компоненты действительно поддерживают. Плата, загружающая образ, доказывает, что ядро работает; она не доказывает, что бинарник FTL от Pi-hole и ваш установщик VPN нацелены на одно и то же пользовательское пространство. Настоящая проверка — четырёхстороннее пересечение поддержки платы, ветки выпуска, архитектуры пакетов и пути обновления, которым вы можете управлять сами. Потеряйте любую из этих четырёх опор, и устройство проработает эту неделю, а потом подведёт на следующем обновлении безопасности.
Поддержку задаёт ветка выпуска, а не название семейства
Спросите, против какого выпуска проект ещё тестирует, и запишите ответ строкой версии, а не словом Debian. Страница предварительных требований Pi-hole перечисляет поддерживаемые операционные системы и готовые архитектуры FTL как два отдельных требования, ограничивает поддержку выпусками, которые сама дистрибуция ещё сопровождает, и предупреждает, что варианты или необычные конфигурации могут не работать даже внутри поддерживаемого списка. Эта формулировка важна: поддерживаемое семейство не покрывает каждого его члена.
Старый образ, который ещё загружается на вашем Pi, не доказывает поддержку. Плата в порядке, индекс пакетов устарел, а несоответствие проявится позже, когда установщик потянет зависимость, которую выпуск уже не может удовлетворить.
У стороны VPN больше частей, у каждой своё окно: демон туннеля, установочный помощник, который пишет его конфигурацию, клиентское приложение провайдера и интеграционный пакет дистрибутива — четыре отдельных проекта. Установщик, распознающий ваш дистрибутив, и установщик, создающий службу, которую выпуск может удерживать в работе, — разные утверждения. Посмотрите собственный список платформ демона, а затем — трогали ли помощник, который вы собираетесь запускать, с момента выхода того выпуска. Там, где проект заявляет поддержку только до названного выпуска, считайте следующий непроверенным, пока сами его не загрузите.
Согласуйте бинарную цель с имеющимся пользовательским пространством
Архитектура — более тихий отказ. 64-битное ядро с 32-битной пользовательской землёй — реальное, поддерживаемое сочетание на нескольких платах, и оно запускает 32-битный бинарник FTL без жалоб, вплоть до момента, когда вы установите то, что публикуется только для arm64. Распечатайте обе половины, прежде чем выбирать образ, и держите вывод рядом с заметками.
uname -m
dpkg --print-architecture
grep -E '^(PRETTY_NAME|VERSION_ID)=' /etc/os-release
apt-cache policy pihole-ftl
Если эти две строки архитектуры не совпадают, вы на смешанной сборке: работоспособной для одного Pi-hole, хрупкой, как только второй службе понадобятся нативные библиотеки. Перезапись на чистый 64-битный образ обычно быстрее, чем пересборка цепочки инструментов, создавшей несоответствие.
Маркетинг платы этого тоже не решает. Размер памяти и модель процессора ничего не говорят о том, с какой libc связаны ваши пакеты, поэтому решайте по напечатанным значениям, а не по странице продукта.
Один корпус, две службы, один владелец сети
Определите, кому принадлежат адресация, резолвер и туннель, прежде чем установится первый пакет, иначе две службы станут претендовать на одну обязанность и ни одна не победит чисто. Дайте Pi статический адрес вне пула DHCP, который раздаёт ваш маршрутизатор, и держите туннель в собственной подсети: 192.168.50.10 для Pi и 10.42.0.0/24 для туннеля — одно рабочее разделение, и сами числа произвольны, пока они не конфликтуют с тем, что маршрутизатор уже обслуживает. Затем запишите, какой компонент отвечает на порту 53, какой раздаёт DHCP, если вы им пользуетесь, и какой владеет маршрутом по умолчанию, пока туннель поднят. На образе без экрана эта последняя задача принадлежит NetworkManager или systemd-networkd, а установка клиента провайдера, который заодно переписывает конфигурацию резолвера, — это путь, на котором люди остаются с живым туннелем и мёртвым DNS.
Делить корпус можно. Делить роль — нет. Pi-hole хочет быть единственным слушателем на порту 53, а демон VPN хочет проталкивать свою настройку DNS клиентам, поэтому выберите, кому из двоих клиенты должны доверять, и настройте второго не мешать.
Держите путь администрирования вне туннеля, где можете. Если резолвер и туннель откажут вместе, вам всё ещё нужен SSH по адресу LAN, а значит, служба управления не должна зависеть ни от одного из них.
Сделайте следующее обновление частью выбора
Выпуск, который вы не можете обновить, — это потолок поддержки, который вы уже приняли. Проверьте механику обновления на запасной карте, прежде чем устройство понесёт DNS вашего дома, и прочитайте, что проекты говорят о переходе между ветками, вместо того чтобы предполагать, что обновления пакета достаточно.
sudo apt update
apt-mark showhold
sudo apt full-upgrade
pihole -up
Удержанные пакеты — обычная причина того, что обновление выглядит успешным и ничего не меняет. Снимайте удержания намеренно, одно за другим, и отмечайте, какой службе понадобилась фиксация.
Перед прыжком экспортируйте конфигурацию Pi-hole, статические аренды и любые профили туннеля и подтвердите, что сможете восстановить их на свежем образе. После прыжка проверьте обычный DNS клиентов, частный ресурс за туннелем, переподключение и любое правило переадресации на шлюзе. Корпус, который загружается и отвечает на ping, не прошёл почти ничего.
Когда ни один выпуск не подходит обеим службам
Иногда пересечение пусто: помощник VPN перешёл на более новый выпуск, чем пакет Pi-hole, который вы можете установить, или образ производителя платы отстаёт от обоих. В этом случае разделите роли, а не правьте метаданные выпуска ради удовлетворения установщика. Два небольших устройства или одно устройство плюс контейнер для второй службы стоят меньше, чем корпус, история поддержки которого держится на лжи.
Подделка версии — единственный короткий путь, от которого нужно отказаться наотрез. Менеджеры пакетов верят тому, что написано в файле выпуска, поэтому подделанный идентификатор даёт установку, в отладке которой не поможет ни один из двух проектов.
Если два текущих выпуска удовлетворяют всему, выберите тот, чьи заметки об обновлении вы можете выполнять без догадок, и перестаньте искать. Затем запишите версию, архитектуру, владельцев служб и шаг восстановления в одном месте, потому что следующему человеку, который коснётся SD-карты, понадобятся все четыре.