Перейти к содержимому

Настройка DNS на сервере

DNS-сервер превращает доменные имена в IP-адреса. Если резолвер, выданный по DHCP, медленный или не отвечает, сервер долго открывает сайты, не ставит пакеты и не качает игровые файлы через SteamCMD. Ошибки Temporary failure in name resolution, Could not resolve host, Не удается преобразовать DNS-адрес сервера в большинстве случаев лечатся сменой DNS.

Наши локальные резолверы, рекомендуем их на всех VDS и выделенных серверах:

Окно терминала
10.8.8.8
10.4.4.4

Они стоят внутри нашей сети, отвечают быстрее публичных и не зависят от внешних каналов. Работают только с наших серверов: на домашнем компьютере или на машине другого хостинга эти адреса недоступны.

Публичные резолверы, если нужен внешний вариант:

  • Google: 8.8.8.8 и 8.8.4.4
  • Cloudflare: 1.1.1.1 и 1.0.0.1
  • Quad9: 9.9.9.9 и 149.112.112.112

Первый адрес основной, второй запасной. Прописывайте оба, иначе при недоступности первого резолв встанет.

  1. Нажмите Win + R, введите ncpa.cpl, нажмите ОК.

Настройка DNS на сервере

  1. Дважды кликните по сетевому адаптеру, в окне «Состояние» нажмите Свойства. Того же результата даёт правый клик по адаптеру и Свойства.

Настройка DNS на сервере

  1. Выделите IP версии 4 (TCP/IPv4), нажмите Свойства.

Настройка DNS на сервере

  1. Отметьте Использовать следующие адреса DNS-серверов. В поле «Предпочитаемый DNS-сервер» впишите 10.8.8.8, в «Альтернативный DNS-сервер» впишите 10.4.4.4.

Настройка DNS на сервере

  1. ОК, ОК. Настройки IP-адреса и шлюза не трогайте.

Важно: если сервер получает адрес по DHCP, менять галку на «Получить IP-адрес автоматически» не нужно, DNS задаётся отдельно от адреса.

Запустите PowerShell от имени администратора. Сначала посмотрите список адаптеров и точное имя нужного:

Окно терминала
Get-NetAdapter

В колонке Name будет имя, обычно Ethernet или Ethernet0. Подставьте его в команду:

Окно терминала
Set-DnsClientServerAddress -InterfaceAlias "Ethernet" -ServerAddresses 10.8.8.8,10.4.4.4

Проверка того, что применилось:

Окно терминала
Get-DnsClientServerAddress -InterfaceAlias "Ethernet" -AddressFamily IPv4

Сбросить кэш и проверить резолв:

Окно терминала
Clear-DnsClientCache
Resolve-DnsName survivalhost.org

Вернуть автоматические настройки от DHCP:

Окно терминала
Set-DnsClientServerAddress -InterfaceAlias "Ethernet" -ResetServerAddresses

Вариант для тех, кому привычнее cmd. Список интерфейсов:

Окно терминала
netsh interface show interface

Задать основной и запасной DNS:

Окно терминала
netsh interface ipv4 set dnsservers name="Ethernet" source=static address=10.8.8.8 register=none validate=no
netsh interface ipv4 add dnsservers name="Ethernet" address=10.4.4.4 index=2 validate=no

Ключ validate=no отключает проверку резолвера при добавлении, иначе Windows может отказаться принимать адрес.

Проверка и сброс кэша:

Окно терминала
netsh interface ipv4 show dnsservers
ipconfig /flushdns
nslookup survivalhost.org

Прежде чем править, посмотрите, кто владеет файлом:

Окно терминала
ls -l /etc/resolv.conf
  • Симлинк на /run/systemd/resolve/stub-resolv.conf: работает systemd-resolved.
  • Обычный файл, а в /etc/netplan/ лежат yaml-файлы: Ubuntu с netplan.
  • Активен NetworkManager (systemctl is-active NetworkManager): правим через nmcli.
  • CentOS 7 и старые RHEL: файлы /etc/sysconfig/network-scripts/ifcfg-*.

Ниже все рабочие варианты. Достаточно того, который соответствует вашей системе.

Смотрим имя файла конфигурации и имя интерфейса:

Окно терминала
ls /etc/netplan/
ip -br a

Открываем конфиг:

Окно терминала
nano /etc/netplan/00-installer-config.yaml

Приводим к виду (отступы только пробелами, табы netplan не принимает):

Окно терминала
network:
version: 2
ethernets:
ens3:
dhcp4: true
dhcp4-overrides:
use-dns: false
nameservers:
addresses: [10.8.8.8, 10.4.4.4]

Если адрес статический, блок dhcp4-overrides не нужен:

Окно терминала
network:
version: 2
ethernets:
ens3:
addresses: [203.0.113.10/24]
routes:
- to: default
via: 203.0.113.1
nameservers:
addresses: [10.8.8.8, 10.4.4.4]

Применяем. Сначала с автооткатом через 120 секунд, чтобы не потерять доступ:

Окно терминала
netplan try

Если связь не пропала, подтверждаем по Enter. Либо сразу:

Окно терминала
netplan apply

Проверяем:

Окно терминала
resolvectl status

Подходит для Debian 12, Ubuntu, Fedora, если сеть настроена не через netplan:

Окно терминала
nano /etc/systemd/resolved.conf

Раскомментируем и заполняем секцию:

