[Документация Yandex Cloud](../../index.md) > [Yandex BareMetal](../index.md) > [Пошаговые инструкции](index.md) > Сеть > Настроить DNS в приватной подсети

# Настроить DNS в приватной подсети

В приватной подсети BareMetal можно [настроить DNS-серверы и доменное имя](../concepts/dns.md), которые будут передаваться на серверы по DHCP. Можно использовать входящие DNS-подключения Cloud DNS, собственные DNS-серверы или оба варианта.

## Перед началом работы {#before-you-begin}

1. Убедитесь, что в приватной подсети включен [DHCP](../concepts/dhcp.md#dhcp-private) и приватные сетевые интерфейсы серверов получают IP-адреса по DHCP. При необходимости [создайте подсеть](subnet-create.md) с включенным DHCP.
1. Подготовьте DNS-серверы:

    * Для использования Cloud DNS [настройте сетевую связность](../tutorials/bm-vrf-and-vpc-interconnect.md) между VRF приватной подсети и облачной сетью Virtual Private Cloud. [Создайте входящее DNS-подключение](../../dns/operations/connection-inbound-create.md) в этой облачной сети или используйте существующее. Убедитесь, что префикс подсети с IP-адресом DNS-подключения анонсирован виртуальным маршрутизатором.
    * Для использования собственного DNS-сервера подготовьте его IPv4-адрес и обеспечьте доступность этого адреса из приватной подсети BareMetal.

{% note warning %}

Новые DNS-настройки будут переданы всем серверам в подсети, которые используют DHCP. Переданный список DNS-серверов заменит предыдущие DNS-настройки приватного интерфейса. Убедитесь, что выбранные DNS-серверы разрешают все необходимые имена. Подробнее в разделе [Ограничения](../concepts/dns.md#limitations).

{% endnote %}

## Настройте DNS {#configure-dns}

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. В [консоли управления](https://kz.console.yandex.cloud) выберите каталог, в котором находится приватная подсеть.
  1. [Перейдите](https://kz.console.yandex.cloud/link/baremetal) в сервис **BareMetal**.
  1. На панели слева выберите ![nodes-right](../../_assets/console-icons/nodes-right.svg) **Приватные подсети**.
  1. Откройте нужную приватную подсеть для редактирования.
  1. Убедитесь, что включена опция **Назначение IP-адресов по DHCP**.
  1. Настройте DNS:

      1. Включите опцию **DNS-сервер**.
      1. В поле **Сервер доменных имен** выберите входящее DNS-подключение из списка или введите IPv4-адрес собственного DNS-сервера и добавьте его в список.
      1. (Опционально) Чтобы указать еще один DNS-сервер, нажмите **Добавить сервер** и выберите входящее DNS-подключение или введите IPv4-адрес. Всего можно указать до трех DNS-серверов.
      1. (Опционально) В поле **Доменное имя** укажите поисковый домен без точки в начале и в конце, например `example.internal`. При разрешении коротких имен операционная система будет добавлять к ним этот домен: `app` → `app.example.internal`. Убедитесь, что все указанные DNS-серверы умеют разрешать имена в этом домене.

  1. Нажмите **Сохранить изменения**.

- CLI {#cli}

  Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), [установите и инициализируйте его](../../cli/quickstart.md#install).

  По умолчанию используется каталог, указанный при [создании](../../cli/operations/profile/profile-create.md) профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду `yc config set folder-id <идентификатор_каталога>`. Также для любой команды вы можете указать другой каталог с помощью параметров `--folder-name` или `--folder-id`.
  
  Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.

  Для настройки DNS используйте CLI версии `1.37.0` или выше.

  1. Посмотрите описание команды CLI для изменения приватной подсети:

     ```bash
     yc baremetal private-subnet update --help
     ```

  1. Получите идентификатор приватной подсети:

     ```bash
     yc baremetal private-subnet list
     ```

  1. Посмотрите текущие настройки подсети:

     ```bash
     yc baremetal private-subnet get <идентификатор_подсети>
     ```

     Сохраните значения `vrf_id`, `cidr`, `gateway_ip`, `dhcp_options.start_ip` и `dhcp_options.end_ip` из блока `vrf_options`. Их нужно передать без изменений при настройке DNS.

  1. Если вы используете входящее DNS-подключение Cloud DNS, получите его идентификатор:

     ```bash
     yc dns inbound-endpoint list
     ```

  1. Задайте DNS-настройки подсети:

     ```bash
     yc baremetal private-subnet update <идентификатор_подсети> \
       --update-mask vrf_options_spec \
       --vrf-options-spec '{
         vrf-id=<идентификатор_VRF>,
         cidr=<CIDR>,
         gateway-ip=<IP-адрес_шлюза>,
         dhcp-options={
           start-ip=<начало_диапазона_IP-адресов>,
           end-ip=<конец_диапазона_IP-адресов>,
           dns-options={
             servers=[
               {server={dns-inbound-endpoint-id=<идентификатор_DNS-подключения>}}
             ],
             domain-name=example.internal
           }
         }
       }'
     ```

     Где:

     * `<идентификатор_подсети>` — идентификатор изменяемой приватной подсети. Обязательный параметр.
     * `--update-mask vrf_options_spec` — обновляет только настройки маршрутизации и DHCP. Имя, описание и метки подсети не изменяются.
     * `--vrf-options-spec` — настройки маршрутизации и DHCP. В `vrf-id`, `cidr`, `gateway-ip`, `start-ip` и `end-ip` укажите сохраненные значения текущих настроек подсети.
     * `dns-options.servers` — список DNS-серверов. Для каждого элемента `server` укажите один из параметров:
       * `dns-inbound-endpoint-id` — идентификатор входящего DNS-подключения.
       * `ip-address` — IPv4-адрес собственного DNS-сервера. Например, `{server={ip-address=192.168.10.2}}`.

       Всего можно указать до трех элементов, разделяя их запятыми. При изменении списка передайте все DNS-серверы, которые должны остаться в настройках.

     * `dns-options.domain-name` — поисковый домен. Необязательный параметр. Вместо `example.internal` укажите свой домен или удалите параметр, если поисковый домен не нужен.

{% endlist %}

Настройки будут переданы на серверы при обновлении аренды DHCP, в течение пяти минут. Они применяются только на интерфейсах, для которых в ОС включено получение соответствующих параметров по DHCP.

## Проверьте применение настроек {#check-settings}

В примерах используется Ubuntu с `systemd-resolved`. Для других ОС воспользуйтесь средствами проверки сетевых настроек вашей операционной системы.

1. [Подключитесь к KVM-консоли](servers/server-kvm.md) сервера или подключитесь к нему по SSH.
1. Узнайте имя приватного сетевого интерфейса:

    ```bash
    ip -4 address
    ```

1. Проверьте DNS-настройки интерфейса:

    ```bash
    resolvectl status <имя_приватного_интерфейса>
    ```

    В поле `DNS Servers` должны быть IP-адреса выбранных DNS-серверов. Если вы задали доменное имя и ОС применила его, оно появится в поле `DNS Domain`.

1. Проверьте разрешение полного доменного имени ресурса:

    ```bash
    resolvectl query <FQDN_ресурса>
    ```

    Если настроен поисковый домен и для ресурса существует DNS-запись в этом домене, проверьте также разрешение короткого имени:

    ```bash
    resolvectl query <короткое_имя_ресурса>
    ```

### Если ОС не применяет параметры DHCP {#dhcp-options-not-applied}

Если через пять минут новые параметры не появились, убедитесь, что для приватного интерфейса включен DHCP и ОС принимает DNS-серверы и доменное имя из DHCP-опций. Например, в Ubuntu с [Netplan](https://netplan.readthedocs.io/en/stable/netplan-yaml/#dhcp-overrides) и сетевой службой `systemd-networkd` в описании приватного интерфейса могут потребоваться следующие параметры:

```yaml
dhcp4: true
dhcp4-overrides:
  use-dns: true
  use-domains: true
```

Параметр `use-dns` разрешает использовать DNS-серверы из DHCP-опции `6`, а `use-domains` — применять поисковый домен. Для физического интерфейса параметры задаются в секции `ethernets`, для группы агрегирования MC-LAG — в секции `bonds`. Сохраните остальные параметры интерфейса.

Если конфигурацию сети формирует `cloud-init` или другая система управления, внесите изменения в постоянную конфигурацию этой системы: правки сгенерированного файла могут быть перезаписаны при перезагрузке сервера.

После изменения конфигурации Netplan проверьте ее:

```bash
sudo netplan try
```

Если конфигурация корректна, подтвердите изменения и повторите проверку с помощью `resolvectl`.

### Если DNS-сервер не отвечает {#dns-unavailable}

Проверьте запрос непосредственно к настроенному DNS-серверу:

```bash
dig @<IP-адрес_DNS-сервера> <FQDN_ресурса>
```

Если ответ не приходит, проверьте сетевую связность, маршруты и правила фильтрации трафика. Для входящего DNS-подключения также проверьте, что оно находится в нужной облачной сети, а префикс его подсети анонсирован виртуальным маршрутизатором. Если приходит ответ `NXDOMAIN`, проверьте наличие записи и доступность нужной DNS-зоны для выбранного DNS-сервера.

## Отключите выдачу DNS-настроек {#disable-dns}

{% list tabs group=instructions %}

- Консоль управления {#console}

  Откройте приватную подсеть для редактирования, выключите опцию **DNS-сервер** и сохраните изменения. Отключать DHCP для этого не требуется.

- CLI {#cli}

  Повторите [команду изменения подсети](#configure-dns), удалив из значения `--vrf-options-spec` блок `dns-options`. Сохраните остальные параметры, в том числе `dhcp-options` с текущими значениями `start-ip` и `end-ip`, чтобы DHCP продолжал выдавать IP-адреса.

{% endlist %}

Если вы собираетесь [удалить входящее DNS-подключение](../../dns/operations/connection-inbound-delete.md), сначала исключите его из DNS-настроек всех приватных подсетей, которые его используют. Если в подсети остаются другие DNS-серверы, удалите только запись ненужного подключения из списка и сохраните изменения.

#### Полезные ссылки {#see-also}

* [DNS в приватной сети](../concepts/dns.md)
* [Настройка разрешения DNS-имен из приватной сети Yandex BareMetal](../tutorials/bm-vpc-dns-forwarder.md)