Как работает DNS и как изменить DNS-сервер в Linux?

В основе функционирования интернета лежит множество технологий, обеспечивающих быструю и стабильную передачу данных между пользователями и серверами. Одной из ключевых систем, позволяющих нам заходить на сайты, не запоминая их IP-адреса, является DNS — система доменных имён. Несмотря на то, что обычный пользователь редко задумывается о ней, DNS играет критически важную роль в работе любой сети. Особенно это актуально для системных администраторов и продвинутых пользователей Linux, где настройка сети и DNS часто требует ручного вмешательства. Разберемся, как именно работает DNS, и как можно изменить DNS-сервер в Linux-системах.

Что такое DNS и зачем он нужен

DNS (Domain Name System) — это система, которая переводит понятные человеку доменные имена (например, example.com) в IP-адреса, понятные компьютерам (например, 93.184.216.34). Всякий раз, когда вы вводите адрес сайта в браузере, операционная система обращается к DNS-серверу, чтобы определить, какой IP-адрес соответствует указанному доменному имени. Без этого механизма нам бы пришлось запоминать длинные цифровые адреса для каждого ресурса в интернете.

Когда пользователь отправляет запрос, сначала происходит обращение к локальному кэшу DNS. Если нужной записи нет, система направляет запрос к DNS-серверу, который определён в настройках сети. Если и этот сервер не знает нужного адреса, он обращается к корневым серверам, а те, в свою очередь, перенаправляют его к авторитетным DNS-серверам, пока не будет найден нужный IP-адрес. Этот IP-адрес возвращается пользователю, и соединение с нужным сервером устанавливается.

Преимущества смены DNS-сервера

Многие пользователи используют DNS-серверы, предоставленные интернет-провайдером, однако у них бывают недостатки — они могут быть медленными, нестабильными, иметь ограниченный функционал или фильтрацию. В таких случаях имеет смысл сменить DNS на более надёжный и быстрый. Например, Google Public DNS (8.8.8.8 и 8.8.4.4), Cloudflare (1.1.1.1), OpenDNS и другие публичные DNS-серверы обеспечивают высокую скорость обработки запросов, лучшую безопасность и большую стабильность.

Также смена DNS помогает обойти блокировки сайтов, установленные на уровне провайдера, и защититься от поддельных сайтов, если выбран DNS-сервер с функцией фильтрации вредоносного контента.

Как изменить DNS-сервер в Linux

В Linux существует несколько способов настройки DNS-серверов. Всё зависит от используемого дистрибутива и типа сетевого управления: вручную через конфигурационные файлы, с помощью NetworkManager или через systemd-resolved. Рассмотрим самые распространённые методы.

1. Ручная настройка через /etc/resolv.conf

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

Пример содержимого файла:

nginx
nameserver 1.1.1.1
nameserver 8.8.8.8

После редактирования рекомендуется перезапустить сетевые службы или просто переподключиться к сети. Однако при использовании NetworkManager или systemd изменения в этом файле могут быть неустойчивыми.

2. Настройка через NetworkManager

NetworkManager используется во многих популярных дистрибутивах (Ubuntu, Fedora и др.) для управления сетевыми соединениями. Чтобы изменить DNS через него, можно воспользоваться графическим интерфейсом или утилитой nmcli.

Для примера, изменение DNS для подключения по Ethernet с помощью командной строки:

bash
nmcli con mod "Wired connection 1" ipv4.dns "1.1.1.1 8.8.8.8"
nmcli con mod "Wired connection 1" ipv4.ignore-auto-dns yes
nmcli con up "Wired connection 1"

Это отключает автоматическое получение DNS от DHCP и устанавливает собственные серверы.

3. Использование systemd-resolved

В современных дистрибутивах, таких как Ubuntu 20.04 и новее, DNS может управляться сервисом systemd-resolved. Он использует файл /etc/systemd/resolved.conf и символическую ссылку /etc/resolv.conf, указывающую на временный файл, генерируемый службой.

Чтобы изменить DNS, можно отредактировать файл /etc/systemd/resolved.conf:

ini
[Resolve]
DNS=1.1.1.1 8.8.8.8
FallbackDNS=9.9.9.9

После этого необходимо перезапустить службу:

bash
sudo systemctl restart systemd-resolved

И убедиться, что файл /etc/resolv.conf правильно ссылается:

bash
ls -l /etc/resolv.conf

Если он не указывает на /run/systemd/resolve/stub-resolv.conf, то нужно создать правильную символьную ссылку.

Как проверить текущие настройки DNS

После внесения изменений важно убедиться, что система использует нужные DNS-серверы. Для этого можно воспользоваться командой dig или systemd-resolve.

Пример с dig:

bash
dig google.com

В разделе SERVER будет указан используемый DNS-сервер.

С помощью systemd-resolve:

bash
systemd-resolve --status

Вы увидите подробную информацию о DNS-сервере, используемом для каждого сетевого интерфейса.

Возможные проблемы и пути их решения

Иногда после смены DNS может наблюдаться отсутствие интернета или нестабильная работа сети. Это может быть связано с конфликтами между вручную заданными параметрами и автоматически получаемыми через DHCP. Также причиной может стать неправильная символическая ссылка на resolv.conf или несовместимость с используемыми средствами управления сетью.

Чтобы избежать проблем, рекомендуется выбрать один способ настройки и следовать ему: если используется NetworkManager, не редактировать вручную resolv.conf; если же система использует systemd-resolved, то работать через его конфигурации.

Заключение

DNS — это основа работы интернета, скрытая от глаз пользователя, но определяющая, насколько быстро и безопасно осуществляется доступ к ресурсам. Понимание принципов его работы и умение вручную изменить DNS-сервер в Linux дают пользователю больше контроля над своей системой, позволяют повысить производительность сети, обойти ограничения и обеспечить дополнительную защиту. Несмотря на многообразие способов настройки, каждый из них решает одну задачу — обеспечить точный и быстрый перевод доменных имён в IP-адреса. Для пользователей Linux важно разбираться в этих механизмах, ведь свобода управления — одна из ключевых черт этой операционной системы.

Comments are closed.