Окно терминала
[Resolve]
DNS=10.8.8.8 10.4.4.4
FallbackDNS=8.8.8.8 1.1.1.1

Перезапускаем и проверяем:

Окно терминала
systemctl restart systemd-resolved
resolvectl status
resolvectl flush-caches

AlmaLinux, Rocky, CentOS 8 и новее, часть сборок Debian. Смотрим имя соединения:

Окно терминала
nmcli con show

Прописываем DNS и запрещаем перезапись адресов от DHCP:

Окно терминала
nmcli con mod "System eth0" ipv4.dns "10.8.8.8 10.4.4.4"
nmcli con mod "System eth0" ipv4.ignore-auto-dns yes
nmcli con up "System eth0"

Проверка:

Окно терминала
nmcli dev show eth0 | grep DNS
Окно терминала
nano /etc/sysconfig/network-scripts/ifcfg-eth0

Добавляем или правим строки:

Окно терминала
DNS1=10.8.8.8
DNS2=10.4.4.4
PEERDNS=no

Перезапускаем сеть:

Окно терминала
systemctl restart network
Окно терминала
nano /etc/network/interfaces

В блок нужного интерфейса добавляем строку:

Окно терминала
dns-nameservers 10.8.8.8 10.4.4.4

Применяем:

Окно терминала
systemctl restart networking

Строка сработает, если установлен пакет resolvconf:

Окно терминала
apt install resolvconf

Способ на один раз, например чтобы доставить пакеты прямо сейчас. После перезагрузки или переподключения DHCP файл перезапишется:

Окно терминала
nano /etc/resolv.conf

Содержимое:

Окно терминала
nameserver 10.8.8.8
nameserver 10.4.4.4
options timeout:2 attempts:2 rotate

Чтобы правка не слетала, файл можно закрыть от изменений:

Окно терминала
chattr +i /etc/resolv.conf

Снять защиту:

Окно терминала
chattr -i /etc/resolv.conf

Сначала выясните, кто им управляет:

Окно терминала
ls -l /etc/resolv.conf
head -3 /etc/resolv.conf

Если это симлинк на /run/systemd/resolve/stub-resolv.conf, то nano /etc/resolv.conf правит не симлинк, а файл в каталоге /run. Этот каталог лежит в оперативной памяти и очищается при перезагрузке, а systemd-resolved пересоздаёт файл при каждом своём рестарте. Поэтому ручная правка живёт до первой перезагрузки.

Удалить файл и создать новый можно, это рабочий способ, но только вместе с отключением того, кто его генерирует. Иначе dhclient, NetworkManager или systemd-resolved вернут свою версию при первом же обновлении аренды DHCP или рестарте сети.

Вариант 1. Оставить systemd-resolved, но отдать системе реальные адреса вместо заглушки 127.0.0.53. Сами адреса при этом берутся из /etc/systemd/resolved.conf, см. раздел выше:

Окно терминала
rm /etc/resolv.conf
ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf

Вариант 2. Полностью статический файл. Отключаем службу и пишем файл руками:

Окно терминала
systemctl disable --now systemd-resolved
rm -f /etc/resolv.conf
printf 'nameserver 10.8.8.8\nnameserver 10.4.4.4\n' > /etc/resolv.conf

После этого запретите DHCP-клиенту подсовывать свои адреса, иначе файл перезапишется при обновлении аренды: use-dns: false в netplan, PEERDNS=no в ifcfg, ipv4.ignore-auto-dns yes в nmcli.

Посмотреть, кто ещё может писать в файл:

Окно терминала
systemctl is-active systemd-resolved NetworkManager
grep -rl resolv.conf /etc/dhcp/ /etc/NetworkManager/ 2>/dev/null

Утилиты dig и nslookup ставятся отдельно:

Окно терминала
apt install dnsutils # Debian, Ubuntu
yum install bind-utils # CentOS, AlmaLinux, Rocky

Проверяем, что резолвер отвечает и какой адрес отдаёт:

Окно терминала
dig survivalhost.org @10.8.8.8 +short
dig survivalhost.org +short
nslookup survivalhost.org

В выводе dig без указания сервера строка SERVER: должна показывать ваш новый резолвер. Время ответа смотрите в строке Query time, с наших резолверов оно обычно в пределах пары миллисекунд.

На Windows:

Окно терминала
nslookup survivalhost.org
Resolve-DnsName survivalhost.org
  • Проверьте доступность резолвера: ping 10.8.8.8. С наших VDS он должен отвечать.
  • Проверьте, что порт 53 не закрыт файрволом. При политике OUTPUT DROP в iptables нужно разрешить исходящий DNS:
Окно терминала
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
  • Убедитесь, что после правки конфига файл /etc/resolv.conf действительно изменился: cat /etc/resolv.conf.
  • Если адреса возвращаются к старым после перезагрузки, значит их перезаписывает DHCP-клиент. Отключите приём DNS от DHCP: use-dns: false в netplan, PEERDNS=no в ifcfg, ipv4.ignore-auto-dns yes в nmcli.
  • Адреса 10.8.8.8 и 10.4.4.4 не отвечают с домашнего компьютера и с серверов другого хостинга, это нормально. Там указывайте публичные резолверы.

Если после всех шагов резолв не поднялся, напишите в техподдержку и приложите вывод cat /etc/resolv.conf и dig survivalhost.org @10.8.8.8: Взаимодействие с техподдержкой.