Как я могу запустить named в режиме IPv4, используя systemd?

Вопрос или проблема

Как настроить мой Ubuntu 15.04 bind9, чтобы он перестал разрешать запросы с IPv6?

Краткий ответ

Я использую bind9 на моей машине с Ubuntu 15.04. Похоже, что мой сервер named пытается разрешить множество запросов, используя IPv6.

29-Jul-2015 01:03:28.926 lame-servers: error (network unreachable) resolving 'vassg.omniroot.com.edgesuite.net/A/IN': 2600:1401:2::2#53
29-Jul-2015 01:03:30.073 lame-servers: error (network unreachable) resolving 'askubuntu.com/A/IN': 2001:503:231d::2:30#53
29-Jul-2015 01:03:30.516 lame-servers: error (network unreachable) resolving 'stackapps.com/A/IN': 2001:503:a83e::2:30#53
29-Jul-2015 01:03:30.533 lame-servers: error (network unreachable) resolving 'stackapps.com/AAAA/IN': 2400:cb00:2049:1::adf5:3b69#53

Поиск в Google привел меня к решению запустить службу named только в режиме IPv4, добавив параметр -4. Я попробовал изменить файл /etc/default/bind9 на следующий:

/etc/default/bind9

# запустить resolvconf?
RESOLVCONF=yes

# параметры запуска для сервера
OPTIONS="-4 -u bind"

Но я всё равно получил много неудачных разрешений через IPv6.

Поэтому я проверил опции, использованные для запуска named с systemd

mippy@heimdal:~/src/servermon$ sudo service bind9 status
● bind9.service - BIND Domain Name Server
   Loaded: loaded (/lib/systemd/system/bind9.service; enabled; vendor preset: enabled)
  Drop-In: /run/systemd/generator/bind9.service.d
           └─50-insserv.conf-$named.conf
   Active: active (running) since ężт 2015-07-29 01:11:44 CEST; 25min ago
     Docs: man:named(8)
  Process: 6879 ExecStop=/usr/sbin/rndc stop (code=exited, status=0/SUCCESS)
 Main PID: 6884 (named)
   CGroup: /system.slice/bind9.service
           └─6884 /usr/sbin/named -f -u bind

Поэтому кажется, что named запущен с командой /usr/sbin/named -f -u bind. Это не то, что я ожидал от своего /etc/default/bind9.

Как я могу настроить named с опцией -4?

Вот процедура для обновления опций named после перехода Ubuntu на systemd:

cp /lib/systemd/system/bind9.service /etc/systemd/system/bind9.service

редактировать

/etc/systemd/system/bind9.service

изменить

ExecStart=/usr/sbin/named -f -u bind

на

ExecStart=/usr/sbin/named -4 -f -u bind

затем

systemctl daemon-reload
service bind9 restart

дважды проверьте, что изменение вступило в силу:

mippy@heimdal:~/src/servermon$ sudo service bind9 status
● bind9.service - BIND Domain Name Server
   Loaded: loaded (/etc/systemd/system/bind9.service; enabled; vendor preset: enabled)
  Drop-In: /run/systemd/generator/bind9.service.d
           └─50-insserv.conf-$named.conf
   Active: active (running) since ężт 2015-07-29 11:09:26 CEST; 5min ago
     Docs: man:named(8)
  Process: 20737 ExecStop=/usr/sbin/rndc stop (code=exited, status=0/SUCCESS)
 Main PID: 20742 (named)
   CGroup: /system.slice/bind9.service
           └─20742 /usr/sbin/named -4 -f -u bind

Для получения дополнительной информации посмотрите эту страницу документации suse. Она должна быть применима и для пользователей Ubuntu. https://www.suse.com/documentation/sled-12/book_sle_admin/data/sec_boot_systemd_custom.html

Неудачные запросы на разрешение адресов IPv6 не указывают на неправильную конфигурацию сервера, а на ошибку конфигурации клиента. Ваш сервер, работающий только с IPv4-адресом, будет все равно получать DNS-запросы (AAAA) для разрешения IPv6. Это стало происходить, когда различные операционные системы начали включать IPv6 по умолчанию несколько лет назад.

Хотя ответ от @Civing, вероятно, сработает, он может не быть самым чистым способом переопределения конфигурации bind9, потому что копируется вся определение службы systemd, а не только директива ExecStart, которую нужно переопределить.

