- Вопрос или проблема
- Используйте подстановочный резолвер systemd-resolved, упомянутый в вашем /etc/resolv.conf:
- Проверьте ваши настройки с помощью resolvectl status:
- Читайте man systemd-resolved
- Ответ или решение
- Шаг 1: Удаление пакета resolvconf
- Шаг 2: Обновление конфигурации systemd-resolved
- Шаг 3: Перезапуск службы systemd-resolved
- Шаг 4: Создание подходящей символической ссылки для resolv.conf
- Шаг 5: Проверка настроек
- Примечание
- Заключение
Вопрос или проблема
Я пытаюсь изменить настройки DNS на своем Debian 12 VPS, и под этим я имею в виду, что хочу использовать публичный резолвер, например 1.1.1.1, вместо резолвера хоста моего VPS.
Я помню, в Debian 11 я мог просто отредактировать файл /etc/resolv.conf
и перезапустить resolvconf.service
, и все работало нормально.
Однако в Debian 12, когда я пытаюсь отредактировать /etc/resolv.conf
, появляется большое предупреждение:
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
# 127.0.0.53 is the systemd-resolved stub resolver.
# run "resolvectl status" to see details about the actual nameservers.
Так что, если я не могу отредактировать этот файл, где я могу настроить мой резолвер?
Я пытался читать man resolvconf
и man resolv.conf
, но это еще больше меня запутало.
Есть идеи?
-
Вам нужно установить resolvconf.
sudo apt install resolvconf
-
Включите и запустите службу resolvconf.
systemctl start resolvconf systemctl enable resolvconf systemctl status resolvconf
-
Обновите файл /etc/resolvconf/resolv.conf.d/head, чтобы он содержал строки наподобие:
nameserver 8.8.8.8 nameserver 8.8.4.4
-
Выполните команду:
resolvconf --enable-updates resolvconf -u
Используйте подстановочный резолвер systemd-resolved
, упомянутый в вашем /etc/resolv.conf
:
- Добавьте DNS-серверы в
/etc/systemd/resolved.conf
:
[Resolve]
DNS=1.1.1.1 8.8.8.8
- перезагрузите
systemd-resolved
systemctl restart systemd-resolved
Проверьте ваши настройки с помощью resolvectl status
:
$ resolvectl status
Global
Protocols: -LLMNR +mDNS -DNSOverTLS DNSSEC=no/unsupported
resolv.conf mode: stub
Current DNS Server: 1.1.1.1
DNS Servers: 1.1.1.1 8.8.8.8
DNS Domain: your.search.domain
Link 2 (ens3)
...
Читайте man systemd-resolved
Это подстановочный резолвер, упомянутый в вашем /etc/resolv.conf
. На этой странице man можно прочитать, почему не стоит редактировать /etc/resolv.conf
и почему это символическая ссылка и т.д.
Также существует страница man для конфигурационного файла этого подстановочного резолвера: man resolved.conf
.
Сначала проверьте наличие файла /run/systemd/resolve/resolv.conf если он существует, создайте символическую ссылку на него вместо /etc/resolv.conf
#ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
Я бы предложил:
удалить пакет resolvconf
# apt-get purge resolvconf
удалить /etc/resolv.conf
# rm /etc/resolv.conf
включить systemd-resolved
# systemctl enable systemd-resolved --now
настроить systemd-resolved
# grep -v '#' /etc/systemd/resolved.conf
[Resolve]
MulticastDNS=no
LLMNR=no
DNS=1.1.1.1 8.8.4.4
FallbackDNS=8.8.8.8
Domains=~.
перезагрузить systemd-resolved
# systemctl restart systemd-resolved
создать правильную символическую ссылку для resolv.conf
# ln -s /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
правильный resolv.conf будет выглядеть так
# grep -v '#' /etc/resolv.conf
nameserver 127.0.0.53
options edns0 trust-ad
search .
настройка
"Domains=~."
очень важна. Я не хочу полностью объяснять, так как это длинная история. Скажу лишь, что разные программы могут влиять на настройки демона systemd-resolved, в основном это делается на уровне интерфейса, добавляются пользовательские DNS-серверы. Вы будете удивлены, узнав, что в таком случае systemd-resolved использует не тот DNS-сервер, который вы настроили, а нечто другое. Чтобы этого избежать, то есть если вы хотите быть уверены, что systemd-resolved использует только 1.1.1.1 8.8.4.4 для запросов и ничего другого, настройка “Domains=~.” обязательна. Вы можете проверить это следующим образом:
включить отладочный журнал и следить за журналом
# resolvectl log-level debug
# journalctl -f -u systemd-resolved | grep "Using DNS server"
вы должны видеть только 1.1.1.1 или 8.8.8.8
для отключения отладочного журнала просто перезапустите systemd-resolved
Ответ или решение
Конфигурация DNS-настроек на Debian 12 может показаться сложной задачей, особенно если вы привыкли к старой версии системы. В данной версии Debian используется системный сервис systemd-resolved
для управления DNS-запросами, что требует изменений в подходе к настройке. Вот подробная инструкция по изменению настроек DNS для использования публичных резолверов, таких как 1.1.1.1 и 8.8.8.8.
Шаг 1: Удаление пакета resolvconf
Чтобы избежать конфликтов с systemd-resolved
, рекомендуется удалить пакет resolvconf
. Это можно сделать с помощью следующей команды:
sudo apt-get purge resolvconf
Шаг 2: Обновление конфигурации systemd-resolved
После удаления resolvconf
необходимо настроить systemd-resolved
для использования желаемых DNS-серверов.
-
Откройте файл конфигурации
/etc/systemd/resolved.conf
в текстовом редакторе, например,nano
:sudo nano /etc/systemd/resolved.conf
-
Добавьте или измените параметры в разделе
[Resolve]
:[Resolve] DNS=1.1.1.1 8.8.8.8 FallbackDNS=8.8.4.4 Domains=~. MulticastDNS=no LLMNR=no
-
Сохраните изменения и закройте редактор (например, в
nano
—Ctrl+O
, затемEnter
иCtrl+X
).
Шаг 3: Перезапуск службы systemd-resolved
Для применения изменений выполните перезапуск службы:
sudo systemctl restart systemd-resolved
Шаг 4: Создание подходящей символической ссылки для resolv.conf
Для корректной работы DNS необходимо создать символьную ссылку на файл конфигурации systemd-resolved
. Удалите текущий файл resolv.conf
и создайте символьную ссылку следующим образом:
sudo rm /etc/resolv.conf
sudo ln -s /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
Шаг 5: Проверка настроек
Убедитесь, что настройки были применены, с помощью команды:
resolvectl status
Вы должны увидеть, что текущие DNS-серверы указаны как 1.1.1.1 и 8.8.8.8.
Примечание
Очень важно использовать параметр Domains=~.
в конфигурации. Это обеспечивает использование только указанных DNS-серверов, предотвращая возможное влияние других программ, добавляющих свои DNS на уровне интерфейсов.
Заключение
Выполнив данные шаги, вы настроите систему Debian 12 для работы с выбранными публичными DNS-серверами. Это не только улучшит вашу конфиденциальность, но и может повысить производительность сети. Использование systemd-resolved
обеспечивает более гибкие и безопасные способы управления DNS в современных Linux-системах.