Как установить опцию одиночного запроса в 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 ''