Всех приветствую! Решил поделиться с общественностью своим хобби. Эта пилотная статья о насущном и о том, как с этим насущным бороться.
Итак, открыв шкаф после очередного отключения света, я обнаружил, что мой первичный DNS на Raspberry Pi 1 не подаёт никаких признаков жизни. Благо, ничего перенастраивать не пришлось - в своё время, позаботился о резервировании.
Первая мысль: опять выгнуло адаптер, щас прижмём. Прижал адаптер, попробовал другой -- безрезультатно. Вставил флешку через USB-кард-ридер в соседний сервер и увидел следующее:
Стало очевидно - умерла флешка. Ну что ж, будем возвращать сервер в работу.
Берём запасную флешку, идём на сайт Raspberry в раздел Software, выбираем Raspberry Pi OS (он же Raspbian). Записывать флешку я буду утилитой Raspberry Pi Imager.
Ставить будем Raspberry Pi OS Lite. Нажимаем Write и ждем...
После записи образа переподключаем ридер с картой и в разделе boot создаём файл ssh без расширения. Это нужно для того, чтобы при загрузке Raspberry была доступна по SSH.
Подключаем, включаем - вроде заработало. DHCP в моей сети настроен на автоматическую выдачу адреса 192.168.200.10, так что можно сразу подключаться и производить настройку.
Произведём первоначальную настройку через команду raspi-config:
Проверяем все остальные настройки и перезагружаемся.
Далее - обновляем систему
sudo apt update
sudo apt upgrade
В качестве сервера будем использовать Pi-Hole. Это фильтрующий DNS-сервер, основанный на BIND. Установка очень простая:
curl -sSL https://install.pi-hole.net | bash
Скрипт сам установит всё, что нужно и применит все настройки.
В процессе установки будет задан вопрос о предпочитаемом DNS-провайдере. Я выбираю Google. Это не принципиально, ибо при синхронизации применятся старые настройки.
Отмечаем, что в сети нет 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
Теперь проверим результат
Последний штрих - автоматизация синхронизации.
./gravity-sync/gravity-sync.sh automate
Указываем время в минутах между синхронизациями (5, 10, 15, 30 минут на выбор; 0 - отключить автоматическую синхронизацию). Я выбираю 30 потому что нечасто вношу изменения в базу, а маленькое время увеличит нагрузку на основной сервер из-за постоянного хэширования.
Вот и всё! Пишите в комментариях, продолжать ли дальше рассказывать о своих приключениях с техникой.