Более компактный способ достижения того же результата (для Xenial и позднее) можно найти здесь.

Переменная $OPTIONS в файле службы systemctl для BIND (named) обычно предназначена для установки в отдельном конфигурационном файле, а не непосредственно в файле службы.
Где установить $OPTIONS

Файл окружения (рекомендуется)
    Проверьте, включает ли ваш файл службы BIND для systemd (например, /lib/systemd/system/named.service или /etc/systemd/system/named.service) строку:

EnvironmentFile=/etc/default/named

Если да, вы можете установить опции, отредактировав /etc/default/named (или /etc/sysconfig/named на некоторых системах) и добавив:

OPTIONS=”-4 -u bind”

Перезапустите systemd и перезагрузите службу:

sudo systemctl daemon-reexec
sudo systemctl restart named

Непосредственно в файле службы Systemd (менее рекомендуется)

Отредактируйте файл службы systemd, обычно расположенный в /lib/systemd/system/named.service или /etc/systemd/system/named.service:

[Service]
Environment=”OPTIONS=-4 -u bind”

Перезагрузите systemd и перезапустите BIND:

sudo systemctl daemon-reload
sudo systemctl restart named

.

Ответ или решение

Чтобы отключить использование IPv6 в вашем сервере DNS BIND9 на Ubuntu 15.04 и заставить его работать исключительно в IPv4, можно воспользоваться следующими рекомендациями. Это связано с тем, что, несмотря на использование опции -4 в /etc/default/bind9, ваши изменения, похоже, не применяются из-за особенностей работы системного менеджера служб systemd.

Теория

Ubuntu 15.04 использует systemd для управления службами, включая BIND9. При этом файл /etc/default/bind9 может не использоваться напрямую, так как systemd использует собственные конфигурационные файлы для демонов, такие как /lib/systemd/system/bind9.service. Для изменения параметров запуска сервиса, таких как переключение на IPv4-режим, необходимо скорректировать именно этот файл или его копию в /etc/systemd/system.

Основная идея в том, что для применения параметров запуска служб в systemd необходимо корректировать директиву ExecStart. Эта директива определяет, с какими параметрами запускается сам процесс. В данном случае, требуется дополнить эту директиву параметром -4, чтобы явно указать на использование только IPv4.

Пример

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

  1. Скопируйте текущий файл службы из системной директории в директорию для временных конфигураций:

    sudo cp /lib/systemd/system/bind9.service /etc/systemd/system/bind9.service
  2. Откройте скопированный файл для редактирования:

    sudo nano /etc/systemd/system/bind9.service
  3. Найдите строку с директивой ExecStart и дополните её параметром -4:

    ExecStart=/usr/sbin/named -4 -f -u bind
  4. Сохраните изменения и закройте текстовый редактор.

  5. Перезагрузите конфигурации демонов systemd:

    sudo systemctl daemon-reload
  6. Перезапустите службу BIND9, чтобы применить изменения:

    sudo systemctl restart bind9
  7. Проверьте статус службы, чтобы убедиться, что изменения применены успешно:

    sudo service bind9 status

Проверьте, что в выводе команды присутствует флаг -4, что означает, что BIND9 запущен только с использованием IPv4.

Применение

Используя приведённый метод, вы не только устраните ненужные сетевые ошибки, связанные с IPv6, но и значительно упростите администрирование DNS-сервера в сетях, не поддерживающих или не использующих протокол IPv6. Это решение минимизирует ошибки на уровне сети, связанные с недоступностью IPv6, и позволяет сети работать более гладко.

Если ваш сервер продолжает получать запросы на IPv6, это не обязательно указывает на ошибку сервера, но может быть связано с клиентскими устройствами, которые пытаются использовать IPv6. Это в свою очередь может быть связано с конфигурацией отдельных клиентов или устройством, поддерживающим IPv6 по умолчанию. Запуск BIND9 в режиме только IPv4 на сетевом уровне всё равно способен ответить на соответствующие запросы AAAA, просто возвращая записи в рамках доступных возможностей серверной конфигурации.

Таким образом, вы достигаете желаемой функциональности и исключаете ненужные сетевые проблемы, связанные с неверными запросами через IPv6. Надеемся, что предоставленные шаги окажутся полезными в вашем конкретном случае использования и позволят обеспечить стабильную работу вашего DNS-сервера на базе BIND9 в режиме IPv4.

Оцените материал
Добавить комментарий

Капча загружается...