Skip to content

About

Network GitOps & DNS Infrastructure: Interactive Bash scripts for automated dnsmasq, WireGuard, and systems setup with Mozilla SOPS encryption

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

59 Commits

Folders and files

Repository files navigation

Network GitOps & DNS Infrastructure

Набор интерактивных Bash-скриптов для настройки DNS-инфраструктуры, WireGuard-клиентов и базовых системных компонентов на Debian/Ubuntu-серверах.

Репозиторий содержит:

  • единый интерактивный установщик setup.sh;
  • модули в каталоге scripts/;
  • карту CNAME-записей dns-config/cname.map;
  • публичный корневой сертификат certs/root.lab.crt;
  • зашифрованный файл private-hosts.enc, который обслуживается отдельно с помощью SOPS.

Скрипты рассчитаны на интерактивный запуск в полноценном терминале. Не запускайте установщик через curl ... | bash: меню и модули используют стрелки, пробел, Ctrl+D и /dev/tty.

Быстрый запуск установщика

Требования:

  • Debian/Ubuntu или совместимая система;
  • root-доступ;
  • подключение к GitHub;
  • интерактивный TTY;
  • curl (установщик использует его для загрузки модулей).

Скачайте установщик и запустите его:

curl -fL "https://raw.githubusercontent.com/dma-cloud/environment/refs/heads/master/setup.sh" \
  -o /tmp/setup.sh
chmod +x /tmp/setup.sh
sudo /tmp/setup.sh

При запуске установщик спрашивает:

  1. GitHub user или organization;
  2. имя репозитория;
  3. ветку.

Затем открывается меню с чекбоксами:

  • ↑ / ↓ — перемещение;
  • Пробел — выбрать или снять выбор;
  • Enter — подтвердить список.

Модули выполняются последовательно. Для каждого выбранного модуля установщик скачивает текущую версию Bash-скрипта из каталога scripts/ и запускает её от имени root.

Доступные модули

Модуль Назначение
install-dns.sh Первичная настройка dnsmasq с A- и CNAME-записями
sync-dns.sh Проверка и обновление CNAME-записей из Git
install-wg.sh Установка и запуск WireGuard-клиента wg0
enable-swap.sh Создание или пересоздание /swapfile
update-a-records.sh Полная замена локальной карты A-записей
install-root-cert.sh Установка корневого сертификата в системное хранилище

Настройка DNS на VPS

Выберите в меню install-dns.sh.

Скрипт:

  1. определяет IPv4-адреса интерфейсов сервера;
  2. устанавливает dnsmasq и curl, если они отсутствуют;
  3. запрашивает доменную зону, по умолчанию lab;
  4. принимает локальные A-записи;
  5. скачивает dns-config/cname.map;
  6. записывает конфигурацию в /etc/dnsmasq.conf;
  7. проверяет конфигурацию командой dnsmasq --test;
  8. останавливает и отключает systemd-resolved, если он запущен;
  9. включает и перезапускает службу dnsmasq;
  10. скачивает синхронизатор в /opt/dns-sync/sync-dns.sh и запускает его один раз.

Ввод A-записей

После запроса скрипт ожидает строки в формате:

192.168.2.2    underground-01.lab
192.168.2.3    underground-03.lab

Ввод завершается сочетанием Ctrl+D. Пустой список считается ошибкой и отменяет настройку.

Записи сохраняются в /etc/dnsmasq.hosts. CNAME-записи сохраняются в /etc/dnsmasq.d/cname.conf.

Важные ограничения DNS-модуля

  • Скрипт перезаписывает /etc/dnsmasq.conf, /etc/dnsmasq.hosts и загруженный файл CNAME.
  • Внешние DNS-серверы задаются как 1.1.1.1 и 8.8.8.8.
  • Для локальной зоны включаются domain-needed, bogus-priv, expand-hosts и кэш размером 10000 записей.
  • Остановка systemd-resolved может изменить DNS-поведение самой системы.
  • DNS-модуль не устанавливает и не настраивает SOPS. SOPS относится только к работе с private-hosts.enc.

CNAME-синхронизация

Файл dns-config/cname.map содержит строки dnsmasq:

cname=git.lab,undergound-01.lab
cname=registry.lab,undergound-03.lab

Установленный /opt/dns-sync/sync-dns.sh:

  1. получает SHA последнего коммита через GitHub API;
  2. сравнивает его с /opt/dns-sync/last_commit.sha;
  3. скачивает cname.map, только если SHA изменился или локальный файл отсутствует;
  4. перезапускает dnsmasq;
  5. сохраняет новый SHA.

При недоступности GitHub текущие записи не заменяются.

Включение периодической синхронизации

