Набор интерактивных 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При запуске установщик спрашивает:
- GitHub user или organization;
- имя репозитория;
- ветку.
Затем открывается меню с чекбоксами:
↑/↓— перемещение;Пробел— выбрать или снять выбор;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 |
Установка корневого сертификата в системное хранилище |
Выберите в меню install-dns.sh.
Скрипт:
- определяет IPv4-адреса интерфейсов сервера;
- устанавливает
dnsmasqиcurl, если они отсутствуют; - запрашивает доменную зону, по умолчанию
lab; - принимает локальные A-записи;
- скачивает
dns-config/cname.map; - записывает конфигурацию в
/etc/dnsmasq.conf; - проверяет конфигурацию командой
dnsmasq --test; - останавливает и отключает
systemd-resolved, если он запущен; - включает и перезапускает службу
dnsmasq; - скачивает синхронизатор в
/opt/dns-sync/sync-dns.shи запускает его один раз.
После запроса скрипт ожидает строки в формате:
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.
- Скрипт перезаписывает
/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.
Файл dns-config/cname.map содержит строки dnsmasq:
cname=git.lab,undergound-01.lab
cname=registry.lab,undergound-03.lab
Установленный /opt/dns-sync/sync-dns.sh:
- получает SHA последнего коммита через GitHub API;
- сравнивает его с
/opt/dns-sync/last_commit.sha; - скачивает
cname.map, только если SHA изменился или локальный файл отсутствует; - перезапускает
dnsmasq; - сохраняет новый 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, заданные внутри самого скрипта.
Выберите 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 не запущен, операция завершается ошибкой.
Выберите install-wg.sh на домашней ноде.
Скрипт:
- устанавливает
wireguard,wireguard-toolsиresolvconf; - принимает полный конфиг клиента из
wg-easy; - проверяет наличие строки
PrivateKey; - определяет подсеть из параметра
Address; - заменяет
AllowedIPsна вычисленную подсеть/24; - устанавливает
MTU = 1360; - сохраняет конфиг в
/etc/wireguard/wg0.confс правами600; - запускает
wg0и включаетwg-quick@wg0в автозагрузке; - выполняет диагностические ping-проверки.
Вставьте весь конфиг и завершите ввод Ctrl+D. Скрипт ожидает обычный конфиг WireGuard с секциями [Interface] и [Peer].
Подсеть вычисляется автоматически из первых трёх октетов адреса
Address. Например,10.60.0.5/24превращается в10.60.0.0/24.
Конфиг содержит приватный ключ и поэтому не должен помещаться в Git или отправляться в журналы.
Выберите 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 используется для локальной работы с 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