12

Сдохла флешка в DNS сервере. Возвращаем к жизни

Перепост моей статьи 2021 года из Дзена. С течением времени, что-то могло поменяться.

Всех приветствую! Решил поделиться с общественностью своим хобби. Эта пилотная статья о насущном и о том, как с этим насущным бороться.

Сдохла флешка в DNS сервере. Возвращаем к жизни Linux, Гайд, DNS, Raspberry pi, Длиннопост

Итак, открыв шкаф после очередного отключения света, я обнаружил, что мой основной DNS на Raspberry Pi 1 не подаёт никаких признаков жизни. Благо, ничего перенастраивать не пришлось - в своё время, позаботился о резервировании.

Первая мысль: опять выгнуло адаптер, щас прижмём. Прижал адаптер, попробовал другой -- безрезультатно. Вставил флешку через USB-кард-ридер в соседний сервер и увидел следующее:

Сдохла флешка в DNS сервере. Возвращаем к жизни Linux, Гайд, DNS, Raspberry pi, Длиннопост

Вывод команды dmesg

Сдохла флешка в DNS сервере. Возвращаем к жизни Linux, Гайд, DNS, Raspberry pi, Длиннопост

LSBLK никаких блочных устройств не видит

Стало очевидно - умерла флешка. Ну что ж, будем возвращать сервер в работу.

Берём запасную флешку, идём на сайт Raspberry в раздел Software, выбираем Raspberry Pi OS (он же Raspbian). Записывать флешку я буду утилитой Raspberry Pi Imager.

Сдохла флешка в DNS сервере. Возвращаем к жизни Linux, Гайд, DNS, Raspberry pi, Длиннопост

Ставить будем Raspberry Pi OS Lite. Нажимаем Write и ждем...

После записи образа переподключаем ридер с картой и в разделе boot создаём файл ssh без расширения. Это нужно для того, чтобы при загрузке Raspberry была доступна по SSH.

Сдохла флешка в DNS сервере. Возвращаем к жизни Linux, Гайд, DNS, Raspberry pi, Длиннопост

Подключаем, включаем - вроде заработало. DHCP в моей сети настроен на автоматическую выдачу адреса 192.168.200.10, так что можно сразу подключаться и производить настройку.

Сдохла флешка в DNS сервере. Возвращаем к жизни Linux, Гайд, DNS, Raspberry pi, Длиннопост
Сдохла флешка в DNS сервере. Возвращаем к жизни Linux, Гайд, DNS, Raspberry pi, Длиннопост

Логин и пароль по умолчанию pi:raspberry

Произведём первоначальную настройку через команду raspi-config:

Сдохла флешка в DNS сервере. Возвращаем к жизни Linux, Гайд, DNS, Raspberry pi, Длиннопост

Задаём имя хоста

Сдохла флешка в DNS сервере. Возвращаем к жизни Linux, Гайд, DNS, Raspberry pi, Длиннопост

Указываем минимально возможный объем видеопамяти

Проверяем все остальные настройки и перезагружаемся.

Далее - обновляем систему:

sudo apt update

sudo apt dist-upgrade

В качестве сервера будем использовать Pi-Hole. Это фильтрующий DNS-сервер, основанный на BIND. Установка очень простая:

Скрипт сам установит всё, что нужно и применит все настройки.

В процессе установки будет задан вопрос о предпочитаемом DNS-провайдере. Я выбираю Google. Это не принципиально, ибо при синхронизации применятся старые настройки.

Сдохла флешка в DNS сервере. Возвращаем к жизни Linux, Гайд, DNS, Raspberry pi, Длиннопост
Сдохла флешка в DNS сервере. Возвращаем к жизни Linux, Гайд, DNS, Raspberry pi, Длиннопост

Отмечаем, что в сети нет IPv6. На все остальные вопросы отвечаем утвердительно.

После завершения установки меняем пароль от веб-интерфейса

pihole -a -p

Теперь установим скрипт Gravity Sync для синхронизации

export GS_INSTALL=primary && curl -sSL https://gravity.vmstan.com | bash

Для основного сервера

export GS_INSTALL=secondary && curl -sSL https://gravity.vmstan.com | bash

Для резервного(ых) сервера(ов) (он у меня уже установлен)

На основном сервере всё! Подключаемся к резервному. С него мы возьмём настройки и чёрно-белые списки.

Чтобы не было проблем с ключами, удалим папку .ssh из домашней директории, всё равно, по SSH они общаются только друг с другом.

rm -rf .ssh

Заново познакомим основной и резервный сервера

./gravity-sync/gravity-sync.sh config

В процессе настройки у нас попросят данные для удаленного доступа по SSH (IP, логин, пароль).

Теперь можно сравнить две базы:

./gravity-sync/gravity-sync.sh compare

У данного скрипта есть три основных опции синхронизации:

smart - "умная" синхронизация. По сути, чья база свежее, ту и будем синхронизировать.
pull - синхронизируем базу с основного на резервный сервер.
push - синхронизируем с резервного на основной. Вот этот вариант нам и нужен.

./gravity-sync/gravity-sync.sh push

pi@nuke-DNS2:~ $ ./gravity-sync/gravity-sync.sh push

[∞] Initalizing Gravity Sync (3.4.4)

[✓] Loading gravity-sync.conf

[✓] Evaluating arguments: PUSH

[i] Remote Pi-hole: pi@192.168.200.10

[e] Validating OpenSSH client

[e] Validating RSYNC client

[e] Validating Gravity Sync folders on nuke-DNS2

[e] Validating configuration of Pi-hole

[e] Validating configuration of SQLITE3

[✓] Connecting to 192.168.200.10

[✓] Hashing the primary Domain Database

[✓] Comparing to the secondary Domain Database

[!] Differences detected in the Domain Database

[✓] Hashing the primary Local DNS Records

[✓] Comparing to the secondary Local DNS Records

[!] Replication of Pi-hole settings is required

[?] Type FIRE PHOTON TORPEDOS to confirm: FIRE PHOTON TORPEDOS

[✓] Performing backup of primary Domain Database

[✓] Performing backup of secondary Domain Database

[✓] Checking Domain Database backup integrity

[✓] Pulling backup of primary Domain Database

[✓] Pushing the secondary Domain Database

[✓] Setting file ownership on Domain Database

[✓] Setting file permissions on Domain Database

[✓] Performing backup of primary Local DNS Records

[✓] Performing backup of secondary Local DNS Records

[✓] Pulling backup of primary Local DNS Records

[✓] Pushing the secondary Local DNS Records

[✓] Setting file ownership on Local DNS Records

[✓] Local DNS Records

[i] Inverting tachyon pulses

[✓] Updating primary FTLDNS configuration

[✓] Reloading primary FTLDNS services

[i] Performing replicator diagnostics

[e] Rehashing the primary Domain Database

[e] Recomparing to the secondary Domain Database

[e] Rehashing the primary Local DNS Records

[e] Recomparing to the secondary Local DNS Records

[✓] Purging redundant backups on secondary Pi-hole instance

[i] 3 days of backups remain (628M)

[✓] Saving the updated hashes from this replication

[✓] Logging successful PUSH

Теперь проверим результат

Сдохла флешка в DNS сервере. Возвращаем к жизни Linux, Гайд, DNS, Raspberry pi, Длиннопост

Основной сервер

Сдохла флешка в DNS сервере. Возвращаем к жизни Linux, Гайд, DNS, Raspberry pi, Длиннопост

Резервный сервер

Сдохла флешка в DNS сервере. Возвращаем к жизни Linux, Гайд, DNS, Raspberry pi, Длиннопост

./gravity-sync/gravity-sync.sh compare - репликация не требуется.

Gоследний штрих - автоматизация синхронизации.

./gravity-sync/gravity-sync.sh automate

Указываем время в минутах между синхронизациями (5, 10, 15, 30 минут на выбор; 0 - отключить автоматическую синхронизацию). Я выбираю 30 потому что нечасто вношу изменения в базу, а маленькое время увеличит нагрузку на основной сервер из-за постоянного хэширования.

Вот и всё! Пишите в комментариях, продолжать ли дальше рассказывать о своих приключениях с техникой?

Я из 2024: Gravity Sync не работает с Pi-Hole, начиная с версии 6. В качестве альтернативы, на просторах интернета есть проект Nebula Sync. Сам я давно уже не использую Pi-Hole. Хватает Dnsmasq с кастомным конфигом на роутере.