Установка DNS-модуля не добавляет запись в Cron автоматически. Для проверки каждые пять минут добавьте её вручную:

sudo crontab -e
*/5 * * * * /opt/dns-sync/sync-dns.sh >> /var/log/dns-sync.log 2>&1

Проверить работу вручную:

sudo /opt/dns-sync/sync-dns.sh

Текущая версия sync-dns.sh использует репозиторий dma-cloud/environment и ветку master, заданные внутри самого скрипта.

Обновление A-записей

Выберите update-a-records.sh, если нужно заменить физическую карту серверов без полной переустановки DNS.

Скрипт полностью перезаписывает /etc/dnsmasq.hosts, поэтому нужно ввести весь актуальный список, а не только изменившиеся строки:

192.168.2.2    underground-01.lab
192.168.2.3    underground-03.lab

Завершите ввод Ctrl+D. После этого скрипт отправляет HUP процессу dnsmasq, чтобы перечитать записи. Если dnsmasq не запущен, операция завершается ошибкой.

Настройка WireGuard

Выберите install-wg.sh на домашней ноде.

Скрипт:

  1. устанавливает wireguard, wireguard-tools и resolvconf;
  2. принимает полный конфиг клиента из wg-easy;
  3. проверяет наличие строки PrivateKey;
  4. определяет подсеть из параметра Address;
  5. заменяет AllowedIPs на вычисленную подсеть /24;
  6. устанавливает MTU = 1360;
  7. сохраняет конфиг в /etc/wireguard/wg0.conf с правами 600;
  8. запускает wg0 и включает wg-quick@wg0 в автозагрузке;
  9. выполняет диагностические ping-проверки.

Вставьте весь конфиг и завершите ввод Ctrl+D. Скрипт ожидает обычный конфиг WireGuard с секциями [Interface] и [Peer].

Подсеть вычисляется автоматически из первых трёх октетов адреса Address. Например, 10.60.0.5/24 превращается в 10.60.0.0/24.

Конфиг содержит приватный ключ и поэтому не должен помещаться в Git или отправляться в журналы.

Создание SWAP

Выберите enable-swap.sh.

По умолчанию создаётся /swapfile размером 16 ГБ. Скрипт:

  • отключает и удаляет существующий /swapfile;
  • создаёт новый файл через fallocate;
  • устанавливает права 600;
  • форматирует файл через mkswap;
  • активирует его через swapon;
  • добавляет запись в /etc/fstab;
  • устанавливает vm.swappiness=10;
  • показывает результат free -h.

При повторном запуске существующий /swapfile будет пересоздан. Укажите положительное целое число гигабайт.

Установка корневого сертификата

Выберите install-root-cert.sh.

Модуль скачивает публичный сертификат из каталога certs/, сохраняет его в /usr/local/share/ca-certificates и запускает update-ca-certificates.

По умолчанию используется:

root.lab.crt

Этот модуль предназначен для Debian/Ubuntu. Он добавляет сертификат в системное хранилище доверия; содержимое сертификата не является секретом, но источник файла должен оставаться доверенным.

SOPS и зашифрованные данные

SOPS используется для локальной работы с private-hosts.enc, а не для настройки dnsmasq или WireGuard.

Установите базовые инструменты:

sudo apt update
sudo apt install gnupg curl -y

Установите SOPS способом, соответствующим вашей ОС и архитектуре. Актуальные бинарники доступны на странице релизов SOPS.

Создайте или импортируйте PGP-ключ и проверьте его отпечаток:

gpg --generate-key
gpg --list-secret-keys --keyid-format LONG

Правила шифрования находятся в .sops.yaml. Перед изменением ключей проверьте, что у вас есть резервная копия расшифрованных данных.

Пример обновления получателей:

sops updatekeys private-hosts.enc
git add .sops.yaml private-hosts.enc
git commit -m "Update SOPS recipients"
git push origin master

Не публикуйте приватные PGP-ключи, WireGuard-конфиги, секреты и расшифрованное содержимое private-hosts.enc.

Диагностика

Проверить службы и конфигурацию DNS:

sudo dnsmasq --test
sudo systemctl status dnsmasq
sudo journalctl -u dnsmasq

Проверить WireGuard:

sudo wg show wg0
sudo systemctl status wg-quick@wg0

Проверить установленный сертификат:

update-ca-certificates
ls -l /usr/local/share/ca-certificates/

Проверить состояние синхронизации:

cat /opt/dns-sync/last_commit.sha
tail -f /var/log/dns-sync.log

About

Network GitOps & DNS Infrastructure: Interactive Bash scripts for automated dnsmasq, WireGuard, and systems setup with Mozilla SOPS encryption

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages