Настройка DNS

Материал из SurvivalHost Wiki
Перейти к навигации Перейти к поиску

Настройка DNS
<< SurvivalHost Wiki | К концу статьи

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

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

Windows Server: через графический интерфейс

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

Dns setup win 1.png

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

Dns setup win 2.png

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

Dns setup win 3.png

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

Dns setup win 4.png

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

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

Windows Server: через PowerShell

Запустите 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

Windows Server: через netsh

Вариант для тех, кому привычнее 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

Linux: определяем, чем управляется resolv.conf

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

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-*.

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

Linux: Ubuntu 18.04 и новее (netplan)

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

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

Linux: systemd-resolved напрямую

Подходит для 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

Linux: NetworkManager (nmcli)

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

Linux: CentOS 7 и старые RHEL

nano /etc/sysconfig/network-scripts/ifcfg-eth0

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

DNS1=10.8.8.8
DNS2=10.4.4.4
PEERDNS=no

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

systemctl restart network

Linux: Debian с /etc/network/interfaces

nano /etc/network/interfaces

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

dns-nameservers 10.8.8.8 10.4.4.4

Применяем:

systemctl restart networking

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

apt install resolvconf

Linux: быстрая правка /etc/resolv.conf

Способ на один раз, например чтобы доставить пакеты прямо сейчас. После перезагрузки или переподключения 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

Внимание! Флаг +i запрещает изменение файла даже системным службам. Это костыль, а не решение: правильнее настроить DNS штатным способом из разделов выше или отключить генератор файла, как описано в следующем разделе.

Что делать, если 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: Взаимодействие с техподдержкой.




Настройка DNS
<< SurvivalHost Wiki | К началу статьи


Hostingrust.ru