Настройка DNS-связности между сегментами Yandex BareMetal и Yandex Virtual Private Cloud для доступа к Managed Service for PostgreSQL по FQDN
Использование полных доменных имен (FQDN) для подключения к облачным сервисам, таким как Yandex Managed Service for PostgreSQL, является рекомендуемой практикой: это обеспечивает абстракцию от инфраструктуры и автоматизацию процессов. FQDN остается стабильным, в то время как IP-адреса могут изменяться при масштабировании, восстановлении или миграции сервисов.
Однако если сервер в сегменте BareMetal подключен к облаку через Yandex Cloud Interconnect, возникает проблема с разрешением FQDN облачных сервисов: прямые DNS-запросы из внешней подсети блокируются.
Для решения этой задачи предлагается развернуть промежуточную виртуальную машину в той же подсети, что и кластер Managed Service for PostgreSQL, в роли DNS-форвардера на базе Bind9. Этот сервер будет принимать DNS-запросы от сервера BareMetal, перенаправлять их в Yandex Cloud DNS и возвращать ответы клиенту, обеспечивая корректное разрешение FQDN облачных сервисов.
Чтобы настроить DNS-связность:
- Подготовьте инфраструктуру.
- Настройте DNS-форвардер на виртуальной машине.
- Настройте DNS-клиент на сервере BareMetal.
- Проверьте доступ к кластеру Managed Service for PostgreSQL по FQDN.
- Проверьте результат.
Если созданные ресурсы вам больше не нужны, удалите их.
Подготовьте инфраструктуру
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVEилиTRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость поддержки решения входят:
- плата за использование виртуальной машины и диска (см. тарифы Yandex Compute Cloud);
- плата за использование кластера Managed Service for PostgreSQL (см. тарифы Yandex Managed Service for PostgreSQL);
- плата за аренду серверов BareMetal (см. тарифы Yandex BareMetal);
- плата за использование ресурсов Yandex Cloud Interconnect (см. тарифы Yandex Cloud Interconnect).
Создайте кластер Managed Service for PostgreSQL
-
В консоли управления
выберите каталог, в котором хотите создать кластер. -
В списке сервисов выберите Managed Service for PostgreSQL.
-
Нажмите кнопку Создать кластер.
-
Задайте параметры кластера:
- Имя кластера — укажите имя кластера.
- База данных — задайте имя базы данных, имя пользователя и пароль.
- Сетевые настройки — выберите зоны доступности и подсети.
-
Нажмите кнопку Создать кластер.
Примечание
При создании кластера Managed Service for PostgreSQL автоматически создается приватная DNS-зона
mdb.yandexcloud.kz, в которой появляются DNS-записи для хостов кластера. FQDN хостов имеют форматc-<идентификатор_кластера>-<номер_хоста>.mdb.yandexcloud.net. Внутри зоны автоматически создаются DNS-записи для базы данных — например, мастер:10.129.0.29и реплика:10.130.0.15.
Подробнее о создании кластера читайте в инструкции.
Создайте виртуальную машину для DNS-форвардера
- В консоли управления
выберите каталог, в котором хотите создать виртуальную машину. - В списке сервисов выберите Compute Cloud.
- На панели слева выберите
Виртуальные машины. - Нажмите кнопку Создать виртуальную машину.
- В блоке Общая информация задайте имя виртуальной машины.
- В блоке Образ загрузочного диска выберите образ Ubuntu 22.04 LTS.
- В блоке Сетевые настройки:
- В поле Подсеть выберите подсеть, в которой размещены хосты кластера Managed Service for PostgreSQL (например,
10.129.0.0/24). - Укажите внутренний IP-адрес виртуальной машины (например,
10.129.0.10). - Убедитесь, что зона доступности совпадает с зоной размещения кластера Managed Service for PostgreSQL (например,
ru-central1-b).
- В поле Подсеть выберите подсеть, в которой размещены хосты кластера Managed Service for PostgreSQL (например,
- Нажмите кнопку Создать ВМ.
Подробнее о создании виртуальной машины читайте в инструкции.
Арендуйте сервер BareMetal
- В консоли управления
выберите каталог, в котором хотите арендовать сервер. - В списке сервисов выберите BareMetal.
- Нажмите кнопку Заказать сервер.
- Выберите параметры сервера:
- Выберите подходящую конфигурацию сервера.
- Присвойте или получите по DHCP приватный IP-адрес (например,
172.16.2.2).
- Нажмите кнопку Заказать сервер.
Подробнее об аренде сервера читайте в инструкции.
Настройте сетевую связность
Настройте связность между подсетями BareMetal и Virtual Private Cloud через Yandex Cloud Interconnect:
- Создайте сеть Virtual Private Cloud с подсетями в нужных зонах доступности.
- Создайте приватную подсеть BareMetal.
- Настройте подключение через Yandex Cloud Interconnect между подсетью BareMetal и подсетью Virtual Private Cloud, в которой размещен кластер Managed Service for PostgreSQL.
Подробнее о настройке сетевой связности читайте в инструкции.
В примерах ниже используются:
-
подсеть BareMetal:
172.16.2.0/24; -
IP-адрес сервера BareMetal:
172.16.2.2; -
подсеть Virtual Private Cloud с хостами Managed Service for PostgreSQL:
10.129.0.0/24; -
IP виртуальной машины с Bind9:
10.129.0.10; -
DNS-резолверы Virtual Private Cloud:
10.129.0.2и10.130.0.2.Примечание
DNS-резолверы Virtual Private Cloud имеют адреса вида
10.X.0.2, гдеX— номер подсети. Для каждой подсети в Virtual Private Cloud доступен свой DNS-резолвер.
Создайте группу безопасности для DNS-форвардера
-
В консоли управления
выберите каталог, в котором вы создаете инфраструктуру. -
В списке сервисов выберите Virtual Private Cloud.
-
На панели слева выберите
Группы безопасности и нажмите кнопку Создать группу безопасности. -
В поле Имя задайте имя
dns-forwarder-sg. -
В поле Сеть выберите сеть, в которой размещена виртуальная машина с Bind9.
-
В блоке Правила создайте следующие правила для управления трафиком:
Направление
трафикаОписание Диапазон портов Протокол Источник /
НазначениеCIDR блоки /
Группа безопасностиВходящий dns-udp53UDPCIDR172.16.2.0/24Входящий dns-tcp53TCPCIDR172.16.2.0/24Исходящий dns-udp-forward53UDPCIDR10.129.0.0/24Исходящий dns-tcp-forward53TCPCIDR10.129.0.0/24Исходящий dns-udp-forward53UDPCIDR10.130.0.0/24Исходящий dns-tcp-forward53TCPCIDR10.130.0.0/24Примечание
В примере используются подсети
10.129.0.0/24и10.130.0.0/24, в которых находятся DNS-резолверы10.129.0.2и10.130.0.2. Замените их на подсети, в которых находятся DNS-резолверы ваших подсетей Virtual Private Cloud. DNS-резолверы Virtual Private Cloud имеют адреса вида10.X.0.2, гдеX— номер подсети. -
При необходимости добавьте правило для SSH-доступа к виртуальной машине:
Направление
трафикаОписание Диапазон портов Протокол Источник /
НазначениеCIDR блоки /
Группа безопасностиВходящий ssh22TCPCIDR<CIDR_административной_подсети> -
Нажмите Создать.
Настройте DNS-форвардер на виртуальной машине
-
Подключитесь к виртуальной машине по SSH.
-
Установите Bind9:
sudo apt update sudo apt install -y bind9 bind9-utils dnsutils -
Откройте файл
/etc/bind/named.conf.optionsи укажите параметры форвардинга:sudo nano /etc/bind/named.conf.optionsПример конфигурации:
options { directory "/var/cache/bind"; recursion yes; allow-recursion { 172.16.2.0/24; localhost; }; allow-query { 172.16.2.0/24; localhost; }; forwarders { 10.129.0.2; 10.130.0.2; }; dnssec-validation auto; listen-on { any; }; listen-on-v6 { any; }; }; -
Проверьте конфигурацию и перезапустите сервис:
sudo named-checkconf sudo systemctl restart bind9 sudo systemctl enable bind9 -
Убедитесь, что сервис запущен:
sudo systemctl status bind9 --no-pager -
Если на виртуальной машине запущен локальный резолвер
systemd-resolved, который перезаписывает/etc/resolv.conf, настройте его для работы с Bind9:sudo systemctl stop systemd-resolved sudo systemctl disable systemd-resolved sudo mv /etc/resolv.conf /etc/resolv.conf.backupСоздайте статический файл
/etc/resolv.conf:sudo nano /etc/resolv.confДобавьте запись:
nameserver 127.0.0.1 -
Настройте nameserver в Ubuntu. Отредактируйте файл
/run/systemd/resolve/stub-resolv.conf:sudo nano /run/systemd/resolve/stub-resolv.confИзмените значение параметра
nameserverна127.0.0.1. -
Проверьте работу форвардера локально:
dig @127.0.0.1 NS mdb.yandexcloud.kz +shortВ ответе должны появиться адреса DNS-серверов зоны.
Альтернативная проверка:
dig @127.0.0.1 yandex.ru +shortКоманда должна вернуть IP-адрес домена, что подтверждает работу форвардинга.
Настройте DNS-клиент на сервере BareMetal
-
Подключитесь по SSH к серверу BareMetal.
-
Назначьте DNS-сервером IP виртуальной машины с Bind9:
sudo nano /etc/resolv.confПример:
nameserver 10.129.0.10 -
Если
/etc/resolv.confуправляется системным сервисом, задайте DNS постоянным способом.Вариант 1: Используйте команду
systemd-resolveдля конкретного интерфейса:sudo systemd-resolve --interface ethXX --set-dns 10.129.0.10где
ethXX— интерфейс приватной сети.Вариант 2: Отредактируйте файл
/etc/systemd/resolved.conf:sudo nano /etc/systemd/resolved.confУкажите:
[Resolve] DNS=10.129.0.10 Domains=~.Примените настройки:
sudo systemctl restart systemd-resolved -
Проверьте DNS-разрешение:
dig mdb.yandexcloud.kz +shortПроверьте разрешение FQDN хоста кластера Managed Service for PostgreSQL:
dig c-<идентификатор_кластера>-<номер_хоста>.mdb.yandexcloud.net +shortКоманды должны вернуть IP-адреса хостов кластера из подсети Virtual Private Cloud (например,
10.129.0.29— для мастера,10.130.0.15— для реплики).
Проверьте доступ к кластеру Managed Service for PostgreSQL по FQDN
-
Установите сертификат центра сертификации:
mkdir -p ~/.postgresql && \ wget "https://storage.yandexcloud.kz/cloud-certs/CA.pem" \ --output-document ~/.postgresql/root.crt && \ chmod 0600 ~/.postgresql/root.crt -
Установите клиент PostgreSQL:
sudo apt update && sudo apt install -y postgresql-client -
Подключитесь к базе по FQDN:
psql "host=<FQDN_мастера>,<FQDN_реплики> port=6432 sslmode=verify-full dbname=<имя_БД> user=<имя_пользователя> target_session_attrs=read-write"Параметры подключения для вашего кластера можно взять в консоли управления на странице кластера Managed Service for PostgreSQL.
Проверьте результат
После настройки:
- Сервер в сегменте BareMetal успешно разрешает доменные имена зоны
mdb.yandexcloud.kz. - FQDN хостов кластера Managed Service for PostgreSQL разрешаются в приватные IP-адреса Virtual Private Cloud.
- Подключение к PostgreSQL выполняется по FQDN без указания IP-адресов вручную.
Важно
-
Используйте статические IP-адреса для виртуальной машины с DNS-форвардером и сервера BareMetal, чтобы избежать проблем с DNS-разрешением при перезапуске.
-
Регулярно проверяйте логи Bind9 для выявления проблем с DNS-запросами:
sudo journalctl -u bind9 -f -
При изменении подсети, в которой размещен кластер Managed Service for PostgreSQL, обновите адреса DNS-резолверов в параметре
forwardersконфигурации Bind9.
Как удалить созданные ресурсы
Чтобы остановить использование ресурсов и избежать лишних затрат:
- Удалите виртуальную машину с DNS-форвардером.
- Удалите группу безопасности, созданную для DNS-форвардера.
- Если тестовый кластер больше не нужен, удалите кластер Managed Service for PostgreSQL.
- Если связность через Yandex Cloud Interconnect была создана только для теста, удалите соответствующие сетевые настройки и ресурсы Cloud Interconnect.