Пост

split dns openwrt в homelab + Let's Encrypt

Настройка split-dns на роутере openwrt и dns сервере powerdns

split dns openwrt в homelab + Let's Encrypt

Салют, $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.

Возможно, напишу когда-нибудь и об этом.

Авторский пост защищен лицензией CC BY 4.0 .

Популярные теги