split dns openwrt в homelab + Let's Encrypt
Настройка split-dns на роутере openwrt и dns сервере powerdns
Салют, $USER!
Эй, кстати, наш Telegram уже ждёт именно тебя. Забегай!
Введение
В статье поговорим о split-dns в рамках homelab. При организации homelab я закладывал сразу, что у меня будет стоять авторитетный сервер DNS для зоны hlc.lab, так и было. По внутренним сервисам я ходил по доменным именам, но была проблема с корневыми SSL-сертификатами, а точнее с доставкой корневого сертификата для вновь развертываемых инстансов LXC/VM в Proxmox. Мне все это дело надоело. Посидев, подумав, ведь у меня есть купленный домен 1xtier.ru и виртуальная машина, где хостится данный сайт. Значит, переведем зону homelab hlc.lab на зону hm.1xtier.ru.
Todo
- Настроить split-dns на OpenWrt + PowerDNS.
- Выпустить wildcard-сертификаты.
Настройка split-dns
Первое, с чего начнем, — это настройка OpenWrt для перенаправления nm.1xtier.ru на локальный DNS-сервер. DNS-сервер вы можете выбрать любой, будь то Unbound или PowerDNS, как в моем случае.
PowerDNS у меня запущен в LXC-контейнере с SQLite3 базой данных, этого достаточно для homelab.
Настройка openwrt
Подключаемся по SSH к OpenWrt и идем сразу в директорию.
1
cd /etc/config/
Создаём backup-файл dhcp и открываем.
1
2
cp dhcp{,.bak}
vi dhcp
и в секцию dnsmasq в конце перед config dhcp ‘lan’ вставим следующее
1
2
list server '/nm.1xtier.ru/192.168.19.81'
list rebind_domain 'nm.1xtier.ru'
Далее поднимаемся на каталог выше в /etc/ и открываем файл dnsmasq.conf, но перед этим так же создадим backup-файл
1
2
cp dnsmasq.conf{,.bak}
vi dnsmasq.conf
и в конце файла добавим следующее:
1
server=/nm.1xtier.ru/192.168.19.81
Замечание:
nm.1xtier.ru — меняем на свой домен
192.168.19.81 — меняем на свой адрес DNS-сервера в локальной сети.
Далее перезапускаем dnsmasq
1
service dnsmasq restart
Настройка powerdns
На powerdns я покажу только как завести зону и добавить поддомены в зону. Создаем зону:
1
pdnsutil create-zone nm.1xtier.ru
Создаем запись NS-сервера, ссылающегося на наш DNS-сервер, чтобы поддомен nm.1xtier.ru начал резолвиться:
1
2
3
pdnsutil add-record nm.1xtier.ru ns A 192.168.19.81
pdnsutil add-record nm.1xtier.ru @ NS ns.nm.1xtier.ru
pdnsutil add-record nm.1xtier.ru @ A 192.168.19.81
после чего добавить запись типа A для тестов.
1
pdnsutil add-record nm.1xtier.ru pve A 192.168.19.60
проверяем с рабочей машины: Для начала проверим, как резолвится сам домен 1xtier.ru:
1
2
3
4
nslookup 1xtier.ru
Non-authoritative answer:
Name: 1xtier.ru
Address: 89.223.127.92
Как видим, DNS для домена 1xtier.ru отдают запись, ведущую на блог. Далее проверяем уже split-dns:
1
2
3
4
nslookup nm.1xtier.ru
Non-authoritative answer:
Name: nm.1xtier.ru
Address: 192.168.19.81
зона nm.1xtier.ru у нас вернула локальный DNS-сервер, что уже хорошо.
1
2
3
4
nslookup pve.nm.1xtier.ru
Non-authoritative answer:
Name: pve.nm.1xtier.ru
Address: 192.168.19.60
всё split-dns у нас работает.
Получение wildcard сертификатов от Let’s Encrypt
Вот тут нам уже понадобится виртуалка где-нибудь в облаке, так как у меня есть блог, и я его держу на отдельной виртуалке, то у меня тут проблем не особо много. Иду по SSH, устанавливаю SSL certbot для выпуска wildcard сертификатов. Напомню, что у меня на блоге сертификаты выпускаются автоматически с помощью nginx + acme вот тут статья.
Ну и выпускаем сертификаты:
1
sudo certbot certonly --manual --preferred-challenges dns -d "1xtier.ru" -d "*.nm.1xtier.ru"
Сертификаты выпускаю в manual-режиме для того, чтобы он мне не перезаписал действующие сертификаты.
Certbot потребует добавить в публичные DNS-сервера (не в локальный, а в публичные) две TXT-записи: одна будет вида _acme-challenge.1xtier.ru, а вторая _acme-challenge.nm.1xtier.ru. После добавления записей подтверждаем и получаем готовые SSL-сертификаты, действительные на 90 дней. Дальше забираем SSL сертификаты и ставим их уже в homelab. Для обновления всё это дело можно автоматизировать с помощью, к примеру, drone/semaphore и ansible roles.
Возможно, напишу когда-нибудь и об этом.
