Как установить опцию одиночного запроса в NetworkManager?

В нашей среде (множество виртуальных машин CentOS 7) мы обычно сталкиваемся с часто обсуждаемой проблемой, когда поиск службы имен приводит к 5-секундной задержке по истечении времени ожидания запроса даже при "успешных" запросах. Как и другие, мы отключили IPv6 (не используется в нашей внутренней среде), и это не полностью решило проблему. Просматривая форумы, мы нашли предложение добавить "options single-request" в /etc/resolv.conf; похоже, это решает проблему, но редактирование вручную файла resolv.conf обычно перезаписывается NetworkManager.

Я искал, но я не могу найти место в nmtui или nmcli, чтобы указать это, чтобы NetworkManager знал, как включить опцию, когда он перезаписывает файл.

Я что-то упускаю из виду? Есть ли способ установить это где-нибудь еще? Есть ли другое, предпочтительное решение проблемы?

5 ответов

Решение

Я знаю, что реальное решение состоит в том, чтобы исправить сервер AD, который обрабатывает DNS-запросы (мой сетевой администратор просит ответа о том, как это сделать), но тем временем я нашел обходной путь.

В /etc/sysconfig/network добавьте следующую строку:

RES_OPTIONS = "единый запрос"

Вы можете добавить скрипт к вашему /etc/NetworkManager/dispatch.d/ папка хоть.

я имею /etc/NetworkManager/dispatch.d/999-resolv-options (убедитесь, что он принадлежит root, нет setuid и chmod 'до 700, хотя, согласно документации):

#!/bin/bash

IFACE="$1"
ACTION="$2"

# Don't bother doing anything if action isn't "up"
if [ "$ACTION" != "up" ]; then
  exit
fi

case "$IFACE" in
  eth*|wlan*|en*)
    grep -q "options timeout 1" /run/NetworkManager/resolv.conf &> /dev/null || echo "options timeout 1" >> /run/NetworkManager/resolv.conf
    grep -q "options single-request" /run/NetworkManager/resolv.conf &> /dev/null || echo "options single-request" >> /run/NetworkManager/resolv.conf
    ;;
esac

Если имена вашего сетевого интерфейса начинаются с чего-то другого, чем eth* , en* или же wlan* тогда дело должно быть изменено

Это проверит, если options timeout 1 а также options single-request существуют, а если нет, добавьте их.

Примечание: скрипт добавляет /run/NetworkManager/resolv.conf и не /etc/resolv.conf, На моей установке Ubuntu 18.10 /etc/resolv.conf была символическая ссылка на этот файл.

Больше информации о dispatch.d способности в документах Network Manager.

Вы должны быть в состоянии добавить

dns  none
rc-manager  unmanaged

к [main] раздел вашего /etc/networkManager/NetworkManager.conf файл. Это должно помешать перезаписи конфигурации резолвера. Вы можете проверить параметры в справочной странице NetworkManager.conf в вашей системе.

Следующий ответ работает для Manjaro, а также для контейнеров, работающих на хосте (в отличие от моего предыдущего ответа). Это адаптированная версия ответа @carestad (спасибо!):

Поместите следующий файл в/etc/NetworkManager/dispatcher.d/999-resolv-optionsи установите права доступа к файлу700с помощьюchmod;

      #!/bin/bash

IFACE="$1"
ACTION="$2"

declare -A expectedActions=( 
 [dhcp4-change]=1  [dhcp6-change]=1 [up]=1
)

# Don't bother doing anything if action isn't "dhcp4-change" or "dhcp6-change"
if [[ -z "${expectedActions[$ACTION]}" ]]; then
  exit
fi

case "$IFACE" in
  eth*|wlan*|en*|wlp2s*)
    grep -q "options single-request" /etc/resolv.conf &> /dev/null || echo "options single-request" >> /etc/resolv.conf
    ;;
esac

Предыдущий ответ:

Можно установить переменную средыRES_OPTIONS=single-requestво всем мире в/etc/environment.

Примечание. Переменная среды будет действовать только на хосте. Процессы в контейнерах также должны устанавливать эту переменную среды. Лучшим решением по-прежнему является установка параметров, поскольку среда выполнения контейнера обычно наследует/etc/resolv.confс хоста: https://docs.docker.com/config/containers/container-networking/#dns-services

Если вы предпочитаете сервис NetworkManager, то лучше использовать nmtui/nmcli. (следующие cmds проверены на centos7)

изменить настройки (для тех, кто страдает от 5s задержки DNS)

nmcli con modify YourConnName ipv4.dns-options "single-request-reopen timeout:2"

Вы можете найти YourConnName, выполнив: nmcli con show

применить настройки

nmcli con down YourConnName ; nmcli con up YourConnName

PS измените настройку по умолчанию, которая пуста

nmcli c m YourConnName ipv4.dns-options ''

Другие вопросы по тегам