Как я могу отдать приоритет IPv4 DNS-запросам перед IPv6?

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

Я запускаю два синхронизированных экземпляра AdGuard Home в моей локальной сети и хочу использовать их в качестве DNS-серверов для моего рабочего стола Ubuntu (24.04.2). Эти DNS-серверы в настоящее время имеют только IPv4-адреса; я еще не назначил им адреса IPv6 и в данный момент не использую IPv6 в своей сети.

В Настройки – WiFi – [текущая WiFi сеть] – IPv4, я ввел их IPv4-адреса в поле DNS и отключил переключатель “Автоматически”.

Также, следуя совету, данному в этом вопросе, я отредактировал /etc/gai.conf и раскомментировал/отредактировал следующие строки:

# precedence  <mask>   <value>
#    Add another rule to the RFC 3484 precedence table.  See section 2.1
#    and 10.3 in RFC 3484.  The default is:
#
precedence  ::1/128       50
precedence  ::/0          40
precedence  2002::/16     30
precedence ::/96          20
precedence ::ffff:0:0/96  100 # Я изменил это значение вручную с 10
#
#    For sites which prefer IPv4 connections change the last line to
#
#precedence ::ffff:0:0/96  100 # Я не раскомментировал это, вместо этого решил редактировать последнюю строку выше

Если я сохраню это, затем выполню sudo systemctl restart systemd-resolved, то какое-то время resolvectl status показывает, что текущий DNS-сервер — это один из моих экземпляров AdGuard Home:

Link 3 (wlp29s0)
    Current Scopes: DNS
         Protocols: +DefaultRoute -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
Current DNS Server: <IPv4-адрес экземпляра AdGuard Home>

Но это не держится; спустя некоторое время он снова переключается на IPv6:

Link 3 (wlp29s0)
    Current Scopes: DNS
         Protocols: +DefaultRoute -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
Current DNS Server: <IPv6-адрес>

Я не хочу полностью отключать IPv6. В долгосрочной перспективе, я уверен, что было бы разумно использовать IPv6 в моей домашней сети. Однако в настоящее время я хочу, чтобы мой рабочий стол надежно и последовательно отдавал приоритет DNS-серверам, определенным в настройках IPv4, вместо DNS-серверов IPv6, чтобы я мог использовать локальные переназначения доменов и другие преимущества AdGuard Home.

Что мне нужно сделать, чтобы это гарантировать?

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

Для решения задачи приоритизации DNS-запросов IPv4 над IPv6 в вашей системе Ubuntu 24.04.2 при использовании AdGuard Home в локальной сети, можно следовать нижеизложенному плану действий. Это позволит вам использовать преимущества вашего сетевого устройства и обеспечить надежное и последовательное использование настроек DNS, заданных в IPv4.

Теория

Для начала важно понять, как операционная система Linux обрабатывает DNS-запросы. Система разрешения имен, или DNS (Domain Name System), используется для сопоставления доменных имен с IP-адресами. В современных операционных системах часто реализуется поддержка как IPv4, так и IPv6. Однако в вашем случае вы хотите, чтобы приоритет имел вид IPv4, так как ваши DNS-серверы AdGuard Home имеют только IPv4-адреса.

Настройка приоритетов запросов сети возможно благодаря файлу gai.conf, который определяет политические правила для адресов IPv4 и IPv6. Одна из наиболее распространенных причин, по которой система может переключаться между IPv4 и IPv6, заключается в уведомлении о сетевых изменениях самими системами/сервисами.

Пример

Вы уже внесли изменения в файл /etc/gai.conf, установив строку:

precedence ::ffff:0:0/96 100

Эта строка дает более высокий приоритет IPv4 адресам (натурально расположенным под маской ::ffff:0:0/96) по сравнению с бесклассовыми IPv6 адресами (::/0), которые имеют стандартный приоритет 40. При этом важна и настройка в самом NetworkManager или его аналогах, где вы отключили автоматический режим и задали конкретные IPv4 адреса ваших локальных DNS-серверов.

Применение

  1. Дополнительные настройки системы: убедитесь, что в файле /etc/resolv.conf отражены корректные DNS-сервера. Обратите внимание, что некоторые дистрибутивы используют systemd-resolved для управления DNS-сервисами. Если это ваш случай, изменения в /etc/resolv.conf могут быть перезаписаны. Более устойчиво изменить настройки через /etc/systemd/resolved.conf, добавив туда:

    [Resolve]
    DNS=<IPv4_адрес_AdGuard>
    FallbackDNS=8.8.8.8 8.8.4.4

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

    sudo systemctl restart systemd-resolved
  2. Контроль настроек соединения:
    Проверьте также настройки вашего сетевого подключения через NetworkManager. Это делается через графический интерфейс или используя команду:

    nmcli connection show
    nmcli connection modify <connection_name> ipv4.dns "<IPv4_адрес_AdGuard>"
    nmcli connection modify <connection_name> ipv6.ignore auto
  3. Тестирование и диагностика:
    После внесения всех изменений, вам стоит протестировать работу разрешения DNS. Для этого используйте команду resolvectl status, чтобы убедиться в правильности текущего DNS-сервера. Также можно использовать утилиты вроде dig или nslookup для непосредственной проверки разрешения доменных имен, что позволит убедиться в правильной конфигурации.

dig @<IPv4_адрес_AdGuard> example.com
  1. Мониторинг и устойчивость: Периодически проверяйте и отслеживайте ваше сетевое окружение. Необходимо также учесть, что некоторые системы могут переключаться на IPv6 при изменении сетевого профиля. Для предотвращения этого можно создавать соответствующие скрипты, которые будут восстанавливать нужные параметры для вашей сети.

Подводя итог, соблюдение и настройка приоритета IPv4 через конфигурации gai.conf и системных служб, таких как systemd-resolved, позволяет гибко управлять вашими предпочтениями при сети. Это не требует полного отключения IPv6, что оставляет возможность гибкого расширения инфраструктуры в будущем. Ваш подход к использованию AdGuard Home через специальную настройку как IPv4 DNS-сервера позволяет более эффективно использовать возможности сетевого фильтрации и повышает уровень контроля над трафиком.

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

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