Вопрос или проблема
Я использую Pi-hole на сервере Debian и нужно переопределить DNS для сети на 1.1.1.1
(чтобы обойти Pi-hole).
Как правильно это сделать в Debian 12?
Добавление DNS в /etc/resolv.conf
работает, но оно возвращается к DNS Pi-hole после перезагрузки.
Если вы хотите изменить настройку DNS (например, на 1.1.1.1) на вашем личном хосте LAN, на котором установлены systemd и NetworkManager, элегантным способом будет
nmcli connection modify "CONNECTION_NAME" ipv4.dns "1.1.1.1 9.9.9.9"
nmcli connection modify "CONNECTION_NAME" ipv4.ignore-auto-dns yes
nmcli connection down "CONNECTION_NAME"
nmcli connection up "CONNECTION_NAME"
Опция ipv4.ignore-auto-dns
предназначена для игнорирования DNS, предоставленного DHCP. Конечно, вы также можете изменить для ipv6.
С помощью этого метода nmcli
/nmtui
вы можете изменять эту настройку для каждого подключения отдельно, а не глобально.
Конечно, вы также можете изменить это глобально, как упоминает Giles, или через systemd-resolved (/etc/systemd/resolved.conf
sudo systemctl edit systemd-resolved
).
См. также
Если вы хотите, чтобы конфигурация была постоянной:
rc="$(ls -l /etc/resolv.conf)"
unlink /etc/resolv.conf
printf '%s\n' "# old conf: $rc" 'nameserver 1.1.1.1' > /etc/resolv.conf
По сути, этот shell-код удаляет ссылку /etc/resolv.conf
и создает обычный файл /etc/resolv.conf
.
Ответ или решение
Вопрос настройки DNS-сервера на Debian 12, особенно при необходимости обхода Pi-hole, представляет собой достаточно распространенную задачу для системных администраторов и IT-специалистов. Прежде всего, полезно понять основные концепции и инструменты, используемые для этой цели, и затем рассмотреть, как именно их можно применить в контексте поставленной задачи.
Теория
Debian 12 использует систему инициализации systemd, которая обеспечивает множество модулей, включая systemd-resolved для управления разрешением DNS. Однако на практике также часто используется NetworkManager — еще один популярный инструмент для управления сетевыми соединениями, особенно в десктопных и серверных установках.
Основные аспекты:
-
Файл
/etc/resolv.conf
: Этот файл традиционно используется для указания DNS-серверов, однако он может быть перезаписан различными службами после перезагрузки. В частности, если используется NetworkManager или systemd-resolved, они могут изменять содержимое данного файла в соответствии с полученными настройками DHCP или локальными конфигурациями. -
NetworkManager: Является мощным инструментом для управления сетевыми сеттингами и поддерживает командную строку через
nmcli
, а также текстовый интерфейс черезnmtui
. -
systemd-resolved: Обеспечивает дополнительные функции для разрешения DNS, такие как кэширование и возможность управлять DNS через
resolved.conf
или напрямую через интерфейсы D-Bus.
Пример
Чтобы изменить DNS на системе Debian 12 и сделать эту настройку постоянной, следует выполнить ряд шагов, которые обеспечат обход Pi-hole и использование желаемого DNS-сервера, например, 1.1.1.1.
Применение
Шаг 1: Изменение DNS через NetworkManager
Для настройки DNS на уровне отдельного соединения с использованием NetworkManager выполните следующие команды:
nmcli connection modify "CONNECTION_NAME" ipv4.dns "1.1.1.1 9.9.9.9"
nmcli connection modify "CONNECTION_NAME" ipv4.ignore-auto-dns yes
nmcli connection down "CONNECTION_NAME"
nmcli connection up "CONNECTION_NAME"
Здесь CONNECTION_NAME
следует заменить на фактическое имя вашего подключения. Команда ipv4.ignore-auto-dns yes
гарантирует, что DHCP не перезапишет ваши пользовательские настройки.
Шаг 2: Установка глобального DNS через systemd-resolved
Вы также можете изменить глобальные настройки DNS, применив конфигурацию в systemd-resolved:
-
Создайте локальный файл конфигурации для
systemd-resolved
:sudo systemctl edit systemd-resolved
-
Добавьте в этот файл следующее содержимое:
[Resolve] DNS=1.1.1.1 FallbackDNS=9.9.9.9
-
Перезапустите службу
systemd-resolved
, чтобы применить изменения:sudo systemctl restart systemd-resolved
Шаг 3: Редактирование /etc/resolv.conf
Если ви хотите закрепить конфигурацию, непосредственно изменив /etc/resolv.conf
, следуйте нижеописанной процедуре:
-
Удалите симлинк (если присутствует) и создайте новый файл:
rc="$(ls -l /etc/resolv.conf)" unlink /etc/resolv.conf printf '%s\n' "# old conf: $rc" 'nameserver 1.1.1.1' > /etc/resolv.conf
Эта команда удаляет существующую символическую ссылку /etc/resolv.conf
и создает в этом месте новый файл с указанием необходимых DNS-серверов. Таким образом, при перезагрузке системы содержимое файла останется неизменным.
Но стоит отметить, что каждый из этих шагов направлен на решение конкретной задачи с разным уровнем воздействия на конфигурацию системы. При использовании NetworkManager рекомендуется контролировать настройки на уровне конкретного соединения, в то время как systemd-resolved может быть более предпочтительным для глобальных изменений. Кроме того, рекомендуется учитывать взаимодействие этих двух систем при настройке DNS, чтобы избежать возможных конфликтов.
Итак, настройки DNS на Debian 12 могут быть успешно изменены через NetworkManager и systemd-resolved, в зависимости от ваших потребностей и специфических требований системной конфигурации. Выбор между локальными и глобальными подходами должен основываться на характере использования системы и предпочтениях управления сетевыми настройками.